switch (sexpr->kind) {
case SEXPR_CONS:
- sexpr_free(sexpr->car);
- sexpr_free(sexpr->cdr);
+ sexpr_free(sexpr->u.s.car);
+ sexpr_free(sexpr->u.s.cdr);
break;
case SEXPR_VALUE:
- free(sexpr->value);
+ free(sexpr->u.value);
break;
case SEXPR_NIL:
break;
return ret;
ret->kind = SEXPR_VALUE;
if (len > 0) {
- ret->value = strndup(str, len);
+ ret->u.value = strndup(str, len);
} else {
- ret->value = strdup(str);
+ ret->u.value = strdup(str);
}
- if (ret->value == NULL) {
+ if (ret->u.value == NULL) {
return NULL;
}
if (ret == NULL)
return ret;
ret->kind = SEXPR_CONS;
- ret->car = car;
- ret->cdr = cdr;
+ ret->u.s.car = car;
+ ret->u.s.cdr = cdr;
return ret;
}
append(struct sexpr *lst, struct sexpr *value)
{
while (lst->kind != SEXPR_NIL) {
- lst = lst->cdr;
+ lst = lst->u.s.cdr;
}
lst->kind = SEXPR_CONS;
- lst->car = value;
- lst->cdr = sexpr_nil();
+ lst->u.s.car = value;
+ lst->u.s.cdr = sexpr_nil();
}
/**
if (tmp == 0)
goto error;
ret += tmp;
- tmp = sexpr2string(sexpr->car, buffer + ret, n_buffer - ret);
+ tmp = sexpr2string(sexpr->u.s.car, buffer + ret, n_buffer - ret);
if (tmp == 0)
goto error;
ret += tmp;
- while (sexpr->cdr->kind != SEXPR_NIL) {
- sexpr = sexpr->cdr;
+ while (sexpr->u.s.cdr->kind != SEXPR_NIL) {
+ sexpr = sexpr->u.s.cdr;
tmp = snprintf(buffer + ret, n_buffer - ret, " ");
if (tmp == 0)
goto error;
ret += tmp;
tmp =
- sexpr2string(sexpr->car, buffer + ret, n_buffer - ret);
+ sexpr2string(sexpr->u.s.car, buffer + ret, n_buffer - ret);
if (tmp == 0)
goto error;
ret += tmp;
ret += tmp;
break;
case SEXPR_VALUE:
- if (strchr(sexpr->value, ' '))
+ if (strchr(sexpr->u.value, ' '))
tmp = snprintf(buffer + ret, n_buffer - ret, "'%s'",
- sexpr->value);
+ sexpr->u.value);
else
tmp = snprintf(buffer + ret, n_buffer - ret, "%s",
- sexpr->value);
+ sexpr->u.value);
if (tmp == 0)
goto error;
ret += tmp;
ptr++;
}
- ret->value = strndup(start, ptr - start);
- if (ret->value == NULL) {
+ ret->u.value = strndup(start, ptr - start);
+ if (ret->u.value == NULL) {
virSexprError(VIR_ERR_NO_MEMORY,
_("failed to copy a string"));
}
ptr++;
}
- ret->value = strndup(start, ptr - start);
- if (ret->value == NULL) {
+ ret->u.value = strndup(start, ptr - start);
+ if (ret->u.value == NULL) {
virSexprError(VIR_ERR_NO_MEMORY,
_("failed to copy a string"));
}
}
ret->kind = SEXPR_VALUE;
- if (ret->value == NULL)
+ if (ret->u.value == NULL)
goto error;
}
ptr = buffer;
token = strsep(&ptr, "/");
- if (sexpr->kind != SEXPR_CONS || sexpr->car->kind != SEXPR_VALUE) {
+ if (sexpr->kind != SEXPR_CONS || sexpr->u.s.car->kind != SEXPR_VALUE) {
return NULL;
}
- if (strcmp(sexpr->car->value, token) != 0) {
+ if (strcmp(sexpr->u.s.car->u.value, token) != 0) {
return NULL;
}
if (token == NULL)
continue;
- sexpr = sexpr->cdr;
- for (i = sexpr; i->kind != SEXPR_NIL; i = i->cdr) {
+ sexpr = sexpr->u.s.cdr;
+ for (i = sexpr; i->kind != SEXPR_NIL; i = i->u.s.cdr) {
if (i->kind != SEXPR_CONS ||
- i->car->kind != SEXPR_CONS ||
- i->car->car->kind != SEXPR_VALUE) {
+ i->u.s.car->kind != SEXPR_CONS ||
+ i->u.s.car->u.s.car->kind != SEXPR_VALUE) {
continue;
}
- if (strcmp(i->car->car->value, token) == 0) {
- sexpr = i->car;
+ if (strcmp(i->u.s.car->u.s.car->u.value, token) == 0) {
+ sexpr = i->u.s.car;
break;
}
}
return NULL;
}
- if (sexpr->kind != SEXPR_CONS || sexpr->cdr->kind != SEXPR_CONS)
+ if (sexpr->kind != SEXPR_CONS || sexpr->u.s.cdr->kind != SEXPR_CONS)
return NULL;
- return sexpr->cdr;
+ return sexpr->u.s.cdr;
}
/**
{
struct sexpr *n = sexpr_lookup(sexpr, node);
- return (n && n->car->kind == SEXPR_VALUE) ? n->car->value : NULL;
+ return (n && n->u.s.car->kind == SEXPR_VALUE) ? n->u.s.car->u.value : NULL;
}
/**
#define foreach(iterator, start) \
- for (_for_i = (start), *iterator = (start)->car; \
+ for (_for_i = (start), *iterator = (start)->u.s.car; \
_for_i->kind == SEXPR_CONS; \
- _for_i = _for_i->cdr, iterator = _for_i->car)
+ _for_i = _for_i->u.s.cdr, iterator = _for_i->u.s.car)
#define foreach_node(iterator, start, path) \
foreach(iterator, start) \
* Returns 0 in case of success, -1 in case of failure.
*/
static int
-xend_op_ext(virConnectPtr xend, const char *name, char *error,
- size_t n_error, const char *key, ...)
+xend_op(virConnectPtr xend, const char *name, const char *key, ...)
{
char buffer[1024];
+ char error[1024];
va_list ap;
int ret;
snprintf(buffer, sizeof(buffer), "/xend/domain/%s", name);
va_start(ap, key);
- ret = xend_op_ext2(xend, buffer, error, n_error, key, ap);
+ ret = xend_op_ext2(xend, buffer, error, sizeof(error), key, ap);
va_end(ap);
return ret;
}
-#define xend_op(xend, name, key, ...) ({char error[1024]; xend_op_ext(xend, name, error, sizeof(error), key, __VA_ARGS__);})
#endif /* ! PROXY */
/**
if (root == NULL)
goto error;
- for (_for_i = root, node = root->car; _for_i->kind == SEXPR_CONS;
- _for_i = _for_i->cdr, node = _for_i->car) {
+ for (_for_i = root, node = root->u.s.car; _for_i->kind == SEXPR_CONS;
+ _for_i = _for_i->u.s.cdr, node = _for_i->u.s.car) {
if (node->kind != SEXPR_VALUE)
continue;
- extra += strlen(node->value) + 1;
+ extra += strlen(node->u.value) + 1;
count++;
}
ptr += sizeof(char *) * (count + 1);
i = 0;
- for (_for_i = root, node = root->car; _for_i->kind == SEXPR_CONS;
- _for_i = _for_i->cdr, node = _for_i->car) {
+ for (_for_i = root, node = root->u.s.car; _for_i->kind == SEXPR_CONS;
+ _for_i = _for_i->u.s.cdr, node = _for_i->u.s.car) {
if (node->kind != SEXPR_VALUE)
continue;
ret[i] = ptr;
- strcpy(ptr, node->value);
- ptr += strlen(node->value) + 1;
+ strcpy(ptr, node->u.value);
+ ptr += strlen(node->u.value) + 1;
i++;
}
if ((tmp != NULL) && (tmp[0] != 0))
virBufferVSprintf(&buf, " <emulator>%s</emulator>\n", tmp);
- for (cur = root; cur->kind == SEXPR_CONS; cur = cur->cdr) {
- node = cur->car;
+ for (cur = root; cur->kind == SEXPR_CONS; cur = cur->u.s.cdr) {
+ node = cur->u.s.car;
/* Normally disks are in a (device (vbd ...)) block
but blktap disks ended up in a differently named
(device (tap ....)) block.... */
/* in case of HVM we have devices emulation */
if (hvm) {
- for (cur = sexpr_lookup(root, "domain/image/hvm"); cur && cur->kind == SEXPR_CONS; cur = cur->cdr) {
- node = cur->car;
+ for (cur = sexpr_lookup(root, "domain/image/hvm"); cur && cur->kind == SEXPR_CONS; cur = cur->u.s.cdr) {
+ node = cur->u.s.car;
if (sexpr_lookup(node, "usbdevice")) {
tmp = sexpr_node(node, "usbdevice");
if (tmp && *tmp) {
ret = 0;
- for (_for_i = root, node = root->car; _for_i->kind == SEXPR_CONS;
- _for_i = _for_i->cdr, node = _for_i->car) {
+ for (_for_i = root, node = root->u.s.car; _for_i->kind == SEXPR_CONS;
+ _for_i = _for_i->u.s.cdr, node = _for_i->u.s.car) {
if (node->kind != SEXPR_VALUE)
continue;
- id = xenDaemonDomainLookupByName_ids(conn, node->value, NULL);
+ id = xenDaemonDomainLookupByName_ids(conn, node->u.value, NULL);
if (id >= 0)
ids[ret++] = (int) id;
if (ret >= maxids)
ret = 0;
- for (_for_i = root, node = root->car; _for_i->kind == SEXPR_CONS;
- _for_i = _for_i->cdr, node = _for_i->car) {
+ for (_for_i = root, node = root->u.s.car; _for_i->kind == SEXPR_CONS;
+ _for_i = _for_i->u.s.cdr, node = _for_i->u.s.car) {
if (node->kind != SEXPR_VALUE)
continue;
ret++;
memset(cpumaps, 0, maxinfo * maplen);
/* scan the sexprs from "(vcpu (number x)...)" and get parameter values */
- for (s = root; s->kind == SEXPR_CONS; s = s->cdr) {
- if ((s->car->kind == SEXPR_CONS) &&
- (s->car->car->kind == SEXPR_VALUE) &&
- !strcmp(s->car->car->value, "vcpu")) {
- t = s->car;
+ for (s = root; s->kind == SEXPR_CONS; s = s->u.s.cdr) {
+ if ((s->u.s.car->kind == SEXPR_CONS) &&
+ (s->u.s.car->u.s.car->kind == SEXPR_VALUE) &&
+ !strcmp(s->u.s.car->u.s.car->u.value, "vcpu")) {
+ t = s->u.s.car;
vcpu = ipt->number = sexpr_int(t, "vcpu/number");
if ((oln = sexpr_int(t, "vcpu/online")) != 0) {
if (sexpr_int(t, "vcpu/running")) ipt->state = VIR_VCPU_RUNNING;
* get sexpr from "(cpumap (x y z...))" and convert values
* to bitmap
*/
- for (t = t->cdr; t->kind == SEXPR_CONS; t = t->cdr)
- if ((t->car->kind == SEXPR_CONS) &&
- (t->car->car->kind == SEXPR_VALUE) &&
- !strcmp(t->car->car->value, "cpumap") &&
- (t->car->cdr->kind == SEXPR_CONS)) {
- for (t = t->car->cdr->car; t->kind == SEXPR_CONS; t = t->cdr)
- if (t->car->kind == SEXPR_VALUE) {
- cpu = strtol(t->car->value, NULL, 0);
+ for (t = t->u.s.cdr; t->kind == SEXPR_CONS; t = t->u.s.cdr)
+ if ((t->u.s.car->kind == SEXPR_CONS) &&
+ (t->u.s.car->u.s.car->kind == SEXPR_VALUE) &&
+ !strcmp(t->u.s.car->u.s.car->u.value, "cpumap") &&
+ (t->u.s.car->u.s.cdr->kind == SEXPR_CONS)) {
+ for (t = t->u.s.car->u.s.cdr->u.s.car; t->kind == SEXPR_CONS; t = t->u.s.cdr)
+ if (t->u.s.car->kind == SEXPR_VALUE) {
+ cpu = strtol(t->u.s.car->u.value, NULL, 0);
if (cpu >= 0 && (VIR_CPU_MAPLEN(cpu+1) <= maplen)) {
VIR_USE_CPU(cpumap, cpu);
}
ret = 0;
- for (_for_i = root, node = root->car; _for_i->kind == SEXPR_CONS;
- _for_i = _for_i->cdr, node = _for_i->car) {
+ for (_for_i = root, node = root->u.s.car; _for_i->kind == SEXPR_CONS;
+ _for_i = _for_i->u.s.cdr, node = _for_i->u.s.car) {
if (node->kind != SEXPR_VALUE)
continue;
ret++;
ret = 0;
- for (_for_i = root, node = root->car; _for_i->kind == SEXPR_CONS;
- _for_i = _for_i->cdr, node = _for_i->car) {
+ for (_for_i = root, node = root->u.s.car; _for_i->kind == SEXPR_CONS;
+ _for_i = _for_i->u.s.cdr, node = _for_i->u.s.car) {
if (node->kind != SEXPR_VALUE)
continue;
- names[ret++] = strdup(node->value);
+ names[ret++] = strdup(node->u.value);
if (ret >= maxnames)
break;
}