瀏覽代碼

Add escape forward slashes

pull/91/head
Jeremie Lasalle Ratelle 10 年之前
父節點
當前提交
dec739b287
共有 3 個文件被更改,包括 19 次插入0 次删除
  1. +17
    -0
      c_src/encoder.c
  2. +1
    -0
      c_src/jiffy.c
  3. +1
    -0
      c_src/jiffy.h

+ 17
- 0
c_src/encoder.c 查看文件

@ -34,6 +34,7 @@ typedef struct {
int uescape; int uescape;
int pretty; int pretty;
int use_nil; int use_nil;
int escape_forward_slashes;
int shiftcnt; int shiftcnt;
int count; int count;
@ -77,6 +78,7 @@ enc_new(ErlNifEnv* env)
e->uescape = 0; e->uescape = 0;
e->pretty = 0; e->pretty = 0;
e->use_nil = 0; e->use_nil = 0;
e->escape_forward_slashes = 0;
e->shiftcnt = 0; e->shiftcnt = 0;
e->count = 0; e->count = 0;
@ -281,6 +283,12 @@ enc_string(Encoder* e, ERL_NIF_TERM val)
esc_extra += 1; esc_extra += 1;
i++; i++;
continue; continue;
case '/':
if(e->escape_forward_slashes) {
esc_extra += 1;
i++;
continue;
}
default: default:
if(data[i] < 0x20) { if(data[i] < 0x20) {
esc_extra += 5; esc_extra += 5;
@ -348,6 +356,13 @@ enc_string(Encoder* e, ERL_NIF_TERM val)
e->p[e->i++] = 't'; e->p[e->i++] = 't';
i++; i++;
continue; continue;
case '/':
if(e->escape_forward_slashes) {
e->p[e->i++] = '\\';
e->u[e->i++] = data[i];
i++;
continue;
}
default: default:
if(data[i] < 0x20) { if(data[i] < 0x20) {
ulen = unicode_uescape(data[i], &(e->p[e->i])); ulen = unicode_uescape(data[i], &(e->p[e->i]));
@ -591,6 +606,8 @@ encode_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
e->uescape = 1; e->uescape = 1;
} else if(enif_compare(val, e->atoms->atom_pretty) == 0) { } else if(enif_compare(val, e->atoms->atom_pretty) == 0) {
e->pretty = 1; e->pretty = 1;
} else if(enif_compare(val, e->atoms->atom_escape_forward_slashes) == 0) {
e->escape_forward_slashes = 1;
} else if(enif_compare(val, e->atoms->atom_use_nil) == 0) { } else if(enif_compare(val, e->atoms->atom_use_nil) == 0) {
e->use_nil = 1; e->use_nil = 1;
} else if(enif_compare(val, e->atoms->atom_force_utf8) == 0) { } else if(enif_compare(val, e->atoms->atom_force_utf8) == 0) {

+ 1
- 0
c_src/jiffy.c 查看文件

@ -30,6 +30,7 @@ load(ErlNifEnv* env, void** priv, ERL_NIF_TERM info)
st->atom_nil = make_atom(env, "nil"); st->atom_nil = make_atom(env, "nil");
st->atom_use_nil = make_atom(env, "use_nil"); st->atom_use_nil = make_atom(env, "use_nil");
st->atom_use_undefined = make_atom(env, "use_undefined"); st->atom_use_undefined = make_atom(env, "use_undefined");
st->atom_escape_forward_slashes = make_atom(env, "escape_forward_slashes");
// Markers used in encoding // Markers used in encoding
st->ref_object = make_atom(env, "$object_ref$"); st->ref_object = make_atom(env, "$object_ref$");

+ 1
- 0
c_src/jiffy.h 查看文件

@ -32,6 +32,7 @@ typedef struct {
ERL_NIF_TERM atom_nil; ERL_NIF_TERM atom_nil;
ERL_NIF_TERM atom_use_nil; ERL_NIF_TERM atom_use_nil;
ERL_NIF_TERM atom_use_undefined; ERL_NIF_TERM atom_use_undefined;
ERL_NIF_TERM atom_escape_forward_slashes;
ERL_NIF_TERM ref_object; ERL_NIF_TERM ref_object;
ERL_NIF_TERM ref_array; ERL_NIF_TERM ref_array;

Loading…
取消
儲存