From 07c78d338b1adf0c3d32c3670f21e9b066d740da Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Fri, 28 Dec 2007 03:29:33 -0600 Subject: Make touch work reliably when file doesn't exist and clean up headers a bit. --- toys.h | 5 ++++- toys/touch.c | 27 +++++++++++---------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/toys.h b/toys.h index e78aea55..5ccec7d3 100644 --- a/toys.h +++ b/toys.h @@ -31,8 +31,11 @@ #include #include #include -#include #include +#include + +#define _XOPEN_SOURCE 600 +#include #include "lib/lib.h" #include "toys/e2fs.h" diff --git a/toys/touch.c b/toys/touch.c index da93ffc5..e01d157e 100644 --- a/toys/touch.c +++ b/toys/touch.c @@ -7,20 +7,14 @@ * See http://www.opengroup.org/onlinepubs/009695399/utilities/touch.html */ -#define _XOPEN_SOURCE 600 -#include -#include -#include -#include -#include #include "toys.h" -#define OPT_MTIME 0x01 -#define OPT_NOCREATE 0x02 -#define OPT_ATIME 0x04 -#define OPT_REFERENCE 0x08 -#define OPT_TIME 0x10 -#define OPT_LENGTH 0x20 +#define OPT_MTIME 0x01 +#define OPT_NOCREATE 0x02 +#define OPT_ATIME 0x04 +#define OPT_REFERENCE 0x08 +#define OPT_TIME 0x10 +#define OPT_LENGTH 0x20 void touch_main(void) { @@ -65,10 +59,11 @@ void touch_main(void) buf.modtime = curr_m; buf.actime = curr_a; - if (stat(arg, &sb) == -1) { - if (!(toys.optflags & OPT_NOCREATE) && errno == ENOENT) { - if (creat(arg, 0644)) - goto error; + if (stat(arg, &sb)) { + if (!(toys.optflags & OPT_NOCREATE)) { + int temp = umask(0); + xcreate(arg, O_CREAT, 0644); + if (CFG_TOYBOX_FREE) umask(temp); if (stat(arg, &sb)) goto error; } -- cgit v1.2.3