1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/file_util.h" 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/file_path.h" 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 958d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen#include <errno.h> 1058d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen#include <sys/vfs.h> 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1258d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsennamespace file_util { 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 1458d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsenbool GetFileSystemType(const FilePath& path, FileSystemType* type) { 1558d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen struct statfs statfs_buf; 1658d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen if (statfs(path.value().c_str(), &statfs_buf) < 0) { 1758d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen if (errno == ENOENT) 1858d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen return false; 1958d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen *type = FILE_SYSTEM_UNKNOWN; 2058d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen return true; 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 2358d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen // While you would think the possible values of f_type would be available 2458d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen // in a header somewhere, it appears that is not the case. These values 2558d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen // are copied from the statfs man page. 2658d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen switch (statfs_buf.f_type) { 2758d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen case 0: 2858d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen *type = FILE_SYSTEM_0; 2958d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen break; 3058d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen case 0xEF53: // ext2, ext3. 3158d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen case 0x4D44: // dos 3258d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen case 0x5346544E: // NFTS 3358d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen case 0x52654973: // reiser 3458d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen case 0x58465342: // XFS 3558d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen case 0x9123683E: // btrfs 3658d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen case 0x3153464A: // JFS 3758d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen *type = FILE_SYSTEM_ORDINARY; 3858d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen break; 3958d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen case 0x6969: // NFS 4058d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen *type = FILE_SYSTEM_NFS; 4158d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen break; 4258d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen case 0xFF534D42: // CIFS 4358d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen case 0x517B: // SMB 4458d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen *type = FILE_SYSTEM_SMB; 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott break; 4658d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen case 0x73757245: // Coda 4758d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen *type = FILE_SYSTEM_CODA; 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott break; 4958d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen case 0x858458f6: // ramfs 5058d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen case 0x01021994: // tmpfs 5158d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen *type = FILE_SYSTEM_MEMORY; 5258d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen break; 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case 0x27e0eb: // CGROUP 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen *type = FILE_SYSTEM_CGROUP; 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen break; 5658d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen default: 5758d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen *type = FILE_SYSTEM_OTHER; 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 5958d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen return true; 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 6258d02015f8788a79b322c58d4bdbc914e4c333dcKristian Monsen} // namespace 63