Lines Matching defs:sexpr
32 /* $Id: sexpr.c,v 1.9 2007/08/28 07:20:43 tbox Exp $ */
43 #include <isccc/sexpr.h>
54 isccc_sexpr_t *sexpr;
56 sexpr = malloc(sizeof(*sexpr));
57 if (sexpr == NULL)
59 sexpr->type = ISCCC_SEXPRTYPE_DOTTEDPAIR;
60 CAR(sexpr) = car;
61 CDR(sexpr) = cdr;
63 return (sexpr);
75 isccc_sexpr_t *sexpr;
77 sexpr = malloc(sizeof(*sexpr));
78 if (sexpr == NULL)
80 sexpr->type = ISCCC_SEXPRTYPE_STRING;
81 sexpr->value.as_string = strdup(str);
82 if (sexpr->value.as_string == NULL) {
83 free(sexpr);
87 return (sexpr);
93 isccc_sexpr_t *sexpr;
96 sexpr = malloc(sizeof(*sexpr));
97 if (sexpr == NULL)
99 sexpr->type = ISCCC_SEXPRTYPE_BINARY;
108 sexpr->value.as_region.rstart = malloc(region_size + 1);
109 if (sexpr->value.as_region.rstart == NULL) {
110 free(sexpr);
113 sexpr->value.as_region.rend = sexpr->value.as_region.rstart +
115 memmove(sexpr->value.as_region.rstart, region->rstart, region_size);
119 sexpr->value.as_region.rstart[region_size] = '\0';
121 return (sexpr);
127 isccc_sexpr_t *sexpr;
130 sexpr = *sexprp;
131 if (sexpr == NULL)
133 switch (sexpr->type) {
135 free(sexpr->value.as_string);
138 item = CAR(sexpr);
141 item = CDR(sexpr);
146 free(sexpr->value.as_region.rstart);
149 free(sexpr);
170 isccc_sexpr_print(isccc_sexpr_t *sexpr, FILE *stream)
176 if (sexpr == NULL) {
181 switch (sexpr->type) {
186 fprintf(stream, "\"%s\"", sexpr->value.as_string);
191 isccc_sexpr_print(CAR(sexpr), stream);
192 cdr = CDR(sexpr);
201 sexpr = cdr;
202 } while (sexpr != NULL);
206 size = REGION_SIZE(sexpr->value.as_region);
207 curr = sexpr->value.as_region.rstart;
208 if (printable(&sexpr->value.as_region)) {
277 isccc_sexpr_listp(isccc_sexpr_t *sexpr)
279 if (sexpr == NULL || sexpr->type == ISCCC_SEXPRTYPE_DOTTEDPAIR)
285 isccc_sexpr_emptyp(isccc_sexpr_t *sexpr)
287 if (sexpr == NULL)
293 isccc_sexpr_stringp(isccc_sexpr_t *sexpr)
295 if (sexpr != NULL && sexpr->type == ISCCC_SEXPRTYPE_STRING)
301 isccc_sexpr_binaryp(isccc_sexpr_t *sexpr)
303 if (sexpr != NULL && sexpr->type == ISCCC_SEXPRTYPE_BINARY)
309 isccc_sexpr_tostring(isccc_sexpr_t *sexpr)
311 REQUIRE(sexpr != NULL &&
312 (sexpr->type == ISCCC_SEXPRTYPE_STRING ||
313 sexpr->type == ISCCC_SEXPRTYPE_BINARY));
315 if (sexpr->type == ISCCC_SEXPRTYPE_BINARY)
316 return ((char *)sexpr->value.as_region.rstart);
317 return (sexpr->value.as_string);
321 isccc_sexpr_tobinary(isccc_sexpr_t *sexpr)
323 REQUIRE(sexpr != NULL && sexpr->type == ISCCC_SEXPRTYPE_BINARY);
324 return (&sexpr->value.as_region);