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.)

Reply via email to