full adaptation to c99 master
authorLaurent Mazet <mazet@softndesign.org>
Sun, 13 Apr 2025 13:36:55 +0000 (15:36 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Sun, 13 Apr 2025 13:36:55 +0000 (15:36 +0200)
bf.c
makefile

diff --git a/bf.c b/bf.c
index aa1ad679a9e056b529066e559c5caf0625e9b8fa..8400309140f4b205cce4101099a1c679a45e4913 100644 (file)
--- a/bf.c
+++ b/bf.c
@@ -55,14 +55,13 @@ int usage (int ret)
 /* main process */
 
 int process (char *buffer, int nb, FILE *out) {
-    int i;
 
-    for (i = 0; i < nb; i++) {
+    for (int i = 0; i < nb; i++) {
         if (buffer[i] == 0) {
             break;
         }
 
-        VERBOSE (DEBUG, fprintf (stderr, "%s: p=%d, buffer='%s', memory=[ ", progname, p, buffer + i); int _i; for (_i = 0; _i < MEMSIZE; _i++) fprintf (stderr," %d", mem[_i]); fprintf (stderr," ]\n"));
+        VERBOSE (DEBUG, fprintf (stderr, "%s: p=%d, buffer='%s', memory=[ ", progname, p, buffer + i); for (int _i = 0; _i < MEMSIZE; _i++) fprintf (stderr," %d", mem[_i]); fprintf (stderr," ]\n"));
 
         switch (buffer[i]) {
             case '>': /* increase pointer */
@@ -143,7 +142,7 @@ int process (char *buffer, int nb, FILE *out) {
                 VERBOSE (WARNING, fprintf (stderr, "%s: can't understand '%c'\n", progname, buffer[i]));
         }
         
-        //VERBOSE (DEBUG, int _i; fprintf (stderr, "%s: p: %d mem:", progname, p); for (_i = 0; _i < MEMSIZE; _i++) fprintf (stderr, " %d", mem[_i]); fprintf (stderr, "\n"));
+        //VERBOSE (DEBUG, fprintf (stderr, "%s: p: %d mem:", progname, p); for (int _i = 0; _i < MEMSIZE; _i++) fprintf (stderr, " %d", mem[_i]); fprintf (stderr, "\n"));
 
     }
 
@@ -157,7 +156,6 @@ int main (int argc, char *argv[])
     char *input = NULL;
     char *output = NULL;
     char *buffer = NULL;
-    int i;
     int n = 0;
     int size = 0;
     FILE *fid = NULL;
@@ -175,9 +173,7 @@ int main (int argc, char *argv[])
     while ((c = getopt(argc, argv, "e:i:m:o:hv:")) != EOF) {
         switch (c) {
         case 'e':
-            if (buffer) {
-                free (buffer);
-            }
+            free (buffer);
             buffer = strdup (optarg);
             CHECKALLOC (buffer);
             size = strlen (buffer) + 1;
@@ -186,7 +182,7 @@ int main (int argc, char *argv[])
             input = optarg;
             break;
         case 'm':
-            for (i = 0; i < MEMSIZE; i++) {
+            for (int i = 0; i < MEMSIZE; i++) {
                 if (optarg) {
                     mem[i] = strtol (optarg, &optarg, 10);
                     VERBOSE (DEBUG, fprintf (stderr, "%s: mem[%d] = %d\n", progname, i, mem[i]));
@@ -194,6 +190,7 @@ int main (int argc, char *argv[])
             }
             if (*optarg != 0) {
                 VERBOSE (WARNING, fprintf (stderr, "%s: too many memory values or incorrect value\n", progname));
+                free (buffer);
                 return 1;
             }
             break;
@@ -205,11 +202,13 @@ int main (int argc, char *argv[])
             break;
         case 'h':
         default:
+            free (buffer);
             return usage (c != 'h');
         }
     }
     if (argc - optind != 0) {
         VERBOSE (ERROR, fprintf (stderr, "%s: invalid option -- %s\n", progname, argv[optind]));
+        free (buffer);
         return usage (1);
     }
 
@@ -218,6 +217,7 @@ int main (int argc, char *argv[])
         fid = fopen (input, "r");
         if (fid == NULL) {
             VERBOSE (ERROR, fprintf (stderr, "%s: can't open file '%s' for reading\n", progname, input));
+            free (buffer);
             return 1;
         }
     } else if (buffer == NULL) {
@@ -231,14 +231,17 @@ int main (int argc, char *argv[])
             CHECKALLOC (buffer);
             memset (buffer + size, 0, BUFSIZE);
             n = fread (buffer + size, 1, BUFSIZE, fid);
-            if ((n == 0) && (errno != 0)) {
+            if (ferror (fid)) {
                 VERBOSE (ERROR, fprintf (stderr, "%s: can't read data from file '%s'\n", progname, input));
+                if (fid != stdin) {
+                    fclose (fid);
+                }
+                free (buffer);
                 return 1;
             }
             size += BUFSIZE;
         }
 
-        /* close input file */
         if (fid != stdin) {
             fclose (fid);
         }
@@ -252,7 +255,7 @@ int main (int argc, char *argv[])
         fid = fopen (output, "w");
         if (fid == NULL) {
             VERBOSE (ERROR, fprintf (stderr, "%s: can't open file '%s' for writing\n", progname, output));
-            if (buffer) free (buffer);
+            free (buffer);
             return 1;
         }
     } else {
@@ -267,11 +270,10 @@ int main (int argc, char *argv[])
         fclose (fid);
     }
 
-    /* free buffer */
-    free (buffer);
 
-    VERBOSE (INFO, fprintf (stdout, "\nmemory:"); int _i; for (_i = 0; _i < MEMSIZE; _i++) fprintf (stdout," %d", (int)mem[_i]); fprintf (stdout,"\n"));
+    VERBOSE (INFO, fprintf (stdout, "\nmemory:"); for (int _i = 0; _i < MEMSIZE; _i++) fprintf (stdout," %d", (int)mem[_i]); fprintf (stdout,"\n"));
 
+    free (buffer);
     return rc;
 }
 
index dfe04eaf45a39b86ab9cc8d990d4748008dbcec4..09ecb8bc309abe5c9bba31812b7dfecc3743bcb9 100644 (file)
--- a/makefile
+++ b/makefile
@@ -5,12 +5,14 @@ CC = gcc
 #INCLUDES = -I../debug -D__MEMORY_ALLOCATION__
 INCLUDES =
 OFLAGS  = -O4 -Os
+#OFLAGS  = -O0
 #OFLAGS  = -O4 -ffast-math -finline-functions
 #OFLAGS  = -O4 -finline-functions
 #OFLAGS += -mtune=pentium3 -mmmx -msse -msse2 -m3dnow
 #OFLAGS += -minline-all-stringops -fsingle-precision-constant
 #OFLAGS += -malign-double
 CFLAGS += -W -Wall -Wextra -g
+#CFLAGS += -std=c99 -D_XOPEN_SOURCE=500
 CFLAGS += $(OFLAGS) $(INCLUDES) $(OPTIONS)
 LDFLAGS += -g $(LDOPTS) $(OPTIONS)
 
@@ -20,8 +22,11 @@ ifneq (, $(findstring linux, $(MAKE_HOST)))
 # Linux
 else ifneq (, $(findstring mingw, $(MAKE_HOST)))
 # Windows MinGw
+CFLAGS += -DWIN32
+#LDLIBS += -lws2_32
 LDOPT = winlnk
 else ifneq (, $(findstring cygwin, $(MAKE_HOST)))
+CFLAGS += -DWIN32
 # Windows CygWin
 LDOPT = winlnk
 else ifneq (, $(findstring msdos, $(MAKE_HOST)))
@@ -32,8 +37,7 @@ endif
 
 # Targets
 
-ALLEXE  =
-ALLEXE += bf
+ALLEXE  = $(shell for f in *.c; do grep -q '/\*\slinker:' $$f && echo $${f/.c}; done)
 
 SHELL = bash
 
@@ -62,6 +66,11 @@ GETCOMMENTS = awk '/\/\*\s*$(1):/,/\*\// { sub(/.*\/\*\s*$(1):/, ""); sub (/\s*\
 all: depends
        $(MAKE) $(ALLEXE:%=%.exe)
 
+analyze:
+       make purge
+       scan-build make
+       #scan-build -stats make
+
 count:
        wc $(wildcard *.c *.h) $(MAKEFILE_LIST)
 
@@ -114,7 +123,7 @@ gcov_%:
        touch gcov
        rm -f gcov $(wildcard *.gcda *.gcno)
        $(MAKE) purge
-       grep '#####' *.c.gcov || true
+       grep '^ *#####' *.c.gcov || true
 
 gprof_%:
        $(MAKE) purge
@@ -148,6 +157,7 @@ test_%: %.test %.exe
          eval $$test; \
          [ $$? -eq 0 ] && echo -e "\033[1;32mSUCCESS\033[0;0m" \
                        || { echo -e "\033[1;31mFAILED\033[0;0m"; RC=1; }; \
+         test "$$RC" = 1 -a "$(STOP)" = 1 && break; \
        done; \
        test "$$RC" -ne 1
 
@@ -181,7 +191,7 @@ valgrind_%: %.exe
 
 ## Phony
 
-.PHONY: all clean count depends gcovs purge tests
+.PHONY: all analyze clean count depends gcovs purge tests
 
 ## Precious