From: helly Date: Sun, 8 Jan 2006 23:16:33 +0000 (+0000) Subject: - Do a few things the right way to make modern compilers happy X-Git-Tag: 0.13.6~505 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5dca8c0364de2f0896e49f64a02c694c635b9e3c;p=re2c - Do a few things the right way to make modern compilers happy --- diff --git a/bootstrap/parser.cc b/bootstrap/parser.cc index 17047c7f..e5257a24 100644 --- a/bootstrap/parser.cc +++ b/bootstrap/parser.cc @@ -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( "" ); + + if (fileName == NULL) + { + o << ""; } - 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){ diff --git a/globals.h b/globals.h index f81fc70a..f8bc0a00 100644 --- 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 9e5b8a42..447a041d 100644 --- 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(""); + outputFileName = ""; 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; } diff --git a/parser.y b/parser.y index 050736b0..a93d1c15 100644 --- 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( "" ); + + if (fileName == NULL) + { + o << ""; } - 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){