restore code for windows
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Mon, 20 Jan 2025 16:41:31 +0000 (17:41 +0100)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Mon, 20 Jan 2025 16:41:31 +0000 (17:41 +0100)
function.c

index 24b980e77499f062492322d8dac73ca1a6edd197..c08c57cc92d401f9bd022672ac8a2859571cd179 100644 (file)
@@ -100,13 +100,43 @@ list_t *alloclist (void)
 
 list_t *_addelement (list_t *list, char *dirname, char *filename, type_t type)
 {
+    struct stat sb;
     char *name = newfilename (dirname, filename);
-    struct stat sb = {0};
-    int error = (STAT (name, &sb) == -1);
+    STAT (name, &sb);
 
     size_t size = 0;
-    if (type == type_reg_e) {
-        size = sb.st_size;
+    if ((type == type_unkn_e) || (type == type_reg_e)) {
+        switch (sb.st_mode & S_IFMT) {
+        case S_IFBLK:
+            type = type_block_e;
+            break;
+        case S_IFCHR:
+            type = type_char_e;
+            break;
+        case S_IFDIR:
+            type = type_dir_e;
+            break;
+        case S_IFIFO:
+            type = type_pipe_e;
+            break;
+#ifndef WIN32
+        case S_IFLNK:
+            type = type_symb_e;
+            break;
+#endif
+        case S_IFREG:
+            type = type_reg_e;
+            break;
+#ifndef WIN32
+        case S_IFSOCK:
+            type = type_socket_e;
+            break;
+#endif
+        }
+
+        if (type == type_reg_e) {
+            size = sb.st_size;
+        }
     }
 
     list->nb++;