From 199375cbc94eda3d60b9c038037e19a7e9cdf8f4 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 31 Jan 2005 23:02:32 -0600 Subject: 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 --- extra/perror.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'extra') diff --git a/extra/perror.c b/extra/perror.c index 1bd4b203120..fc10d8eaecc 100644 --- a/extra/perror.c +++ b/extra/perror.c @@ -184,6 +184,7 @@ int main(int argc,char *argv[]) { int error,code,found; const char *msg; + char *unknown_error = 0; MY_INIT(argv[0]); if (get_options(&argc,&argv)) @@ -212,7 +213,12 @@ int main(int argc,char *argv[]) string 'Unknown Error'. To avoid printing it we try to find the 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++) { @@ -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); return error; } -- cgit v1.2.1