.
authorJim Meyering <jim@meyering.net>
Sat, 25 Jul 1998 13:48:45 +0000 (13:48 +0000)
committerJim Meyering <jim@meyering.net>
Sat, 25 Jul 1998 13:48:45 +0000 (13:48 +0000)
lib/Makefile.in
lib/utime.c [new file with mode: 0644]
m4/Makefile.in

index d80b432..9317b91 100644 (file)
@@ -4,7 +4,6 @@
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
-
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
@@ -146,7 +145,7 @@ getdate.c getgroups.c getline.c group-member.c lchown.c lstat.c \
 malloc.c memcmp.c memcpy.c memset.c mkdir.c mktime.c mountlist.c \
 obstack.c obstack.h posixtm.c realloc.c regex.c rename.c rmdir.c \
 rpmatch.c stat.c stpcpy.c strcasecmp.c strdup.c strftime.c strndup.c \
-strstr.c strtol.c strtoul.c strverscmp.c ylwrap
+strstr.c strtol.c strtoul.c strverscmp.c utime.c ylwrap
 
 
 DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
@@ -169,8 +168,9 @@ DEP_FILES =  .deps/addext.P .deps/alloca.P .deps/argmatch.P \
 .deps/save-cwd.P .deps/savedir.P .deps/stat.P .deps/stpcpy.P \
 .deps/strcasecmp.P .deps/strdup.P .deps/strftime.P .deps/stripslash.P \
 .deps/strndup.P .deps/strstr.P .deps/strtol.P .deps/strtoul.P \
-.deps/strverscmp.P .deps/userspec.P .deps/xgetcwd.P .deps/xmalloc.P \
-.deps/xstrdup.P .deps/xstrtol.P .deps/xstrtoul.P .deps/yesno.P
+.deps/strverscmp.P .deps/userspec.P .deps/utime.P .deps/xgetcwd.P \
+.deps/xmalloc.P .deps/xstrdup.P .deps/xstrtol.P .deps/xstrtoul.P \
+.deps/yesno.P
 SOURCES = $(libfu_a_SOURCES)
 OBJECTS = $(libfu_a_OBJECTS)
 
@@ -361,6 +361,8 @@ strverscmp_.c: strverscmp.c $(ANSI2KNR)
        $(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/strverscmp.c; then echo $(srcdir)/strverscmp.c; else echo strverscmp.c; fi` | $(ANSI2KNR) > strverscmp_.c
 userspec_.c: userspec.c $(ANSI2KNR)
        $(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/userspec.c; then echo $(srcdir)/userspec.c; else echo userspec.c; fi` | $(ANSI2KNR) > userspec_.c
+utime_.c: utime.c $(ANSI2KNR)
+       $(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/utime.c; then echo $(srcdir)/utime.c; else echo utime.c; fi` | $(ANSI2KNR) > utime_.c
 xgetcwd_.c: xgetcwd.c $(ANSI2KNR)
        $(CPP) $(DEFS) $(INCLUDES) $(CPPFLAGS) `if test -f $(srcdir)/xgetcwd.c; then echo $(srcdir)/xgetcwd.c; else echo xgetcwd.c; fi` | $(ANSI2KNR) > xgetcwd_.c
 xmalloc_.c: xmalloc.c $(ANSI2KNR)
@@ -383,8 +385,8 @@ modechange_.o mountlist_.o obstack_.o path-concat_.o posixtm_.o \
 quotearg_.o realloc_.o regex_.o rename_.o rmdir_.o rpmatch_.o \
 safe-read_.o save-cwd_.o savedir_.o stat_.o stpcpy_.o strcasecmp_.o \
 strdup_.o strftime_.o stripslash_.o strndup_.o strstr_.o strtol_.o \
-strtoul_.o strverscmp_.o userspec_.o xgetcwd_.o xmalloc_.o xstrdup_.o \
-xstrtol_.o xstrtoul_.o yesno_.o : $(ANSI2KNR)
+strtoul_.o strverscmp_.o userspec_.o utime_.o xgetcwd_.o xmalloc_.o \
+xstrdup_.o xstrtol_.o xstrtoul_.o yesno_.o : $(ANSI2KNR)
 
 tags: TAGS
 
diff --git a/lib/utime.c b/lib/utime.c
new file mode 100644 (file)
index 0000000..557444c
--- /dev/null
@@ -0,0 +1,81 @@
+/* Copyright (C) 1998 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+/* derived from a function in touch.c */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#undef utime
+
+#include <sys/types.h>
+
+#ifdef HAVE_UTIME_H
+# include <utime.h>
+#endif
+
+#include "safe-read.h"
+
+/* Some systems (even some that do have <utime.h>) don't declare this
+   structure anywhere.  */
+#ifndef HAVE_STRUCT_UTIMBUF
+struct utimbuf
+{
+  long actime;
+  long modtime;
+};
+#endif
+
+/* Emulate utime (file, NULL) for systems (like 4.3BSD) that do not
+   interpret it to set the access and modification times of FILE to
+   the current time.  Return 0 if successful, -1 if not. */
+
+static int
+utime_null (const char *file)
+{
+#if HAVE_UTIMES_NULL
+  return utimes (file, 0);
+#else
+  int fd;
+  char c;
+  int status = 0;
+  struct stat sb;
+
+  fd = open (file, O_RDWR, 0666);
+  if (fd < 0
+      || fstat (fd, &sb) < 0
+      || safe_read (fd, &c, sizeof (char)) < 0
+      || lseek (fd, (off_t) 0, SEEK_SET) < 0
+      || full_write (fd, &c, sizeof (char)) < 0
+      /* Maybe do this -- it's necessary on SunOS4.1.3 with some combination
+        of patches, but that system doesn't use this code: it has utimes.
+        || fsync (fd) < 0
+      */
+      || ftruncate (fd, st.st_size) < 0
+      || close (fd) < 0)
+    status = -1;
+  return status;
+#endif
+}
+
+int
+rpl_utime (const char *file, const struct utimbuf *times)
+{
+  if (times)
+    return utime (file, times);
+
+  return utime_null (file);
+}
index 9b4dcac..0faee79 100644 (file)
@@ -4,7 +4,6 @@
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
-
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
@@ -96,7 +95,8 @@ getline.m4 getloadavg.m4 gettext.m4 inttypes_h.m4 isc-posix.m4 \
 jm-glibc-io.m4 jm-macros.m4 jm-mktime.m4 jm-winsz1.m4 jm-winsz2.m4 \
 lchown.m4 lcmessage.m4 lfs.m4 ls-mntd-fs.m4 lstat.m4 malloc.m4 memcmp.m4 \
 perl.m4 prereq.m4 progtest.m4 putenv.m4 readdir.m4 realloc.m4 regex.m4 \
-ssize_t.m4 stat.m4 strftime.m4 uintmax_t.m4 uptime.m4 utimbuf.m4
+ssize_t.m4 stat.m4 strftime.m4 uintmax_t.m4 uptime.m4 utimbuf.m4 utime.m4 \
+utimes.m4
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 CONFIG_HEADER = ../config.h
 CONFIG_CLEAN_FILES =