port on Windows
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Mon, 6 Jan 2025 17:02:06 +0000 (18:02 +0100)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Mon, 6 Jan 2025 17:02:06 +0000 (18:02 +0100)
function.c
makefile

index fcee89f48f197f75ff713d87af49984d3252c439..daf59db6ddf3c38dd974b88e689084769ee0b616 100644 (file)
@@ -1,11 +1,14 @@
 #include <dirent.h>
-#include <grp.h>
-#include <pwd.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
+
+#ifndef WIN32
+#include <grp.h>
+#include <pwd.h>
 #include <sys/sysmacros.h>
+#endif
 
 #include "debug.h"
 #include "type.h"
@@ -53,7 +56,11 @@ list_t *_addelement (list_t *list, char *dirname, char *filename, type_t type)
         char *name = newfilename (dirname, filename);
 
         struct stat sb;
+#ifdef WIN32
+        if (stat (name, &sb) == -1) {
+#else /* Linux*/
         if (lstat (name, &sb) == -1) {
+#endif
             VERBOSE (ERROR, fprintf (stderr, "can't stat on file '%s'\n", name));
             exit (1);
         }
@@ -71,15 +78,19 @@ list_t *_addelement (list_t *list, char *dirname, char *filename, type_t type)
         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) {
@@ -131,6 +142,7 @@ list_t *exploredir (char *dirname)
             continue;
         }
         type_t type = type_unkn_e;
+#ifndef WIN32
         switch (dp->d_type) {
         case DT_BLK:
             type = type_block_e;
@@ -154,6 +166,7 @@ list_t *exploredir (char *dirname)
             type = type_socket_e;
             break;
         }
+#endif
         _addelement (list, dirname, dp->d_name, type);
     }
     closedir(dir);
@@ -178,13 +191,20 @@ void getinfo (char *dirname, elem_t *elem)
     char *name = newfilename (dirname, elem->name);
 
     struct stat sb;
+#ifdef WIN32
+    if (stat (name, &sb) == -1) {
+#else /* Linux*/
     if (lstat (name, &sb) == -1) {
+#endif
         VERBOSE (ERROR, fprintf (stderr, "can't stat on file '%s%s%s'\n", dirname, SEPARATOR, elem->name));
         exit (1);
     }
 
     elem->mode = 0777 & sb.st_mode;
 
+#ifdef WIN32
+    elem->uid = strdup ("");
+#else /* Linux*/
     struct passwd *pwd = getpwuid (sb.st_uid);
     if (pwd) {
         elem->uid = strdup (pwd->pw_name);
@@ -192,7 +212,11 @@ void getinfo (char *dirname, elem_t *elem)
         elem->uid = (char *) calloc (_log10 (sb.st_uid) + 1, 1);
         sprintf (elem->uid, "%d", sb.st_uid);
     }
+#endif
 
+#ifdef WIN32
+    elem->gid = strdup ("");
+#else /* Linux*/
     struct group *grp = getgrgid (sb.st_gid);
     if (grp) {
         elem->gid = strdup (grp->gr_name);
@@ -200,6 +224,7 @@ void getinfo (char *dirname, elem_t *elem)
         elem->gid = (char *) calloc (_log10 (sb.st_gid) + 1, 1);
         sprintf (elem->gid, "%d", sb.st_gid);
     }
+#endif
 
     elem->nlk = sb.st_nlink;
 }
@@ -221,16 +246,15 @@ void createstatus (char *status, elem_t *elem)
     sprintf (status + strlen (status), " (%d)", (int)(elem->nlk));
 
     strcat (status, " ");
-    if (elem->size < 10000l) {
+    if (elem->size < (size_t)10000) {
         sprintf (status + strlen (status), "%dB", (int)(elem->size));
-    } else if (elem->size < 10000l * 1024) {
+    } else if (elem->size < (size_t)10000 * 1024) {
         sprintf (status + strlen (status), "%dkB", (int)(elem->size / 1024));
-    } else if (elem->size < 10000l * 1024 * 1024) {
+    } else if (elem->size < (size_t)10000 * 1024 * 1024) {
         sprintf (status + strlen (status), "%dMB", (int)(elem->size / 1024 / 1024));
-    } else if (elem->size < 10000l * 1024 * 1024 * 1024) {
-        sprintf (status + strlen (status), "%dGB", (int)(elem->size / 1024 / 1024 / 1024));
+    //} else if (elem->size < (size_t)10000 * 1024 * 1024 *1024) {
     } else {
-        sprintf (status + strlen (status), "%dTB", (int)(elem->size / 1024 / 1024 / 1024 / 1024));
+        sprintf (status + strlen (status), "%dGB", (int)(elem->size / 1024 / 1024 / 1024));
     }
 
     strcat (status, " ");
@@ -261,10 +285,12 @@ void createstatus (char *status, elem_t *elem)
         break;
     }
 
-    strcat (status, " ");
-    strcat (status, elem->uid);
-    strcat (status, "/");
-    strcat (status, elem->gid);
+    if (elem->uid && *elem->uid) {
+        strcat (status, " ");
+        strcat (status, elem->uid);
+        strcat (status, "/");
+        strcat (status, elem->gid);
+    }
 }
 
 void freelist (list_t *list)
index 042962e9b6d179e73b427f07272335fb2260eb11..0e016a067a0315ce482cf0135f942a7b9c7ea677 100644 (file)
--- a/makefile
+++ b/makefile
@@ -21,9 +21,11 @@ ifneq (, $(findstring linux, $(MAKE_HOST)))
 # Linux
 else ifneq (, $(findstring mingw, $(MAKE_HOST)))
 # Windows MinGw
+CFLAGS += -DWIN32
 #LDLIBS += -lws2_32
 LDOPT = winlnk
 else ifneq (, $(findstring cygwin, $(MAKE_HOST)))
+CFLAGS += -DWIN32
 # Windows CygWin
 LDOPT = winlnk
 else ifneq (, $(findstring msdos, $(MAKE_HOST)))