Beispiel #1
0
static void
add_str(ParseInfo pi, const char *str, int len) {
    ojcVal	parent = stack_peek(&pi->stack);

    if (0 == parent) { // simple add
	*pi->stack.head = get_str_val(pi, str, len);
	
    } else {
	switch (parent->expect) {
	case NEXT_ARRAY_NEW:
	case NEXT_ARRAY_ELEMENT:
	    ojc_array_append(&pi->err, parent, get_str_val(pi, str, len));
	    parent->expect = NEXT_ARRAY_COMMA;
	    break;
	case NEXT_OBJECT_NEW:
	case NEXT_OBJECT_KEY:
	    if ((int)sizeof(pi->karray) <= len) {
		pi->key = strndup(str, len);
		pi->kalloc = true;
	    } else {
		memcpy(pi->karray, str, len);
		pi->karray[len] = '\0';
		pi->key = pi->karray;
		pi->kalloc = false;
	    }
	    pi->klen = len;
	    parent->expect = NEXT_OBJECT_COLON;
	    break;
	case NEXT_OBJECT_VALUE:
	    pi_object_nappend(pi, parent, get_str_val(pi, str, len));
	    if (pi->kalloc) {
		free(pi->key);
	    }
	    pi->key = 0;
	    pi->klen = 0;
	    pi->kalloc = false;
	    parent->expect = NEXT_OBJECT_COMMA;
	    break;
	case NEXT_OBJECT_COMMA:
	case NEXT_NONE:
	case NEXT_ARRAY_COMMA:
	case NEXT_OBJECT_COLON:
	default:
	    ojc_set_error_at(pi, OJC_PARSE_ERR, __FILE__, __LINE__,
			     "expected %s, not a string", _ojc_stack_next_str((ValNext)parent->expect));
	    break;
	}
    }
    ojc_reader_release(&pi->rd);
}
Beispiel #2
0
char *getpssval(Cell *vp)     /* get string val of a Cell for print */
{
      return get_str_val(vp, OFMT);
}
Beispiel #3
0
char *getsval(Cell *vp)       /* get string val of a Cell */
{
      return get_str_val(vp, CONVFMT);
}