]> git.sur5r.net Git - cc65/commitdiff
Fixed portability problems with va_copy. In three places, calls to fstat
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 11 Dec 2005 12:40:51 +0000 (12:40 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 11 Dec 2005 12:40:51 +0000 (12:40 +0000)
had to be replaced by calls to stat, because fileno is no longer available
when forcing the compiler into pure c89 (or c99) mode.

git-svn-id: svn://svn.cc65.org/cc65/trunk@3683 b7a2c559-68d2-44c3-8de9-860c34a00d81

20 files changed:
src/ar65/make/gcc.mak
src/ar65/objfile.c
src/ca65/make/gcc.mak
src/ca65/scanner.c
src/cc65/input.c
src/cc65/make/gcc.mak
src/cc65/preproc.c
src/cl65/make/gcc.mak
src/co65/make/gcc.mak
src/common/make/gcc.mak
src/common/va_copy.h
src/da65/make/gcc.mak
src/grc/grc.c
src/grc/grc.h
src/grc/make/gcc.mak
src/ld65/make/gcc.mak
src/make/gcc.mak
src/od65/make/gcc.mak
src/sim65/chips/make/gcc.mak
src/sim65/make/gcc.mak

index e4addbcb7cf513b5fbdfd2f1c4518f589795b340..48238700ff004cd092435de67673913bd4fe2a5e 100644 (file)
@@ -5,7 +5,7 @@
 # Library dir
 COMMON = ../common
 
-CFLAGS         = -g -O2 -Wall -W -I$(COMMON)
+CFLAGS         = -g -O2 -Wall -W -std=c89 -I$(COMMON)
 CC     = gcc
 EBIND  = emxbind
 LDFLAGS        =
@@ -56,6 +56,6 @@ zap:  clean
 .PHONY: depend dep
 depend dep:    $(OBJS:.o=.c)
        @echo "Creating dependency information"
-       $(CC) -I$(COMMON) -MM $^ > .depend
+       $(CC) $(CFLAGS) -MM $^ > .depend
 
 
index 1c18fddd550f2735a1add65199fbd2354b970b20..11d4de8f7e55332c7224a0656aa6897889433b34 100644 (file)
@@ -142,7 +142,7 @@ void ObjWriteHeader (FILE* Obj, ObjHeader* H)
     Write32 (Obj, H->StrPoolOffs);
     Write32 (Obj, H->StrPoolSize);
     Write32 (Obj, H->AssertOffs);
-    Write32 (Obj, H->AssertSize);  
+    Write32 (Obj, H->AssertSize);
     Write32 (Obj, H->ScopeOffs);
     Write32 (Obj, H->ScopeSize);
 }
@@ -164,8 +164,15 @@ void ObjAdd (const char* Name)
        Error ("Could not open `%s': %s", Name, strerror (errno));
     }
 
