/******************************************************************************* * * fstype.c * * AUTHOR: * Dan Harkless http://harkless.org/dan/software/ * * COPYRIGHT: * This file is Copyright (C) 2001 by Dan Harkless, and is released under the * GNU General Public License . * * USAGE: * % fstype [...] * * DESCRIPTION: * Prints what kind of file system each given file lives in (e.g. autofs, cdfs, * hfs, jfs, nfs, ufs, etc.). * * COMPILATION: * AIX/Solaris/...: % cc fstype.c -o fstype * HP-UX 9.x: % cc -Ae -DHPUX_9 fstype.c -o fstype * HP-UX 10.x: % cc -Ae fstype.c -o fstype * Linux: % gcc -DLINUX fstype.c -o fstype * * DATE MODIFICATION * ========== ================================================================== * 2001-12-27 Ported to Linux (somewhat inelegantly). * 1999-05-07 Original. * *******************************************************************************/ #include /* for errno */ #include /* for fprintf(), etc. */ #include /* for strrchr(), etc. */ #ifdef HPUX_9 #include /* for MOUNT_CDFS, etc. */ #include /* for statfs() and struct statfs */ #define STAT_V_FS statfs #elif defined LINUX #include /* for statfs() */ #define STAT_V_FS statfs /* Duplicating these values here rather than including the appropriate headers is unfortunately necessary unless we change things so that under Linux we avoid any standard C library #includes and instead use Kernel syscalls to do our output. */ #define ADFS_SUPER_MAGIC 0xadf5 #define AFFS_SUPER_MAGIC 0xadff #define COH_SUPER_MAGIC 0x14d739 #define EFS_SUPER_MAGIC 0x414A53 #define EXT2_SUPER_MAGIC 0xEF53 #define HPFS_SUPER_MAGIC 0xf995e849 #define ISOFS_SUPER_MAGIC 0x9660 #define MINIX_SUPER_MAGIC 0x137F #define MINIX_SUPER_MAGIC2 0x138F #define MINIX2_SUPER_MAGIC 0x2468 #define MINIX2_SUPER_MAGIC2 0x2478 #define MSDOS_SUPER_MAGIC 0x4d44 #define NCP_SUPER_MAGIC 0x564c #define NFS_SUPER_MAGIC 0x6969 #define PROC_SUPER_MAGIC 0x9fa0 #define QNX4_SUPER_MAGIC 0x002f #define SMB_SUPER_MAGIC 0x517B #define SYSV2_SUPER_MAGIC 0x14d738 #define SYSV4_SUPER_MAGIC 0x14d737 #define XENIX_SUPER_MAGIC 0x14d736 #else #include /* must precede */ #include /* for statvfs() and struct statvfs */ #define STAT_V_FS statvfs #endif #define INT_MIN_STR "-2147483648" #define OK 0 #define UNKNOWN_STR "" int main(int argc, char** argv) { char* fstype_str; char* last_slash_ptr = strrchr(argv[0], '/'); char* our_program_name; int i; struct STAT_V_FS file_stat; if (last_slash_ptr == NULL) our_program_name = argv[0]; else our_program_name = last_slash_ptr + 1; if (argc == 1) { fprintf(stderr, "Usage: %s [...]\n", our_program_name); return 1; } else { for (i = 1; i < argc; i++) if (STAT_V_FS(argv[i], &file_stat) != OK) fprintf(stderr, "%s: \"%s\": %s.\n", our_program_name, argv[i], strerror(errno)); else { #ifdef HPUX_9 char fstype_arr[sizeof(UNKNOWN_STR) + sizeof(INT_MIN_STR)]; switch (file_stat.f_fsid[1]) { case MOUNT_CDFS: fstype_str = "cdfs"; break; case MOUNT_DCFS: fstype_str = "dcfs"; break; case MOUNT_NFS: fstype_str = "nfs"; break; case MOUNT_PC: fstype_str = "pc"; break; case MOUNT_UFS: fstype_str = "ufs"; break; default: sprintf(fstype_arr, UNKNOWN_STR, file_stat.f_fsid[1]); fstype_str = fstype_arr; } #elif LINUX char fstype_arr[sizeof(UNKNOWN_STR) + sizeof(INT_MIN_STR)]; switch (file_stat.f_type) { case ADFS_SUPER_MAGIC: fstype_str = "adfs"; break; case AFFS_SUPER_MAGIC: fstype_str = "affs"; break; case COH_SUPER_MAGIC: fstype_str = "coh"; break; case EFS_SUPER_MAGIC: fstype_str = "efs"; break; case EXT2_SUPER_MAGIC: fstype_str = "ext2"; break; case HPFS_SUPER_MAGIC: fstype_str = "hpfs"; break; case ISOFS_SUPER_MAGIC: fstype_str = "isofs"; break; case MINIX_SUPER_MAGIC: fstype_str = "minix v1"; break; case MINIX_SUPER_MAGIC2: fstype_str = "minix v1 (30-char. names)"; break; case MINIX2_SUPER_MAGIC: fstype_str = "minix v2"; break; case MINIX2_SUPER_MAGIC2: fstype_str = "minix v2 (30-char. names)"; break; case MSDOS_SUPER_MAGIC: fstype_str = "msdos"; break; case NCP_SUPER_MAGIC: fstype_str = "ncp"; break; case NFS_SUPER_MAGIC: fstype_str = "nfs"; break; case PROC_SUPER_MAGIC: fstype_str = "proc"; break; case QNX4_SUPER_MAGIC: fstype_str = "qnx4"; break; case SMB_SUPER_MAGIC: fstype_str = "smb"; break; case SYSV2_SUPER_MAGIC: fstype_str = "sysv2"; break; case SYSV4_SUPER_MAGIC: fstype_str = "sysv4"; break; case XENIX_SUPER_MAGIC: fstype_str = "xenix"; break; default: sprintf(fstype_arr, UNKNOWN_STR, file_stat.f_type); fstype_str = fstype_arr; } #else fstype_str = file_stat.f_basetype; #endif printf("%s: %s\n", argv[i], fstype_str); } return 0; } }