int pusb_xpath_get_time(xmlDocPtr doc, const char *path, time_t *value) { char ret[64]; char *last; int coef; if (!pusb_xpath_get_string(doc, path, ret, sizeof(ret))) return (0); last = &(ret[strlen(ret) - 1]); coef = 1; if (*last == 's') coef = 1; else if (*last == 'm') coef = 60; else if (*last == 'h') coef = 3600; else if (*last == 'd') coef = 3600 * 24; else if (!isdigit(*last)) { log_debug("Expecting a time modifier, got %c\n", *last); return (0); } if (!isdigit(*last)) *last = '\0'; *value = atoi(ret) * coef; return (0); }
int pusb_xpath_get_int(xmlDocPtr doc, const char *path, int *value) { char ret[64]; if (!pusb_xpath_get_string(doc, path, ret, sizeof(ret))) return (0); *value = atoi(ret); return (1); }
int pusb_xpath_get_string_from(xmlDocPtr doc, const char *base, const char *path, char *value, size_t size) { char *xpath = NULL; size_t xpath_size; int retval; xpath_size = strlen(base) + strlen(path) + 1; xpath = xmalloc(xpath_size); memset(xpath, 0x00, xpath_size); snprintf(xpath, xpath_size, "%s%s", base, path); retval = pusb_xpath_get_string(doc, xpath, value, size); if (retval) log_debug("%s%s -> %s\n", base, path, value); xfree(xpath); return (retval); }
static int pusb_conf_device_get_property(t_pusb_device *dev, xmlDoc *doc, const char *property, char *store, size_t size) { char *xpath = NULL; size_t xpath_len; int retval; /* TODO: check dev->name */ xpath_len = strlen(CONF_DEVICE_XPATH) + strlen(dev->name) + \ strlen(property) + 1; xpath = xmalloc(xpath_len); memset(xpath, 0x00, xpath_len); snprintf(xpath, xpath_len, CONF_DEVICE_XPATH, dev->name, property); retval = pusb_xpath_get_string(doc, xpath, store, size); xfree(xpath); return (retval); }
int pusb_xpath_get_bool(xmlDocPtr doc, const char *path, int *value) { char ret[6]; /* strlen("false") + 1 */ if (!pusb_xpath_get_string(doc, path, ret, sizeof(ret))) return (0); if (!strcmp(ret, "true")) { *value = 1; return (1); } if (!strcmp(ret, "false")) { *value = 0; return (1); } log_debug("Expecting a boolean, got %s\n", ret); return (0); }