diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2020-01-28 10:39:12 -0500 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2020-01-28 10:39:12 -0500 |
commit | 8b06e3e66a4cf26c02f9e0175263e1a561186c1b (patch) | |
tree | 8bac5ec5215066ef1fdff4edfd06857324b40f91 | |
parent | 38ef2cc6dff14f37050ea40ae62e4aea9863c805 (diff) | |
download | spmc-8b06e3e66a4cf26c02f9e0175263e1a561186c1b.tar.gz |
Remove md5sum function
* Fix a few glaring memory leaks
-rw-r--r-- | src/checksum.c | 40 | ||||
-rw-r--r-- | src/config_global.c | 2 | ||||
-rw-r--r-- | src/deps.c | 3 | ||||
-rw-r--r-- | src/environment.c | 2 | ||||
-rw-r--r-- | src/internal_cmd.c | 3 | ||||
-rw-r--r-- | src/manifest.c | 2 | ||||
-rw-r--r-- | src/mime.c | 4 | ||||
-rw-r--r-- | src/mirrors.c | 2 | ||||
-rw-r--r-- | src/rpath.c | 5 | ||||
-rw-r--r-- | src/spm.c | 6 |
10 files changed, 25 insertions, 44 deletions
diff --git a/src/checksum.c b/src/checksum.c index d2d0438..249d6cb 100644 --- a/src/checksum.c +++ b/src/checksum.c @@ -2,7 +2,6 @@ * @file checksum.c */ #include "spm.h" -#include <openssl/md5.h> #include <openssl/sha.h> /** @@ -10,43 +9,6 @@ * @param filename * @return */ -char *md5sum(const char *filename) { - size_t bytes = 0; - unsigned char digest[MD5_DIGEST_LENGTH]; - char buf[BUFSIZ]; - MD5_CTX context; - MD5_Init(&context); - FILE *fp = fopen(filename, "r"); - if (!fp) { - perror(filename); - return NULL; - } - char *result = calloc((MD5_DIGEST_LENGTH * 2) + 1, sizeof(char)); - if (!result) { - fclose(fp); - perror("MD5 result"); - return NULL; - } - - while ((bytes = fread(buf, sizeof(char), BUFSIZ, fp)) != 0) { - MD5_Update(&context, buf, bytes); - } - fclose(fp); - - MD5_Final(digest, &context); - char *rtmp = result; - for (int i = 0; i < MD5_DIGEST_LENGTH; i++) { - snprintf(&rtmp[i * 2], 3, "%02x", digest[i]); - } - - return result; -} - -/** - * - * @param filename - * @return - */ char *sha256sum(const char *filename) { size_t bytes = 0; unsigned char digest[SHA256_DIGEST_LENGTH]; @@ -77,4 +39,4 @@ char *sha256sum(const char *filename) { } return result; -}
\ No newline at end of file +} diff --git a/src/config_global.c b/src/config_global.c index 0c32ebb..5ef6faa 100644 --- a/src/config_global.c +++ b/src/config_global.c @@ -98,6 +98,8 @@ char *get_package_manifest(void) { char *ucd = get_user_conf_dir(); sprintf(template, "%s%c%s", ucd, DIRSEP, "manifest.dat"); + + free(ucd); return strdup(template); /* @@ -184,12 +184,14 @@ int dep_all(Dependencies **deps, const char *_package) { if (!tmpdir) { perror(template); fprintf(SYSERROR); + free(package); free(suffix); return -1; } if (tar_extract_file(package, ".SPM_DEPENDS", tmpdir) < 0) { perror(package); fprintf(SYSERROR); + free(package); free(suffix); return -1; } @@ -211,6 +213,7 @@ int dep_all(Dependencies **deps, const char *_package) { // Remove temporary data unlink(depfile); rmdir(tmpdir); + free(package); free(suffix); return 0; } diff --git a/src/environment.c b/src/environment.c index 4c8fb14..2d9ebd4 100644 --- a/src/environment.c +++ b/src/environment.c @@ -368,7 +368,7 @@ void runtime_set(RuntimeEnv *env, const char *_key, const char *_value) { else { env->num_alloc++; env->env = reallocarray(env->env, sizeof(char *), env->num_alloc); - env->env[env->num_inuse] = (char *)calloc(strlen(now) + 1, sizeof(char)); + //env->env[env->num_inuse] = (char *)calloc(strlen(now) + 1, sizeof(char)); env->env[env->num_inuse] = now; env->num_inuse++; } diff --git a/src/internal_cmd.c b/src/internal_cmd.c index 530d008..bcd0231 100644 --- a/src/internal_cmd.c +++ b/src/internal_cmd.c @@ -86,7 +86,7 @@ int mkprefix_interface(int argc, char **argv) { * */ void mkmanifest_interface_usage(void) { - printf("usage: mkmanifest [package_dir] [output_dir]"); + printf("usage: mkmanifest [package_dir] [output_dir]\n"); } /** @@ -158,6 +158,7 @@ int mirror_clone_interface(int argc, char **argv) { } mirror_clone(manifest, path); + manifest_free(manifest); return 0; } /** diff --git a/src/manifest.c b/src/manifest.c index e8ce5b2..9926fa5 100644 --- a/src/manifest.c +++ b/src/manifest.c @@ -100,7 +100,7 @@ Manifest *manifest_from(const char *package_dir) { */ void manifest_free(Manifest *info) { for (size_t i = 0; i < info->records; i++) { - if (info->packages[i]->requirements) { + if (info->packages[i]->requirements != NULL) { for (int j = 0; info->packages[i]->requirements[j] != NULL; j++) { free(info->packages[i]->requirements[j]); } @@ -69,8 +69,8 @@ Mime *file_mimetype(const char *filename) { type = (Mime *)calloc(1, sizeof(Mime)); type->origin = origin; - type->type = strdup(what); - type->charset = strdup(charset); + type->type = what; + type->charset = charset; split_free(output); split_free(parts); diff --git a/src/mirrors.c b/src/mirrors.c index 6b294aa..d551842 100644 --- a/src/mirrors.c +++ b/src/mirrors.c @@ -96,6 +96,7 @@ void mirror_clone(Manifest *info, char *_dest) { char *checksum = sha256sum(path); if (strcmp(checksum, info->packages[i]->checksum_sha256) == 0) { printf("Skipped: %s\n", archive); + //free(checksum); free(archive); free(path); continue; @@ -116,5 +117,6 @@ void mirror_clone(Manifest *info, char *_dest) { fprintf(stderr, "WARNING: HTTP(%ld, %s): %s\n", response, http_response_str(response), info->origin); } free(dest); + free(datafile); printf("done!\n"); }
\ No newline at end of file diff --git a/src/rpath.c b/src/rpath.c index a6b6b6c..04d810e 100644 --- a/src/rpath.c +++ b/src/rpath.c @@ -128,10 +128,13 @@ char *rpath_generate(const char *_filename) { } char *nearest_lib = rpath_autodetect(filename); if (!nearest_lib) { + free(filename); return NULL; } char *result = (char *)calloc(strlen(origin) + strlen(nearest_lib) + 1, sizeof(char)); if (!result) { + free(filename); + free(nearest_lib); return NULL; } sprintf(result, "%s%s", origin, nearest_lib); @@ -227,10 +230,12 @@ char *rpath_autodetect(const char *filename) { if (access(tmp, F_OK) == 0) { strcat(relative, "lib"); has_real_libdir = 1; // gate for memory allocation below + free(visit); break; } // Reaching the top of the file system indicates our search for a lib directory failed else if (strcmp(visit, "/") == 0) { + free(visit); break; } @@ -174,6 +174,12 @@ int main(int argc, char *argv[], char *arge[]) { runtime_set(rt, "LDFLAGS", "-Wl,-rpath $SPM_LIB:$${ORIGIN}/lib -L$SPM_LIB $LDFLAGS"); runtime_apply(rt); + free(spm_binpath); + free(spm_includepath); + free(spm_libpath); + free(spm_datapath); + free(spm_manpath); + if (RUNTIME_INSTALL) { Dependencies *deps = NULL; dep_init(&deps); |