-    /* Get the modification time of the object file */
-    if (fstat (fileno (Obj), &StatBuf) != 0) {
+    /* Get the modification time of the object file. There a race condition 
+     * here, since we cannot use fileno() (non standard identifier in standard
+     * header file), and therefore not fstat. When using stat with the    
+     * file name, there's a risk that the file was deleted and recreated
+     * while it was open. Since mtime and size are only used to check
+     * if a file has changed in the debugger, we will ignore this problem
+     * here.
+     */
+    if (stat (Name, &StatBuf) != 0) {
        Error ("Cannot stat object file `%s': %s", Name, strerror (errno));
     }
 
index 3845422e0f444f6f5da5a100a01f05e1f97b59df..b6b75d54d53bc49788bdf0cfa8cca97159c4e1cb 100644 (file)
@@ -5,7 +5,7 @@
 # Library dir
 COMMON = ../common
 
-CFLAGS         = -g -O2 -Wall -W -I$(COMMON)
+CFLAGS         = -g -O2 -Wall -W -std=c89 -I$(COMMON)
 CC     = gcc
 EBIND  = emxbind
 LDFLAGS        =
@@ -98,7 +98,7 @@ zap:  clean
 .PHONY: depend dep
 depend dep:    $(OBJS:.o=.c)
        @echo "Creating dependency information"
-       $(CC) -I$(COMMON) -MM -MG $^ > .depend
+       $(CC) $(CFLAGS) -MM -MG $^ > .depend
 
 # -----------------------------------------------------------------------------
 # Rules to make config includes
index cc202fe6cefbf37aba6c1337474acccaf1887650..7504ae2ea21f12e8f4e7db0a461fd9fea00808f9 100644 (file)
@@ -307,15 +307,12 @@ int IsIdStart (int C)
 void NewInputFile (const char* Name)
 /* Open a new input file */
 {
-    InputFile* I;
-    FILE* F;
+    char* PathName = 0;
 
     /* First try to open the file */
-    F = fopen (Name, "r");
+    FILE* F = fopen (Name, "r");
     if (F == 0) {
 
-       char* PathName;
-
        /* Error (fatal error if this is the main file) */
        if (ICount == 0) {
            Fatal ("Cannot open input file `%s': %s", Name, strerror (errno));
@@ -330,19 +327,26 @@ void NewInputFile (const char* Name)
            Error ("Cannot open include file `%s': %s", Name, strerror (errno));
        }
 
-       /* Free the allocated memory */
-       xfree (PathName);
-
+               /* Use the path name from now on */
+        Name = PathName;
     }
 
     /* check again if we do now have an open file */
     if (F != 0) {
 
        unsigned FileIdx;
-
-       /* Stat the file and remember the values */
+        InputFile* IF;
+
+       /* Stat the file and remember the values. There a race condition here,
+         * since we cannot use fileno() (non standard identifier in standard
+         * header file), and therefore not fstat. When using stat with the
+         * file name, there's a risk that the file was deleted and recreated
+         * while it was open. Since mtime and size are only used to check
+         * if a file has changed in the debugger, we will ignore this problem
+         * here.
+         */
        struct stat Buf;
-       if (fstat (fileno (F), &Buf) != 0) {
+       if (stat (Name, &Buf) != 0) {
            Fatal ("Cannot stat input file `%s': %s", Name, strerror (errno));
        }
 
@@ -350,18 +354,18 @@ void NewInputFile (const char* Name)
        FileIdx = AddFile (Name, Buf.st_size, Buf.st_mtime);
 
        /* Create a new state variable and initialize it */
-       I           = xmalloc (sizeof (*I));
-       I->F        = F;
-       I->Pos.Line = 0;
-       I->Pos.Col  = 0;
-       I->Pos.Name = FileIdx;
-       I->Tok      = Tok;
-       I->C        = C;
-       I->Line[0]  = '\0';
+       IF           = xmalloc (sizeof (*IF));
+       IF->F        = F;
+       IF->Pos.Line = 0;
+       IF->Pos.Col  = 0;
+       IF->Pos.Name = FileIdx;
+       IF->Tok      = Tok;
+       IF->C        = C;
+       IF->Line[0]  = '\0';
 
        /* Use the new file */
-       I->Next     = IFile;
-       IFile       = I;
+       IF->Next     = IFile;
+       IFile        = IF;
        ++ICount;
 
         /* Read the first character from the new file */
@@ -373,6 +377,9 @@ void NewInputFile (const char* Name)
         Tok = TOK_SEP;
 
     }
+
+    /* Free an allocated name buffer */
+    xfree (PathName);
 }
 
 
index d093f4103646415a8ab8ea4499c1192ba0a04184..7a18be36504f2fd0bd5d29e83bfc32bbdb7b3bf9 100644 (file)
@@ -143,9 +143,16 @@ static AFile* NewAFile (IFile* IF, FILE* F)
      */
     if (IF->Usage++ == 0) {
 
-       /* Get file size and modification time */
+       /* Get file size and modification time. There a race condition here,
+         * since we cannot use fileno() (non standard identifier in standard
+         * header file), and therefore not fstat. When using stat with the
+         * file name, there's a risk that the file was deleted and recreated
+         * while it was open. Since mtime and size are only used to check 
+         * if a file has changed in the debugger, we will ignore this problem
+         * here.
+         */
        struct stat Buf;
-       if (fstat (fileno (F), &Buf) != 0) {
+       if (stat (IF->Name, &Buf) != 0) {
            /* Error */
            Fatal ("Cannot stat `%s': %s", IF->Name, strerror (errno));
        }
index dc2aa0df198dad6eb1f0c0c2df88fbbee0f7d138..030189fd75e5fef838aa9839feb98da204f2c01b 100644 (file)
@@ -17,7 +17,7 @@ COMMON        = ../common
 CC65_INC = \"/usr/lib/cc65/include/\"
 
 #
-CFLAGS = -O2 -g -Wall -W -I$(COMMON) -DCC65_INC=$(CC65_INC)
+CFLAGS = -O2 -g -Wall -W -std=c89 -I$(COMMON) -DCC65_INC=$(CC65_INC)
 CC=gcc
 EBIND=emxbind
 LDFLAGS=-lm
index 4f7e77fce4caea776ed1c94b769b25a1c4602284..f04a9642ae7670a637e58e02e4eb924b68d9c7fd 100644 (file)
@@ -672,8 +672,9 @@ static void MacroCall (StrBuf* Target, Macro* M)
 static void ExpandMacro (StrBuf* Target, Macro* M)
 /* Expand a macro into Target */
 {
+    /* ### printf ("Expanding %s(%u)\n", M->Name, ++V); */
+
     /* Check if this is a function like macro */
-    //printf ("Expanding %s(%u)\n", M->Name, ++V);
     if (M->ArgCount >= 0) {
 
         int Whitespace = IsSpace (CurC);
@@ -710,7 +711,7 @@ static void ExpandMacro (StrBuf* Target, Macro* M)
         DoneMacroExp (&E);
 
     }
-    //printf ("Done with %s(%u)\n", M->Name, V--);
+    /* ### printf ("Done with %s(%u)\n", M->Name, V--); */
 }
 
 
@@ -770,7 +771,7 @@ static void DefineMacro (void)
                 NextChar ();
                 NextChar ();
 
-                /* Remember that the macro is variadic and use __VA_ARGS__ as 
+                /* Remember that the macro is variadic and use __VA_ARGS__ as
                  * the argument name.
                  */
                 AddMacroArg (M, "__VA_ARGS__");
@@ -827,7 +828,7 @@ static void DefineMacro (void)
         SB_Drop (&M->Replacement, 1);
     }
 
-    //printf ("%s: <%.*s>\n", M->Name, SB_GetLen (&M->Replacement), SB_GetConstBuf (&M->Replacement));
+    /* ### printf ("%s: <%.*s>\n", M->Name, SB_GetLen (&M->Replacement), SB_GetConstBuf (&M->Replacement)); */
 
     /* If we have an existing macro, check if the redefinition is identical.
      * Print a diagnostic if not.
index 80757991ba53864cd3f8efb5670145f2bf840453..a7c02ae59c6868e9b9c0dbb9c85acbfd5f193bab 100644 (file)
@@ -13,7 +13,7 @@ endif
 
 
 CC=gcc
-CFLAGS = -O2 -g -Wall -W -I$(COMMON) -D$(SPAWN)
+CFLAGS = -O2 -g -Wall -W -std=c89 -I$(COMMON) -D$(SPAWN)
 EBIND  = emxbind
 LDFLAGS=
 
@@ -53,7 +53,7 @@ zap:  clean
 .PHONY: depend dep
 depend dep:    $(OBJS:.o=.c)
        @echo "Creating dependency information"
-       $(CC) -I$(COMMON) -D$(SPAWN) -MM $^ > .depend
+       $(CC) $(CFLAGS) -D$(SPAWN) -MM $^ > .depend
 
 
 
index 7a56468dd0c5ba32db7d97e1430be18e83fa2044..1fa07598c6ad50fba3f91106985fc3341c1c6547 100644 (file)
@@ -5,7 +5,7 @@
 # Library dir
 COMMON = ../common
 
-CFLAGS         = -g -O2 -Wall -W -I$(COMMON)
+CFLAGS         = -g -O2 -Wall -W -std=c89 -I$(COMMON)
 CC     = gcc
 EBIND  = emxbind
 LDFLAGS        =
@@ -49,6 +49,6 @@ zap:  clean
 .PHONY: depend dep
 depend dep:    $(OBJS:.o=.c)
        @echo "Creating dependency information"
-       $(CC) -I$(COMMON) -MM $^ > .depend
+       $(CC) $(CFLAGS) -MM $^ > .depend
 
 
index 073532ce994b5cc44e9e6b5991be4de740224be3..56e90448aa053d1af9d06ef8b1483deb52ad4ea2 100644 (file)
@@ -2,7 +2,7 @@
 # gcc Makefile for the binutils common stuff
 #
 
-CFLAGS         = -g -O2 -Wall -W
+CFLAGS         = -g -O2 -Wall -W -std=c89
 CC     = gcc
 LDFLAGS        =
 LIB    = common.a
@@ -72,6 +72,6 @@ zap:  clean
 .PHONY: depend dep
 depend dep:    $(OBJS:.o=.c)
        @echo "Creating dependency information"
-       $(CC) -MM $^ > .depend
+       $(CC) $(CFLAGS) -MM $^ > .depend
 
 
index 18c8a75b74c52bce1e2a544d67caf52ff0afff5e..4164dd319d1ba37958a846920b0f4e74856d7371 100644 (file)
 
 
 
+/* No action if we're using a C99 compiler */
+#if (__STDC_VERSION__ < 199901)
+
+
+
 /* The watcom compiler doesn't have va_copy and a problematic va_list definition */
 #if defined(__WATCOMC__)
 #define va_copy(dest,src)       memcpy((dest), (src), sizeof (va_list))
 #endif
 
-/* GNU C before version 3 has its own name */
-#if defined(__GNUC__) && (__GNUC__ == 2)
+/* GNU C has a builtin function */
+#if defined(__GNUC__)
 #define va_copy(dest,src)       __va_copy(dest, src)
 #endif
 
 
 
+#endif  /* #if (__STDC_VERSION__ < 199901) */
+
+
+
 /* End of va_copy.h */
 #endif
 
index d4ac9d77bb0e460c72f61a90c8689057137630cd..fe3db010c87730c58283d4b8757d29a51845ae4e 100644 (file)
@@ -5,7 +5,7 @@
 # Library dir
 COMMON = ../common
 
-CFLAGS = -g -O2 -Wall -W -I$(COMMON)
+CFLAGS = -g -O2 -Wall -W -std=c89 -I$(COMMON)
 CC=gcc
 EBIND=emxbind
 LDFLAGS=
@@ -60,6 +60,6 @@ zap:  clean
 .PHONY: depend dep
 depend dep:    $(OBJS:.o=.c)
        @echo "Creating dependency information"
-       $(CC) -I$(COMMON) -MM $^ > .depend
+       $(CC) $(CFLAGS) -MM $^ > .depend
 
 
index fa884f41111a8139cf4fae4d02af19b22a5d493f..fb3ad2cc6dff6f9f18d60abd18e13fd873347156 100644 (file)
@@ -28,7 +28,6 @@
 #include "grc.h"
 
 /* common stuff */
-//#include "cmdline.h"
 #include "fname.h"
 #include "abend.h"
 #include "chartype.h"
@@ -261,7 +260,6 @@ int a;
        }
 }
 
-//char *bintos(unsigned char a, char *out) {
 char *bintos(unsigned char a, char out[7]) {
 int i=0;
     for (;i<8;i++) {
index d2a96362bf7c7ac408494e74eac715fbfb26be21..9825fe9318b438fd790289a69034b9aafc2ae5ff 100644 (file)
@@ -66,7 +66,7 @@ const unsigned char icon1[] = {
                        128, 0, 1, 128, 0, 1, 128, 0, 1, 128, 0, 1, 128, 0, 1,
                        128, 0, 1, 128, 0, 1, 128, 0, 1, 128, 0, 1, 255, 255, 255 };
 
-char *ProgName;        // for AbEnd, later remove and use common/cmdline.h
+char *ProgName;        /* for AbEnd, later remove and use common/cmdline.h */
 
 char *outputCName=NULL, *outputSName=NULL, *outputVName=NULL;
 FILE *outputCFile, *outputSFile, *outputVFile;
index 592c1fee4bd1281c5ca2a43f3a0117218ba3fcac..d86b3055b3b19e22b1bbb1b7266d4ea163a412a3 100644 (file)
@@ -4,7 +4,7 @@
 
 COMMON = ../common
 
-CFLAGS         = -g -O2 -Wall -W -I$(COMMON)
+CFLAGS         = -g -O2 -Wall -W -std=c89 -I$(COMMON)
 CC     = gcc
 LDFLAGS        =
 EBIND  = emxbind
@@ -42,6 +42,6 @@ zap:  clean
 .PHONY: depend dep
 depend dep:    $(OBJS:.o=.c)
        @echo "Creating dependency information"
-       $(CC) -I$(COMMON) -MM $^ > .depend
+       $(CC) $(CFLAGS) -MM $^ > .depend
 
 
index c8112c61ebfd597ebc816f7c93de5f5de9c190fb..94ff4a67c4908486ff82d6f0613f6f2a6e2d7fea 100644 (file)
@@ -10,7 +10,7 @@ COMMON        = ../common
 CC65_LIB = \"/usr/lib/cc65/lib/\"
 
 #
-CFLAGS = -g -O2 -Wall -W -I$(COMMON) -DCC65_LIB=$(CC65_LIB)
+CFLAGS = -g -O2 -Wall -W -std=c89 -I$(COMMON) -DCC65_LIB=$(CC65_LIB)
 CC=gcc
 EBIND=emxbind
 LDFLAGS=
@@ -113,7 +113,7 @@ zap:        clean
 .PHONY: depend dep
 depend dep:    $(OBJS:.o=.c)
        @echo "Creating dependency information"
-       $(CC) -I$(COMMON) -MM -MG $^ > .depend
+       $(CC) $(CFLAGS) -MM -MG $^ > .depend
 
 # -----------------------------------------------------------------------------
 # Rules to make config includes
index 4e3bcdcc6701847fbcf6ee3ae7cf9abe6b0a36ae..747b1400cba1ac9cba95e9833737ec0d19d2f9c4 100644 (file)
@@ -2,7 +2,7 @@
 # gcc Makefile for the program sources
 #
 
-CFLAGS         = -g -O2 -Wall
+CFLAGS         = -g -O2 -Wall -std=c89
 CC     = gcc
 LDFLAGS        =
 
index 97659c6f5b52eff4b4be065f904dbbc324eb3a4d..1c05b8193f1648442892bc8828dfcbb5003b9f4a 100644 (file)
@@ -6,7 +6,7 @@
 # Library dir
 COMMON = ../common
 
-CFLAGS = -O2 -g -Wall -W -I$(COMMON)
+CFLAGS = -O2 -g -Wall -W -std=c89 -I$(COMMON)
 CC=gcc
 EBIND=emxbind
 LDFLAGS=
@@ -48,7 +48,7 @@ zap:  clean
 .PHONY: depend dep
 depend dep:    $(OBJS:.o=.c)
        @echo "Creating dependency information"
-       $(CC) -I$(COMMON) -MM $^ > .depend
+       $(CC) $(CFLAGS) -MM $^ > .depend
 
 
 
index bb923e92938263918de43cf7235c3c7ed6f2b00f..4626b8ce801eb2373ecff2cd9ad281f55ece7c63 100644 (file)
@@ -6,7 +6,7 @@
 COMMON  = ../../common
 SIM65  = ..
 
-CFLAGS         = -g -O2 -Wall -W -I$(COMMON) -I$(SIM65) -fpic
+CFLAGS         = -g -O2 -Wall -W -std=c89 -I$(COMMON) -I$(SIM65) -fpic
 CC     = gcc
 EBIND  = emxbind
 LDFLAGS        =
@@ -56,6 +56,6 @@ zap:  clean
 .PHONY: depend dep
 depend dep:    $(CHIPS:.so=.c)
        @echo "Creating dependency information"
-       $(CC) -I$(COMMON) -I$(SIM65) -MM $^ > .depend
+       $(CC) $(CFLAGS) -MM $^ > .depend
 
 
index e2c1e25b0a1ecb8bffe2a195e46ccd1dbfb30b2b..7d7cf173f68c69d9227356207ead967d6e4db64d 100644 (file)
@@ -5,7 +5,7 @@
 # Library dir
 COMMON = ../common
 
-CFLAGS         = -g -O2 -Wall -W -I$(COMMON)
+CFLAGS         = -g -O2 -Wall -W -std=c89 -I$(COMMON)
 CC     = gcc
 EBIND  = emxbind
 LDFLAGS        =
@@ -63,6 +63,6 @@ zap:          clean
 .PHONY: depend dep
 depend dep:    $(OBJS:.o=.c)
        @echo "Creating dependency information"
-       $(CC) -I$(COMMON) -MM $^ > .depend
+       $(CC) $(CFLAGS) -MM $^ > .depend