[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH] libc: POSIX: Etwas vernuenftigeres stat



! libc: POSIX: Manche Programme pruefen auf Dateirechte und laufen mit
  777 besser. Die Konstanten sollten auch nicht alle gleich sein.

Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
 src/modules/include/sys/stat.h |   42 ++++++++++++++++++++--------------------
 src/modules/lib/posix/stat.c   |    2 +
 2 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/src/modules/include/sys/stat.h b/src/modules/include/sys/stat.h
index 25290f7..5e7cfcb 100644
--- a/src/modules/include/sys/stat.h
+++ b/src/modules/include/sys/stat.h
@@ -33,47 +33,47 @@
 // Modus Format: 3 Bits fuer Dateityp
 
 /// Zurgriffsberechtigungen
-#define S_IRUSR 0
-#define S_IWUSR 0
-#define S_IXUSR 0
-#define S_IRGRP 0
-#define S_IWGRP 0
-#define S_IXGRP 0
-#define S_IROTH 0
-#define S_IWOTH 0
-#define S_IXOTH 0
-#define S_IRWXU 0
-#define S_IRWXG 0
-#define S_IRWXO 0
-
-/* Sowas haben wir momentan eh nicht */
+#define S_IRUSR 0400
+#define S_IWUSR 0200
+#define S_IXUSR 0100
+#define S_IRGRP 0040
+#define S_IWGRP 0020
+#define S_IXGRP 0010
+#define S_IROTH 0004
+#define S_IWOTH 0002
+#define S_IXOTH 0001
+#define S_IRWXU 0700
+#define S_IRWXG 0070
+#define S_IRWXO 0007
+
+/* FIXME Sowas haben wir momentan eh nicht */
 #define S_ISUID (1 << 5)
 #define S_ISGID (1 << 5)
 #define S_ISVTX (1 << 5)
 
 /// Modus: Maske fuer Dateityp
-#define S_IFMT 0x7
+#define S_IFMT (0x7 << 12)
 
 /// Modus: Blockdatei
-#define S_IFBLK 0x0
+#define S_IFBLK (0x0 << 12)
 
 /// Modus: Character Datei
-#define S_IFCHR 0x1
+#define S_IFCHR (0x1 << 12)
 
 /// Modus: Regulaere Datei
-#define S_IFREG 0x2
+#define S_IFREG (0x2 << 12)
 
 /// Modus: FIFO
-#define S_IFIFO 0x3
+#define S_IFIFO (0x3 << 12)
 
 /// Modus: Verzeichnis
-#define S_IFDIR 0x4
+#define S_IFDIR (0x4 << 12)
 
 /// Modus: Symlink
-#define S_IFLNK 0x5
+#define S_IFLNK (0x5 << 12)
 
 /// Modus: Socket
-#define S_IFSOCK 0x6
+#define S_IFSOCK (0x6 << 12)
 
 
 /// Ueberprueft ob es sich bei einem st_mode-Feld um eine Regulaere Datei
diff --git a/src/modules/lib/posix/stat.c b/src/modules/lib/posix/stat.c
index 56f6104..9033c76 100644
--- a/src/modules/lib/posix/stat.c
+++ b/src/modules/lib/posix/stat.c
@@ -84,6 +84,7 @@ static int lost_stat(FILE* f, struct stat* stat_buf)
     // Zuerst die ganze Struktur auf 0 Setzen
     memset(stat_buf, 0, sizeof(struct stat));
 
+    stat_buf->st_mode = 0777;
     stat_buf->st_mode |= S_IFREG;
     
     pos = ftell(f);
@@ -133,6 +134,7 @@ int stat(const char* filename, struct stat* stat_buf)
         // Zuerst die ganze Struktur auf 0 Setzen
         memset(stat_buf, 0, sizeof(struct stat));
 
+        stat_buf->st_mode = 0777;
         stat_buf->st_mode |= S_IFDIR;
         stat_buf->st_uid = 0;
         stat_buf->st_gid = 0;
-- 
1.6.0.2