static ERL_NIF_TERM make_atoms(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { ERL_NIF_TERM arr[7]; ERL_NIF_TERM existingatom0a, existingatom0b; ERL_NIF_TERM existing0atom0; const char * const an0atom = "an0atom"; const char an0atom0[8] = {'a','n','\0','a','t','o','m',0}; arr[0] = enif_make_atom(env, "an0atom"); arr[1] = enif_make_atom_len(env, "an0atom", 7); arr[2] = enif_make_atom_len(env, an0atom, 7); arr[3] = enif_make_atom_len(env, an0atom0, 8); if (!enif_make_existing_atom(env, "an0atom", &existingatom0a, ERL_NIF_LATIN1)) return enif_make_atom(env, "error"); arr[4] = existingatom0a; if (!enif_make_existing_atom_len(env, an0atom, 7, &existingatom0b, ERL_NIF_LATIN1)) return enif_make_atom(env, "error"); arr[5] = existingatom0b; if (!enif_make_existing_atom_len(env, an0atom0, 8, &existing0atom0, ERL_NIF_LATIN1)) return enif_make_atom(env, "error"); arr[6] = existing0atom0; return enif_make_tuple7(env, arr[0],arr[1],arr[2],arr[3],arr[4],arr[5],arr[6]); }
static ERL_NIF_TERM make_scalar(ErlNifEnv* env, yaml_event_t *event, int flags) { int as_atom = PLAIN_AS_ATOM & flags; long int i; double d; int type; yaml_scalar_style_t style = event->data.scalar.style; ERL_NIF_TERM rterm; if (as_atom && style == YAML_SINGLE_QUOTED_SCALAR_STYLE) { rterm = enif_make_atom_len(env, (char *) event->data.scalar.value, event->data.scalar.length); } else if (style == YAML_DOUBLE_QUOTED_SCALAR_STYLE) { rterm = make_binary_size(env, event->data.scalar.value, event->data.scalar.length); } else if ((type = make_num(env, event->data.scalar.value, event->data.scalar.length, &i, &d))) { if (type == INTEGER) rterm = enif_make_long(env, i); else rterm = enif_make_double(env, d); } else if (as_atom && style == YAML_PLAIN_SCALAR_STYLE && event->data.scalar.length) { rterm = enif_make_atom_len(env, (char *) event->data.scalar.value, event->data.scalar.length); } else { rterm = make_binary_size(env, event->data.scalar.value, event->data.scalar.length); } return rterm; }
ERL_NIF_TERM enif_make_atom(ErlNifEnv* env, const char* name) { return enif_make_atom_len(env, name, sys_strlen(name)); }