static int convert_line(struct _citrus_db_factory *df, const char *line, size_t len) { const char *p; char data[LINE_MAX], key[LINE_MAX]; /* cut off trailing comment */ p = memchr(line, T_COMM, len); if (p) len = p - line; /* key */ line = _bcs_skip_ws_len(line, &len); if (len == 0) return (0); p = _bcs_skip_nonws_len(line, &len); if (p == line) return (0); snprintf(key, sizeof(key), "%.*s", (int)(p-line), line); _bcs_convert_to_lower(key); /* data */ line = _bcs_skip_ws_len(p, &len); _bcs_trunc_rws_len(line, &len); snprintf(data, sizeof(data), "%.*s", (int)len, line); return (_db_factory_addstr_by_s(df, key, data)); }
static int seq_lookup_db(struct _citrus_lookup *cl, const char *key, struct _region *data) { cl->cl_rewind = 0; free(cl->cl_key); cl->cl_key = strdup(key); if (cl->cl_ignore_case) _bcs_convert_to_lower(cl->cl_key); cl->cl_keylen = strlen(cl->cl_key); _db_locator_init(&cl->cl_dblocator); return _db_lookup_by_s(cl->cl_db, cl->cl_key, data, &cl->cl_dblocator); }
static int seq_lookup_plain(struct _citrus_lookup *cl, const char *key, struct _region *data) { size_t len; const char *p; cl->cl_rewind = 0; free(cl->cl_key); cl->cl_key = strdup(key); if (cl->cl_ignore_case) _bcs_convert_to_lower(cl->cl_key); cl->cl_keylen = strlen(cl->cl_key); _memstream_bind(&cl->cl_plainms, &cl->cl_plainr); p = _memstream_matchline(&cl->cl_plainms, cl->cl_key, &len, 0); if (p == NULL) return ENOENT; if (data) _region_init(data, __UNCONST(p), len); return 0; }