Alexandre Julliard : winebuild: Fix the creation of temp files in /tmp.
Module: wine Branch: master Commit: 2f4f9ee1cbf61e4540abbfe56e7d765fad6c8d08 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2f4f9ee1cbf61e4540abbfe56e... Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu May 26 12:20:37 2011 +0200 winebuild: Fix the creation of temp files in /tmp. --- tools/winebuild/utils.c | 25 +++++++++++++++---------- 1 files changed, 15 insertions(+), 10 deletions(-) diff --git a/tools/winebuild/utils.c b/tools/winebuild/utils.c index acd6915..2edb9e3 100644 --- a/tools/winebuild/utils.c +++ b/tools/winebuild/utils.c @@ -410,25 +410,30 @@ const char *get_nm_command(void) char *get_temp_file_name( const char *prefix, const char *suffix ) { char *name; - const char *ext; + const char *ext, *basename; int fd; if (!nb_tmp_files && !save_temps) atexit( cleanup_tmp_files ); if (!prefix || !prefix[0]) prefix = "winebuild"; if (!suffix) suffix = ""; - if (!(ext = strchr( prefix, '.' ))) ext = prefix + strlen(prefix); + if ((basename = strrchr( prefix, '/' ))) basename++; + else basename = prefix; + if (!(ext = strchr( basename, '.' ))) ext = prefix + strlen(prefix); name = xmalloc( sizeof("/tmp/") + (ext - prefix) + sizeof(".XXXXXX") + strlen(suffix) ); - strcpy( name, "/tmp/" ); - memcpy( name + 5, prefix, ext - prefix ); - strcpy( name + 5 + (ext - prefix), ".XXXXXX" ); + memcpy( name, prefix, ext - prefix ); + strcpy( name + (ext - prefix), ".XXXXXX" ); strcat( name, suffix ); - /* first try without the /tmp/ prefix */ - if ((fd = mkstemps( name + 5, strlen(suffix) )) != -1) - name += 5; - else if ((fd = mkstemps( name, strlen(suffix) )) == -1) - fatal_error( "could not generate a temp file\n" ); + if ((fd = mkstemps( name, strlen(suffix) )) == -1) + { + strcpy( name, "/tmp/" ); + memcpy( name + 5, basename, ext - basename ); + strcpy( name + 5 + (ext - basename), ".XXXXXX" ); + strcat( name, suffix ); + if ((fd = mkstemps( name, strlen(suffix) )) == -1) + fatal_error( "could not generate a temp file\n" ); + } close( fd ); if (nb_tmp_files >= max_tmp_files)
participants (1)
-
Alexandre Julliard