On 03/16/10 04:11 PM, Erwann Chenede wrote:
> Hi All,
>
>     Please find below fct that fixes this issue. The diff of the patch 
> is available in the bug report.
>     The fix checks if a given path reference a loopback filesystem. If 
> so the lofs mountpoint is replaced
>     by its counterpart and that composite path is returned.
>     This make the time slider visualization patch in nautilus behaving 
> as expected with lofs automounted directories.
>
> char* ts_realpath (char * dir, char *resolved_name)
> {
>   char real_dir[PATH_MAX+1];
>   char real_path[PATH_MAX+1];
>   gboolean  found = FALSE;
>   struct stat64 dir_stat64;
>   char *result;
>
>   result = realpath(dir, real_dir);
>
>   if (!result)
>     return NULL;
>
>   if (stat64 (real_dir, &dir_stat64) == 0)
>     {
>       if (strcmp (dir_stat64.st_fstype, "lofs") == 0)
>     {
>       FILE            *fp;
>       struct extmnttab   mtab;
>       int             status;
>       fp = fopen (MNTTAB,"r");

Do you not check the return value of fopen() here?

-Ghee

>
>       resetmnttab(fp);
>       while ((status = getextmntent(fp, &mtab, sizeof (struct 
> extmnttab))) == 0)
>         {
>           if (strcmp (mtab.mnt_fstype, "lofs") == 0)
>         {
>           dev_t dev = NODEV;
>           dev = makedev(mtab.mnt_major, mtab.mnt_minor);
>           if (dev == dir_stat64.st_dev)
>             {
>               if (strcmp (real_dir, mtab.mnt_mountp) == 0)
>             strcpy (real_path, mtab.mnt_special);
>               else
>             {
>               gchar **split;
>               split = g_strsplit (real_dir, mtab.mnt_mountp, 2);
>               /*split 2nd part contains path without mount point */
>               sprintf (real_path,"%s%s",mtab.mnt_special,split[1]);
>               g_strfreev (split);
>             }
>               found = TRUE;
>               break;
>             }
>         }
>         }
>       (void) fclose(fp);
>     }
>     }
>   if (found)
>       return strcpy (resolved_name, real_path);
>   else
>       return strcpy (resolved_name, real_dir);
> }
>
>

Reply via email to