V10/cmd/chdate.c

Compare this file to the similar file:
Show the results in this format:

#include <ctype.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <libc.h>

int mflag, aflag;
extern int errno;
extern char *sys_errlist[];
extern long timec();

main(argc, argv)
char **argv;
{
	char s[50];
	int bad = 0;
	long date;
	struct stat statb;
	time_t timeb[2];
	while(argv[1][0] == '-') {
		while(*(++argv[1])) {
			switch(argv[1][0]) {
			case 'm':
			case 'u':
				mflag++;
				break;
			case 'a':
				aflag++;
				break;
			}
		}
		argc--;
		argv++;
	}
	if(mflag==0 && aflag==0)
		mflag = aflag = 1;
	strcpy(s, argv[1]);
	strcat(s, " ");
	while(argc>2 && (isdigit(*argv[2])||*argv[2]=='-')) {
		strcat(s, argv[2]);
		strcat(s, " ");
		argc--;
		argv++;
	}
	date = timec(s);
	for( ; argc>2; argc--,argv++) {
		if(stat(argv[2],&statb) < 0) {
			fprintf(stderr,"chdate: %s: %s\n",
				argv[2],sys_errlist[errno]);
			bad++;
			continue;
		}
		timeb[0] = statb.st_atime;
		timeb[1] = statb.st_mtime;
		if(aflag) 
			timeb[0] = date;
		if(mflag)
			timeb[1] = date;
		if(utime(argv[2],timeb) < 0) {
			fprintf(stderr,"chdate: %s: %s\n",
				argv[2],sys_errlist[errno]);
			bad++;
		}
	}
	return bad;
}