From 2d049299910615dbdae1f523eea0749d59d24443 Mon Sep 17 00:00:00 2001 From: Brian Cox Date: Thu, 7 Apr 2016 23:56:58 -0700 Subject: [PATCH] Display doors & event ports correctly (Solaris) --- src/core/fsservices.h | 4 +++- src/core/unixfsservices.cpp | 30 ++++++++++++++++++++++++------ src/fs/fsdatasourceiter.cpp | 6 ++++++ src/fs/fspropcalc.cpp | 6 ++++++ src/fs/fspropset.cpp | 4 +++- src/fs/fspropset.h | 2 ++ src/fs/fsstrings.cpp | 2 ++ src/fs/fsstrings.h | 2 ++ 8 files changed, 48 insertions(+), 8 deletions(-) diff --git a/src/core/fsservices.h b/src/core/fsservices.h index be457b6..0f8ad2f 100644 --- a/src/core/fsservices.h +++ b/src/core/fsservices.h @@ -128,7 +128,9 @@ struct cFSStatArgs { TY_CHARDEV, TY_SYMLINK, TY_FIFO, - TY_SOCK + TY_SOCK, + TY_DOOR, + TY_PORT }; // attr is fs dependent? diff --git a/src/core/unixfsservices.cpp b/src/core/unixfsservices.cpp index 1222117..09644d9 100644 --- a/src/core/unixfsservices.cpp +++ b/src/core/unixfsservices.cpp @@ -381,14 +381,21 @@ void cUnixFSServices::Stat( const TSTRING& strNameC, cFSStatArgs& stat) const th stat.blocks = statbuf.st_blocks; // set the file type - if(S_ISREG(statbuf.st_mode)) stat.mFileType = cFSStatArgs::TY_FILE; + if(S_ISREG(statbuf.st_mode)) stat.mFileType = cFSStatArgs::TY_FILE; else if(S_ISDIR(statbuf.st_mode)) stat.mFileType = cFSStatArgs::TY_DIR; else if(S_ISLNK(statbuf.st_mode)) stat.mFileType = cFSStatArgs::TY_SYMLINK; else if(S_ISBLK(statbuf.st_mode)) stat.mFileType = cFSStatArgs::TY_BLOCKDEV; else if(S_ISCHR(statbuf.st_mode)) stat.mFileType = cFSStatArgs::TY_CHARDEV; else if(S_ISFIFO(statbuf.st_mode)) stat.mFileType = cFSStatArgs::TY_FIFO; else if(S_ISSOCK(statbuf.st_mode)) stat.mFileType = cFSStatArgs::TY_SOCK; - else stat.mFileType = cFSStatArgs::TY_INVALID; +#ifdef S_IFDOOR + else if(S_ISDOOR(statbuf.st_mode)) stat.mFileType = cFSStatArgs::TY_DOOR; +#endif +#ifdef S_IFPORT + else if(S_ISPORT(statbuf.st_mode)) stat.mFileType = cFSStatArgs::TY_PORT; +#endif + + else stat.mFileType = cFSStatArgs::TY_INVALID; } void cUnixFSServices::GetMachineName( TSTRING& strName ) const throw( eFSServices ) @@ -589,18 +596,29 @@ void cUnixFSServices::ConvertModeToString( uint64 perm, TSTRING& tstrPerm ) cons { case S_IFDIR: szPerm[0] = _T('d'); - break; + break; case S_IFCHR: szPerm[0] = _T('c'); - break; + break; case S_IFBLK: szPerm[0] = _T('b'); - break; + break; case S_IFIFO: szPerm[0] = _T('p'); - break; + break; case S_IFLNK: szPerm[0] = _T('l'); + break; +#ifdef S_IFDOOR + case S_IFDOOR: + szPerm[0] = _T('D'); + break +#endif +#ifdef S_IFPORT + case S_IFPORT: + szPerm[0] = _T('P'); + break; +#endif break; } diff --git a/src/fs/fsdatasourceiter.cpp b/src/fs/fsdatasourceiter.cpp index 357ccfd..998299d 100644 --- a/src/fs/fsdatasourceiter.cpp +++ b/src/fs/fsdatasourceiter.cpp @@ -249,6 +249,12 @@ bool cFSDataSourceIter::InitializeTypeInfo(iFCO* pFCO) case cFSStatArgs::TY_SOCK: propSet.SetFileType(cFSPropSet::FT_SOCK); break; + case cFSStatArgs::TY_DOOR: + propSet.SetFileType(cFSPropSet::FT_DOOR); + break; + case cFSStatArgs::TY_PORT: + propSet.SetFileType(cFSPropSet::FT_PORT); + break; default: // set it to invalid propSet.SetFileType(cFSPropSet::FT_INVALID); diff --git a/src/fs/fspropcalc.cpp b/src/fs/fspropcalc.cpp index 8400a6c..72bb860 100755 --- a/src/fs/fspropcalc.cpp +++ b/src/fs/fspropcalc.cpp @@ -255,6 +255,12 @@ void cFSPropCalc::VisitFSObject(cFSObject& obj) case cFSStatArgs::TY_SOCK: propSet.SetFileType(cFSPropSet::FT_SOCK); break; + case cFSStatArgs::TY_DOOR: + propSet.SetFileType(cFSPropSet::FT_DOOR); + break; + case cFSStatArgs::TY_PORT: + propSet.SetFileType(cFSPropSet::FT_PORT); + break; default: // set it to invalid propSet.SetFileType(cFSPropSet::FT_INVALID); diff --git a/src/fs/fspropset.cpp b/src/fs/fspropset.cpp index 3850bb5..297ce6f 100644 --- a/src/fs/fspropset.cpp +++ b/src/fs/fspropset.cpp @@ -58,7 +58,9 @@ TSTRING cFCOPropFileType::AsString() const fs::STR_FT_CHARDEV, fs::STR_FT_SYMLINK, fs::STR_FT_FIFO, - fs::STR_FT_SOCK + fs::STR_FT_SOCK, + fs::STR_FT_DOOR, + fs::STR_FT_PORT }; int32 fileType = GetValue(); diff --git a/src/fs/fspropset.h b/src/fs/fspropset.h index e91b1cb..c1c050f 100644 --- a/src/fs/fspropset.h +++ b/src/fs/fspropset.h @@ -109,6 +109,8 @@ public: FT_SYMLINK, FT_FIFO, FT_SOCK, + FT_DOOR, + FT_PORT, FT_NUMITEMS }; diff --git a/src/fs/fsstrings.cpp b/src/fs/fsstrings.cpp index ac5f5b0..1f6df82 100644 --- a/src/fs/fsstrings.cpp +++ b/src/fs/fsstrings.cpp @@ -49,6 +49,8 @@ TSS_BeginStringtable( cFS ) TSS_StringEntry( fs::STR_FT_SYMLINK, _T("Symbolic Link") ), TSS_StringEntry( fs::STR_FT_FIFO, _T("FIFO") ), TSS_StringEntry( fs::STR_FT_SOCK, _T("Socket") ), + TSS_StringEntry( fs::STR_FT_DOOR, _T("Door") ), + TSS_StringEntry( fs::STR_FT_PORT, _T("Event Port") ), // property names TSS_StringEntry( fs::STR_PROP_DEV, _T("Device Number") ), diff --git a/src/fs/fsstrings.h b/src/fs/fsstrings.h index 6f9f183..c5db729 100644 --- a/src/fs/fsstrings.h +++ b/src/fs/fsstrings.h @@ -53,6 +53,8 @@ TSS_BeginStringIds( fs ) STR_FT_SYMLINK, STR_FT_FIFO, STR_FT_SOCK, + STR_FT_DOOR, + STR_FT_PORT, // property names STR_PROP_DEV,