fixes to compile with Sun's CC diff --git a/src/internal.h b/src/internal.h --- a/src/internal.h +++ b/src/internal.h @@ -28,11 +28,6 @@ extern "C" { #define N_(str) dgettext(GETTEXT_PACKAGE, (str)) #define gettext_noop(str) (str) -#ifdef __GNUC__ -#ifdef HAVE_ANSIDECL_H -#include -#endif - /* String equality tests, suggested by Jim Meyering. */ #define STREQ(a,b) (strcmp((a),(b)) == 0) #define STRCASEEQ(a,b) (strcasecmp((a),(b)) == 0) @@ -41,6 +36,15 @@ extern "C" { #define STREQLEN(a,b,n) (strncmp((a),(b),(n)) == 0) #define STRNEQLEN(a,b,n) (strncmp((a),(b),(n)) != 0) +#ifndef __GNUC__ +#define __FUNCTION__ __func__ +#endif + +#ifdef __GNUC__ +#ifdef HAVE_ANSIDECL_H +#include +#endif + /** * ATTRIBUTE_UNUSED: * @@ -63,7 +67,7 @@ extern "C" { #else #define ATTRIBUTE_UNUSED #define ATTRIBUTE_FORMAT(...) -#endif +#endif /* __GNUC__ */ /** * TODO: diff --git a/src/sexpr.c b/src/sexpr.c --- a/src/sexpr.c +++ b/src/sexpr.c @@ -80,11 +80,11 @@ sexpr_free(struct sexpr *sexpr) 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; @@ -127,12 +127,12 @@ sexpr_string(const char *str, ssize_t le 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); - } - - if (ret->value == NULL) { + ret->u.value = strdup(str); + } + + if (ret->u.value == NULL) { return NULL; } @@ -157,8 +157,8 @@ sexpr_cons(struct sexpr *car, struct sex 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; } @@ -174,12 +174,12 @@ append(struct sexpr *lst, struct sexpr * 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(); } /** @@ -228,18 +228,18 @@ sexpr2string(struct sexpr * sexpr, char 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; @@ -250,12 +250,12 @@ sexpr2string(struct sexpr * sexpr, char 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; @@ -346,8 +346,8 @@ _string2sexpr(const char *buffer, size_t 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")); } @@ -361,15 +361,15 @@ _string2sexpr(const char *buffer, size_t 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; } @@ -426,11 +426,11 @@ sexpr_lookup(struct sexpr *sexpr, const ptr = buffer; token = strsep(&ptr, "/"); - if (sexpr->kind != SEXPR_CONS || sexpr->car->kind != SEXPR_VALUE) { - return NULL; - } - - if (strcmp(sexpr->car->value, token) != 0) { + if (sexpr->kind != SEXPR_CONS || sexpr->u.s.car->kind != SEXPR_VALUE) { + return NULL; + } + + if (strcmp(sexpr->u.s.car->u.value, token) != 0) { return NULL; } @@ -440,16 +440,16 @@ sexpr_lookup(struct sexpr *sexpr, const 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; } } @@ -463,10 +463,10 @@ sexpr_lookup(struct sexpr *sexpr, const return NULL; } - if (sexpr->kind != SEXPR_CONS || sexpr->cdr->kind != SEXPR_CONS) - return NULL; - - return sexpr->cdr; + if (sexpr->kind != SEXPR_CONS || sexpr->u.s.cdr->kind != SEXPR_CONS) + return NULL; + + return sexpr->u.s.cdr; } /** @@ -484,7 +484,7 @@ sexpr_node(struct sexpr *sexpr, const ch { 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; } /** diff --git a/src/sexpr.h b/src/sexpr.h --- a/src/sexpr.h +++ b/src/sexpr.h @@ -29,9 +29,9 @@ struct sexpr { struct { struct sexpr *car; struct sexpr *cdr; - }; + } s; char *value; - }; + } u; }; /* conversion to/from strings */ diff --git a/src/virsh.c b/src/virsh.c --- a/src/virsh.c +++ b/src/virsh.c @@ -601,7 +601,7 @@ cmdList(vshControl * ctl, vshCmd * cmd A /* this kind of work with domains is not atomic operation */ if (!dom) { - free(names[i]); + free((void *)names[i]); continue; } @@ -613,7 +613,7 @@ cmdList(vshControl * ctl, vshCmd * cmd A vshPrint(ctl, "%3s %-20s %s\n", "-", names[i], state); virDomainFree(dom); - free(names[i]); + free((void *)names[i]); } if (ids) free(ids); @@ -2504,7 +2504,7 @@ cmdNetworkList(vshControl * ctl, vshCmd vshError(ctl, FALSE, _("Failed to list inactive networks")); if (activeNames) free(activeNames); - free(inactiveNames); + free((void *)inactiveNames); return FALSE; } @@ -2544,7 +2544,7 @@ cmdNetworkList(vshControl * ctl, vshCmd /* this kind of work with networks is not atomic operation */ if (!network) { - free(inactiveNames[i]); + free((void *)inactiveNames[i]); continue; } @@ -2559,7 +2559,7 @@ cmdNetworkList(vshControl * ctl, vshCmd autostartStr); virNetworkFree(network); - free(inactiveNames[i]); + free((void *)inactiveNames[i]); } if (activeNames) free(activeNames); @@ -4294,9 +4294,9 @@ vshDomainStateToString(int state) case VIR_DOMAIN_CRASHED: return gettext_noop("crashed"); default: - return gettext_noop("no state"); /* = dom0 state */ - } - return NULL; + ;/*FALLTHROUGH*/ + } + return gettext_noop("no state"); /* = dom0 state */ } static const char * @@ -4310,9 +4310,9 @@ vshDomainVcpuStateToString(int state) case VIR_VCPU_RUNNING: return gettext_noop("running"); default: - return gettext_noop("no state"); - } - return NULL; + ;/*FALLTHROUGH*/ + } + return gettext_noop("no state"); } static int @@ -4824,7 +4824,7 @@ vshParseArgv(vshControl * ctl, int argc, } last = argv[i]; } - end = end ? : argc; + end = end ? end : argc; /* standard (non-command) options */ while ((arg = getopt_long(end, argv, "d:hqtc:vrl:", opt, &idx)) != -1) { diff --git a/src/xen_internal.c b/src/xen_internal.c --- a/src/xen_internal.c +++ b/src/xen_internal.c @@ -165,7 +165,11 @@ typedef struct xen_v2_getdomaininfo xen_ /* As of Hypervisor Call v2, DomCtl v5 we are now 8-byte aligned even on 32-bit archs when dealing with uint64_t */ +#ifdef __linux__ #define ALIGN_64 __attribute__((aligned(8))) +#else +#define ALIGN_64 +#endif struct xen_v2d5_getdomaininfo { domid_t domain; /* the domain number */ diff --git a/src/xend_internal.c b/src/xend_internal.c --- a/src/xend_internal.c +++ b/src/xend_internal.c @@ -193,9 +193,9 @@ virXendErrorInt(virConnectPtr conn, virE #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) \ @@ -663,23 +663,22 @@ xend_node_op(virConnectPtr xend, const c * 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 */ /** @@ -962,11 +961,11 @@ xenDaemonListDomainsOld(virConnectPtr xe 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++; } @@ -978,13 +977,13 @@ xenDaemonListDomainsOld(virConnectPtr xe 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++; } @@ -1469,8 +1468,8 @@ xend_parse_sexp_desc(virConnectPtr conn, if ((tmp != NULL) && (tmp[0] != 0)) virBufferVSprintf(&buf, " %s\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.... */ @@ -1712,8 +1711,8 @@ xend_parse_sexp_desc(virConnectPtr conn, /* 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) { @@ -2692,11 +2691,11 @@ xenDaemonListDomains(virConnectPtr conn, 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) @@ -2730,8 +2729,8 @@ xenDaemonNumOfDomains(virConnectPtr conn 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++; @@ -2899,11 +2898,11 @@ xenDaemonDomainGetVcpus(virDomainPtr dom 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; @@ -2920,14 +2919,14 @@ xenDaemonDomainGetVcpus(virDomainPtr dom * 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); } @@ -3437,8 +3436,8 @@ xenDaemonNumOfDefinedDomains(virConnectP 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++; @@ -3467,12 +3466,12 @@ int xenDaemonListDefinedDomains(virConne 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; }