mirror of
https://github.com/reactos/reactos.git
synced 2025-07-31 21:01:54 +00:00
- Start rosapps rearrange and cleanup process.
svn path=/trunk/; revision=34303
This commit is contained in:
parent
0a0a13a41c
commit
2012315e5a
1206 changed files with 81 additions and 81 deletions
180
rosapps/applications/cmdutils/touch/err.c
Normal file
180
rosapps/applications/cmdutils/touch/err.c
Normal file
|
@ -0,0 +1,180 @@
|
|||
/*-
|
||||
* Copyright (c) 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)err.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include "err.h"
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef __STDC__
|
||||
#include <stdarg.h>
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
|
||||
extern char *__progname; /* Program name, from crt0. */
|
||||
|
||||
void
|
||||
#ifdef __STDC__
|
||||
err(int eval, const char *fmt, ...)
|
||||
#else
|
||||
err(eval, fmt, va_alist)
|
||||
int eval;
|
||||
const char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
va_list ap;
|
||||
#if __STDC__
|
||||
va_start(ap, fmt);
|
||||
#else
|
||||
va_start(ap);
|
||||
#endif
|
||||
verr(eval, fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
verr(int eval, const char *fmt, va_list ap)
|
||||
{
|
||||
int sverrno;
|
||||
|
||||
sverrno = errno;
|
||||
(void)fprintf(stderr, "%s: ", __progname);
|
||||
if (fmt != NULL) {
|
||||
(void)vfprintf(stderr, fmt, ap);
|
||||
(void)fprintf(stderr, ": ");
|
||||
}
|
||||
(void)fprintf(stderr, "%s\n", strerror(sverrno));
|
||||
exit(eval);
|
||||
}
|
||||
|
||||
void
|
||||
#if __STDC__
|
||||
errx(int eval, const char *fmt, ...)
|
||||
#else
|
||||
errx(eval, fmt, va_alist)
|
||||
int eval;
|
||||
const char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
va_list ap;
|
||||
#if __STDC__
|
||||
va_start(ap, fmt);
|
||||
#else
|
||||
va_start(ap);
|
||||
#endif
|
||||
verrx(eval, fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
verrx(int eval, const char *fmt, va_list ap)
|
||||
{
|
||||
(void)fprintf(stderr, "%s: ", __progname);
|
||||
if (fmt != NULL)
|
||||
(void)vfprintf(stderr, fmt, ap);
|
||||
(void)fprintf(stderr, "\n");
|
||||
exit(eval);
|
||||
}
|
||||
|
||||
void
|
||||
#if __STDC__
|
||||
warn(const char *fmt, ...)
|
||||
#else
|
||||
warn(fmt, va_alist)
|
||||
const char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
va_list ap;
|
||||
#if __STDC__
|
||||
va_start(ap, fmt);
|
||||
#else
|
||||
va_start(ap);
|
||||
#endif
|
||||
vwarn(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
vwarn(fmt, ap)
|
||||
const char *fmt;
|
||||
va_list ap;
|
||||
{
|
||||
int sverrno;
|
||||
|
||||
sverrno = errno;
|
||||
(void)fprintf(stderr, "%s: ", __progname);
|
||||
if (fmt != NULL) {
|
||||
(void)vfprintf(stderr, fmt, ap);
|
||||
(void)fprintf(stderr, ": ");
|
||||
}
|
||||
(void)fprintf(stderr, "%s\n", strerror(sverrno));
|
||||
}
|
||||
|
||||
void
|
||||
#ifdef __STDC__
|
||||
warnx(const char *fmt, ...)
|
||||
#else
|
||||
warnx(fmt, va_alist)
|
||||
const char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
va_list ap;
|
||||
#ifdef __STDC__
|
||||
va_start(ap, fmt);
|
||||
#else
|
||||
va_start(ap);
|
||||
#endif
|
||||
vwarnx(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
vwarnx(fmt, ap)
|
||||
const char *fmt;
|
||||
va_list ap;
|
||||
{
|
||||
(void)fprintf(stderr, "%s: ", __progname);
|
||||
if (fmt != NULL)
|
||||
(void)vfprintf(stderr, fmt, ap);
|
||||
(void)fprintf(stderr, "\n");
|
||||
}
|
60
rosapps/applications/cmdutils/touch/err.h
Normal file
60
rosapps/applications/cmdutils/touch/err.h
Normal file
|
@ -0,0 +1,60 @@
|
|||
/*-
|
||||
* Copyright (c) 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)err.h 8.1 (Berkeley) 6/2/93
|
||||
*/
|
||||
|
||||
#ifndef _ERR_H_
|
||||
#define _ERR_H_
|
||||
|
||||
/*
|
||||
* Don't use va_list in the err/warn prototypes. Va_list is typedef'd in two
|
||||
* places (<machine/varargs.h> and <machine/stdarg.h>), so if we include one
|
||||
* of them here we may collide with the utility's includes. It's unreasonable
|
||||
* for utilities to have to include one of them to include err.h, so we get
|
||||
* _BSD_VA_LIST_ from <machine/ansi.h> and use it.
|
||||
*/
|
||||
/*#include <machine/ansi.h>*/
|
||||
/*#include <sys/cdefs.h>*/
|
||||
#include "various.h"
|
||||
#include <stdarg.h>
|
||||
|
||||
void err __P((int, const char *, ...));
|
||||
void verr __P((int, const char *, va_list));
|
||||
void errx __P((int, const char *, ...));
|
||||
void verrx __P((int, const char *, va_list));
|
||||
void warn __P((const char *, ...));
|
||||
void vwarn __P((const char *, va_list));
|
||||
void warnx __P((const char *, ...));
|
||||
void vwarnx __P((const char *, va_list));
|
||||
|
||||
#endif /* !_ERR_H_ */
|
347
rosapps/applications/cmdutils/touch/touch.c
Normal file
347
rosapps/applications/cmdutils/touch/touch.c
Normal file
|
@ -0,0 +1,347 @@
|
|||
/*
|
||||
* Copyright (c) 1993 Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* 7/20/97 - Ted Felix <tfelix@fred.net>
|
||||
* Ported to Win32 from bsd4.3-reno at wuarchive.
|
||||
* Biggest problems were err() routines, utines, and
|
||||
* gettimeofday(). All easily fixed.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
char copyright[] =
|
||||
"@(#) Copyright (c) 1993 Regents of the University of California.\n\
|
||||
All rights reserved.\n";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
//#ifdef __STDC__
|
||||
//#error "__STDC__ defined"
|
||||
//#endif
|
||||
|
||||
#include <sys/utime.h>
|
||||
#include <io.h>
|
||||
#include <fcntl.h>
|
||||
#include <getopt.h>
|
||||
#include <various.h>
|
||||
#define DEFFILEMODE S_IWRITE
|
||||
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
char *__progname; /* Program name, from crt0. */
|
||||
|
||||
/* Prototypes */
|
||||
int rw __P((char *, struct stat *, int));
|
||||
void stime_arg1 __P((char *, time_t *));
|
||||
void stime_arg2 __P((char *, int, time_t *));
|
||||
void stime_file __P((char *, time_t *));
|
||||
void usage __P((void));
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
struct stat sb;
|
||||
time_t tv[2];
|
||||
int aflag, cflag, fflag, mflag, ch, fd, len, rval, timeset;
|
||||
char *p;
|
||||
struct utimbuf utb;
|
||||
|
||||
__progname = argv[0];
|
||||
|
||||
aflag = cflag = fflag = mflag = timeset = 0;
|
||||
time(&tv[0]);
|
||||
|
||||
while ((ch = getopt(argc, argv, "acfmr:t:")) != EOF)
|
||||
switch(ch) {
|
||||
case 'a':
|
||||
aflag = 1;
|
||||
break;
|
||||
case 'c':
|
||||
cflag = 1;
|
||||
break;
|
||||
case 'f':
|
||||
fflag = 1;
|
||||
break;
|
||||
case 'm':
|
||||
mflag = 1;
|
||||
break;
|
||||
case 'r':
|
||||
timeset = 1;
|
||||
stime_file(optarg, tv);
|
||||
break;
|
||||
case 't':
|
||||
timeset = 1;
|
||||
stime_arg1(optarg, tv);
|
||||
break;
|
||||
case '?':
|
||||
default:
|
||||
usage();
|
||||
}
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
/* Default is both -a and -m. */
|
||||
if (aflag == 0 && mflag == 0)
|
||||
aflag = mflag = 1;
|
||||
|
||||
/*
|
||||
* If no -r or -t flag, at least two operands, the first of which
|
||||
* is an 8 or 10 digit number, use the obsolete time specification.
|
||||
*/
|
||||
if (!timeset && argc > 1) {
|
||||
(void)strtol(argv[0], &p, 10);
|
||||
len = p - argv[0];
|
||||
if (*p == '\0' && (len == 8 || len == 10)) {
|
||||
timeset = 1;
|
||||
stime_arg2(argv[0], len == 10, tv);
|
||||
}
|
||||
}
|
||||
|
||||
/* Otherwise use the current time of day. */
|
||||
if (!timeset)
|
||||
tv[1] = tv[0];
|
||||
|
||||
if (*argv == NULL)
|
||||
usage();
|
||||
|
||||
for (rval = 0; *argv; ++argv) {
|
||||
/* See if the file exists. */
|
||||
if (stat(*argv, &sb)) {
|
||||
if (!cflag) {
|
||||
/* Create the file. */
|
||||
fd = open(*argv,
|
||||
O_WRONLY | O_CREAT, DEFFILEMODE);
|
||||
if (fd == -1 || fstat(fd, &sb) || close(fd)) {
|
||||
rval = 1;
|
||||
warn("%s", *argv);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* If using the current time, we're done. */
|
||||
if (!timeset)
|
||||
continue;
|
||||
} else
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!aflag)
|
||||
tv[0] = sb.st_atime;
|
||||
if (!mflag)
|
||||
tv[1] = sb.st_mtime;
|
||||
|
||||
/* Try utime. */
|
||||
utb.actime = tv[0];
|
||||
utb.modtime = tv[1];
|
||||
if (!utime(*argv, &utb))
|
||||
continue;
|
||||
|
||||
/* If the user specified a time, nothing else we can do. */
|
||||
if (timeset) {
|
||||
rval = 1;
|
||||
warn("%s", *argv);
|
||||
}
|
||||
|
||||
/*
|
||||
* System V and POSIX 1003.1 require that a NULL argument
|
||||
* set the access/modification times to the current time.
|
||||
* The permission checks are different, too, in that the
|
||||
* ability to write the file is sufficient. Take a shot.
|
||||
*/
|
||||
if (!utime(*argv, NULL))
|
||||
continue;
|
||||
|
||||
/* Try reading/writing. */
|
||||
if (rw(*argv, &sb, fflag))
|
||||
rval = 1;
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
|
||||
#define ATOI2(ar) ((ar)[0] - '0') * 10 + ((ar)[1] - '0'); (ar) += 2;
|
||||
|
||||
void
|
||||
stime_arg1(char *arg, time_t *tvp)
|
||||
{
|
||||
struct tm *t;
|
||||
int yearset;
|
||||
char *p;
|
||||
/* Start with the current time. */
|
||||
if ((t = localtime(&tvp[0])) == NULL)
|
||||
err(1, "localtime");
|
||||
/* [[CC]YY]MMDDhhmm[.SS] */
|
||||
if ((p = strchr(arg, '.')) == NULL)
|
||||
t->tm_sec = 0; /* Seconds defaults to 0. */
|
||||
else {
|
||||
if (strlen(p + 1) != 2)
|
||||
goto terr;
|
||||
*p++ = '\0';
|
||||
t->tm_sec = ATOI2(p);
|
||||
}
|
||||
|
||||
yearset = 0;
|
||||
switch(strlen(arg)) {
|
||||
case 12: /* CCYYMMDDhhmm */
|
||||
t->tm_year = ATOI2(arg);
|
||||
t->tm_year *= 1000;
|
||||
yearset = 1;
|
||||
/* FALLTHOUGH */
|
||||
case 10: /* YYMMDDhhmm */
|
||||
if (yearset) {
|
||||
yearset = ATOI2(arg);
|
||||
t->tm_year += yearset;
|
||||
} else {
|
||||
yearset = ATOI2(arg);
|
||||
if (yearset < 69)
|
||||
t->tm_year = yearset + 2000;
|
||||
else
|
||||
t->tm_year = yearset + 1900;
|
||||
}
|
||||
t->tm_year -= 1900; /* Convert to UNIX time. */
|
||||
/* FALLTHROUGH */
|
||||
case 8: /* MMDDhhmm */
|
||||
t->tm_mon = ATOI2(arg);
|
||||
--t->tm_mon; /* Convert from 01-12 to 00-11 */
|
||||
t->tm_mday = ATOI2(arg);
|
||||
t->tm_hour = ATOI2(arg);
|
||||
t->tm_min = ATOI2(arg);
|
||||
break;
|
||||
default:
|
||||
goto terr;
|
||||
}
|
||||
|
||||
t->tm_isdst = -1; /* Figure out DST. */
|
||||
tvp[0] = tvp[1] = mktime(t);
|
||||
if (tvp[0] == -1)
|
||||
terr: errx(1,
|
||||
"out of range or illegal time specification: [[CC]YY]MMDDhhmm[.SS]");
|
||||
}
|
||||
|
||||
void
|
||||
stime_arg2(char *arg, int year, time_t *tvp)
|
||||
{
|
||||
struct tm *t;
|
||||
/* Start with the current time. */
|
||||
if ((t = localtime(&tvp[0])) == NULL)
|
||||
err(1, "localtime");
|
||||
|
||||
t->tm_mon = ATOI2(arg); /* MMDDhhmm[yy] */
|
||||
--t->tm_mon; /* Convert from 01-12 to 00-11 */
|
||||
t->tm_mday = ATOI2(arg);
|
||||
t->tm_hour = ATOI2(arg);
|
||||
t->tm_min = ATOI2(arg);
|
||||
if (year)
|
||||
t->tm_year = ATOI2(arg);
|
||||
|
||||
t->tm_isdst = -1; /* Figure out DST. */
|
||||
tvp[0] = tvp[1] = mktime(t);
|
||||
if (tvp[0] == -1)
|
||||
errx(1,
|
||||
"out of range or illegal time specification: MMDDhhmm[yy]");
|
||||
}
|
||||
|
||||
void
|
||||
stime_file(char *fname, time_t *tvp)
|
||||
{
|
||||
struct stat sb;
|
||||
|
||||
if (stat(fname, &sb))
|
||||
err(1, "%s", fname);
|
||||
tvp[0] = sb.st_atime;
|
||||
tvp[1] = sb.st_mtime;
|
||||
}
|
||||
|
||||
int
|
||||
rw(char *fname, struct stat *sbp, int force)
|
||||
{
|
||||
int fd, needed_chmod, rval;
|
||||
u_char byte;
|
||||
|
||||
/* Try regular files and directories. */
|
||||
if (!S_ISREG(sbp->st_mode) && !S_ISDIR(sbp->st_mode)) {
|
||||
warnx("%s: %s", fname, strerror(0));
|
||||
return (1);
|
||||
}
|
||||
|
||||
needed_chmod = rval = 0;
|
||||
if ((fd = open(fname, O_RDWR, 0)) == -1) {
|
||||
if (!force || chmod(fname, DEFFILEMODE))
|
||||
goto err;
|
||||
if ((fd = open(fname, O_RDWR, 0)) == -1)
|
||||
goto err;
|
||||
needed_chmod = 1;
|
||||
}
|
||||
|
||||
if (sbp->st_size != 0) {
|
||||
if (read(fd, &byte, sizeof(byte)) != sizeof(byte))
|
||||
goto err;
|
||||
if (lseek(fd, (off_t)0, SEEK_SET) == -1)
|
||||
goto err;
|
||||
if (write(fd, &byte, sizeof(byte)) != sizeof(byte))
|
||||
goto err;
|
||||
} else {
|
||||
if (write(fd, &byte, sizeof(byte)) != sizeof(byte)) {
|
||||
err: rval = 1;
|
||||
warn("%s", fname);
|
||||
/* } else if (ftruncate(fd, (off_t)0)) {*/
|
||||
} else if (chsize(fd, (off_t)0)) {
|
||||
rval = 1;
|
||||
warn("%s: file modified", fname);
|
||||
}
|
||||
}
|
||||
|
||||
if (close(fd) && rval != 1) {
|
||||
rval = 1;
|
||||
warn("%s", fname);
|
||||
}
|
||||
if (needed_chmod && chmod(fname, sbp->st_mode) && rval != 1) {
|
||||
rval = 1;
|
||||
warn("%s: permissions modified", fname);
|
||||
}
|
||||
return (rval);
|
||||
}
|
||||
|
||||
/*__dead void*/
|
||||
void
|
||||
usage()
|
||||
{
|
||||
(void)fprintf(stderr,
|
||||
"usage: touch [-acfm] [-r file] [-t time] file ...\n");
|
||||
exit(1);
|
||||
}
|
11
rosapps/applications/cmdutils/touch/touch.rbuild
Normal file
11
rosapps/applications/cmdutils/touch/touch.rbuild
Normal file
|
@ -0,0 +1,11 @@
|
|||
<module name="touch" type="win32cui" installbase="system32" installname="touch.exe">
|
||||
<include base="touch">.</include>
|
||||
<define name="__USE_W32API" />
|
||||
<define name="_WIN32_IE">0x0501</define>
|
||||
<define name="_WIN32_WINNT">0x0501</define>
|
||||
<library>ntdll</library>
|
||||
<library>kernel32</library>
|
||||
<file>err.c</file>
|
||||
<file>touch.c</file>
|
||||
<file>touch.rc</file>
|
||||
</module>
|
6
rosapps/applications/cmdutils/touch/touch.rc
Normal file
6
rosapps/applications/cmdutils/touch/touch.rc
Normal file
|
@ -0,0 +1,6 @@
|
|||
/* $Id$ */
|
||||
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Touch utility\0"
|
||||
#define REACTOS_STR_INTERNAL_NAME "touch\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "touch.exe\0"
|
||||
#include <reactos/version.rc>
|
55
rosapps/applications/cmdutils/touch/various.h
Normal file
55
rosapps/applications/cmdutils/touch/various.h
Normal file
|
@ -0,0 +1,55 @@
|
|||
// Various things you need when porting BSD and GNU utilities to
|
||||
// Win32.
|
||||
|
||||
#ifndef VARIOUS_H
|
||||
#define VARIOUS_H
|
||||
|
||||
/* types.h */
|
||||
typedef unsigned char u_char;
|
||||
typedef unsigned int u_int;
|
||||
typedef float f4byte_t;
|
||||
typedef double f8byte_t;
|
||||
//typedef __int16 s2byte_t;
|
||||
//typedef __int32 s4byte_t;
|
||||
//typedef __int64 s8byte_t;
|
||||
//typedef unsigned __int16 u2byte_t;
|
||||
//typedef unsigned __int32 u4byte_t;
|
||||
//typedef unsigned __int64 u8byte_t;
|
||||
//typedef __int32 quad_t;
|
||||
//typedef unsigned __int32 u_quad_t;
|
||||
//typedef unsigned __int16 u_int16_t;
|
||||
//typedef unsigned __int32 u_int32_t;
|
||||
|
||||
typedef long uid_t; // SunOS 5.5
|
||||
|
||||
#define __P(x) x
|
||||
//#define __STDC__ 1
|
||||
|
||||
/* utmp.h */
|
||||
#define UT_LINESIZE 8
|
||||
#define UT_HOSTSIZE 16
|
||||
|
||||
/* stat.h */
|
||||
//#define S_ISREG(mode) (((mode)&0xF000) == 0x8000)
|
||||
//#define S_ISDIR(mode) (((mode)&0xF000) == 0x4000)
|
||||
|
||||
#undef MIN //take care of windows default
|
||||
#undef MAX //take care of windows default
|
||||
#define MIN(a, b) ((a) <= (b) ? (a) : (b))
|
||||
#define MAX(a, b) ((a) > (b) ? (a) : (b))
|
||||
|
||||
#define bcopy(s1, s2, n) memmove(s2, s1, n)
|
||||
#define bcmp(s1, s2, n) (memcmp(s1, s2, n) != 0)
|
||||
#define bzero(s, n) memset(s, 0, n)
|
||||
|
||||
#define index(s, c) strchr(s, c)
|
||||
#define rindex(s, c) strrchr(s, c)
|
||||
|
||||
//#ifndef _WINSOCKAPI_
|
||||
//struct timeval {
|
||||
// long tv_sec; /* seconds */
|
||||
// long tv_usec; /* and microseconds */
|
||||
//};
|
||||
//#endif
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue