16d528ed9Sopenharmony_ci// Copyright (c) 2011 The Chromium Authors. All rights reserved. 26d528ed9Sopenharmony_ci// Use of this source code is governed by a BSD-style license that can be 36d528ed9Sopenharmony_ci// found in the LICENSE file. 46d528ed9Sopenharmony_ci 56d528ed9Sopenharmony_ci#include "base/files/file_util.h" 66d528ed9Sopenharmony_ci 76d528ed9Sopenharmony_ci#include <errno.h> 86d528ed9Sopenharmony_ci#include <linux/magic.h> 96d528ed9Sopenharmony_ci#include <sys/vfs.h> 106d528ed9Sopenharmony_ci 116d528ed9Sopenharmony_ci#include "base/files/file_path.h" 126d528ed9Sopenharmony_ci 136d528ed9Sopenharmony_cinamespace base { 146d528ed9Sopenharmony_ci 156d528ed9Sopenharmony_cibool GetFileSystemType(const FilePath& path, FileSystemType* type) { 166d528ed9Sopenharmony_ci struct statfs statfs_buf; 176d528ed9Sopenharmony_ci if (statfs(path.value().c_str(), &statfs_buf) < 0) { 186d528ed9Sopenharmony_ci if (errno == ENOENT) 196d528ed9Sopenharmony_ci return false; 206d528ed9Sopenharmony_ci *type = FILE_SYSTEM_UNKNOWN; 216d528ed9Sopenharmony_ci return true; 226d528ed9Sopenharmony_ci } 236d528ed9Sopenharmony_ci 246d528ed9Sopenharmony_ci // Not all possible |statfs_buf.f_type| values are in linux/magic.h. 256d528ed9Sopenharmony_ci // Missing values are copied from the statfs man page. 266d528ed9Sopenharmony_ci switch (statfs_buf.f_type) { 276d528ed9Sopenharmony_ci case 0: 286d528ed9Sopenharmony_ci *type = FILE_SYSTEM_0; 296d528ed9Sopenharmony_ci break; 306d528ed9Sopenharmony_ci case EXT2_SUPER_MAGIC: // Also ext3 and ext4 316d528ed9Sopenharmony_ci case MSDOS_SUPER_MAGIC: 326d528ed9Sopenharmony_ci case REISERFS_SUPER_MAGIC: 336d528ed9Sopenharmony_ci case BTRFS_SUPER_MAGIC: 346d528ed9Sopenharmony_ci case 0x5346544E: // NTFS 356d528ed9Sopenharmony_ci case 0x58465342: // XFS 366d528ed9Sopenharmony_ci case 0x3153464A: // JFS 376d528ed9Sopenharmony_ci *type = FILE_SYSTEM_ORDINARY; 386d528ed9Sopenharmony_ci break; 396d528ed9Sopenharmony_ci case NFS_SUPER_MAGIC: 406d528ed9Sopenharmony_ci *type = FILE_SYSTEM_NFS; 416d528ed9Sopenharmony_ci break; 426d528ed9Sopenharmony_ci case SMB_SUPER_MAGIC: 436d528ed9Sopenharmony_ci case 0xFF534D42: // CIFS 446d528ed9Sopenharmony_ci *type = FILE_SYSTEM_SMB; 456d528ed9Sopenharmony_ci break; 466d528ed9Sopenharmony_ci case CODA_SUPER_MAGIC: 476d528ed9Sopenharmony_ci *type = FILE_SYSTEM_CODA; 486d528ed9Sopenharmony_ci break; 496d528ed9Sopenharmony_ci case HUGETLBFS_MAGIC: 506d528ed9Sopenharmony_ci case RAMFS_MAGIC: 516d528ed9Sopenharmony_ci case TMPFS_MAGIC: 526d528ed9Sopenharmony_ci *type = FILE_SYSTEM_MEMORY; 536d528ed9Sopenharmony_ci break; 546d528ed9Sopenharmony_ci case CGROUP_SUPER_MAGIC: 556d528ed9Sopenharmony_ci *type = FILE_SYSTEM_CGROUP; 566d528ed9Sopenharmony_ci break; 576d528ed9Sopenharmony_ci default: 586d528ed9Sopenharmony_ci *type = FILE_SYSTEM_OTHER; 596d528ed9Sopenharmony_ci } 606d528ed9Sopenharmony_ci return true; 616d528ed9Sopenharmony_ci} 626d528ed9Sopenharmony_ci 636d528ed9Sopenharmony_ci} // namespace base 64