** 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. */
| 326 | ** called again. |
| 327 | */ |
| 328 | static 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 | |
| 369 | static void dav_append_prop(apr_pool_t *pool, |
| 370 | const char *name, const char *value, |
no test coverage detected