• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)14 bool 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