Haut de page

Problèmes avec TemporaryItems


Quoi de neuf ?

Voici le résultat d'une longue traque d'erreur sur MacOS X 10.5.4 (mais ce ne doit pas être spécifique à cette version). Il faut savoir que le problème est survenu d'un coup, pas à la suite d'une modifcation de système, que le compte n'est pas administrateur et que tout fonctionne parfaitement sur un autre compte sur la même machine. D'ailleurs, en créant un autre compte et en recopiant tout le contenu de /Users/login par un tar, cela fonctionne très bien.

Les phénomènes sont les suivants :

Grâce à mon application, j'ai pu aller voir le code qui générait l'erreur -48. C'est donc le retour de l'appel l'API FindFolder.

FindFolder est appelé afin de trouver le dossier où mettre les fichiers temporaires afin de réaliser un enregistrement de fichier atomique.

err=FindFolder(vRefNum, kTemporaryFolderType, kCreateFolder, &foundVRefNum, &foundDirID);

Ce code d'erreur indique que le dossier recherché n'est pas un dossier mais un fichier ! En gros c'est comme si /tmp n'était pas un répertoire mais un fichier !

Maintenant, il faut trouver où il se situe. Pour cela, j'ai modifié mon programme pour lui faire afficher le chemin lorsque cela marche sur une autre machine.

(void)FSpMakeFSRef(&tempFSSpec, &fsRef);
(void)FSRefMakePath(&fsRef, path, SQ_PATH_LEN_MAX);

Le dossier en question n'est pas dans les données de l'utilisateur (c'est pas plus mal si il est en réseau) mais dans

/private/var/folders/Ym/YmvoOlL22RWhUk+8ZRSwp++++TM/TemporaryItems/

sur ma machine. En fait, c'est donc dans un sous-répertoire /private/var/folders/

Pour le trouver, on fait un ls reccursif sur ce répertoire et on cherche où se trouve le dossier dont le propriétaire est le compte qui pose problème.

ls -al /private/var/folders/* | grep login

On remarquera que YmvoOlL22RWhUk+8ZRSwp++++TM est dans un dossier dont le nom est sur deux caractères qui sont les deux premiers Ym.

Après il reste plus qu'à aller voir le dossier en question et constater si TemporaryItems est un fichier ou un dossier. Dans notre cas, c'est un fichier de zéro octets créé le 13 août à 11h40.

-rw-r--r--@ 2 login staff 0 13 aoû 11:40 TemporaryItems

au lieu de

drwxr-xr-x@ 2 login login 68 16 sep 17:00 TemporaryItems

Pour corriger définitivement ce problème, se connecter en administrateur, passer en root et supprimer le fichier TemporaryItems. Lorsque l'utilisateur se reconnectera, le dossier TemporaryItems sera créé.

2008



FutureShare

 | 

Glossaire

 |