]> granicus.if.org Git - re2c/commitdiff
- Do a few things the right way to make modern compilers happy
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Sun, 8 Jan 2006 23:16:33 +0000 (23:16 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Sun, 8 Jan 2006 23:16:33 +0000 (23:16 +0000)
bootstrap/parser.cc
globals.h
main.cc
parser.y

index 17047c7fa75134337f7ff9ee10b585b6ee751336..e5257a2454ba8c12deafa44b49cecc39efc14060 100644 (file)
@@ -1613,29 +1613,29 @@ namespace re2c
 
 void line_source(unsigned int line, std::ostream& o)
 {
-       char *  fnamebuf;
-       char *  token;
-       
        if (iFlag)
        {
                return;
        }
+
        o << "#line " << line << " \"";
-       if( fileName != NULL ) {
-               fnamebuf = strdup( fileName );
-       } else {
-               fnamebuf = strdup( "<stdin>" );
+       
+       if (fileName == NULL)
+       {
+               o << "<stdin>";
        }
-       token = strtok( fnamebuf, "\\" );
-       for(;;) {
-               o << token;
-               token = strtok( NULL, "\\" );
-               if( token == NULL ) break;
-               o << "\\\\";
+
+       std::string fname(fileName);
+       
+       for (size_t p = 0; p < fname.length(); ++p)
+       {
+               if (fname[p] == '\\')
+               {
+                       fname.insert(++p, "\\");
+               }
        }
-       o << "\"\n";
+       o << fname << "\"\n";
        ++oline;
-       free( fnamebuf );
 }
 
 void parse(std::istream& i, std::ostream &o){
index f81fc70a3aa7ad7fb276da44d97aa73959e0495d..f8bc0a00e667e2ecf7e3fbe9fcd0450b660276b8 100644 (file)
--- a/globals.h
+++ b/globals.h
@@ -11,7 +11,7 @@ namespace re2c
 {
 
 extern const char *fileName;
-extern char *outputFileName;
+extern const char *outputFileName;
 extern bool bFlag;
 extern bool dFlag;
 extern bool eFlag;
diff --git a/main.cc b/main.cc
index 9e5b8a422951b476baa01dfcaa3b0ad38885ede0..447a041d8a87a13185523cd852d1e60a66cf30b2 100644 (file)
--- a/main.cc
+++ b/main.cc
@@ -19,7 +19,7 @@ namespace re2c
 {
 
 const char *fileName = 0;
-char *outputFileName = 0;
+const char *outputFileName = 0;
 bool bFlag = false;
 bool dFlag = false;
 bool eFlag = false;
@@ -153,11 +153,24 @@ int main(int argc, char *argv[])
                        return 2;
 
                        case 'V': {
-                               int v1, v2, v3;
-                               char version[16];
-                               sscanf(PACKAGE_VERSION, "%d.%d.%d", &v1, &v2, &v3);
-                               sprintf(version, "%02d%02d%02d", v1, v2, v3);
-                               cout << version << "\n";
+                               string vernum(PACKAGE_VERSION);
+
+                               if (vernum[1] == '.')
+                               {
+                                       vernum.insert(0, "0");
+                               }
+                               vernum.erase(2, 1);
+                               if (vernum[3] == '.')
+                               {
+                                       vernum.insert(2, "0");
+                               }
+                               vernum.erase(4, 1);
+                               if (vernum.length() < 6 || vernum[5] < '0' || vernum[5] > '9')
+                               {
+                                       vernum.insert(4, "0");
+                               }
+                               vernum.resize(6);
+                               cout << vernum << endl;
                                return 2;
                        }
                        
@@ -221,7 +234,7 @@ int main(int argc, char *argv[])
 
        if (outputFileName == 0 || (fileName[0] == '-' && fileName[1] == '\0'))
        {
-               outputFileName = strdup("<stdout>");
+               outputFileName = "<stdout>";
                output = &cout;
        }
        else
@@ -237,9 +250,10 @@ int main(int argc, char *argv[])
                output = &outputFile;
                
                int len = strlen(outputFileName);
-               char *src, *dst, *tmp = (char*)malloc((len+1)*2);
+               char *tmp = (char*)malloc((len+1)*2);
+               char *dst = tmp;
 
-               for (src = outputFileName, dst = tmp; *src; ++src)
+               for (const char *src = outputFileName; *src; ++src)
                {
                        if (*src == '\\')
                        {
@@ -253,7 +267,6 @@ int main(int argc, char *argv[])
        }
 
        parse(*input, *output);
-       free(outputFileName);
        return 0;
 
 }
index 050736b0b4b920c7e9f21389ae5bf2b33dbf7d9f..a93d1c153dd616fadbec067519ef85e343f6a3cc 100644 (file)
--- a/parser.y
+++ b/parser.y
@@ -187,29 +187,29 @@ namespace re2c
 
 void line_source(unsigned int line, std::ostream& o)
 {
-       char *  fnamebuf;
-       char *  token;
-       
        if (iFlag)
        {
                return;
        }
+
        o << "#line " << line << " \"";
-       if( fileName != NULL ) {
-               fnamebuf = strdup( fileName );
-       } else {
-               fnamebuf = strdup( "<stdin>" );
+       
+       if (fileName == NULL)
+       {
+               o << "<stdin>";
        }
-       token = strtok( fnamebuf, "\\" );
-       for(;;) {
-               o << token;
-               token = strtok( NULL, "\\" );
-               if( token == NULL ) break;
-               o << "\\\\";
+
+       std::string fname(fileName);
+       
+       for (size_t p = 0; p < fname.length(); ++p)
+       {
+               if (fname[p] == '\\')
+               {
+                       fname.insert(++p, "\\");
+               }
        }
-       o << "\"\n";
+       o << fname << "\"\n";
        ++oline;
-       free( fnamebuf );
 }
 
 void parse(std::istream& i, std::ostream &o){