hewei пре 6 година
родитељ
комит
d0a4e165f2
3 измењених фајлова са 26 додато и 2 уклоњено
  1. 2 0
      base/hdir.cpp
  2. 13 1
      base/hdir.h
  3. 11 1
      unittest/listdir_test.cpp

+ 2 - 0
base/hdir.cpp

@@ -53,6 +53,7 @@ int listdir(const char* dir, std::list<hdir_t>& dirs) {
             else if (S_ISSOCK(st.st_mode))  tmp.type = 's';
             else if (S_ISFIFO(st.st_mode))  tmp.type = 'p';
             else                            tmp.type = '-';
+            tmp.mode = st.st_mode & 0777;
             tmp.size = st.st_size;
             tmp.atime = st.st_atime;
             tmp.mtime = st.st_mtime;
@@ -77,6 +78,7 @@ int listdir(const char* dir, std::list<hdir_t>& dirs) {
         if (data.dwFileAttributes & _A_SUBDIR) {
             tmp.type = 'd';
         }
+        tmp.mod = 0777;
         tmp.size = (((uint64_t)data.nFileSizeHigh) << 32) | data.nFileSizeLow;
         tmp.atime = FileTime2Epoch(data.ftLastAccessTime);
         tmp.mtime = FileTime2Epoch(data.ftLastWriteTime);

+ 13 - 1
base/hdir.h

@@ -11,7 +11,17 @@ int main(int argc, char* argv[]) {
     std::list<hdir_t> dirs;
     listdir(dir, dirs);
     for (auto& item : dirs) {
-        printf("%c\t", item.type);
+        printf("%c%c%c%c%c%c%c%c%c%c\t",
+            item.type,
+            item.mode & 0400 ? 'r' : '-',
+            item.mode & 0200 ? 'w' : '-',
+            item.mode & 0100 ? 'x' : '-',
+            item.mode & 0040 ? 'r' : '-',
+            item.mode & 0020 ? 'w' : '-',
+            item.mode & 0010 ? 'x' : '-',
+            item.mode & 0004 ? 'r' : '-',
+            item.mode & 0002 ? 'w' : '-',
+            item.mode & 0001 ? 'x' : '-');
         float hsize;
         if (item.size < 1024) {
             printf("%lu\t", item.size);
@@ -43,6 +53,8 @@ int main(int argc, char* argv[]) {
 typedef struct hdir_s {
     char    name[256];
     char    type; // f:file d:dir l:link b:block c:char s:socket p:pipe
+    char    reserverd;
+    unsigned short mode;
     size_t  size;
     time_t  atime;
     time_t  mtime;

+ 11 - 1
unittest/listdir_test.cpp

@@ -10,7 +10,17 @@ int main(int argc, char* argv[]) {
     std::list<hdir_t> dirs;
     listdir(dir, dirs);
     for (auto& item : dirs) {
-        printf("%c\t", item.type);
+        printf("%c%c%c%c%c%c%c%c%c%c\t",
+            item.type,
+            item.mode & 0400 ? 'r' : '-',
+            item.mode & 0200 ? 'w' : '-',
+            item.mode & 0100 ? 'x' : '-',
+            item.mode & 0040 ? 'r' : '-',
+            item.mode & 0020 ? 'w' : '-',
+            item.mode & 0010 ? 'x' : '-',
+            item.mode & 0004 ? 'r' : '-',
+            item.mode & 0002 ? 'w' : '-',
+            item.mode & 0001 ? 'x' : '-');
         float hsize;
         if (item.size < 1024) {
             printf("%lu\t", item.size);