sync with tpot's change to gencache_get() in HEAD
authorGerald Carter <jerry@samba.org>
Fri, 24 Jan 2003 21:25:12 +0000 (21:25 +0000)
committerGerald Carter <jerry@samba.org>
Fri, 24 Jan 2003 21:25:12 +0000 (21:25 +0000)
(This used to be commit 305f167db2a34cdf3dd6378954e815ce34111232)

source3/lib/gencache.c

index 3ff67b9918c85b17d18af262ef0c65298877177d..a844d8c014db7b30cdb598c5b6f2582211bd3a59 100644 (file)
@@ -233,9 +233,7 @@ BOOL gencache_get(const char *keystr, char **valstr, time_t *timeout)
        TDB_DATA keybuf, databuf;
 
        /* fail completely if get null pointers passed */
-#if 0  /* JERRY */
-       SMB_ASSERT(keystr && valstr && timeout);
-#endif
+       SMB_ASSERT(keystr);
 
        if (!gencache_init())
                return False;
@@ -244,32 +242,44 @@ BOOL gencache_get(const char *keystr, char **valstr, time_t *timeout)
        keybuf.dsize = strlen(keystr);
        databuf = tdb_fetch(cache, keybuf);
        
-       /* special case for tpot */
-       if ( !valstr && !timeout ) {
-               BOOL result = False;
-               
-               result = (databuf.dptr == NULL);
-               SAFE_FREE(databuf.dptr);
-               return result;
-       }
-       
        if (databuf.dptr && databuf.dsize > TIMEOUT_LEN) {
                char* entry_buf = strndup(databuf.dptr, databuf.dsize);
-               *valstr = (char*)malloc(sizeof(char) * (databuf.dsize - TIMEOUT_LEN));
+               char *v;
+               time_t t;
+
+               v = (char*)malloc(sizeof(char) * 
+                                 (databuf.dsize - TIMEOUT_LEN));
                                
                SAFE_FREE(databuf.dptr);
-               sscanf(entry_buf, CACHE_DATA_FMT, (int*)timeout, *valstr);
+               sscanf(entry_buf, CACHE_DATA_FMT, (int*)&t, v);
                SAFE_FREE(entry_buf);
 
-               DEBUG(10, ("Returning %s cache entry: key = %s, value = %s, timeout = %s\n",
-                          *timeout > time(NULL) ? "valid" : "expired", keystr, *valstr,
-                          ctime(timeout)));
-               return *timeout > time(NULL);
+               DEBUG(10, ("Returning %s cache entry: key = %s, value = %s, "
+                          "timeout = %s\n", t > time(NULL) ? "valid" :
+                          "expired", keystr, v, ctime(&t)));
+
+               if (valstr)
+                       *valstr = v;
+               else
+                       SAFE_FREE(v);
+
+               if (timeout)
+                       *timeout = t;
+
+               return t > time(NULL);
+
        } else {
                SAFE_FREE(databuf.dptr);
-               *valstr = NULL;
-               timeout = NULL;
-               DEBUG(10, ("Cache entry with key = %s couldn't be found\n", keystr));
+
+               if (valstr)
+                       *valstr = NULL;
+
+               if (timeout)
+                       timeout = NULL;
+
+               DEBUG(10, ("Cache entry with key = %s couldn't be found\n", 
+                          keystr));
+
                return False;
        }
 }
@@ -333,4 +343,3 @@ void gencache_iterate(void (*fn)(const char* key, const char *value, time_t time
        
        tdb_search_list_free(first_node);
 }
-