/** * sexpr_u64: * @sexpr: an S-Expression * @name: the name for the value * * convenience function to lookup a 64bits unsigned int value in the * S-Expression * * Returns the value found or 0 if not found (but may not be an error) */ uint64_t sexpr_u64(const struct sexpr *sexpr, const char *name) { const char *value = sexpr_node(sexpr, name); if (value) { return strtoll(value, NULL, 0); } return 0; }
/** * sexpr_float: * @sexpr: an S-Expression * @name: the name for the value * * convenience function to lookup a float value in the S-Expression * * Returns the value found or 0 if not found (but may not be an error) */ double sexpr_float(const struct sexpr *sexpr, const char *name) { const char *value = sexpr_node(sexpr, name); if (value) { return strtod(value, NULL); } return 0; }
int sexpr_node_copy(const struct sexpr *sexpr, const char *node, char **dst) { const char *val = sexpr_node(sexpr, node); if (val && *val) return VIR_STRDUP(*dst, val) < 0 ? -1 : 0; *dst = NULL; return 0; }
int sexpr_node_copy(const struct sexpr *sexpr, const char *node, char **dst) { const char *val = sexpr_node(sexpr, node); if (val && *val) { *dst = strdup(val); if (!(*dst)) return -1; } else { *dst = NULL; } return 0; }
/** * sexpr_fmt_node: * @sexpr: a pointer to a parsed S-Expression * @fmt: a path for the node to lookup in the S-Expression * @... extra data to build the path * * Search a node value in the S-Expression based on its path * * Returns the value of the node or NULL if not found. */ const char * sexpr_fmt_node(const struct sexpr *sexpr, const char *fmt, ...) { int result; va_list ap; char *node; const char *value; va_start(ap, fmt); result = virVasprintf(&node, fmt, ap); va_end(ap); if (result < 0) { return NULL; } value = sexpr_node(sexpr, node); VIR_FREE(node); return value; }