static ERL_NIF_TERM element_to(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[], int as_string) { ErlNifBinary output; ERL_NIF_TERM result; struct buf *rbuf; if (argc == 1) { rbuf = init_buf(env); if (make_element(env, rbuf, argv[0])) { if (as_string) { (rbuf->b)[rbuf->len] = 0; result = enif_make_string(env, (char *) rbuf->b, ERL_NIF_LATIN1); destroy_buf(env, rbuf); return result; } else { if (ENIF_ALLOC_BINARY(rbuf->len, &output)) { memcpy(output.data, rbuf->b, rbuf->len); result = enif_make_binary(env, &output); destroy_buf(env, rbuf); return result; }; }; }; destroy_buf(env, rbuf); }; return enif_make_badarg(env); }
static ERL_NIF_TERM unescape_attr(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) { ErlNifBinary input; ERL_NIF_TERM output; struct buf *rbuf; int i; if (argc != 1) { return enif_make_badarg(env); } if (!enif_inspect_binary(env, argv[0], &input)) { return enif_make_badarg(env); } rbuf = init_buf(env, EXML_ATTR_BUF_SIZE); for (i = 0; i < input.size; i++) { if (input.data[i] == '&') { if (match_tag(input, i+1, "amp;", 4)) { buf_add_char(env, EXML_ATTR_BUF_SIZE, rbuf, '&'); i += 4; } else if (match_tag(input, i+1, "apos;", 5)) { buf_add_char(env, EXML_ATTR_BUF_SIZE, rbuf, '\''); i += 5; } else if (match_tag(input, i+1, "lt;", 3)) { buf_add_char(env, EXML_ATTR_BUF_SIZE, rbuf, '<'); i += 3; } else if (match_tag(input, i+1, "gt;", 3)) { buf_add_char(env, EXML_ATTR_BUF_SIZE, rbuf, '>'); i += 3; } else if (match_tag(input, i+1, "quot;", 5)) { buf_add_char(env, EXML_ATTR_BUF_SIZE, rbuf, '"'); i += 5; } else if (match_tag(input, i+1, "#x9;", 4)) { buf_add_char(env, EXML_ATTR_BUF_SIZE, rbuf, '\t'); i += 4; } else if (match_tag(input, i+1, "#xA;", 4)) { buf_add_char(env, EXML_ATTR_BUF_SIZE, rbuf, '\n'); i += 4; } else if (match_tag(input, i+1, "#xD;", 4)) { buf_add_char(env, EXML_ATTR_BUF_SIZE, rbuf, '\r'); i += 4; } else { buf_add_char(env, EXML_ATTR_BUF_SIZE, rbuf, input.data[i]); } } else { buf_add_char(env, EXML_ATTR_BUF_SIZE, rbuf, input.data[i]); } } unsigned char* data = enif_make_new_binary(env, rbuf->len, &output); memcpy((char*)data, rbuf->b, rbuf->len); destroy_buf(env, rbuf); return output; }
void csdbparser::create_buf(int size) { if (size >= CSDBP_MINIM_BUFSIZE) { destroy_buf(); m_buf = new char[size]; *m_buf = 0; m_bufsize = size; } }
static ERL_NIF_TERM escape_attr(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) { ErlNifBinary input; ERL_NIF_TERM output; struct buf *rbuf; int i; if (argc != 1) { return enif_make_badarg(env); } if (!enif_inspect_binary(env, argv[0], &input)) { return enif_make_badarg(env); } rbuf = init_buf(env, EXML_ATTR_BUF_SIZE); for (i = 0; i < input.size; i++) { switch (input.data[i]) { case '&': buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, "&", 5); break; case '<': buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, "<", 4); break; case '>': buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, ">", 4); break; case '"': buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, """, 6); break; case '\'': buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, "'", 6); break; case '\t': buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, "	", 5); break; case '\n': buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, "
", 5); break; case '\r': buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, "
", 5); break; default: buf_add_char(env, EXML_ATTR_BUF_SIZE, rbuf, input.data[i]); break; }; }; unsigned char *data = enif_make_new_binary(env, rbuf->len, &output); memcpy(data, rbuf->b, rbuf->len); destroy_buf(env, rbuf); return output; }
void csdbparser::close_file(void) { if (m_fp != NULL) { fclose(m_fp); m_fp = NULL; } m_trailer_start = 0; destroy_buf(); m_base_path.clear(); m_calling_func.clear(); m_calling_macro.clear(); m_current_srcfile.clear(); }
static ERL_NIF_TERM unescape_cdata(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) { ErlNifBinary input; ERL_NIF_TERM output; struct buf *rbuf; int i; if (argc != 1) { return enif_make_badarg(env); } // CData should be iolist() or binary() if (enif_is_binary(env, argv[0])) { if (!enif_inspect_binary(env, argv[0], &input)) { return enif_make_badarg(env); } } else { if (!enif_inspect_iolist_as_binary(env, argv[0], &input)) { return enif_make_badarg(env); } } rbuf = init_buf(env, EXML_CDATA_BUF_SIZE); for (i = 0; i < input.size; i++) { if (input.data[i] == '&') { if (match_tag(input, i+1, "amp;", 4)) { buf_add_char(env, EXML_CDATA_BUF_SIZE, rbuf, '&'); i += 4; } else if (match_tag(input, i+1, "lt;", 3)) { buf_add_char(env, EXML_CDATA_BUF_SIZE, rbuf, '<'); i += 3; } else if (match_tag(input, i+1, "gt;", 3)) { buf_add_char(env, EXML_CDATA_BUF_SIZE, rbuf, '>'); i += 3; } else { buf_add_char(env, EXML_CDATA_BUF_SIZE, rbuf, input.data[i]); } } else { buf_add_char(env, EXML_CDATA_BUF_SIZE, rbuf, input.data[i]); } } unsigned char *data = enif_make_new_binary(env, rbuf->len, &output); memcpy(data, rbuf->b, rbuf->len); destroy_buf(env, rbuf); return output; }
/* * NAME: init_pw_area * * DESCRIPTION: Initialize pre-write area to all zeros. * * PARAMETERS: minor_t mnum - minor number identity of metadevice * md_dev64_t dev_to_write - index of column to resync * int column_index - index of column to resync * * RETURN: 1 if write error on resync device, otherwise 0 * * LOCKS: Expects Unit Reader Lock to be held across call. */ int init_pw_area( mr_unit_t *un, md_dev64_t dev_to_write, diskaddr_t pwstart, uint_t col ) { buf_t buf; caddr_t databuffer; size_t copysize; size_t bsize; int error = 0; int i; ASSERT(un != NULL); ASSERT(un->un_column[col].un_devflags & MD_RAID_DEV_ISOPEN); bsize = un->un_iosize; copysize = dbtob(bsize); databuffer = kmem_zalloc(copysize, KM_SLEEP); init_buf(&buf, (B_BUSY | B_WRITE), copysize); for (i = 0; i < un->un_pwcnt; i++) { /* magic field is 0 for 4.0 compatability */ RAID_FILLIN_RPW(databuffer, un, 0, 0, 0, 0, 0, 0, col, 0); buf.b_un.b_addr = (caddr_t)databuffer; buf.b_edev = md_dev64_to_dev(dev_to_write); buf.b_bcount = dbtob(bsize); buf.b_lblkno = pwstart + (i * un->un_iosize); /* write buf */ (void) md_call_strategy(&buf, MD_STR_NOTTOP, NULL); if (biowait(&buf)) { error = 1; break; } reset_buf(&buf, (B_BUSY | B_WRITE), copysize); } /* for */ destroy_buf(&buf); kmem_free(databuffer, copysize); return (error); }
static ERL_NIF_TERM escape_cdata(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) { ErlNifBinary input; ERL_NIF_TERM output; struct buf *rbuf; int i; if (argc != 1) { return enif_make_badarg(env); } // CData should be iolist() or binary() if (enif_is_binary(env, argv[0])) { if (!enif_inspect_binary(env, argv[0], &input)) { return enif_make_badarg(env); } } else { if (!enif_inspect_iolist_as_binary(env, argv[0], &input)) { return enif_make_badarg(env); } } rbuf = init_buf(env, EXML_CDATA_BUF_SIZE); for (i = 0; i < input.size; i++) { switch (input.data[i]) { case '&': buf_add_str(env, EXML_CDATA_BUF_SIZE, rbuf, "&", 5); break; case '<': buf_add_str(env, EXML_CDATA_BUF_SIZE, rbuf, "<", 4); break; case '>': buf_add_str(env, EXML_CDATA_BUF_SIZE, rbuf, ">", 4); break; default: buf_add_char(env, EXML_CDATA_BUF_SIZE, rbuf, input.data[i]); break; }; }; unsigned char* data = enif_make_new_binary(env, rbuf->len, &output); memcpy(data, rbuf->b, rbuf->len); destroy_buf(env, rbuf); return output; }
void reset_buf(buf_t *bp, int flags, size_t size) { destroy_buf(bp); init_buf(bp, flags, size); }