| // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "base/files/file_util.h" | 
 |  | 
 | #include <errno.h> | 
 | #include <linux/magic.h> | 
 | #include <sys/vfs.h> | 
 |  | 
 | #include "base/files/file_path.h" | 
 |  | 
 | namespace base { | 
 |  | 
 | bool GetFileSystemType(const FilePath& path, FileSystemType* type) { | 
 |   struct statfs statfs_buf; | 
 |   if (statfs(path.value().c_str(), &statfs_buf) < 0) { | 
 |     if (errno == ENOENT) | 
 |       return false; | 
 |     *type = FILE_SYSTEM_UNKNOWN; | 
 |     return true; | 
 |   } | 
 |  | 
 |   // Not all possible |statfs_buf.f_type| values are in linux/magic.h. | 
 |   // Missing values are copied from the statfs man page. | 
 |   switch (statfs_buf.f_type) { | 
 |     case 0: | 
 |       *type = FILE_SYSTEM_0; | 
 |       break; | 
 |     case EXT2_SUPER_MAGIC:  // Also ext3 and ext4 | 
 |     case MSDOS_SUPER_MAGIC: | 
 |     case REISERFS_SUPER_MAGIC: | 
 |     case BTRFS_SUPER_MAGIC: | 
 |     case 0x5346544E:  // NTFS | 
 |     case 0x58465342:  // XFS | 
 |     case 0x3153464A:  // JFS | 
 |       *type = FILE_SYSTEM_ORDINARY; | 
 |       break; | 
 |     case NFS_SUPER_MAGIC: | 
 |       *type = FILE_SYSTEM_NFS; | 
 |       break; | 
 |     case SMB_SUPER_MAGIC: | 
 |     case 0xFF534D42:  // CIFS | 
 |       *type = FILE_SYSTEM_SMB; | 
 |       break; | 
 |     case CODA_SUPER_MAGIC: | 
 |       *type = FILE_SYSTEM_CODA; | 
 |       break; | 
 |     case HUGETLBFS_MAGIC: | 
 |     case RAMFS_MAGIC: | 
 |     case TMPFS_MAGIC: | 
 |       *type = FILE_SYSTEM_MEMORY; | 
 |       break; | 
 |     case CGROUP_SUPER_MAGIC: | 
 |       *type = FILE_SYSTEM_CGROUP; | 
 |       break; | 
 |     default: | 
 |       *type = FILE_SYSTEM_OTHER; | 
 |   } | 
 |   return true; | 
 | } | 
 |  | 
 | }  // namespace base |