From 71d6f9e01af2162b0d1b5796189a2b5a6e65b6f8 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Thu, 16 Sep 2021 18:28:22 +0200 Subject: Makefile and code improvements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- Makefile | 11 ++++++----- config.mk | 8 +++++--- median.c | 22 ++++++++++++++-------- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index ce35988..e12763a 100644 --- a/Makefile +++ b/Makefile @@ -3,13 +3,14 @@ CONFIGFILE = config.mk include $(CONFIGFILE) + all: median -median: median.o - $(CC) -o $@ median.o $(LDFLAGS) +.o: + $(CC) -o $@ $< $(LDFLAGS) -median.o: median.c - $(CC) -c -o $@ median.c $(CFLAGS) $(CPPFLAGS) +.c.o: + $(CC) -c -o $@ $< $(CFLAGS) $(CPPFLAGS) check: median test "$$(printf '%s\n' 1 5 2 | ./median)" = 2 @@ -36,7 +37,7 @@ uninstall: -rm -f -- "$(DESTDIR)$(MANPREFIX)/man1/median.1" clean: - -rm -f -- median *.o + -rm -f -- median *.o *.su .SUFFIXES: .SUFFIXES: .c .o diff --git a/config.mk b/config.mk index 2e90419..aa81003 100644 --- a/config.mk +++ b/config.mk @@ -1,6 +1,8 @@ PREFIX = /usr MANPREFIX = $(PREFIX)/share/man -CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -CFLAGS = -std=c99 -Wall -O2 -LDFLAGS = -s +CC = cc + +CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 +CFLAGS = -std=c99 -Wall -O2 +LDFLAGS = -s diff --git a/median.c b/median.c index d282426..693b8fd 100644 --- a/median.c +++ b/median.c @@ -6,6 +6,12 @@ #include #include +#if defined(__GNUC__) +# define PURE __attribute__((__pure__)) +#else +# define PURE +#endif + struct group { char *key; @@ -24,7 +30,7 @@ static struct group groups_head; static struct group groups_tail; -static int +PURE static int isnumerical(const char *s) { if (*s == '+' || *s == '-') @@ -42,11 +48,11 @@ isnumerical(const char *s) } -static int +PURE static int cmp_num(const void *apv, const void *bpv) { - const char *a = *(const char **)apv; - const char *b = *(const char **)bpv; + const char *a = *(const char *const *)apv; + const char *b = *(const char *const *)bpv; int mul = 1; size_t an = 0, bn = 0, i; @@ -100,8 +106,8 @@ cmp_num(const void *apv, const void *bpv) static int cmp_str(const void *apv, const void *bpv) { - const char *a = *(const char **)apv; - const char *b = *(const char **)bpv; + const char *a = *(const char *const *)apv; + const char *b = *(const char *const *)bpv; return strcmp(a, b); } @@ -114,7 +120,7 @@ avg(char *a, const char *b) for (i = 0; a[i]; i++) { val = (a[i] & 15) + (b[i] & 15); carry = val & 1; - a[i] = (val >> 1) | '0'; + a[i] = (char)((val >> 1) | '0'); } return carry; } @@ -128,7 +134,7 @@ subavg(char *a, const char *b) for (i = 0; a[i]; i++) { val = (a[i] & 15) - (b[i] & 15); carry = val & 1; - a[i] = (val >> 1) | '0'; + a[i] = (char)((val >> 1) | '0'); } return carry; } -- cgit v1.2.3-70-g09d2