change the file times to the original values before archiving the objects
This commit is contained in:
parent
88d4dd82bb
commit
371b64d00f
|
|
@ -0,0 +1,2 @@
|
|||
all: touch
|
||||
cd dev/ && make
|
||||
|
|
@ -28,7 +28,8 @@ install: LIB2
|
|||
chmog $(MOD) $(OWN) $(GRP) $(IDIR)/$$file ; \
|
||||
done
|
||||
|
||||
LIB2: $(OBJ)
|
||||
LIB2: $(OBJ) ../dev_times ../touch
|
||||
sh -c 'while read line ; do ../touch $$line ; done < ../dev_times'
|
||||
ar cr LIB2 $(OBJ)
|
||||
|
||||
# use dummy objects
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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 : ×)) {
|
||||
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);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue