[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