Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
void csdbparser::create_buf(int size)
{
	if (size >= CSDBP_MINIM_BUFSIZE)
	{
		destroy_buf();
		m_buf = new char[size];
		*m_buf = 0;
		m_bufsize = size;
	}
}
Exemplo n.º 4
0
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, "&amp;", 5);
                break;
            case '<':
                buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, "&lt;", 4);
                break;
            case '>':
                buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, "&gt;", 4);
                break;
            case '"':
                buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, "&quot;", 6);
                break;
            case '\'':
                buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, "&apos;", 6);
                break;
            case '\t':
                buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, "&#x9;", 5);
                break;
            case '\n':
                buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, "&#xA;", 5);
                break;
            case '\r':
                buf_add_str(env, EXML_ATTR_BUF_SIZE, rbuf, "&#xD;", 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;
}
Exemplo n.º 5
0
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();
}
Exemplo n.º 6
0
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;
}
Exemplo n.º 7
0
/*
 * 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);
}
Exemplo n.º 8
0
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, "&amp;", 5);
                break;
            case '<':
                buf_add_str(env, EXML_CDATA_BUF_SIZE, rbuf, "&lt;", 4);
                break;
            case '>':
                buf_add_str(env, EXML_CDATA_BUF_SIZE, rbuf, "&gt;", 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;
}
Exemplo n.º 9
0
void
reset_buf(buf_t *bp, int flags, size_t size)
{
	destroy_buf(bp);
	init_buf(bp, flags, size);
}