Exemplo n.º 1
0
int vbucket_config_parse(VBUCKET_CONFIG_HANDLE handle,
                         vbucket_source_t data_source,
                         const char *data)
{
    if (data_source == LIBVBUCKET_SOURCE_FILE) {
        return parse_from_file(handle, data);
    } else {
        return parse_from_memory(handle, data);
    }
}
Exemplo n.º 2
0
int vbucket_config_parse2(VBUCKET_CONFIG_HANDLE handle,
                          vbucket_source_t data_source,
                          const char *data,
                          const char *peername)
{
    handle->localhost = peername;
    handle->nlocalhost = peername ? strlen(peername) : 0;
    if (data_source == LIBVBUCKET_SOURCE_FILE) {
        return parse_from_file(handle, data);
    } else {
        return parse_from_memory(handle, data);
    }
}
Exemplo n.º 3
0
static int parse_from_file(VBUCKET_CONFIG_HANDLE handle, const char *filename)
{
    long size;
    char *data;
    int ret;
    FILE *f = fopen(filename, "rb");
    if (f == NULL) {
        char msg[1024];
        snprintf(msg, sizeof(msg), "Unable to open file \"%s\": %s", filename,
                 strerror(errno));
        handle->errmsg = strdup(msg);
        return -1;
    }
    fseek(f, 0, SEEK_END);
    size = ftell(f);
    fseek(f, 0, SEEK_SET);
    if (size > MAX_CONFIG_SIZE) {
        char msg[1024];
        snprintf(msg, sizeof(msg), "File too large: \"%s\"", filename);
        handle->errmsg = strdup(msg);
        fclose(f);
        return -1;
    }
    data = calloc(size+1, sizeof(char));
    if (data == NULL) {
        char msg[1024];
        snprintf(msg, sizeof(msg), "Failed to allocate buffer to read: \"%s\"", filename);
        handle->errmsg = strdup(msg);
        fclose(f);
        return -1;
    }
    if (do_read_file(f, data, size) == -1) {
        char msg[1024];
        snprintf(msg, sizeof(msg), "Failed to read entire file: \"%s\": %s",
                 filename, strerror(errno));
        handle->errmsg = strdup(msg);
        fclose(f);
        free(data);
        return -1;
    }

    fclose(f);
    ret = parse_from_memory(handle, data);
    free(data);
    return ret;
}