Commit 199375cb authored by unknown's avatar unknown

Bug #7390 perror.exe doesn't work

perror.c:
  Copy output of strerr to temp buffer to prevent system overwrite on Windows


extra/perror.c:
  Copy output of strerr to temp buffer to prevent system overwrite on Windows
parent 4b88e071
...@@ -184,6 +184,7 @@ int main(int argc,char *argv[]) ...@@ -184,6 +184,7 @@ int main(int argc,char *argv[])
{ {
int error,code,found; int error,code,found;
const char *msg; const char *msg;
char *unknown_error = 0;
MY_INIT(argv[0]); MY_INIT(argv[0]);
if (get_options(&argc,&argv)) if (get_options(&argc,&argv))
...@@ -212,7 +213,12 @@ int main(int argc,char *argv[]) ...@@ -212,7 +213,12 @@ int main(int argc,char *argv[])
string 'Unknown Error'. To avoid printing it we try to find the string 'Unknown Error'. To avoid printing it we try to find the
error string by asking for an impossible big error message. error string by asking for an impossible big error message.
*/ */
const char *unknown_error= strerror(10000); msg = strerror(10000);
/* allocate a buffer for unknown_error since strerror always returns the same pointer
on some platforms such as Windows */
unknown_error = malloc( strlen(msg)+1 );
strcpy( unknown_error, msg );
for ( ; argc-- > 0 ; argv++) for ( ; argc-- > 0 ; argv++)
{ {
...@@ -262,6 +268,11 @@ int main(int argc,char *argv[]) ...@@ -262,6 +268,11 @@ int main(int argc,char *argv[])
} }
} }
} }
/* if we allocated a buffer for unknown_error, free it now */
if (unknown_error)
free(unknown_error);
exit(error); exit(error);
return error; return error;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment