From 3e65438376f090a29ee885c8e94e248f819f8e2e Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Sat, 25 Jul 1998 13:48:45 +0000 Subject: [PATCH] . --- lib/Makefile.in | 14 +++++----- lib/utime.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ m4/Makefile.in | 4 +-- 3 files changed, 91 insertions(+), 8 deletions(-) create mode 100644 lib/utime.c diff --git a/lib/Makefile.in b/lib/Makefile.in index d80b432fb..9317b91d2 100644 --- a/lib/Makefile.in +++ b/lib/Makefile.in @@ -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 index 000000000..557444c0d --- /dev/null +++ b/lib/utime.c @@ -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 +#endif +#undef utime + +#include + +#ifdef HAVE_UTIME_H +# include +#endif + +#include "safe-read.h" + +/* Some systems (even some that do have ) 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); +} diff --git a/m4/Makefile.in b/m4/Makefile.in index 9b4dcacb6..0faee79eb 100644 --- a/m4/Makefile.in +++ b/m4/Makefile.in @@ -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 = -- 2.11.0