Revision: 43098
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43098
Author:   elubie
Date:     2012-01-03 12:41:41 +0000 (Tue, 03 Jan 2012)
Log Message:
-----------
file browser: CleanUp work
* removed static storage for the directory
* removed unneeded parameter relname which allowed to call BLI_dir_contents 
with relative path, was never used
* made functions used for reading blender library static

Modified Paths:
--------------
    branches/asset-browser/source/blender/blenlib/BLI_fileops.h
    branches/asset-browser/source/blender/blenlib/CMakeLists.txt
    branches/asset-browser/source/blender/blenlib/intern/storage.c
    branches/asset-browser/source/blender/editors/interface/interface_icons.c
    branches/asset-browser/source/blender/editors/space_file/filelist.c
    branches/asset-browser/source/blender/editors/space_file/filelist.h

Modified: branches/asset-browser/source/blender/blenlib/BLI_fileops.h
===================================================================
--- branches/asset-browser/source/blender/blenlib/BLI_fileops.h 2012-01-03 
12:40:51 UTC (rev 43097)
+++ branches/asset-browser/source/blender/blenlib/BLI_fileops.h 2012-01-03 
12:41:41 UTC (rev 43098)
@@ -61,7 +61,10 @@
 double BLI_dir_free_space(const char *dir);
 char  *BLI_current_working_dir(char *dir, const int maxlen);
 
-unsigned int BLI_dir_contents(const char *dir, struct direntry **filelist);
+/* allocates memory that needs to be freed once struct direntry **files is no 
longer needed 
+   use BLI_dir_dispose for this! */
+void BLI_dir_contents(const char *dirname, struct direntry **files, int* 
num_files);
+void BLI_dir_dispose(struct direntry *filelist, unsigned int num_files);
 
 /* Files */
 

Modified: branches/asset-browser/source/blender/blenlib/CMakeLists.txt
===================================================================
--- branches/asset-browser/source/blender/blenlib/CMakeLists.txt        
2012-01-03 12:40:51 UTC (rev 43097)
+++ branches/asset-browser/source/blender/blenlib/CMakeLists.txt        
2012-01-03 12:41:41 UTC (rev 43098)
@@ -27,6 +27,7 @@
        .
        ../blenkernel
        ../blenloader
+       ../imbuf
        ../gpu
        ../makesdna
        ../../../intern/ghost

Modified: branches/asset-browser/source/blender/blenlib/intern/storage.c
===================================================================
--- branches/asset-browser/source/blender/blenlib/intern/storage.c      
2012-01-03 12:40:51 UTC (rev 43097)
+++ branches/asset-browser/source/blender/blenlib/intern/storage.c      
2012-01-03 12:41:41 UTC (rev 43098)
@@ -93,12 +93,11 @@
 
 #include "BKE_utildefines.h"
 
+#include "IMB_imbuf.h"
+#include "IMB_imbuf_types.h"
+
 /* vars: */
-static int totnum,actnum;
-static struct direntry *files;
 
-static struct ListBase dirbase_={NULL, NULL};
-static struct ListBase *dirbase = &dirbase_;
 
 /* can return NULL when the size is not big enough */
 char *BLI_current_working_dir(char *dir, const int maxncpy)
@@ -195,22 +194,19 @@
 #endif
 }
 
