diff options
| -rw-r--r-- | include/strlist.h | 6 | ||||
| -rw-r--r-- | src/conda.c | 4 | ||||
| -rw-r--r-- | src/deliverable.c | 20 | ||||
| -rw-r--r-- | src/environment.c | 8 | ||||
| -rw-r--r-- | src/strlist.c | 92 | 
5 files changed, 71 insertions, 59 deletions
| diff --git a/include/strlist.h b/include/strlist.h index d76d069..2d3c3cf 100644 --- a/include/strlist.h +++ b/include/strlist.h @@ -31,17 +31,17 @@ unsigned char strlist_item_as_uchar(struct StrList *pStrList, size_t index);  char strlist_item_as_char(struct StrList *pStrList, size_t index);  char *strlist_item_as_str(struct StrList *pStrList, size_t index);  char *strlist_item(struct StrList *pStrList, size_t index); -void strlist_set(struct StrList *pStrList, size_t index, char *value); +void strlist_set(struct StrList **pStrList, size_t index, char *value);  size_t strlist_count(struct StrList *pStrList);  void strlist_reverse(struct StrList *pStrList);  void strlist_sort(struct StrList *pStrList, unsigned int mode);  int strlist_append_file(struct StrList *pStrList, char *path, ReaderFn *readerFn);  void strlist_append_strlist(struct StrList *pStrList1, struct StrList *pStrList2); -void strlist_append(struct StrList *pStrList, char *str); +void strlist_append(struct StrList **pStrList, char *str);  void strlist_append_array(struct StrList *pStrList, char **arr);  void strlist_append_tokenize(struct StrList *pStrList, char *str, char *delim);  struct StrList *strlist_copy(struct StrList *pStrList);  int strlist_cmp(struct StrList *a, struct StrList *b); -void strlist_free(struct StrList *pStrList); +void strlist_free(struct StrList **pStrList);  #endif //OMC_STRLIST_H diff --git a/src/conda.c b/src/conda.c index 332049d..8b370a8 100644 --- a/src/conda.c +++ b/src/conda.c @@ -186,11 +186,11 @@ int conda_check_required() {          }          if (found < (sizeof(tools) / sizeof(*tools)) - 1) {              guard_free(cmd_out); -            guard_strlist_free(result); +            guard_strlist_free(&result);              return 1;          }          guard_free(cmd_out); -        guard_strlist_free(result); +        guard_strlist_free(&result);      } else {          msg(OMC_MSG_ERROR | OMC_MSG_L2, "The base package requirement check could not be performed\n");          return 2; diff --git a/src/deliverable.c b/src/deliverable.c index fb159f7..3d638cb 100644 --- a/src/deliverable.c +++ b/src/deliverable.c @@ -184,13 +184,13 @@ void delivery_free(struct Delivery *ctx) {      guard_free(ctx->deploy.docker.test_script);      guard_free(ctx->deploy.docker.registry);      guard_free(ctx->deploy.docker.image_compression); -    guard_strlist_free(ctx->deploy.docker.tags); -    guard_strlist_free(ctx->deploy.docker.build_args); +    guard_strlist_free(&ctx->deploy.docker.tags); +    guard_strlist_free(&ctx->deploy.docker.build_args);      for (size_t i = 0; i < sizeof(ctx->deploy.jfrog) / sizeof(ctx->deploy.jfrog[0]); i++) {          guard_free(ctx->deploy.jfrog[i].repo);          guard_free(ctx->deploy.jfrog[i].dest); -        guard_strlist_free(ctx->deploy.jfrog[i].files); +        guard_strlist_free(&ctx->deploy.jfrog[i].files);      }  } @@ -887,7 +887,7 @@ struct StrList *delivery_build_wheels(struct Delivery *ctx) {              {                  if (python_exec("-m build -w ")) {                      fprintf(stderr, "failed to generate wheel package for %s-%s\n", ctx->tests[i].name, ctx->tests[i].version); -                    guard_strlist_free(result); +                    strlist_free(&result);                      return NULL;                  } else {                      DIR *dp; @@ -895,13 +895,13 @@ struct StrList *delivery_build_wheels(struct Delivery *ctx) {                      dp = opendir("dist");                      if (!dp) {                          fprintf(stderr, "wheel artifact directory does not exist: %s\n", ctx->storage.wheel_artifact_dir); -                        guard_strlist_free(result); +                        strlist_free(&result);                          return NULL;                      }                      while ((rec = readdir(dp)) != NULL) {                          if (strstr(rec->d_name, ctx->tests[i].name)) { -                            strlist_append(result, rec->d_name); +                            strlist_append(&result, rec->d_name);                          }                      }                      closedir(dp); @@ -1222,10 +1222,10 @@ void delivery_defer_packages(struct Delivery *ctx, int type) {              }              printf("BUILD FOR HOST\n"); -            strlist_append(deferred, name); +            strlist_append(&deferred, name);          } else {              printf("USE EXISTING\n"); -            strlist_append(filtered, name); +            strlist_append(&filtered, name);          }      } @@ -1233,10 +1233,10 @@ void delivery_defer_packages(struct Delivery *ctx, int type) {          msg(OMC_MSG_WARN | OMC_MSG_L2, "No %s packages were filtered by test definitions\n", mode);      } else {          if (DEFER_CONDA == type) { -            strlist_free(ctx->conda.conda_packages); +            strlist_free(&ctx->conda.conda_packages);              ctx->conda.conda_packages = strlist_copy(filtered);          } else if (DEFER_PIP == type) { -            strlist_free(ctx->conda.pip_packages); +            strlist_free(&ctx->conda.pip_packages);              ctx->conda.pip_packages = strlist_copy(filtered);          }      } diff --git a/src/environment.c b/src/environment.c index 525e1da..824b447 100644 --- a/src/environment.c +++ b/src/environment.c @@ -149,7 +149,7 @@ RuntimeEnv *runtime_copy(char **env) {      rt = strlist_init();      for (size_t i = 0; i < env_count; i++) { -        strlist_append(rt, env[i]); +        strlist_append(&rt, env[i]);      }      return rt;  } @@ -411,9 +411,9 @@ void runtime_set(RuntimeEnv *env, const char *_key, char *_value) {      char *now = join((char *[]) {key, value, NULL}, "=");      if (key_offset < 0) { -        strlist_append(env, now); +        strlist_append(&env, now);      } else { -        strlist_set(env, key_offset, now); +        strlist_set(&env, key_offset, now);      }      guard_free(now);      guard_free(key); @@ -439,5 +439,5 @@ void runtime_free(RuntimeEnv *env) {      if (env == NULL) {          return;      } -    strlist_free(env); +    strlist_free(&env);  } diff --git a/src/strlist.c b/src/strlist.c index 50bf2de..f0c616e 100644 --- a/src/strlist.c +++ b/src/strlist.c @@ -10,19 +10,20 @@   *   * @param pStrList `StrList`   */ -void strlist_free(struct StrList *pStrList) { -    if (pStrList == NULL) { +void strlist_free(struct StrList **pStrList) { +    if (!(*pStrList)) {          return;      } -    for (size_t i = 0; i < pStrList->num_inuse; i++) { -        if (pStrList->data[i]) { -            guard_free(pStrList->data[i]); + +    for (size_t i = 0; i < (*pStrList)->num_inuse; i++) { +        if ((*pStrList)->data[i]) { +            guard_free((*pStrList)->data[i]);          }      } -    if (pStrList->data) { -        guard_free(pStrList->data); +    if ((*pStrList)->data) { +        guard_free((*pStrList)->data);      } -    guard_free(pStrList); +    guard_free((*pStrList));  }  /** @@ -30,26 +31,26 @@ void strlist_free(struct StrList *pStrList) {   * @param pStrList `StrList`   * @param str   */ -void strlist_append(struct StrList *pStrList, char *str) { +void strlist_append(struct StrList **pStrList, char *str) {      char **tmp = NULL;      if (pStrList == NULL) {          return;      } -    tmp = realloc(pStrList->data, (pStrList->num_alloc + 1) * sizeof(char *)); +    tmp = realloc((*pStrList)->data, ((*pStrList)->num_alloc + 1) * sizeof(char *));      if (tmp == NULL) {          guard_strlist_free(pStrList);          perror("failed to append to array");          exit(1); -    } else if (tmp != pStrList->data) { -        pStrList->data = tmp; -    } -    pStrList->data[pStrList->num_inuse] = strdup(str); -    pStrList->data[pStrList->num_alloc] = NULL; -    strcpy(pStrList->data[pStrList->num_inuse], str); -    pStrList->num_inuse++; -    pStrList->num_alloc++; +    } else if (tmp != (*pStrList)->data) { +        (*pStrList)->data = tmp; +    } +    (*pStrList)->data[(*pStrList)->num_inuse] = strdup(str); +    (*pStrList)->data[(*pStrList)->num_alloc] = NULL; +    strcpy((*pStrList)->data[(*pStrList)->num_inuse], str); +    (*pStrList)->num_inuse++; +    (*pStrList)->num_alloc++;  }  static int reader_strlist_append_file(size_t lineno, char **line) { @@ -97,7 +98,7 @@ int strlist_append_file(struct StrList *pStrList, char *_path, ReaderFn *readerF      }      for (size_t record = 0; data[record] != NULL; record++) { -        strlist_append(pStrList, data[record]); +        strlist_append(&pStrList, data[record]);          guard_free(data[record]);      }      guard_free(data); @@ -128,7 +129,7 @@ void strlist_append_strlist(struct StrList *pStrList1, struct StrList *pStrList2      count = strlist_count(pStrList2);      for (size_t i = 0; i < count; i++) {          char *item = strlist_item(pStrList2, i); -        strlist_append(pStrList1, item); +        strlist_append(&pStrList1, item);      }  } @@ -142,7 +143,7 @@ void strlist_append_strlist(struct StrList *pStrList1, struct StrList *pStrList2           return;       }       for (size_t i = 0; arr[i] != NULL; i++) { -         strlist_append(pStrList, arr[i]); +         strlist_append(&pStrList, arr[i]);       }   } @@ -161,7 +162,7 @@ void strlist_append_strlist(struct StrList *pStrList1, struct StrList *pStrList2       token = split(str, delim, 0);       if (token) {           for (size_t i = 0; token[i] != NULL; i++) { -             strlist_append(pStrList, token[i]); +             strlist_append(&pStrList, token[i]);           }           GENERIC_ARRAY_FREE(token);       } @@ -173,13 +174,18 @@ void strlist_append_strlist(struct StrList *pStrList1, struct StrList *pStrList2   * @return `StrList` copy   */  struct StrList *strlist_copy(struct StrList *pStrList) { -    struct StrList *result = strlist_init(); -    if (pStrList == NULL || result == NULL) { +    struct StrList *result; +    if (pStrList == NULL) { +        return NULL; +    } + +    result = strlist_init(); +    if (!result) {          return NULL;      }      for (size_t i = 0; i < strlist_count(pStrList); i++) { -        strlist_append(result, strlist_item(pStrList, i)); +        strlist_append(&result, strlist_item(pStrList, i));      }      return result;  } @@ -278,7 +284,13 @@ void strlist_reverse(struct StrList *pStrList) {   * @return   */  size_t strlist_count(struct StrList *pStrList) { -    return pStrList->num_inuse; +    size_t result; +    if (pStrList != NULL) { +        result = pStrList->num_inuse; +    } else { +        result = 0; +    } +    return result;  }  /** @@ -287,26 +299,26 @@ size_t strlist_count(struct StrList *pStrList) {   * @param value string   * @return   */ -void strlist_set(struct StrList *pStrList, size_t index, char *value) { +void strlist_set(struct StrList **pStrList, size_t index, char *value) {      char *tmp = NULL;      char *item = NULL; -    if (pStrList == NULL || index > strlist_count(pStrList)) { -        return; -    } -    if ((item = strlist_item(pStrList, index)) == NULL) { +    if (*pStrList == NULL || index > strlist_count(*pStrList)) {          return;      } +      if (value == NULL) { -        pStrList->data[index] = NULL; +        (*pStrList)->data[index] = NULL;      } else { -        if ((tmp = realloc(pStrList->data[index], strlen(value) + 1)) == NULL) { +        tmp = realloc((*pStrList)->data[index], (strlen(value) + 1) * sizeof(char *)); +        if (!tmp) {              perror("realloc strlist_set replacement value");              return; +        } else if (tmp != (*pStrList)->data[index]) { +            (*pStrList)->data[index] = tmp;          } -        pStrList->data[index] = tmp; -        memset(pStrList->data[index], '\0', strlen(value) + 1); -        strncpy(pStrList->data[index], value, strlen(value)); +        memset((*pStrList)->data[index], '\0', strlen(value) + 1); +        strncpy((*pStrList)->data[index], value, strlen(value));      }  } @@ -317,10 +329,10 @@ void strlist_set(struct StrList *pStrList, size_t index, char *value) {   * @return string   */  char *strlist_item(struct StrList *pStrList, size_t index) { -    if (pStrList == NULL || index > strlist_count(pStrList)) { -        return NULL; +    if (pStrList && pStrList->data && pStrList->data[index]) { +        return pStrList->data[index];      } -    return pStrList->data[index]; +    return NULL;  }  /** @@ -471,7 +483,7 @@ struct StrList *strlist_init() {      struct StrList *pStrList = calloc(1, sizeof(struct StrList));      if (pStrList == NULL) {          perror("failed to allocate array"); -        exit(errno); +        return NULL;      }      pStrList->num_inuse = 0;      pStrList->num_alloc = 1; | 
