@@ -107,9 +107,14 @@ int tmpFile(const char* prefix, const char* suffix, char** out_name)
107107{
108108#if defined(_MSC_VER ) || defined(__MINGW32__ )
109109 int i , fd ;
110- * out_name = (char * )malloc (strlen (prefix ) + strlen (suffix ) + 27 );
110+ const char * dir = (strchr (prefix , '/' ) == NULL && strchr (prefix , '\\' ) == NULL ) ? Abc_GetTmpDir () : "" ;
111+ int need_slash = (* dir != '\0' && dir [strlen (dir )- 1 ] != '\\' && dir [strlen (dir )- 1 ] != '/' );
112+ * out_name = (char * )malloc (strlen (dir ) + need_slash + strlen (prefix ) + strlen (suffix ) + 27 );
111113 for (i = 0 ; i < 10 ; i ++ ){
112- sprintf (* out_name , "%s%I64X%d%s" , prefix , realTimeAbs (), _getpid (), suffix );
114+ if (* dir != '\0' )
115+ sprintf (* out_name , "%s%s%s%I64X%d%s" , dir , need_slash ? "\\" : "" , prefix , realTimeAbs (), _getpid (), suffix );
116+ else
117+ sprintf (* out_name , "%s%I64X%d%s" , prefix , realTimeAbs (), _getpid (), suffix );
113118 fd = _open (* out_name , O_CREAT | O_EXCL | O_BINARY | O_RDWR , _S_IREAD | _S_IWRITE );
114119 if (fd == -1 ){
115120 free (* out_name );
@@ -132,9 +137,14 @@ int tmpFile(const char* prefix, const char* suffix, char** out_name)
132137 return fd ;
133138#else
134139 int fd ;
135- * out_name = (char * )malloc (strlen (prefix ) + strlen (suffix ) + 7 );
140+ const char * dir = (strchr (prefix , '/' ) == NULL ) ? Abc_GetTmpDir () : "" ;
141+ int need_slash = (* dir != '\0' && dir [strlen (dir )- 1 ] != '/' );
142+ * out_name = (char * )malloc (strlen (dir ) + need_slash + strlen (prefix ) + strlen (suffix ) + 7 );
136143 assert (* out_name != NULL );
137- sprintf (* out_name , "%sXXXXXX" , prefix );
144+ if (* dir != '\0' )
145+ sprintf (* out_name , "%s%s%sXXXXXX" , dir , need_slash ? "/" : "" , prefix );
146+ else
147+ sprintf (* out_name , "%sXXXXXX" , prefix );
138148 fd = mkstemp (* out_name );
139149 if (fd == -1 ){
140150 free (* out_name );
0 commit comments