int set_vn(struct fuse *f, struct fuse_vnode *v) { struct fuse_vn_head *vn_head; struct fuse_vnode *vn; DPRINTF("%s: create or update vnode %llu@%llu = %s\n", __func__, (unsigned long long)v->ino, (unsigned long long)v->parent, v->path); if (tree_set(&f->vnode_tree, v->ino, v) == NULL) return (0); if (!dict_check(&f->name_tree, v->path)) { vn_head = malloc(sizeof(*vn_head)); if (vn_head == NULL) return (0); SIMPLEQ_INIT(vn_head); } else { vn_head = dict_get(&f->name_tree, v->path); if (vn_head == NULL) return (0); } SIMPLEQ_FOREACH(vn, vn_head, node) { if (v->parent == vn->parent && v->ino == vn->ino) return (1); } SIMPLEQ_INSERT_TAIL(vn_head, v, node); dict_set(&f->name_tree, v->path, vn_head); return (1); }
static struct config * config_load(const char *path) { struct config *conf; FILE *fp; size_t flen; char *key, *value, *buf, *lbuf; const char *e; long long ll; lbuf = NULL; conf = calloc(1, sizeof(*conf)); if (conf == NULL) { log_warn("warn: table-postgres: calloc"); return (NULL); } dict_init(&conf->conf); dict_init(&conf->sources); conf->source_refresh = DEFAULT_REFRESH; conf->source_expire = DEFAULT_EXPIRE; fp = fopen(path, "r"); if (fp == NULL) { log_warn("warn: table-postgres: fopen"); goto end; } while ((buf = fgetln(fp, &flen))) { if (buf[flen - 1] == '\n') buf[flen - 1] = '\0'; else { lbuf = malloc(flen + 1); if (lbuf == NULL) { log_warn("warn: table-postgres: malloc"); goto end; } memcpy(lbuf, buf, flen); lbuf[flen] = '\0'; buf = lbuf; } key = buf; while (isspace((unsigned char)*key)) ++key; if (*key == '\0' || *key == '#') continue; value = key; strsep(&value, " \t:"); if (value) { while (*value) { if (!isspace((unsigned char)*value) && !(*value == ':' && isspace((unsigned char)*(value + 1)))) break; ++value; } if (*value == '\0') value = NULL; } if (value == NULL) { log_warnx("warn: table-postgres: missing value for key %s", key); goto end; } if (dict_check(&conf->conf, key)) { log_warnx("warn: table-postgres: duplicate key %s", key); goto end; } value = strdup(value); if (value == NULL) { log_warn("warn: table-postgres: malloc"); goto end; } dict_set(&conf->conf, key, value); } if ((value = dict_get(&conf->conf, "fetch_source_expire"))) { e = NULL; ll = strtonum(value, 0, INT_MAX, &e); if (e) { log_warnx("warn: table-postgres: bad value for fetch_source_expire: %s", e); goto end; } conf->source_expire = ll; } if ((value = dict_get(&conf->conf, "fetch_source_refresh"))) { e = NULL; ll = strtonum(value, 0, INT_MAX, &e); if (e) { log_warnx("warn: table-postgres: bad value for fetch_source_refresh: %s", e); goto end; } conf->source_refresh = ll; } free(lbuf); fclose(fp); return (conf); end: free(lbuf); if (fp) fclose(fp); config_free(conf); return (NULL); }
static struct config * config_load(const char *path) { struct config *conf; FILE *fp; size_t sz = 0; ssize_t flen; char *key, *value, *buf = NULL; const char *e; long long ll; if ((conf = calloc(1, sizeof(*conf))) == NULL) { log_warn("warn: calloc"); return NULL; } dict_init(&conf->conf); dict_init(&conf->sources); conf->source_refresh = DEFAULT_REFRESH; conf->source_expire = DEFAULT_EXPIRE; if ((fp = fopen(path, "r")) == NULL) { log_warn("warn: \"%s\"", path); goto end; } while ((flen = getline(&buf, &sz, fp)) != -1) { if (buf[flen - 1] == '\n') buf[flen - 1] = '\0'; key = strip(buf); if (*key == '\0' || *key == '#') continue; value = key; strsep(&value, " \t:"); if (value) { while (*value) { if (!isspace((unsigned char)*value) && !(*value == ':' && isspace((unsigned char)*(value + 1)))) break; ++value; } if (*value == '\0') value = NULL; } if (value == NULL) { log_warnx("warn: missing value for key %s", key); goto end; } if (dict_check(&conf->conf, key)) { log_warnx("warn: duplicate key %s", key); goto end; } value = strdup(value); if (value == NULL) { log_warn("warn: strdup"); goto end; } dict_set(&conf->conf, key, value); } if ((value = dict_get(&conf->conf, "fetch_source_expire"))) { e = NULL; ll = strtonum(value, 0, INT_MAX, &e); if (e) { log_warnx("warn: bad value for fetch_source_expire: %s", e); goto end; } conf->source_expire = ll; } if ((value = dict_get(&conf->conf, "fetch_source_refresh"))) { e = NULL; ll = strtonum(value, 0, INT_MAX, &e); if (e) { log_warnx("warn: bad value for fetch_source_refresh: %s", e); goto end; } conf->source_refresh = ll; } free(buf); fclose(fp); return conf; end: free(buf); fclose(fp); config_free(conf); return NULL; }
static struct config * config_load(const char *path) { struct config *conf; FILE *fp; size_t flen; char *key, *value, *buf, *lbuf; lbuf = NULL; conf = calloc(1, sizeof(*conf)); if (conf == NULL) { log_warn("warn: table-redis: calloc"); return (NULL); } dict_init(&conf->conf); fp = fopen(path, "r"); if (fp == NULL) { log_warn("warn: table-redis: fopen"); goto end; } while ((buf = fgetln(fp, &flen))) { if (buf[flen - 1] == '\n') buf[flen - 1] = '\0'; else { lbuf = malloc(flen + 1); if (lbuf == NULL) { log_warn("warn: table-redis: malloc"); goto end; } memcpy(lbuf, buf, flen); lbuf[flen] = '\0'; buf = lbuf; } key = buf; while (isspace((unsigned char)*key)) ++key; if (*key == '\0' || *key == '#') continue; value = key; strsep(&value, " \t:"); if (value) { while (*value) { if (!isspace((unsigned char)*value) && !(*value == ':' && isspace((unsigned char)*(value + 1)))) break; ++value; } if (*value == '\0') value = NULL; } if (value == NULL) { log_warnx("warn: table-redis: missing value for key %s", key); goto end; } if (dict_check(&conf->conf, key)) { log_warnx("warn: table-redis: duplicate key %s", key); goto end; } value = strdup(value); if (value == NULL) { log_warn("warn: table-redis: malloc"); goto end; } dict_set(&conf->conf, key, value); } free(lbuf); fclose(fp); return (conf); end: free(lbuf); if (fp) fclose(fp); config_free(conf); return (NULL); }