MCPcopy Create free account
hub / github.com/apache/httpd / dav_build_key

Function dav_build_key

modules/dav/fs/dbm.c:328–367  ·  view source on GitHub ↗

** Internal function to build a key ** ** WARNING: returns a pointer to a "static" buffer holding the key. The ** value must be copied or no longer used if this function is ** called again. */

Source from the content-addressed store, hash-verified

326** called again.
327*/
328static apr_datum_t dav_build_key(dav_db *db, const dav_prop_name *name)
329{
330 char nsbuf[20];
331 apr_size_t l_ns, l_name = strlen(name->name);
332 apr_datum_t key = { 0 };
333
334 /*
335 * Convert namespace ID to a string. "no namespace" is an empty string,
336 * so the keys will have the form ":name". Otherwise, the keys will
337 * have the form "#:name".
338 */
339 if (*name->ns == '\0') {
340 nsbuf[0] = '\0';
341 l_ns = 0;
342 }
343 else {
344 long ns_id = (long)apr_hash_get(db->uri_index, name->ns,
345 APR_HASH_KEY_STRING);
346
347
348 if (ns_id == 0) {
349 /* the namespace was not found(!) */
350 return key; /* zeroed */
351 }
352
353 l_ns = apr_snprintf(nsbuf, sizeof(nsbuf), "%ld", ns_id - 1);
354 }
355
356 /* assemble: #:name */
357 dav_set_bufsize(db->pool, &db->wb_key, l_ns + 1 + l_name + 1);
358 memcpy(db->wb_key.buf, nsbuf, l_ns);
359 db->wb_key.buf[l_ns] = ':';
360 memcpy(&db->wb_key.buf[l_ns + 1], name->name, l_name + 1);
361
362 /* build the database key */
363 key.dsize = l_ns + 1 + l_name + 1;
364 key.dptr = db->wb_key.buf;
365
366 return key;
367}
368
369static void dav_append_prop(apr_pool_t *pool,
370 const char *name, const char *value,

Callers 5

dav_propdb_output_valueFunction · 0.85
dav_propdb_storeFunction · 0.85
dav_propdb_removeFunction · 0.85
dav_propdb_existsFunction · 0.85
dav_propdb_get_rollbackFunction · 0.85

Calls 1

dav_set_bufsizeFunction · 0.85

Tested by

no test coverage detected