changeset 520:647f1a3feb8b

Add "struct dynarray" to group some dynamic array logic. Make the colon separated paths work on this new structure, so the code can be generic. Convert add_library_path() to it.
author Rob Landley <rob@landley.net>
date Tue, 04 Dec 2007 14:27:48 -0600
parents ff406be3015d
children 22b60bb22c83
files tcc.c tcc.h
diffstat 2 files changed, 28 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/tcc.c	Fri Nov 30 01:59:34 2007 -0600
+++ b/tcc.c	Tue Dec 04 14:27:48 2007 -0600
@@ -8747,7 +8747,7 @@
     return (*prog_main)(argc, argv);
 }
 
-int add_library_path(TCCState *s, const char *pathname)
+void add_dynarray_path(TCCState *s, const char *pathname, struct dynarray *dd)
 {
     const char *c = pathname;
 
@@ -8759,11 +8759,10 @@
             strncpy(c2, pathname, len);
             c2[len] = 0;
             pathname += len+1;
-            dynarray_add((void ***)&s->library_paths, &s->nb_library_paths, c2);
+            dynarray_add((void ***)&dd->data, &dd->len, c2);
         }
         if (!*c++) break;
     }
-    return 0;
 }
 
 // Initialize tcc state
@@ -8841,10 +8840,10 @@
     {
         char buf[1024];
         snprintf(buf, sizeof(buf), "%s/lib", cc_lib_path);
-        add_library_path(s, buf);
+        add_dynarray_path(s, buf, &(s->library_paths));
     }
 #else
-    add_library_path(s, TINYCC_LIBDIR);
+    add_dynarray_path(s, TINYCC_LIBDIR, &(s->library_paths));
     tcc_define_symbol(s, "__WCHAR_TYPE__", "int");
 #endif
 
@@ -8909,9 +8908,9 @@
     free(s1->loaded_dlls);
 
     /* library paths */
-    for(i = 0; i < s1->nb_library_paths; i++)
-        free(s1->library_paths[i]);
-    free(s1->library_paths);
+    for(i = 0; i < s1->library_paths.len; i++)
+        free(s1->library_paths.data[i]);
+    free(s1->library_paths.data);
 
     /* cached includes */
     for(i = 0; i < s1->nb_cached_includes; i++)
@@ -9074,9 +9073,9 @@
     char buf[1024];
     int i;
 
-    for(i = 0; i < s->nb_library_paths; i++) {
+    for(i = 0; i < s->library_paths.len; i++) {
         snprintf(buf, sizeof(buf), "%s/%s", 
-                 s->library_paths[i], filename);
+                 s->library_paths.data[i], filename);
         if (tcc_add_file_internal(s, buf, flags) == 0)
             return 0;
     }
@@ -9101,9 +9100,9 @@
     }
 
     /* then we look for the static library */
-    for(i = 0; i < s->nb_library_paths; i++) {
+    for(i = 0; i < s->library_paths.len; i++) {
         snprintf(buf, sizeof(buf), "%s/lib%s.a", 
-                 s->library_paths[i], libraryname);
+                 s->library_paths.data[i], libraryname);
         if (tcc_add_file_internal(s, buf, 0) == 0)
             return 0;
     }
@@ -9517,7 +9516,7 @@
                 tcc_undefine_symbol(s, optarg);
                 break;
             case TCC_OPTION_L:
-                add_library_path(s, optarg);
+                add_dynarray_path(s, optarg, &(s->library_paths));
                 break;
             case TCC_OPTION_B:
                 /* set tcc utilities path (mainly for tcc development) */
--- a/tcc.h	Fri Nov 30 01:59:34 2007 -0600
+++ b/tcc.h	Tue Dec 04 14:27:48 2007 -0600
@@ -307,6 +307,11 @@
  
 #define SYM_POOL_NB (8192 / sizeof(Sym))
 
+struct dynarray {
+    char **data;
+    int len;
+};
+
 struct TCCState {
     int output_type;
  
@@ -314,28 +319,37 @@
     int *ifdef_stack_ptr;
 
     /* include file handling */
+    //struct dynarray include_paths;
     char **include_paths;
     int nb_include_paths;
+
+    //struct dynarray sysinclude_paths;
     char **sysinclude_paths;
     int nb_sysinclude_paths;
+
+    //struct dynarray cached_includes;
     CachedInclude **cached_includes;
     int nb_cached_includes;
 
-    char **library_paths;
-    int nb_library_paths;
+    struct dynarray library_paths;
+    //char **library_paths;
+    //int nb_library_paths;
 
     /* array of all loaded dlls (including those referenced by loaded
        dlls) */
+    //struct dynarray loaded_dlls;
     DLLReference **loaded_dlls;
     int nb_loaded_dlls;
 
     /* sections */
+    //struct dynarray sections;
     Section **sections;
     int nb_sections; /* number of sections, including first dummy section */
 
     /* got handling */
     Section *got;
     Section *plt;
+    //struct dynarray got_offsets;
     unsigned long *got_offsets;
     int nb_got_offsets;
     /* give the correspondance from symtab indexes to dynsym indexes */