summaryrefslogtreecommitdiff
path: root/extra/perror.c
diff options
context:
space:
mode:
Diffstat (limited to 'extra/perror.c')
-rw-r--r--extra/perror.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/extra/perror.c b/extra/perror.c
index e667ea723b8..b377b360b5c 100644
--- a/extra/perror.c
+++ b/extra/perror.c
@@ -189,6 +189,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))
@@ -217,7 +218,14 @@ 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);
+ strmov(unknown_error, msg);
for ( ; argc-- > 0 ; argv++)
{
@@ -267,6 +275,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;
}