1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/file_util.h" 6 7 #include "base/file_path.h" 8 9 #include <errno.h> 10 #include <sys/vfs.h> 11 12 namespace file_util { 13 GetFileSystemType(const FilePath & path,FileSystemType * type)14bool GetFileSystemType(const FilePath& path, FileSystemType* type) { 15 struct statfs statfs_buf; 16 if (statfs(path.value().c_str(), &statfs_buf) < 0) { 17 if (errno == ENOENT) 18 return false; 19 *type = FILE_SYSTEM_UNKNOWN; 20 return true; 21 } 22 23 // While you would think the possible values of f_type would be available 24 // in a header somewhere, it appears that is not the case. These values 25 // are copied from the statfs man page. 26 switch (statfs_buf.f_type) { 27 case 0: 28 *type = FILE_SYSTEM_0; 29 break; 30 case 0xEF53: // ext2, ext3. 31 case 0x4D44: // dos 32 case 0x5346544E: // NFTS 33 case 0x52654973: // reiser 34 case 0x58465342: // XFS 35 case 0x9123683E: // btrfs 36 case 0x3153464A: // JFS 37 *type = FILE_SYSTEM_ORDINARY; 38 break; 39 case 0x6969: // NFS 40 *type = FILE_SYSTEM_NFS; 41 break; 42 case 0xFF534D42: // CIFS 43 case 0x517B: // SMB 44 *type = FILE_SYSTEM_SMB; 45 break; 46 case 0x73757245: // Coda 47 *type = FILE_SYSTEM_CODA; 48 break; 49 case 0x858458f6: // ramfs 50 case 0x01021994: // tmpfs 51 *type = FILE_SYSTEM_MEMORY; 52 break; 53 case 0x27e0eb: // CGROUP 54 *type = FILE_SYSTEM_CGROUP; 55 break; 56 default: 57 *type = FILE_SYSTEM_OTHER; 58 } 59 return true; 60 } 61 62 } // namespace 63