@@ -104,7 +104,7 @@ static int canonicalize_tmp_path(char *buffer)
104
104
* p = '/' ;
105
105
106
106
return 0 ;
107
- #elif defined(__APPLE__ ) || defined( HAS_REALPATH )
107
+ #elif defined(CLAR_HAS_REALPATH )
108
108
char tmp [CLAR_MAX_PATH ];
109
109
110
110
if (realpath (buffer , tmp ) == NULL )
@@ -187,6 +187,12 @@ static void clar_tempdir_init(void)
187
187
if (chdir (_clar_tempdir ) != 0 )
188
188
clar_abort ("Failed to change into tempdir '%s': %s.\n" ,
189
189
_clar_tempdir , strerror (errno ));
190
+
191
+ #if !defined(CLAR_SANDBOX_TEST_NAMES ) && defined(_WIN32 )
192
+ srand (clock () ^ (unsigned int )time (NULL ) ^ GetCurrentProcessId () ^ GetCurrentThreadId ());
193
+ #elif !defined(CLAR_SANDBOX_TEST_NAMES )
194
+ srand (clock () ^ time (NULL ) ^ (getpid () << 16 ));
195
+ #endif
190
196
}
191
197
192
198
static void append (char * dst , const char * src )
@@ -208,9 +214,20 @@ static void append(char *dst, const char *src)
208
214
209
215
static int clar_sandbox_create (const char * suite_name , const char * test_name )
210
216
{
217
+ #ifndef CLAR_SANDBOX_TEST_NAMES
218
+ char alpha [] = "0123456789abcdef" ;
219
+ int num = rand ();
220
+ #endif
221
+
211
222
cl_assert (_clar_sandbox [0 ] == '\0' );
212
223
213
- cl_assert (strlen (_clar_tempdir ) + strlen (suite_name ) + strlen (test_name ) + 2 < CLAR_MAX_PATH );
224
+ /*
225
+ * We may want to use test names as sandbox directory names for
226
+ * readability, _however_ on platforms with restrictions for short
227
+ * file / folder names (eg, Windows), this may be too long.
228
+ */
229
+ #ifdef CLAR_SANDBOX_TEST_NAMES
230
+ cl_assert (strlen (_clar_tempdir ) + strlen (suite_name ) + strlen (test_name ) + 3 < CLAR_MAX_PATH );
214
231
215
232
strcpy (_clar_sandbox , _clar_tempdir );
216
233
_clar_sandbox [_clar_tempdir_len ] = '/' ;
@@ -219,6 +236,26 @@ static int clar_sandbox_create(const char *suite_name, const char *test_name)
219
236
append (_clar_sandbox , suite_name );
220
237
append (_clar_sandbox , "__" );
221
238
append (_clar_sandbox , test_name );
239
+ #else
240
+ ((void )suite_name );
241
+ ((void )test_name );
242
+ ((void )append );
243
+
244
+ cl_assert (strlen (_clar_tempdir ) + 9 < CLAR_MAX_PATH );
245
+
246
+ strcpy (_clar_sandbox , _clar_tempdir );
247
+ _clar_sandbox [_clar_tempdir_len ] = '/' ;
248
+
249
+ _clar_sandbox [_clar_tempdir_len + 1 ] = alpha [(num & 0xf0000000 ) >> 28 ];
250
+ _clar_sandbox [_clar_tempdir_len + 2 ] = alpha [(num & 0x0f000000 ) >> 24 ];
251
+ _clar_sandbox [_clar_tempdir_len + 3 ] = alpha [(num & 0x00f00000 ) >> 20 ];
252
+ _clar_sandbox [_clar_tempdir_len + 4 ] = alpha [(num & 0x000f0000 ) >> 16 ];
253
+ _clar_sandbox [_clar_tempdir_len + 5 ] = alpha [(num & 0x0000f000 ) >> 12 ];
254
+ _clar_sandbox [_clar_tempdir_len + 6 ] = alpha [(num & 0x00000f00 ) >> 8 ];
255
+ _clar_sandbox [_clar_tempdir_len + 7 ] = alpha [(num & 0x000000f0 ) >> 4 ];
256
+ _clar_sandbox [_clar_tempdir_len + 8 ] = alpha [(num & 0x0000000f ) >> 0 ];
257
+ _clar_sandbox [_clar_tempdir_len + 9 ] = '\0' ;
258
+ #endif
222
259
223
260
if (mkdir (_clar_sandbox , 0700 ) != 0 )
224
261
return -1 ;
0 commit comments