Mercurial > hg > octave-nkf > gnulib-hg
annotate lib/utime.c @ 4629:9583f9cee522
[!HAVE_UTIMES_NULL]: Include <sys/stat.h>, <fcntl.h>.
(utime_null): Fix typo: 'st' was sometimes called 'sb'.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Mon, 08 Sep 2003 22:32:00 +0000 |
parents | f1650b772bb6 |
children | 8b1923c943a6 |
rev | line source |
---|---|
4474
f1650b772bb6
Correct SunOS and Solaris version number notation to match Sun's usage.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4105
diff
changeset
|
1 /* Copyright (C) 1998, 2001, 2002, 2003 Free Software Foundation, Inc. |
1442 | 2 |
3 This program is free software; you can redistribute it and/or modify it | |
4 under the terms of the GNU General Public License as published by the | |
5 Free Software Foundation; either version 2, or (at your option) any | |
6 later version. | |
7 | |
8 This program is distributed in the hope that it will be useful, | |
9 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 GNU General Public License for more details. | |
12 | |
13 You should have received a copy of the GNU General Public License | |
14 along with this program; if not, write to the Free Software Foundation, | |
15 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |
16 | |
17 /* derived from a function in touch.c */ | |
18 | |
19 #ifdef HAVE_CONFIG_H | |
20 # include <config.h> | |
21 #endif | |
22 #undef utime | |
23 | |
24 #include <sys/types.h> | |
25 | |
26 #ifdef HAVE_UTIME_H | |
27 # include <utime.h> | |
28 #endif | |
29 | |
4629
9583f9cee522
[!HAVE_UTIMES_NULL]: Include <sys/stat.h>, <fcntl.h>.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4474
diff
changeset
|
30 #if !HAVE_UTIMES_NULL |
9583f9cee522
[!HAVE_UTIMES_NULL]: Include <sys/stat.h>, <fcntl.h>.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4474
diff
changeset
|
31 # include <sys/stat.h> |
9583f9cee522
[!HAVE_UTIMES_NULL]: Include <sys/stat.h>, <fcntl.h>.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4474
diff
changeset
|
32 # include <fcntl.h> |
9583f9cee522
[!HAVE_UTIMES_NULL]: Include <sys/stat.h>, <fcntl.h>.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4474
diff
changeset
|
33 #endif |
9583f9cee522
[!HAVE_UTIMES_NULL]: Include <sys/stat.h>, <fcntl.h>.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4474
diff
changeset
|
34 |
3406 | 35 #include "full-write.h" |
1442 | 36 #include "safe-read.h" |
37 | |
38 /* Some systems (even some that do have <utime.h>) don't declare this | |
39 structure anywhere. */ | |
40 #ifndef HAVE_STRUCT_UTIMBUF | |
41 struct utimbuf | |
42 { | |
43 long actime; | |
44 long modtime; | |
45 }; | |
46 #endif | |
47 | |
48 /* Emulate utime (file, NULL) for systems (like 4.3BSD) that do not | |
49 interpret it to set the access and modification times of FILE to | |
50 the current time. Return 0 if successful, -1 if not. */ | |
51 | |
52 static int | |
53 utime_null (const char *file) | |
54 { | |
55 #if HAVE_UTIMES_NULL | |
56 return utimes (file, 0); | |
57 #else | |
58 int fd; | |
59 char c; | |
60 int status = 0; | |
4629
9583f9cee522
[!HAVE_UTIMES_NULL]: Include <sys/stat.h>, <fcntl.h>.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4474
diff
changeset
|
61 struct stat st; |
1442 | 62 |
1820
6908e7ed16b7
(utime_null): Don't pass 0666 to open; it's not needed and isn't
Jim Meyering <jim@meyering.net>
parents:
1442
diff
changeset
|
63 fd = open (file, O_RDWR); |
1442 | 64 if (fd < 0 |
4629
9583f9cee522
[!HAVE_UTIMES_NULL]: Include <sys/stat.h>, <fcntl.h>.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4474
diff
changeset
|
65 || fstat (fd, &st) < 0 |
4088
815386455680
Update for changed signature of safe_read.
Bruno Haible <bruno@clisp.org>
parents:
3407
diff
changeset
|
66 || safe_read (fd, &c, sizeof c) == SAFE_READ_ERROR |
1442 | 67 || lseek (fd, (off_t) 0, SEEK_SET) < 0 |
3406 | 68 || full_write (fd, &c, sizeof c) != sizeof c |
4474
f1650b772bb6
Correct SunOS and Solaris version number notation to match Sun's usage.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4105
diff
changeset
|
69 /* Maybe do this -- it's necessary on SunOS 4.1.3 with some combination |
1442 | 70 of patches, but that system doesn't use this code: it has utimes. |
71 || fsync (fd) < 0 | |
72 */ | |
4105
7f998811f2f0
Don't call ftruncate() when it's not needed.
Bruno Haible <bruno@clisp.org>
parents:
4088
diff
changeset
|
73 || (st.st_size == 0 && ftruncate (fd, st.st_size) < 0) |
1442 | 74 || close (fd) < 0) |
75 status = -1; | |
76 return status; | |
77 #endif | |
78 } | |
79 | |
80 int | |
81 rpl_utime (const char *file, const struct utimbuf *times) | |
82 { | |
83 if (times) | |
84 return utime (file, times); | |
85 | |
86 return utime_null (file); | |
87 } |