refactor: move dynarray into own module
							parent
							
								
									19c5515c5e
								
							
						
					
					
						commit
						1f9bd26ae5
					
				|  | @ -0,0 +1,34 @@ | ||||||
|  | #ifndef VIETER_DYNARRAY | ||||||
|  | #define VIETER_DYNARRAY | ||||||
|  | 
 | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | 
 | ||||||
|  | typedef struct vieter_dynarray { | ||||||
|  |   char **array; | ||||||
|  |   size_t capacity; | ||||||
|  |   size_t size; | ||||||
|  | } vieter_dynarray; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Allocate a dynamic array. | ||||||
|  |  */ | ||||||
|  | vieter_dynarray *vieter_dynarray_init(size_t initial_capacity); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Initialise array (if it's not already initialised) and insert a string. | ||||||
|  |  */ | ||||||
|  | void vieter_dynarray_add(vieter_dynarray *da, const char *s); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Deallocate dynamic array. | ||||||
|  |  */ | ||||||
|  | void vieter_dynarray_free(vieter_dynarray *da); | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Convert a vieter_dynarray into an array by freeing all its surrounding | ||||||
|  |  * components and returning the underlying array pointer. | ||||||
|  |  */ | ||||||
|  | char **vieter_dynarray_convert(vieter_dynarray *da); | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
|  | @ -1,15 +1,15 @@ | ||||||
| #include "vieter_package_dynarray.h" | #include "vieter_dynarray.h" | ||||||
| 
 | 
 | ||||||
| vieter_package_dynarray *vieter_package_dynarray_init(size_t initial_capacity) { | vieter_dynarray *vieter_dynarray_init(size_t initial_capacity) { | ||||||
|   vieter_package_dynarray *da = malloc(sizeof(vieter_package_dynarray)); |   vieter_dynarray *da = malloc(sizeof(vieter_dynarray)); | ||||||
|   da->size = 0; |   da->size = 0; | ||||||
|   da->capacity = initial_capacity; |   da->capacity = initial_capacity; | ||||||
| 
 | 
 | ||||||
|   return da; |   return da; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void vieter_package_dynarray_add(vieter_package_dynarray *da, const char *s) { | void vieter_dynarray_add(vieter_dynarray *da, const char *s) { | ||||||
|   // An empty vieter_package_dynarray does not have an allocated internal array
 |   // An empty vieter_dynarray does not have an allocated internal array
 | ||||||
|   // yet
 |   // yet
 | ||||||
|   if (da->size == 0) { |   if (da->size == 0) { | ||||||
|     da->array = malloc(sizeof(char *) * da->capacity); |     da->array = malloc(sizeof(char *) * da->capacity); | ||||||
|  | @ -32,7 +32,7 @@ void vieter_package_dynarray_add(vieter_package_dynarray *da, const char *s) { | ||||||
|   da->size++; |   da->size++; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void vieter_package_dynarray_free(vieter_package_dynarray *da) { | void vieter_dynarray_free(vieter_dynarray *da) { | ||||||
|   if (da == NULL) { |   if (da == NULL) { | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|  | @ -48,11 +48,11 @@ void vieter_package_dynarray_free(vieter_package_dynarray *da) { | ||||||
|   free(da); |   free(da); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| char **vieter_package_dynarray_convert(vieter_package_dynarray *da) { | char **vieter_dynarray_convert(vieter_dynarray *da) { | ||||||
|   char **array = da->array; |   char **array = da->array; | ||||||
| 
 | 
 | ||||||
|   da->array = NULL; |   da->array = NULL; | ||||||
|   vieter_package_dynarray_free(da); |   vieter_dynarray_free(da); | ||||||
| 
 | 
 | ||||||
|   return array; |   return array; | ||||||
| } | } | ||||||
|  | @ -66,8 +66,8 @@ vieter_package_error vieter_package_read_archive(vieter_package *pkg, | ||||||
|   const char *path_name; |   const char *path_name; | ||||||
| 
 | 
 | ||||||
|   vieter_package_info *pkg_info = NULL; |   vieter_package_info *pkg_info = NULL; | ||||||
|   vieter_package_dynarray *files = vieter_package_dynarray_init(16); |   vieter_dynarray *files = vieter_dynarray_init(16); | ||||||
|   vieter_package_dynarray_add(files, "%FILES%"); |   vieter_dynarray_add(files, "%FILES%"); | ||||||
| 
 | 
 | ||||||
|   while (archive_read_next_header(a, &entry) == ARCHIVE_OK) { |   while (archive_read_next_header(a, &entry) == ARCHIVE_OK) { | ||||||
|     path_name = archive_entry_pathname(entry); |     path_name = archive_entry_pathname(entry); | ||||||
|  | @ -82,7 +82,7 @@ vieter_package_error vieter_package_read_archive(vieter_package *pkg, | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (!ignore) { |     if (!ignore) { | ||||||
|       vieter_package_dynarray_add(files, path_name); |       vieter_dynarray_add(files, path_name); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (strcmp(path_name, ".PKGINFO") == 0) { |     if (strcmp(path_name, ".PKGINFO") == 0) { | ||||||
|  | @ -257,7 +257,7 @@ char *vieter_package_to_description(vieter_package *pkg) { | ||||||
| void vieter_package_free(vieter_package **ptp) { | void vieter_package_free(vieter_package **ptp) { | ||||||
|   FREE_STRING((*ptp)->path); |   FREE_STRING((*ptp)->path); | ||||||
|   vieter_package_info_free((*ptp)->info); |   vieter_package_info_free((*ptp)->info); | ||||||
|   vieter_package_dynarray_free((*ptp)->files); |   vieter_dynarray_free((*ptp)->files); | ||||||
|   free(*ptp); |   free(*ptp); | ||||||
|   *ptp = NULL; |   *ptp = NULL; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,36 +0,0 @@ | ||||||
| #ifndef VIETER_DYNARRAY |  | ||||||
| #define VIETER_DYNARRAY |  | ||||||
| 
 |  | ||||||
| #include <stdlib.h> |  | ||||||
| #include <string.h> |  | ||||||
| #include "vieter_package.h" |  | ||||||
| 
 |  | ||||||
| typedef struct vieter_package_dynarray vieter_package_dynarray; |  | ||||||
| struct vieter_package_dynarray { |  | ||||||
| 	char **array; |  | ||||||
| 	size_t capacity; |  | ||||||
| 	size_t size; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Allocate a dynamic array. |  | ||||||
|  */ |  | ||||||
| vieter_package_dynarray *vieter_package_dynarray_init(size_t initial_capacity); |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Initialise array (if it's not already initialised) and insert a string. |  | ||||||
|  */ |  | ||||||
| void vieter_package_dynarray_add(vieter_package_dynarray *da, const char * s); |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Deallocate dynamic array. |  | ||||||
|  */ |  | ||||||
| void vieter_package_dynarray_free(vieter_package_dynarray *da); |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
|  * Convert a vieter_package_dynarray into an array by freeing all its surrounding components |  | ||||||
|  * and returning the underlying array pointer. |  | ||||||
|  */ |  | ||||||
| char **vieter_package_dynarray_convert(vieter_package_dynarray *da); |  | ||||||
| 
 |  | ||||||
| #endif |  | ||||||
|  | @ -26,9 +26,9 @@ | ||||||
|     tail_ptr = strchr(value_ptr, '\n');                                        \ |     tail_ptr = strchr(value_ptr, '\n');                                        \ | ||||||
|     tail_ptr[0] = '\0';                                                        \ |     tail_ptr[0] = '\0';                                                        \ | ||||||
|     if (pkg_info->field == NULL) {                                             \ |     if (pkg_info->field == NULL) {                                             \ | ||||||
|       pkg_info->field = vieter_package_dynarray_init(4);                       \ |       pkg_info->field = vieter_dynarray_init(4);                               \ | ||||||
|     }                                                                          \ |     }                                                                          \ | ||||||
|     vieter_package_dynarray_add(pkg_info->field, value_ptr);                   \ |     vieter_dynarray_add(pkg_info->field, value_ptr);                           \ | ||||||
|     tail_ptr[0] = '\n';                                                        \ |     tail_ptr[0] = '\n';                                                        \ | ||||||
|     value_ptr = tail_ptr;                                                      \ |     value_ptr = tail_ptr;                                                      \ | ||||||
|   }                                                                            \ |   }                                                                            \ | ||||||
|  | @ -48,15 +48,15 @@ void vieter_package_info_free(vieter_package_info *pkg_info) { | ||||||
|   FREE_STRING(pkg_info->packager); |   FREE_STRING(pkg_info->packager); | ||||||
|   FREE_STRING(pkg_info->pgpsig); |   FREE_STRING(pkg_info->pgpsig); | ||||||
| 
 | 
 | ||||||
|   vieter_package_dynarray_free(pkg_info->groups); |   vieter_dynarray_free(pkg_info->groups); | ||||||
|   vieter_package_dynarray_free(pkg_info->licenses); |   vieter_dynarray_free(pkg_info->licenses); | ||||||
|   vieter_package_dynarray_free(pkg_info->replaces); |   vieter_dynarray_free(pkg_info->replaces); | ||||||
|   vieter_package_dynarray_free(pkg_info->depends); |   vieter_dynarray_free(pkg_info->depends); | ||||||
|   vieter_package_dynarray_free(pkg_info->conflicts); |   vieter_dynarray_free(pkg_info->conflicts); | ||||||
|   vieter_package_dynarray_free(pkg_info->provides); |   vieter_dynarray_free(pkg_info->provides); | ||||||
|   vieter_package_dynarray_free(pkg_info->optdepends); |   vieter_dynarray_free(pkg_info->optdepends); | ||||||
|   vieter_package_dynarray_free(pkg_info->makedepends); |   vieter_dynarray_free(pkg_info->makedepends); | ||||||
|   vieter_package_dynarray_free(pkg_info->checkdepends); |   vieter_dynarray_free(pkg_info->checkdepends); | ||||||
| 
 | 
 | ||||||
|   free(pkg_info); |   free(pkg_info); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ | ||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
| 
 | 
 | ||||||
| #include "vieter_package.h" | #include "vieter_package.h" | ||||||
| #include "vieter_package_dynarray.h" | #include "vieter_dynarray.h" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| typedef struct vieter_package_info { | typedef struct vieter_package_info { | ||||||
|  | @ -23,15 +23,15 @@ typedef struct vieter_package_info { | ||||||
| 	char *pgpsig; | 	char *pgpsig; | ||||||
| 	int64_t pgpsigsize; | 	int64_t pgpsigsize; | ||||||
| 
 | 
 | ||||||
| 	vieter_package_dynarray *groups; | 	vieter_dynarray *groups; | ||||||
| 	vieter_package_dynarray *licenses; | 	vieter_dynarray *licenses; | ||||||
| 	vieter_package_dynarray *replaces; | 	vieter_dynarray *replaces; | ||||||
| 	vieter_package_dynarray *depends; | 	vieter_dynarray *depends; | ||||||
| 	vieter_package_dynarray *conflicts; | 	vieter_dynarray *conflicts; | ||||||
| 	vieter_package_dynarray *provides; | 	vieter_dynarray *provides; | ||||||
| 	vieter_package_dynarray *optdepends; | 	vieter_dynarray *optdepends; | ||||||
| 	vieter_package_dynarray *makedepends; | 	vieter_dynarray *makedepends; | ||||||
| 	vieter_package_dynarray *checkdepends; | 	vieter_dynarray *checkdepends; | ||||||
| } vieter_package_info; | } vieter_package_info; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  |  | ||||||
|  | @ -1,10 +1,10 @@ | ||||||
| #include "vieter_package.h" | #include "vieter_package.h" | ||||||
| #include "vieter_package_info.h" | #include "vieter_package_info.h" | ||||||
| #include "vieter_package_dynarray.h" | #include "vieter_dynarray.h" | ||||||
| 
 | 
 | ||||||
| struct vieter_package { | struct vieter_package { | ||||||
| 	char *path; | 	char *path; | ||||||
| 	vieter_package_info *info; | 	vieter_package_info *info; | ||||||
| 	vieter_package_dynarray *files; | 	vieter_dynarray *files; | ||||||
| 	int compression; | 	int compression; | ||||||
| }; | }; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue