[cmake-commits] hoffman committed encode.c 1.3 1.4 extract.c 1.13 1.14 libtar.c 1.15 1.16 util.c 1.5 1.6

cmake-commits at cmake.org cmake-commits at cmake.org
Mon Dec 4 17:26:43 EST 2006


Update of /cvsroot/CMake/CMake/Utilities/cmtar
In directory public:/mounts/ram/cvs-serv3420/Utilities/cmtar

Modified Files:
	encode.c extract.c libtar.c util.c 
Log Message:
ENH: merge in changes for beos support


Index: encode.c
===================================================================
RCS file: /cvsroot/CMake/CMake/Utilities/cmtar/encode.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- encode.c	30 Dec 2005 15:35:23 -0000	1.3
+++ encode.c	4 Dec 2006 22:26:40 -0000	1.4
@@ -197,12 +197,14 @@
 th_set_mode(TAR *t, mode_t fmode)
 {
 #ifndef WIN32
+#ifndef __BEOS__
   if (S_ISSOCK(fmode))
   {
     fmode &= ~S_IFSOCK;
     fmode |= S_IFIFO;
   }
 #endif
+#endif
   /* Looks like on windows the st_mode is longer than 8 characters. */
   int_to_oct(fmode & 07777777, (t)->th_buf.mode, 8);
 }

Index: util.c
===================================================================
RCS file: /cvsroot/CMake/CMake/Utilities/cmtar/util.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- util.c	30 Dec 2005 18:22:27 -0000	1.5
+++ util.c	4 Dec 2006 22:26:41 -0000	1.6
@@ -100,6 +100,13 @@
     if (*dirp == '\0')
       continue;
 
+    /*
+     * Don't try to build current or parent dir. It doesn't make sense anyhow,
+     *  but it also returns EINVAL instead of EEXIST on BeOS!
+     */
+    if ((strcmp(dirp, ".") == 0) || (strcmp(dirp, "..") == 0))
+        continue;
+
     if (dst[0] != '\0')
       strcat(dst, "/");
     strcat(dst, dirp);

Index: extract.c
===================================================================
RCS file: /cvsroot/CMake/CMake/Utilities/cmtar/extract.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- extract.c	23 May 2006 16:38:22 -0000	1.13
+++ extract.c	4 Dec 2006 22:26:40 -0000	1.14
@@ -116,7 +116,7 @@
     return -1;
   }
   /* change permissions */
-  if (!TH_ISSYM(t) && chmod(filename, mode) == -1)
+  if (!TH_ISSYM(t) && chmod(filename, mode & 07777) == -1)
   {
 #ifdef DEBUG
     perror("chmod()");
@@ -718,6 +718,7 @@
   char *filename;
   char buf[T_BLOCKSIZE];
   char *pathname = 0;
+  size_t len = 0;
 
   if (!TH_ISDIR(t))
   {
@@ -750,14 +751,23 @@
     return -1;
     }
 
+    /* Strip trailing '/'...it confuses some Unixes (and BeOS)... */
+    strncpy(buf, filename, sizeof(buf)-1);
+    buf[sizeof(buf)-1] = 0;
+    len = strlen(buf);
+    if ((len > 0) && (buf[len-1] == '/'))
+      {
+      buf[len-1] = '\0';
+      }
+
 #ifdef DEBUG
   printf("  ==> extracting: %s (mode %04o, directory)\n", filename,
          mode);
 #endif
 #ifdef WIN32
-  if (mkdir(filename) == -1)
+  if (mkdir(buf) == -1)
 #else
-  if (mkdir(filename, mode) == -1)
+  if (mkdir(buf, mode & 07777) == -1)
 #endif
   {
 #ifdef __BORLANDC__
@@ -772,7 +782,7 @@
 #endif      
     if (errno == EEXIST)
     {
-      if (chmod(filename, mode) == -1)
+      if (chmod(filename, mode & 07777) == -1)
       {
 #ifdef DEBUG
         perror("chmod()");
@@ -860,7 +870,7 @@
   printf("  ==> extracting: %s (fifo)\n", filename);
 #endif
 #ifndef WIN32
-  if (mkfifo(filename, mode) == -1)
+  if (mkfifo(filename, mode & 07777) == -1)
 #else
     (void)mode;
 #endif

Index: libtar.c
===================================================================
RCS file: /cvsroot/CMake/CMake/Utilities/cmtar/libtar.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- libtar.c	19 Oct 2006 19:00:09 -0000	1.15
+++ libtar.c	4 Dec 2006 22:26:40 -0000	1.16
@@ -99,8 +99,13 @@
     return -1;
     }
 
-#if !defined(_WIN32) || defined(__CYGWIN__)
-  if ((oflags & O_CREAT) && fchmod(fd, mode))
+#if defined(__BEOS__) && !defined(__ZETA__)  // no fchmod on BeOS...do pathname instead.
+  if ((oflags & O_CREAT) && chmod(pathname, mode & 07777))
+    {
+    return -1;
+    }
+#elif !defined(_WIN32) || defined(__CYGWIN__)
+  if ((oflags & O_CREAT) && fchmod(fd, mode & 07777))
     {
     return -1;
     }



More information about the Cmake-commits mailing list