From 8b3c0c8ba1459e15b23acb09945e2d2b8c4b3d17 Mon Sep 17 00:00:00 2001 From: "nicolas.marie" <nicolas.marie@ensiie.eu> Date: Thu, 21 Dec 2023 22:02:35 +0100 Subject: [PATCH] add __checkErrors function to reduce redondency --- Projet/CODE/apm/src/apm.c | 101 ++++++++++++--------------------- Projet/CODE/apm/src/apm_gpu.cu | 5 +- 2 files changed, 39 insertions(+), 67 deletions(-) diff --git a/Projet/CODE/apm/src/apm.c b/Projet/CODE/apm/src/apm.c index 546a1c5..7fa4baa 100644 --- a/Projet/CODE/apm/src/apm.c +++ b/Projet/CODE/apm/src/apm.c @@ -10,10 +10,27 @@ #include <unistd.h> #include <sys/time.h> #include <sys/stat.h> - +#include <stdarg.h> #define APM_DEBUG 0 +// can't be inline as it is a variadic function +void +__checkErrors(const int isBad, const char *fmt, ...) +{ + va_list args; + + if (isBad) + { + va_start(args, fmt); + vfprintf(stderr, fmt, args); + va_end(args); + fputc('\n', stderr); + exit(EXIT_FAILURE); + } +} + + char * read_input_file(char *filename, size_t *size) { @@ -26,15 +43,11 @@ read_input_file(char *filename, size_t *size) /* Open the text file */ fd = open(filename, O_RDONLY); - - if (fd == -1) - { - fprintf(stderr, "Unable to open the text file <%s>\n", filename); - return NULL; - } + __checkErrors(fd == -1, "Unable to open the text file <%s>\n", filename); /* Get the number of characters in the textfile */ - fstat(fd, &fs); + int stat = fstat(fd, &fs); + __checkErrors(stat < 0, "Stat of file <%s> failed\n", filename); fsize = fs.st_size; #if APM_DEBUG @@ -43,13 +56,8 @@ read_input_file(char *filename, size_t *size) /* Allocate data to copy the target text */ buf = malloc(fsize * sizeof(char)); - - if (buf == NULL) - { - fprintf(stderr, "Unable to allocate %ld byte(s) for main array\n", - fsize); - return NULL; - } + __checkErrors(buf == NULL, + "Unable to allocate %ld byte(s) for main array\n", fsize); do { @@ -58,14 +66,8 @@ read_input_file(char *filename, size_t *size) } while (read_bytes != 0); - if (total_bytes != fsize) - { - fprintf(stderr, - "Unable to copy %ld byte(s) from text file " - "(%ld byte(s) copied)\n", - fsize, total_bytes); - return NULL; - } + __checkErrors(total_bytes != fsize, "Unable to copy %ld byte(s) " + "from text file (%ld byte(s) copied)\n", fsize, total_bytes); #if APM_DEBUG printf("Number of read bytes: %ld\n", total_bytes); @@ -134,33 +136,18 @@ main(int argc, char **argv) filename = argv[2];/* Grab the filename containing the target text */ nb_patterns = argc - 3;/* Get the number of patterns to search for */ pattern = malloc(nb_patterns * sizeof(char *)); - - if (pattern == NULL)/*Fill the pattern*/ - { - fprintf(stderr, - "Unable to allocate array of pattern of size %ld\n", - nb_patterns); - return 1; - } + __checkErrors(pattern == NULL, "Unable to allocate array " + "of pattern of size %ld\n", nb_patterns); for (i = 0; i < nb_patterns; i++) /* Grab the patterns */ { int l; l = strlen(argv[i + 3]); - - if (l <= 0) - { - fprintf(stderr, "Error while parsing argument %ld\n", i + 3); - return 1; - } + __checkErrors(l <= 0, "Error while parsing argument %ld\n", i + 3); pattern[i] = (char *)malloc((l + 1) * sizeof(char)); - - if (pattern[i] == NULL) - { - fprintf(stderr, "Unable to allocate string of size %d\n", l); - return 1; - } + __checkErrors(pattern[i] == NULL, "Unable to allocate string " + "of size %d\n", l); strncpy(pattern[i], argv[i + 3], (l + 1)); } @@ -168,22 +155,13 @@ main(int argc, char **argv) printf("Approximate Pattern Mathing: " "looking for %ld pattern(s) in file %s w/ distance of %d\n", nb_patterns, filename, approx_factor); - buf = read_input_file(filename, &n_bytes); - if (buf == NULL) - { - fprintf(stderr, "Error: NULL pointer from reading input file."); - return 1; - } + buf = read_input_file(filename, &n_bytes); + __checkErrors(buf == NULL, "Error: NULL pointer from reading input file."); n_matches = malloc(nb_patterns * sizeof(size_t));/*Alloc the matches*/ - - if (n_matches == NULL) - { - fprintf(stderr, "Error: unable to allocate memory for %ldB\n", - nb_patterns * sizeof(int)); - return 1; - } + __checkErrors(n_matches == NULL, "Error: unable to " + "allocate memory for %ldB\n", nb_patterns * sizeof(int)); /***** * BEGIN MAIN LOOP @@ -197,14 +175,9 @@ main(int argc, char **argv) unsigned int *column; n_matches[i] = 0; column = malloc((size_pattern + 1) * sizeof(unsigned int)); - - if (column == NULL) - { - fprintf(stderr, - "Error: unable to allocate memory for column (%ldB)\n", - (size_pattern + 1) * sizeof(unsigned int)); - return 1; - } + __checkErrors(column == NULL, "Error: unable to " + "allocate memory for column (%ldB)\n", + (size_pattern + 1) * sizeof(unsigned int)); for (j = 0; j < n_bytes - size_pattern; j++) { diff --git a/Projet/CODE/apm/src/apm_gpu.cu b/Projet/CODE/apm/src/apm_gpu.cu index 95ecb2e..555e769 100644 --- a/Projet/CODE/apm/src/apm_gpu.cu +++ b/Projet/CODE/apm/src/apm_gpu.cu @@ -20,8 +20,7 @@ //If you get out of memory errors, you should reduce this value -inline -void +inline void __cudaCheckErrors(char const *msg) { cudaError_t cu_err; @@ -285,7 +284,7 @@ main(int argc, char **argv) __cudaCheckErrors("Unable to copy buffer onto device"); NB = (n_bytes / NTBB) + (((n_bytes % NTBB) > 0) ? 1 : 0); - + cudaMemset(result_dev, 0, sizeof(int)); __cudaCheckErrors("Unable to init result to 0 on device"); -- GitLab