@@ -54,15 +54,6 @@ using namespace std;
5454// ------------------------------------------------
5555#define MAX_MULTIPART_CNT 10000 // OSS multipart max count
5656
57- //
58- // For cache directory top path
59- //
60- #if defined(P_tmpdir)
61- #define TMPFILE_DIR_0PATH P_tmpdir
62- #else
63- #define TMPFILE_DIR_0PATH " /tmp"
64- #endif
65-
6657size_t FdEntity::max_prefetch_bytes = 100 * 1024 * 1024 ;
6758
6859// ------------------------------------------------
@@ -1229,8 +1220,8 @@ int FdEntity::NoCacheLoadAndPost(off_t start, size_t size)
12291220 // open temporary file
12301221 FILE* ptmpfp;
12311222 int tmpfd;
1232- if (NULL == (ptmpfp = tmpfile ()) || -1 ==(tmpfd = fileno (ptmpfp))){
1233- S3FS_PRN_ERR (" failed to open tmp file. err (%d)" , errno);
1223+ if (NULL == (ptmpfp = FdManager::MakeTempFile ()) || -1 ==(tmpfd = fileno (ptmpfp))){
1224+ S3FS_PRN_ERR (" failed to open temporary file by errno (%d)" , errno);
12341225 if (ptmpfp){
12351226 fclose (ptmpfp);
12361227 }
@@ -1836,7 +1827,7 @@ pthread_mutex_t FdManager::fd_manager_lock;
18361827bool FdManager::is_lock_init (false );
18371828string FdManager::cache_dir (" " );
18381829size_t FdManager::free_disk_space = 0 ;
1839- std::string FdManager::tmp_dir = " " ;
1830+ std::string FdManager::tmp_dir = " /tmp " ;
18401831
18411832// ------------------------------------------------
18421833// FdManager class methods
@@ -1969,7 +1960,7 @@ fsblkcnt_t FdManager::GetFreeDiskSpace(const char* path)
19691960 if (0 < FdManager::cache_dir.size ()){
19701961 ctoppath = FdManager::cache_dir + " /" ;
19711962 }else {
1972- ctoppath = TMPFILE_DIR_0PATH " /" ;
1963+ ctoppath = tmp_dir + " /" ;
19731964 }
19741965 if (path && ' \0 ' != *path){
19751966 ctoppath += path;
@@ -1983,8 +1974,31 @@ fsblkcnt_t FdManager::GetFreeDiskSpace(const char* path)
19831974 return (vfsbuf.f_bavail * vfsbuf.f_bsize );
19841975}
19851976
1977+ bool FdManager::IsDir (const std::string* dir)
1978+ {
1979+ // check the directory
1980+ struct stat st;
1981+ if (0 != stat (dir->c_str (), &st)){
1982+ S3FS_PRN_ERR (" could not stat() directory %s by errno(%d)." , dir->c_str (), errno);
1983+ return false ;
1984+ }
1985+ if (!S_ISDIR (st.st_mode )){
1986+ S3FS_PRN_ERR (" the directory %s is not a directory." , dir->c_str ());
1987+ return false ;
1988+ }
1989+ return true ;
1990+ }
1991+
1992+ bool FdManager::CheckTmpDirExist ()
1993+ {
1994+ if (FdManager::tmp_dir.empty ()){
1995+ return true ;
1996+ }
1997+ return IsDir (&tmp_dir);
1998+ }
1999+
19862000FILE* FdManager::MakeTempFile () {
1987- if (tmp_dir.empty ()) {
2001+ if (tmp_dir.empty () || tmp_dir == " /tmp " ) {
19882002 return tmpfile ();
19892003 }
19902004 int fd;
@@ -2237,7 +2251,7 @@ bool FdManager::SetTmpDir(const char *dir)
22372251 tmp_dir = " /tmp" ;
22382252 }else {
22392253 tmp_dir = dir;
2240- }
2254+ }
22412255 return true ;
22422256}
22432257
0 commit comments