From 292c5fb43f5402bcbd2c26607543f5bfc815e8e5 Mon Sep 17 00:00:00 2001 From: "Douglas B. Rumbaugh" Date: Fri, 19 Sep 2025 16:54:04 -0400 Subject: Portability and Bugfixes --- include/cdf.h | 12 ++++-------- include/cumsum.h | 12 ++++++------ src/cdf.c | 15 +++++++-------- src/cumsum.c | 12 +++++------- 4 files changed, 22 insertions(+), 29 deletions(-) diff --git a/include/cdf.h b/include/cdf.h index 6c218cf..a65caa4 100644 --- a/include/cdf.h +++ b/include/cdf.h @@ -4,6 +4,9 @@ #ifndef H_CDF #define H_CDF +#define _GNU_SOURCE /* Enable getline on Linux */ +#define _POSIX_C_SOURCE 200809L /* Enable POSIX features */ + #include #include #include @@ -11,6 +14,7 @@ #include #include #include +#include #include typedef union { @@ -28,13 +32,5 @@ static int parse_options(int argc, char*const* argv); static void help(); static int process_data(FILE *file); static DistRecord *expand_array(DistRecord *records, size_t *capacity); -static int read_data_int(DistRecord **records, size_t capacity, FILE *file); -static int read_data_uint(DistRecord **records, size_t capacity, FILE *file); -static int read_data_fp(DistRecord **records, size_t capacity, FILE *file); -static int print_data_fp(DistRecord *records, long double *freqs, size_t cnt); -static int print_data_int(DistRecord *records, long double *freqs, size_t cnt); -static int print_data_uint(DistRecord *records, long double *freqs, size_t cnt); #endif - - diff --git a/include/cumsum.h b/include/cumsum.h index 50ff0b1..1d8387b 100644 --- a/include/cumsum.h +++ b/include/cumsum.h @@ -1,8 +1,11 @@ /* */ -#ifndef H_CDF -#define H_CDF +#ifndef H_CUMSUM +#define H_CUMSUM + +#define _GNU_SOURCE /* Enable getline on Linux */ +#define _POSIX_C_SOURCE 200809L /* Enable POSIX features */ #include #include @@ -12,6 +15,7 @@ #include #include #include +#include #include typedef union { @@ -25,10 +29,6 @@ static void help(); static int process_data(FILE *file); static void print_sum(Number sum); -static int read_data_int(FILE *file, Number *num); -static int read_data_uint(FILE *file, Number *num); -static int read_data_fp(FILE *file, Number *num); - #endif diff --git a/src/cdf.c b/src/cdf.c index 2b26e27..385ff21 100644 --- a/src/cdf.c +++ b/src/cdf.c @@ -73,11 +73,11 @@ static DistRecord *expand_array(DistRecord *records, size_t *capacity) { static int parse_line(DistRecord *record, char *line) { if (ARG_FP_INPUT) { - return sscanf(line, "%lld %lf", &record->count, &record->data.d); + return sscanf(line, "%" SCNu64 " %lf", &record->count, &record->data.d); } else if (ARG_UINT_INPUT) { - return sscanf(line, "%lld %llu", &record->count, &record->data.u); + return sscanf(line, "%" SCNu64 " %" SCNu64, &record->count, &record->data.u); } else { - return sscanf(line, "%lld %lld", &record->count, &record->data.i); + return sscanf(line, "%" SCNu64 " %" SCNd64, &record->count, &record->data.i); } } @@ -107,9 +107,9 @@ static void print_record(long double freq, DistRecord *record) { if (ARG_FP_INPUT) { fprintf(stdout, "%.15Lf\t%lf\n", freq, record->data.d); } else if (ARG_UINT_INPUT) { - fprintf(stdout, "%.15Lf\t%llu\n", freq, record->data.u); + fprintf(stdout, "%.15Lf\t%" PRIu64 "\n", freq, record->data.u); } else { - fprintf(stdout, "%.15Lf\t%lld\n", freq, record->data.i); + fprintf(stdout, "%.15Lf\t%" PRId64 "\n", freq, record->data.i); } } @@ -150,7 +150,7 @@ static int process_data(FILE *file) { /* calculate total sum of counts */ uint64_t total_count = 0; - for (size_t i = 0; i < cnt; i++) { + for (size_t i = 0; i < (size_t)cnt; i++) { total_count += records[i].count; } @@ -161,7 +161,7 @@ static int process_data(FILE *file) { goto free_freqs; } - for (size_t i = 0; i < cnt; i++) { + for (size_t i = 0; i < (size_t)cnt; i++) { freqs[i] = (long double)(records[i].count) / (long double)(total_count); } @@ -209,7 +209,6 @@ int main(int argc, char **argv) { rc = EXIT_FAILURE; } -close_file: if (input_file != stdin) { fclose(input_file); } diff --git a/src/cumsum.c b/src/cumsum.c index 99c7651..ff8ab73 100644 --- a/src/cumsum.c +++ b/src/cumsum.c @@ -44,7 +44,7 @@ static int parse_options(int argc, char *const *argv) { case 'w': ARG_WINDOW_SIZE = atol(optarg); if (ARG_WINDOW_SIZE <= 0) { - fprintf(stderr, "Error: invalid window size: %lld. Must be > 0.\n", + fprintf(stderr, "Error: invalid window size: %" PRId64 ". Must be > 0.\n", ARG_WINDOW_SIZE); error = true; break; @@ -95,9 +95,9 @@ void print_sum(Number sum) { if (ARG_FP_INPUT) { fprintf(stdout, "%lf\n", sum.d); } else if (ARG_UINT_INPUT) { - fprintf(stdout, "%lld\n", sum.u); + fprintf(stdout, "%" PRIu64 "\n", sum.u); } else { - fprintf(stdout, "%lld\n", sum.i); + fprintf(stdout, "%" PRId64 "\n", sum.i); } } @@ -108,7 +108,7 @@ static int get_next_number(FILE *file, Number *num) { int rc = fscanf(file, "%511s", buffer); if (rc == EOF) { return 0; - } else if (rc != -1) { + } else if (rc != 1) { return -1; } @@ -152,7 +152,7 @@ void accumulate_number(Number *sum, Number num) { void print_buffer_sum() { Number sum = {}; - for (size_t i = 0; i < ARG_WINDOW_SIZE; i++) { + for (int64_t i = 0; i < ARG_WINDOW_SIZE; i++) { accumulate_number(&sum, window_buffer[i]); } print_sum(sum); @@ -191,7 +191,6 @@ static int process_data(FILE *file) { print_sum(sum); } -process_data_end: return rc; } @@ -227,7 +226,6 @@ int main(int argc, char **argv) { rc = EXIT_FAILURE; } -close_file: if (input_file != stdin) { fclose(input_file); } -- cgit v1.2.3