# HG changeset patch # User Rob Landley # Date 1198834173 21600 # Node ID bc87305c391f099a3c536efa48ff695021f9b75e # Parent ca48a878255d401198456ded14dcb23075852308 Make touch work reliably when file doesn't exist and clean up headers a bit. diff -r ca48a878255d -r bc87305c391f toys.h --- a/toys.h Thu Dec 27 21:36:44 2007 -0600 +++ b/toys.h Fri Dec 28 03:29:33 2007 -0600 @@ -31,8 +31,11 @@ #include #include #include +#include +#include + +#define _XOPEN_SOURCE 600 #include -#include #include "lib/lib.h" #include "toys/e2fs.h" diff -r ca48a878255d -r bc87305c391f toys/touch.c --- a/toys/touch.c Thu Dec 27 21:36:44 2007 -0600 +++ b/toys/touch.c Fri Dec 28 03:29:33 2007 -0600 @@ -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 @@ 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; }