Pen^2 Le 25/09/2009 à 11:41 En gros on peut passer son buffer perso à la fonction, dans ce cas elle l'utilise, sinon on lui passe NULL et elle utilise son buffer interne TMPNAME
Ensuite elle génère un nom de fichier temporaire, et elle boucle en le modifiant tant que le fichier existe.
À la fin, elle renvoie le pointeur sur le buffer qui contient le nom de fichier (le tien, ou le buffer interne)
PS : le zéro en début de chaine, je suppose que c'est le format des SYM_STR (j'ai un vague souvenir d'un truc dans le genre)
PPS : pour l'argument, je suppose qu'il faut lui passer un pointeur sur le deuxième char du buffer, le premier étant à 0.
s pointe sur le premier zéro.
s+1 pointe sur la premiere lettre.
s+8 pointe sur la 8e lettre.
s+9 pointe sur le zero final.
nan?
oO
Quand je passe un pointeur en paramètre, il pointe sur le début de la chaine à écrire, pas sur un 0 qui ne sera pas utilisé...
Et le *s++ sert à quoi ?
Et je vois pas où tu vois que sprintf va écrire à un octet plus loin que s...
non , le premier caractère est à 1(a0)
0(a0) contient un zéro.
on ne fait *s++ QUE si s==NULL. sinon, on le fait pas.
même si on le faisait, s est une variable locale à tmpnam, quand tu reviens dans ta fonction, s n'est pas modifié. il conserve la valeur qu'il avait avant l'appel.
On est bien d'accord. Mais le sprintf :
sprintf(s, "temp%04x", TMPNAME_COUNT++);
va commencer à copier 8 caractère à partir de s[ 0 ] jusqu'à s[ 7 ], non ?
Donc pourquoi tester à s[ 9 ] (s+9) après ?
non. Deux cas:
- si tu donnes null, il va copier de s[ 1 ] à s[ 8 ] grâce au s++
- si tu donnes autre chose,....
ok y'a un souci on dirait...
j'attends le chef.
Ouep, j'ai trouvé. Et où est le problème à ce que mon install ne soit pas finalisée ?
PpHd -> est-on assuré que si l'on passe NULL à tmpnam, un 0 précède le nom de fichier renvoyé (ce qui assure qu'on puisse l'utiliser comme SYM_STR) ?
Farewell Le 25/09/2009 à 20:48Edité par Farewell le 25/09/2009 à 21:16 Oui, pourquoi ne pas avoir remplacé le 9 par 8 dans la version initiale ?
Qui plus est, cette version qui renvoie TMPNAME, mais t'écris jamais dans ce buffer, non ? Et TMPNAME+1 serait pas mieux (je sais pas si c'est la syntaxe, mais je parle du premier caractère du nom de fichier).
Ca serait pas mieux d'initialiser TMPNAME[ 0 ] au boot de PedroM, puis de toujours bosser après à partir de TMPNAME+1 ?
Hmm. J'ai peut-être compris.
Est-ce qu'il est garanti que tmpnam(0) renvoit une chaine en forme de SYM_STR ?