]> git.wh0rd.org - dump.git/blobdiff - restore/dirs.c
Fixed restore of Solaris 7 ufsdump.
[dump.git] / restore / dirs.c
index 2be4e528f9e0a25ba56c15f3f5d8355235ebdeda..239248809daf0ac99630721b753c5499ba9e9d24 100644 (file)
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: dirs.c,v 1.22 2003/01/10 14:42:51 stelian Exp $";
+       "$Id: dirs.c,v 1.24 2003/10/26 16:05:47 stelian Exp $";
 #endif /* not lint */
 
 #include <config.h>
+#include <sys/types.h>
 #include <sys/param.h>
 #include <sys/file.h>
 #include <sys/stat.h>
@@ -62,8 +59,13 @@ static const char rcsid[] =
 #endif
 #include <bsdcompat.h>
 #else  /* __linux__ */
+#ifdef sunos
+#include <sys/fcntl.h>
+#include <bsdcompat.h>
+#else
 #include <ufs/ufs/dinode.h>
 #include <ufs/ufs/dir.h>
+#endif
 #endif /* __linux__ */
 #include <protocols/dumprestore.h>
 
@@ -77,8 +79,12 @@ static const char rcsid[] =
 #ifdef __linux__
 #include <endian.h>
 #else
+#ifdef sunos
+#include <arpa/nameser_compat.h>
+#else
 #include <machine/endian.h>
 #endif
+#endif
 
 #include "pathnames.h"
 #include "restore.h"
@@ -155,6 +161,10 @@ static void                 rst_seekdir __P((RST_DIR *, long, long));
 static long             rst_telldir __P((RST_DIR *));
 static struct direct   *searchdir __P((dump_ino_t, char *));
 
+#ifdef sunos
+extern int fdsmtc;
+#endif
+
 /*
  *     Extract directory contents, building up a directory structure
  *     on disk for extraction by name.
@@ -663,8 +673,11 @@ setdirmodes(int flags)
                        if (node.flags)
 #ifdef __linux__
                                (void) fsetflags(cp, node.flags);
+#else
+#ifdef sunos
 #else
                                (void) chflags(cp, node.flags);
+#endif
 #endif
                        utimes(cp, node.timep);
                        ep->e_flags &= ~NEW;
@@ -731,7 +744,7 @@ inodetype(dump_ino_t ino)
  * If requested, save its pertinent mode, owner, and time info.
  */
 static struct inotab *
-#ifdef __linux__
+#if defined(__linux__) || defined(sunos)
 allocinotab(dump_ino_t ino, struct new_bsd_inode *dip, long seekpt)
 #else
 allocinotab(dump_ino_t ino, struct dinode *dip, long seekpt)
@@ -750,17 +763,17 @@ allocinotab(dump_ino_t ino, struct dinode *dip, long seekpt)
        if (mf == NULL)
                return (itp);
        node.ino = ino;
-#ifdef __linux__
+#if defined(__linux__) || defined(sunos)
        node.timep[0].tv_sec = dip->di_atime.tv_sec;
        node.timep[0].tv_usec = dip->di_atime.tv_usec;
        node.timep[1].tv_sec = dip->di_mtime.tv_sec;
        node.timep[1].tv_usec = dip->di_mtime.tv_usec;
-#else  /* __linux__ */
+#else  /* __linux__  || sunos */
        node.timep[0].tv_sec = dip->di_atime;
        node.timep[0].tv_usec = dip->di_atimensec / 1000;
        node.timep[1].tv_sec = dip->di_mtime;
        node.timep[1].tv_usec = dip->di_mtimensec / 1000;
-#endif /* __linux__ */
+#endif /* __linux__  || sunos */
        node.mode = dip->di_mode;
        node.flags = dip->di_flags;
        node.uid = dip->di_uid;