Allocate dirp->name_cache on demand only
authorVolker Lendecke <vl@samba.org>
Tue, 8 Jan 2008 20:45:21 +0000 (21:45 +0100)
committerVolker Lendecke <vl@samba.org>
Tue, 8 Jan 2008 21:18:08 +0000 (22:18 +0100)
source/smbd/dir.c

index ab6e12f20f713fb4452c67fa2114526f28217b37..04e3167e77a486c8a2fc7850ff659be5572a4634 100644 (file)
@@ -1139,16 +1139,6 @@ struct smb_Dir *OpenDir(connection_struct *conn, const char *name, const char *m
                goto fail;
        }
 
-       if (dirp->name_cache_size) {
-               dirp->name_cache = SMB_CALLOC_ARRAY(struct name_cache_entry,
-                               dirp->name_cache_size);
-               if (!dirp->name_cache) {
-                       goto fail;
-               }
-       } else {
-               dirp->name_cache = NULL;
-       }
-
        dirhandles_open++;
        return dirp;
 
@@ -1295,10 +1285,19 @@ void DirCacheAdd(struct smb_Dir *dirp, const char *name, long offset)
 {
        struct name_cache_entry *e;
 
-       if (!dirp->name_cache_size || !dirp->name_cache) {
+       if (dirp->name_cache_size == 0) {
                return;
        }
 
+       if (dirp->name_cache == NULL) {
+               dirp->name_cache = SMB_CALLOC_ARRAY(struct name_cache_entry,
+                                                   dirp->name_cache_size);
+
+               if (dirp->name_cache == NULL) {
+                       return;
+               }
+       }
+
        dirp->name_cache_index = (dirp->name_cache_index+1) %
                                        dirp->name_cache_size;
        e = &dirp->name_cache[dirp->name_cache_index];