#include //#include #include #include #include #include "ostool.h" #include "commun.h" // Retourne un path pouvant servir a creer un repertoire ou un fichier temporaire // Il est (presque) garanti que ce path n'existe pas deja. // Retourne l'adresse de result si succes. NULL sinon. export char *path_tmpname( const char *base, // une chaine de caractere qui sert de prefixe au nom du // fichier a generer. si c'est un repertoire, le '/' doit // etre present. Si NULL, on utilise prefTempPath + '/' // ATTENTION pour dos, la routine utilise 3 chars donc pas // de nom plus long que 5 chars. const char *ext, // Extention a ajoute au nom forme. Avec ou sans point. // Peut etre null. char *result, // Ca jase int sizeResultBuf) { const char *pBase= base; if( pBase == NULL) { pBase = "/tmp/"; } char bufResult[ MAXSIZ_PATH]; bool found=false; int ctrIter= 0; // pour ne pas boucler a l'infinie. const int MaxIter= 100; int pid= getpid(); while( !found && ctrIter < MaxIter) { char *pt = stpcpy( bufResult, pBase); sprintf (pt,"%d",pid * MaxIter + ctrIter); file_chgext( bufResult, bufResult, ext); found= file_type( bufResult ) == -1; ctrIter++; } if( found && (int)strlen( bufResult) + 1 <= sizeResultBuf) strcpy( result, bufResult); else result= NULL; return result; }