Mercurial > hg > tinycc
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 */