summaryrefslogtreecommitdiff
path: root/src/touch.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>1999-10-23 11:46:03 +0000
committerJim Meyering <jim@meyering.net>1999-10-23 11:46:03 +0000
commita579a9f85bd4a0da5dd67e3ef40a836b7d19d0fc (patch)
tree797119dfab6c80aee482cebf3565a0e130154ad7 /src/touch.c
parent767a68f51254537a9891ce511cc0d2c438f2f944 (diff)
downloadcoreutils-a579a9f85bd4a0da5dd67e3ef40a836b7d19d0fc.tar.xz
(full_write): Remove unused decl.
(open_maybe_create): Remove. (touch): Don't record whether the file was created; this isn't possible to do reliably and portably without race conditions. If the file was created and if amtime_now is nonzero, this change means we'll have to do another utime system call, but that's no more harmful than the previous version of this code.
Diffstat (limited to 'src/touch.c')
-rw-r--r--src/touch.c62
1 files changed, 3 insertions, 59 deletions
diff --git a/src/touch.c b/src/touch.c
index de9be5e7f..87986bc22 100644
--- a/src/touch.c
+++ b/src/touch.c
@@ -40,8 +40,6 @@
time_t time ();
#endif
-int full_write ();
-
/* Bitmasks for `change_times'. */
#define CH_ATIME 1
#define CH_MTIME 2
@@ -102,45 +100,6 @@ static int const time_masks[] =
CH_ATIME, CH_ATIME, CH_ATIME, CH_MTIME, CH_MTIME
};
-/* Open FILE, possibly creating it. Set *FILE_CREATED to nonzero if the
- open creates it, or to zero if the open call opened an existing file.
- Return the result of the open call. Be careful to avoid race conditions. */
-
-static int
-open_maybe_create (const char *file, int *file_created)
-{
- int fd;
-
- *file_created = 0;
- while (1)
- {
- /* First, see if we can create a new FILE. */
- fd = open (file, O_WRONLY | O_CREAT | O_EXCL,
- S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
- if (fd != -1)
- *file_created = 1;
-
- /* If the open succeeded or if it failed for any reason other
- than the existence of FILE, then we're done. Some systems
- (solaris) set errno to EINVAL when FILE is a directory. */
- if (fd != -1 || (errno != EEXIST && errno != EINVAL))
- break;
-
- /* The first open failed because FILE already exists.
- Now try to open it for writing. */
- fd = open (file, O_WRONLY);
-
- /* If the open succeeded or if it failed for any reason other
- than the absence of FILE, then we're done. */
- /* The 2nd open can fail if FILE was unlinked between the two
- open calls. When that happens, just iterate. */
- if (fd != -1 || errno != ENOENT)
- break;
- }
-
- return fd;
-}
-
/* Update the time of file FILE according to the options given.
Return 0 if successful, 1 if an error occurs. */
@@ -150,7 +109,6 @@ touch (const char *file)
int status;
struct stat sbuf;
int fd;
- int file_created;
if (no_create)
{
@@ -161,12 +119,12 @@ touch (const char *file)
/* FILE doesn't exist. So we're done. */
return 0;
}
- file_created = 0;
}
else
{
/* Try to open FILE, creating it if necessary. */
- fd = open_maybe_create (file, &file_created);
+ fd = open (file, O_WRONLY | O_CREAT,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
}
/* Don't fail if the open failed because FILE is a directory. */
@@ -179,21 +137,7 @@ touch (const char *file)
return 1;
}
- if (amtime_now)
- {
- if (file_created)
- {
- if (close (fd) < 0)
- {
- error (0, errno, "%s", file);
- return 1;
- }
-
- /* We've just created the file with the current times. */
- return 0;
- }
- }
- else
+ if (! amtime_now)
{
/* We're setting only one of the time values. stat the target to get
the other one. If we have the file descriptor already, use fstat,