#include #include #include "ostool.h" #include "commun.h" /* Etablie la valeur r‚elle d'un path. Souvent un path est donn‚e par l'usager et contient un lien symbolique. Certain autre path sont obtenue via d'autre m‚canisme (path_getcwd() par exemple) et donnent le r‚pertoire r‚el sans lien symbolique. Certain programme compare le d‚but de deux paths pour d‚terminer s'il sont commun. Dans ce cas, ca rate, mˆme si en fait deux path repr‚sente (vue de l'usager) la mˆme branche. Souvent le r‚pertoire HOME est en fait un path avec lien symbolique. Ca simplifie l'administation. Sauf que si on fait un getcwd() dans un sous r‚pertoire, on obtient une chaine qui ne contient pas la chaine home. C'est d‚plaisant. sympath peut ˆtre le path d'un r‚pertoire ou un fichier. Retourne -1 si erreur. */ export int path_cnv2reel (const char *sympath, char *reelpath) { int ret = -1; SAVEPATH save; char tmpsym[MAXSIZ_PATH]; /* remplace sympath, si c'est un fichier */ char fname[MAXSIZ_NAME]; /* Nom du fichier ou '\0' */ fname[0] = '\0'; strcpy (reelpath,sympath); /* Solidifie les clients qui v‚rifie pas */ /* Les codes d'erreur */ if (file_type(sympath)==0){ path_splitlex (sympath,tmpsym,fname); sympath = tmpsym; } if (file_type(sympath)==1){ if (path_pushdir (sympath,&save) != -1){ ret = path_getcwd (reelpath,MAXSIZ_PATH); if (ret != -1 && fname[0] != '\0'){ path_make (reelpath,fname,reelpath); } path_popdir (&save); } } return ret; }