summaryrefslogtreecommitdiff
path: root/extra
diff options
context:
space:
mode:
Diffstat (limited to 'extra')
-rw-r--r--extra/perror.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/extra/perror.c b/extra/perror.c
index e667ea723b8..3e920ac50a4 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,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++)
{
@@ -267,6 +273,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;
}