Ticket #1642: mc-fstype.diff

File mc-fstype.diff, 3.1 KB (added by sfionov, 10 years ago)
  • configure.ac

    diff --git a/configure.ac b/configure.ac
    index 6cdcd28..e3f3c44 100644
    a b fi 
    142142 
    143143AC_PROG_INSTALL 
    144144AC_CHECK_HEADERS([unistd.h string.h memory.h grp.h limits.h malloc.h \ 
    145         stdlib.h termios.h utime.h fcntl.h pwd.h sys/statfs.h sys/vfs.h sys/time.h \ 
     145        stdlib.h termios.h utime.h fcntl.h pwd.h \ 
     146        sys/statfs.h sys/statvfs.h sys/vfs.h sys/time.h \ 
    146147        sys/timeb.h sys/select.h sys/ioctl.h stropts.h arpa/inet.h \ 
    147148        security/pam_misc.h sys/socket.h sys/sysmacros.h sys/types.h \ 
    148149        sys/mkdev.h wchar.h wctype.h]) 
    dnl 
    198199dnl This is from GNU fileutils, check aclocal.m4 for more information 
    199200dnl 
    200201AC_GET_FS_INFO 
     202AC_CHECK_MEMBERS([struct statvfs.f_fstypename, struct statvfs.f_basetype],,,[ 
     203AC_INCLUDES_DEFAULT 
     204#include <sys/statvfs.h> 
     205]) 
    201206 
    202207dnl 
    203208dnl Missing typedefs and replacements 
  • src/filegui.c

    diff --git a/src/filegui.c b/src/filegui.c
    index 3544c50..1abb481 100644
    a b  
    5555#include <sys/types.h> 
    5656#include <sys/stat.h> 
    5757 
    58 #if defined (__FreeBSD__) 
     58#if (STAT_STATVFS \ 
     59     && (HAVE_STRUCT_STATVFS_F_BASETYPE || HAVE_STRUCT_STATVFS_F_FSTYPENAME)) 
     60#   define USE_STATVFS 1 
     61#   include <sys/statvfs.h> 
     62#   define STRUCT_STATFS struct statvfs 
     63#   define STATFS statvfs 
     64#elif HAVE_STATFS && !STAT_STATFS4 
     65#   define USE_STATFS 1 
     66#   if HAVE_SYS_VFS_H 
     67#      include <sys/vfs.h> 
     68#   elif HAVE_SYS_MOUNT_H && HAVE_SYS_PARAM_H 
    5969#      include <sys/param.h> 
    60 #endif 
    61 #if defined(__APPLE__) || defined (__FreeBSD__) 
    6270#      include <sys/mount.h> 
    63 #elif defined (__NetBSD__) 
    64 #      include <sys/param.h> 
    65 #else 
    66 #      ifdef HAVE_VFS 
    67 #           include <sys/vfs.h> 
    68 #      else 
    69 #           include <sys/statfs.h> 
    70 #      endif 
     71#   elif HAVE_SYS_STATFS_H 
     72#      include <sys/statfs.h> 
     73#   endif 
     74#   define STRUCT_STATFS struct statfs 
     75#   define STATFS statfs 
    7176#endif 
    7277 
    7378#include <unistd.h> 
    enum { 
    164169static int 
    165170filegui__check_attrs_on_fs(const char *fs_path) 
    166171{ 
    167     struct statfs stfs; 
     172#if USE_STATFS || USE_STATVFS 
     173    STRUCT_STATFS stfs; 
    168174 
    169     if (statfs(fs_path, &stfs)!=0) 
     175    if (STATFS(fs_path, &stfs)!=0) 
    170176        return 1; 
    171177 
     178# ifdef __linux__ 
    172179    switch ((filegui_nonattrs_fs_t) stfs.f_type) 
    173180    { 
    174181    case MSDOS_SUPER_MAGIC: 
    filegui__check_attrs_on_fs(const char *fs_path) 
    181188        return 0; 
    182189        break; 
    183190    } 
     191# elif HAVE_STRUCT_STATFS_F_FSTYPENAME || HAVE_STRUCT_STATVFS_F_FSTYPENAME 
     192    if (!strcmp(stfs.f_fstypename, "msdos") 
     193        || !strcmp(stfs.f_fstypename, "msdosfs") 
     194        || !strcmp(stfs.f_fstypename, "ntfs") 
     195        || !strcmp(stfs.f_fstypename, "procfs") 
     196        || !strcmp(stfs.f_fstypename, "smbfs") 
     197        || strstr(stfs.f_fstypename, "fusefs")) 
     198        return 0; 
     199# elif HAVE_STRUCT_STATVFS_F_BASETYPE 
     200    if (!strcmp(stfs.f_basetype, "pcfs") 
     201        || !strcmp(stfs.f_basetype, "ntfs") 
     202        || !strcmp(stfs.f_basetype, "proc") 
     203        || !strcmp(stfs.f_basetype, "smbfs") 
     204        || !strcmp(stfs.f_basetype, "fuse")) 
     205        return 0; 
     206# endif 
     207#endif /* USE_STATFS || USE_STATVFS */ 
     208 
    184209    return 1; 
    185210} 
    186211