]> granicus.if.org Git - apache/commitdiff
htdbm: don't allocate more memory for every record we dump.
authorDaniel Earl Poirier <poirier@apache.org>
Mon, 14 Sep 2009 19:08:22 +0000 (19:08 +0000)
committerDaniel Earl Poirier <poirier@apache.org>
Mon, 14 Sep 2009 19:08:22 +0000 (19:08 +0000)
Thanks to Jeff Trawick for flagging this.
Also ensure a space before all dumped comments.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@814781 13f79535-47bb-0310-9956-ffa450edef68

support/htdbm.c

index 74bff820033855f12132b8787a1dfa1401884ae5..8baa75ebb61c383ce9935019bd43698a3b545158 100644 (file)
@@ -241,8 +241,7 @@ static apr_status_t htdbm_list(htdbm_t *htdbm)
 {
     apr_status_t rv;
     apr_datum_t key, val;
-    char *rec, *cmnt;
-    char *kb;
+    char *cmnt;
     int i = 0;
 
     rv = apr_dbm_firstkey(htdbm->dbm, &key);
@@ -251,19 +250,18 @@ static apr_status_t htdbm_list(htdbm_t *htdbm)
         return APR_ENOENT;
     }
     fprintf(stderr, "Dumping records from database -- %s\n", htdbm->filename);
-    fprintf(stderr, "    %-32sComment\n", "Username");
+    fprintf(stderr, "    %-32s Comment\n", "Username");
     while (key.dptr != NULL) {
         rv = apr_dbm_fetch(htdbm->dbm, key, &val);
         if (rv != APR_SUCCESS) {
             fprintf(stderr, "Failed getting data from %s\n", htdbm->filename);
             return APR_EGENERAL;
         }
-        kb = apr_pstrndup(htdbm->pool, key.dptr, key.dsize);
-        fprintf(stderr, "    %-32s", kb);
-        rec = apr_pstrndup(htdbm->pool, val.dptr, val.dsize);
-        cmnt = strchr(rec, ':');
+        /* Note: we don't store \0-terminators on our dbm data */
+        fprintf(stderr, "    %-32.*s", key.dsize, key.dptr);
+        cmnt = memchr(val.dptr, ':', val.dsize);
         if (cmnt)
-            fprintf(stderr, "%s", cmnt + 1);
+            fprintf(stderr, " %.*s", val.dptr+val.dsize - (cmnt+1), cmnt + 1);
         fprintf(stderr, "\n");
         rv = apr_dbm_nextkey(htdbm->dbm, &key);
         if (rv != APR_SUCCESS)