-static void bli_builddir(const char *dirname, const char *relname)
+static void bli_adddirstrings(struct direntry* files, int num_files);
+
+void BLI_dir_contents(const char *dirname, struct direntry **files, int 
*num_files)
 {
+       int totnum= 0,actnum= 0;
+       struct ListBase dirbase_={NULL, NULL};
+       struct ListBase *dirbase = &dirbase_;
        struct dirent *fname;
        struct dirlink *dlink;
-       int rellen, newnum = 0;
+       int newnum = 0;
        char buf[256];
        DIR *dir;
 
-       strcpy(buf,relname);
-       rellen=strlen(relname);
-
-       if (rellen){
-               buf[rellen]='/';
-               rellen++;
-       }
-
        if (chdir(dirname) == -1){
                perror(dirname);
                return;
@@ -220,7 +216,7 @@
                while ((fname = (struct dirent*) readdir(dir)) != NULL) {
                        dlink = (struct dirlink *)malloc(sizeof(struct 
dirlink));
                        if (dlink){
-                               strcpy(buf+rellen,fname->d_name);
+                               strcpy(buf,fname->d_name);
                                dlink->name = BLI_strdup(buf);
                                BLI_addhead(dirbase,dlink);
                                newnum++;
@@ -229,37 +225,25 @@
                
                if (newnum){
 
-                       if(files) {
-                               void *tmp= realloc(files, (totnum+newnum) * 
sizeof(struct direntry));
-                               if(tmp) {
-                                       files= (struct direntry *)tmp;
-                               }
-                               else { /* realloc fail */
-                                       free(files);
-                                       files= NULL;
-                               }
-                       }
-                       
-                       if(files==NULL)
-                               files=(struct direntry *)malloc(newnum * 
sizeof(struct direntry));
+                       (*files)=(struct direntry *)MEM_mallocN(newnum * 
sizeof(struct direntry), "directory files");
 
-                       if (files){
+                       if (*files){
                                dlink = (struct dirlink *) dirbase->first;
                                while(dlink){
-                                       memset(&files[actnum], 0 , 
sizeof(struct direntry));
-                                       files[actnum].relname = dlink->name;
-                                       files[actnum].path = 
BLI_strdupcat(dirname, dlink->name);
+                                       memset(&(*files)[actnum], 0 , 
sizeof(struct direntry));
+                                       (*files)[actnum].relname = dlink->name;
+                                       (*files)[actnum].path = 
BLI_strdupcat(dirname, dlink->name);
 // use 64 bit file size, only needed for WIN32 and WIN64. 
 // Excluding other than current MSVC compiler until able to test.
 #if (defined(WIN32) || defined(WIN64)) && (_MSC_VER>=1500)
-                                       _stat64(dlink->name,&files[actnum].s);
+                                       
_stat64(dlink->name,&(*files)[actnum].s);
 #elif defined(__MINGW32__)
                                        _stati64(dlink->name,&files[actnum].s);
 #else
                                        stat(dlink->name,&files[actnum].s);
 #endif
-                                       
files[actnum].type=files[actnum].s.st_mode;
-                                       files[actnum].flags = 0;
+                                       
(*files)[actnum].type=(*files)[actnum].s.st_mode;
+                                       (*files)[actnum].flags = 0;
                                        totnum++;
                                        actnum++;
                                        dlink = dlink->next;
@@ -270,7 +254,7 @@
                        }
 
                        BLI_freelist(dirbase);
-                       if (files) qsort(files, actnum, sizeof(struct 
direntry), (int (*)(const void *,const void*))bli_compare);
+                       if ((*files)) qsort((*files), actnum, sizeof(struct 
direntry), (int (*)(const void *,const void*))bli_compare);
                } else {
                        printf("%s empty directory\n",dirname);
                }
@@ -279,9 +263,12 @@
        } else {
                printf("%s non-existant directory\n",dirname);
        }
+       
+       bli_adddirstrings((*files), actnum);
+       *num_files= actnum;
 }
 
-static void bli_adddirstrings(void)
+static void bli_adddirstrings(struct direntry* files, int num_files)
 {
        char datum[100];
        char buf[512];
@@ -298,7 +285,7 @@
        struct tm *tm;
        time_t zero= 0;
        
-       for(num=0, file= files; num<actnum; num++, file++){
+       for(num=0, file= files; num<num_files; num++, file++){
 #ifdef WIN32
                mode = 0;
                BLI_strncpy(file->mode1, types[0], sizeof(file->mode1));
@@ -389,30 +376,27 @@
        }
 }
 
-unsigned int BLI_dir_contents(const char *dirname,  struct direntry **filelist)
+void BLI_dir_dispose(struct direntry *filelist, unsigned int num_files)
 {
-       // reset global variables
-       // memory stored in files is free()'d in
-       // filesel.c:freefilelist()
-
-       actnum = totnum = 0;
-       files = NULL;
-
-       bli_builddir(dirname,"");
-       bli_adddirstrings();
-
-       if (files) {
-               *(filelist) = files;
-       } else {
-               // keep blender happy. Blender stores this in a variable
-               // where 0 has special meaning.....
-               *(filelist) = files = malloc(sizeof(struct direntry));
+       int i;
+       struct direntry *files = filelist;
+       for (i = 0; i < num_files; ++i) {
+               if (files[i].image) {                   
+                       IMB_freeImBuf(files[i].image);
+               }
+               files[i].image = NULL;
+               if (files[i].relname)
+                       MEM_freeN(files[i].relname);
+               if (files[i].path)
+                       MEM_freeN(files[i].path);
+               files[i].relname = NULL;
+               if (files[i].string)
+                       MEM_freeN(files[i].string);
+               files[i].string = NULL;
        }
-
-       return(actnum);
+       MEM_freeN(files);
 }
 
-
 size_t BLI_file_descriptor_size(int file)
 {
        struct stat buf;

Modified: 
branches/asset-browser/source/blender/editors/interface/interface_icons.c
===================================================================
--- branches/asset-browser/source/blender/editors/interface/interface_icons.c   
2012-01-03 12:40:51 UTC (rev 43097)
+++ branches/asset-browser/source/blender/editors/interface/interface_icons.c   
2012-01-03 12:41:41 UTC (rev 43098)
@@ -610,7 +610,8 @@
           back to old value afterwards */
        if(!BLI_current_working_dir(olddir, sizeof(olddir))) 
                restoredir = 0;
-       totfile = BLI_dir_contents(icondir, &dir);
+       BLI_dir_contents(icondir, &dir, &totfile);
+       
        if (restoredir && !chdir(olddir)) {} /* fix warning about checking 
return value */
 
        for(i=0; i<totfile; i++) {
@@ -660,14 +661,7 @@
        }
        
        /* free temporary direntry structure that's been created by 
BLI_dir_contents() */
-       i= totfile-1;
-       
-       for(; i>=0; i--){
-               MEM_freeN(dir[i].relname);
-               MEM_freeN(dir[i].path);
-               if (dir[i].string) MEM_freeN(dir[i].string);
-       }
-       free(dir);
+       BLI_dir_dispose(dir, totfile);
        dir= NULL;
 }
 

Modified: branches/asset-browser/source/blender/editors/space_file/filelist.c
===================================================================
--- branches/asset-browser/source/blender/editors/space_file/filelist.c 
2012-01-03 12:40:51 UTC (rev 43097)
+++ branches/asset-browser/source/blender/editors/space_file/filelist.c 
2012-01-03 12:41:41 UTC (rev 43098)
@@ -45,6 +45,7 @@
 #include "MEM_guardedalloc.h"
 
 #include "BLI_blenlib.h"
+#
 #include "BLI_linklist.h"
 #include "BLI_threads.h"
 #include "BLI_utildefines.h"
@@ -526,8 +527,6 @@
 
 void filelist_free(struct FileList* filelist)
 {
-       int i;
-
        if (!filelist) {
                printf("Attempting to delete empty filelist.\n");
                return;
@@ -538,28 +537,11 @@
                filelist->fidx = NULL;
        }
 
-       for (i = 0; i < filelist->numfiles; ++i) {
-               if (filelist->filelist[i].image) {                      
-                       IMB_freeImBuf(filelist->filelist[i].image);
-               }
-               filelist->filelist[i].image = NULL;
-               if (filelist->filelist[i].relname)
-                       MEM_freeN(filelist->filelist[i].relname);
-               if (filelist->filelist[i].path)
-                       MEM_freeN(filelist->filelist[i].path);
-               filelist->filelist[i].relname = NULL;
-               if (filelist->filelist[i].string)
-                       MEM_freeN(filelist->filelist[i].string);
-               filelist->filelist[i].string = NULL;
-       }
+       BLI_dir_dispose(filelist->filelist, filelist->numfiles);
        
        filelist->numfiles = 0;
-       free(filelist->filelist);
        filelist->filelist = NULL;      
-       filelist->filter = 0;
-       filelist->filter_glob[0] = '\0';
        filelist->numfiltered =0;
-       filelist->hide_dot =0;
 }
 
 void filelist_freelib(struct FileList* filelist)
@@ -825,13 +807,19 @@
        BLI_current_working_dir(wdir, sizeof(wdir));     /* backup cwd to 
restore after */
 
        BLI_cleanup_dir(G.main->name, filelist->dir);
-       filelist->numfiles = BLI_dir_contents(filelist->dir, 
&(filelist->filelist));
+       
+       filelist_free(filelist);
 
+       BLI_dir_contents(filelist->dir, &filelist->filelist, 
&filelist->numfiles);
+       
        if(!chdir(wdir)) {} /* fix warning about not checking return value */
        filelist_setfiletypes(filelist);
        filelist_filter(filelist);
 }
 
+static void filelist_from_main(struct FileList* filelist);
+static void filelist_from_library(struct FileList* filelist);
+
 static void filelist_read_main(struct FileList* filelist)
 {
        if (!filelist) return;
@@ -983,7 +971,7 @@
        return BKE_idcode_from_name(buf);
 }
  
-void filelist_from_library(struct FileList* filelist)
+static void filelist_from_library(struct FileList* filelist)
 {
        LinkNode *l, *names, *previews;
        struct ImBuf* ima;
@@ -1084,7 +1072,7 @@
        filelist->hide_parent = hide;
 }
 
-void filelist_from_main(struct FileList *filelist)
+static void filelist_from_main(struct FileList *filelist)
 {
        ID *id;
        struct direntry *files, *firstlib = NULL;

Modified: branches/asset-browser/source/blender/editors/space_file/filelist.h
===================================================================

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to