Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
chromium /chromium /src /refs/heads/main /. /base /base_paths_posix.cc
blob: 284e5382bf2fe38468fb867df39e08e4161005ab [file] [log] [blame] [edit]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Defines base::PathProviderPosix, default path provider on POSIX OSes that
// don't have their own base_paths_OS.cc implementation (i.e. all but Mac and
// Android).
#include"base/base_paths.h"
#include<limits.h>
#include<stddef.h>
#include<memory>
#include<ostream>
#include<string>
#include"base/environment.h"
#include"base/files/file_path.h"
#include"base/files/file_util.h"
#include"base/logging.h"
#include"base/nix/xdg_util.h"
#include"base/notreached.h"
#include"base/path_service.h"
#include"base/posix/sysctl.h"
#include"base/process/process_metrics.h"
#include"build/build_config.h"
#if BUILDFLAG(IS_FREEBSD)
#include<sys/param.h>
#include<sys/sysctl.h>
#elif BUILDFLAG(IS_SOLARIS)|| BUILDFLAG(IS_AIX)
#include<stdlib.h>
#endif
namespace base{
boolPathProviderPosix(int key,FilePath* result){
switch(key){
case FILE_EXE:
case FILE_MODULE:{// TODO(evanm): is this correct?
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
FilePath bin_dir;
if(!ReadSymbolicLink(FilePath(kProcSelfExe),&bin_dir)){
NOTREACHED()<<"Unable to resolve "<< kProcSelfExe<<".";
}
*result= bin_dir;
returntrue;
#elif BUILDFLAG(IS_FREEBSD)
int name[]={CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME,-1};
std::optional<std::string> bin_dir=StringSysctl(name, std::size(name));
if(!bin_dir.has_value()|| bin_dir.value().length()<=1){
NOTREACHED()<<"Unable to resolve path.";
}
*result=FilePath(bin_dir.value());
returntrue;
#elif BUILDFLAG(IS_SOLARIS)
char bin_dir[PATH_MAX+1];
if(realpath(getexecname(), bin_dir)== NULL){
NOTREACHED()<<"Unable to resolve "<< getexecname()<<".";
}
*result=FilePath(bin_dir);
returntrue;
#elif BUILDFLAG(IS_OPENBSD)|| BUILDFLAG(IS_AIX)
// There is currently no way to get the executable path on OpenBSD
char* cpath;
if((cpath= getenv("CHROME_EXE_PATH"))!= NULL){
*result=FilePath(cpath);
}else{
*result=FilePath("/usr/local/chrome/chrome");
}
returntrue;
#endif
}
case DIR_SRC_TEST_DATA_ROOT:{
FilePath path;
// On POSIX, unit tests execute two levels deep from the source root.
// For example: out/{Debug|Release}/net_unittest
if(PathService::Get(DIR_EXE,&path)){
*result= path.DirName().DirName();
returntrue;
}
DLOG(ERROR)<<"Couldn't find your source root. "
<<"Try running from your chromium/src directory.";
returnfalse;
}
case DIR_USER_DESKTOP:
*result= nix::GetXDGUserDirectory("DESKTOP","Desktop");
returntrue;
case DIR_CACHE:{
std::unique_ptr<Environment> env(Environment::Create());
FilePath cache_dir(
nix::GetXDGDirectory(env.get(),"XDG_CACHE_HOME",".cache"));
*result= cache_dir;
returntrue;
}
}
returnfalse;
}
}// namespace base

[8]ページ先頭

©2009-2025 Movatter.jp