On Tue, May 22, 2012 at 9:42 AM, Paul Irofti <p...@irofti.net> wrote: >> > + /* >> > + * Convert BSD filesystem names to Linux filesystem type numbers >> > + * where possible. Linux statfs uses a value of -1 to indicate >> > + * an unsupported field. >> > + */ >> > + if (!strcmp(bsp->f_fstypename, MOUNT_FFS) || >> > + !strcmp(bsp->f_fstypename, MOUNT_MFS)) >> > + lsp->l_ftype = 0x11954; >> > + else if (!strcmp(bsp->f_fstypename, MOUNT_NFS)) >> > + lsp->l_ftype = 0x6969; >> > + else if (!strcmp(bsp->f_fstypename, MOUNT_MSDOS)) >> > + lsp->l_ftype = 0x4d44; >> > + else if (!strcmp(bsp->f_fstypename, MOUNT_PROCFS)) >> > + lsp->l_ftype = 0x9fa0; >> > + else if (!strcmp(bsp->f_fstypename, MOUNT_EXT2FS)) >> > + lsp->l_ftype = 0xef53; >> > + else if (!strcmp(bsp->f_fstypename, MOUNT_CD9660)) >> > + lsp->l_ftype = 0x9660; >> > + else if (!strcmp(bsp->f_fstypename, MOUNT_NCPFS)) >> > + lsp->l_ftype = 0x6969; >> > + else >> > + lsp->l_ftype = -1; >> >> Can this code go into a separate function so we don't have to >> duplicate it for both statfs and statfs64? > > I thought about it. Best would be a macro, but I hate C macro's.
What about a function like this: long bsd_to_linux_filesystem_map(const char *fstypename) { if (!strcmp(fstypename, MOUNT_FFS) || !strcmp(fstypename, MOUNT_MFS)) return (0x11954); else if (!strcmp(fstypename, MOUNT_NFS)) return (0x6969); [...] else return (-1); } (I'm assuming linux_statfs64's l_ftype is also a long.)