change the file times to the original values before archiving the objects

This commit is contained in:
Oliver Lehmann 2008-05-16 16:26:31 +00:00
parent 88d4dd82bb
commit 371b64d00f
4 changed files with 221 additions and 1 deletions

2
WEGA/src/uts/Makefile Normal file
View File

@ -0,0 +1,2 @@
all: touch
cd dev/ && make

View File

@ -28,7 +28,8 @@ install: LIB2
chmog $(MOD) $(OWN) $(GRP) $(IDIR)/$$file ; \ chmog $(MOD) $(OWN) $(GRP) $(IDIR)/$$file ; \
done done
LIB2: $(OBJ) LIB2: $(OBJ) ../dev_times ../touch
sh -c 'while read line ; do ../touch $$line ; done < ../dev_times'
ar cr LIB2 $(OBJ) ar cr LIB2 $(OBJ)
# use dummy objects # use dummy objects

24
WEGA/src/uts/dev_times Normal file
View File

@ -0,0 +1,24 @@
121609432888 bio.o
040709363389 siok.o
060114274088 koppel.o
012508262788 ud.o
090815530288 fd.o
082722551983 mem.o
082722565383 sys.o
020818134084 tty.o
092915045583 tt0.o
082723101183 partab.o
123007241988 md.o
051110215688 disk.o
050410262089 lp.o
072813564288 rd.o
072813532388 mt.o
031613285089 cpu2.o
102813530786 udev1.o
102813531986 udev2.o
102813533386 udev3.o
102813534586 udev4.o
102813535686 udev5.o
102813540886 udev6.o
091612431983 clist.o
101515305786 dump.o

193
WEGA/src/uts/touch.c Normal file
View File

@ -0,0 +1,193 @@
#include <stdio.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <pwd.h>
struct stat stbuf;
int status;
char *tzname[2];
char *cbp;
int dmsize[];
long timbuf;
extern int *localtime();
long time();
struct {
int hi;
int lo;
};
gtime()
{
register int i;
register int y, t;
int d, h, m, s;
long nt;
tzset();
t = gpair();
if(t<1 || t>12)
return(1);
d = gpair();
if(d<1 || d>31)
return(1);
h = gpair();
if(h == 24) {
h = 0;
d++;
}
m = gpair();
if(m<0 || m>59)
return(1);
s = gpair();
if(s<0 || s>59)
return(1);
y = gpair();
if (y<0) {
time(&nt);
y = localtime(&nt)[5];
}
if (*cbp == 'p')
h += 12;
if (h<0 || h>23)
return(1);
timbuf = 0;
y += 1900;
for(i=1970; i<y; i++)
timbuf += dysize(i);
/* Leap year */
if (dysize(y)==366 && t >= 3)
timbuf += 1;
while(--t)
timbuf += dmsize[t-1];
timbuf += (d-1);
timbuf *= 24;
timbuf += h;
timbuf *= 60;
timbuf += m;
timbuf *= 60;
timbuf += s;
return(0);
}
gpair()
{
register int c, d;
register char *cp;
cp = cbp;
if(*cp == 0)
return(-1);
c = (*cp++ - '0') * 10;
if (c<0 || c>100)
return(-1);
if(*cp == 0)
return(-1);
if ((d = *cp++ - '0') < 0 || d > 9)
return(-1);
cbp = cp;
return (c+d);
}
main(argc, argv)
char *argv[];
{
register c;
extern long timezone;
struct utimbuf {
long actime;
long modtime;
} times;
int mflg=1, aflg=1, cflg=0, nflg=0, errflg=0, optc, fd;
extern char *optarg;
extern int optind;
while ((optc=getopt(argc, argv, "amc")) != EOF)
switch(optc) {
case 'm':
mflg++;
aflg--;
break;
case 'a':
aflg++;
mflg--;
break;
case 'c':
cflg++;
break;
case '?':
errflg++;
}
if(((argc-optind) < 1) || errflg) {
fprintf(stderr, "usage: touch [-amc] [date] file ...\n");
exit(2);
}
status = 0;
if(!isnumber(argv[optind]))
if((aflg <= 0) || (mflg <= 0))
timbuf = time((long *) 0);
else
nflg++;
else {
cbp = (char *)argv[optind++];
if(gtime()) {
fprintf(stderr, "date: bad conversion\n");
exit(2);
}
timbuf += timezone;
if (localtime(&timbuf)[8])
timbuf += -1*60*60;
}
for(c=optind; c<argc; c++) {
if(stat(argv[c], &stbuf)) {
if(cflg) {
status++;
continue;
}
else if ((fd = creat (argv[c], 0666)) < 0) {
fprintf(stderr, "touch: %s cannot create\n", argv[c]);
status++;
continue;
}
else {
close(fd);
if(stat(argv[c], &stbuf)) {
fprintf(stderr,"touch: %s cannot stat\n",argv[c]);
status++;
continue;
}
}
}
times.actime = times.modtime = timbuf;
if (mflg <= 0)
times.modtime = stbuf.st_mtime;
if (aflg <= 0)
times.actime = stbuf.st_atime;
if(utime(argv[c], nflg ? NULL : &times)) {
fprintf(stderr,"touch: cannot change times on %s\n",argv[c]);
status++;
continue;
}
}
exit(status);
}
isnumber(s)
char *s;
{
register c;
while(c = *s++)
if(!isdigit(c))
return(0);
return(1);
}