|
|
researchv10 Norman
#include <stdio.h>
#include <sys/param.h>
#include <sys/stat.h>
#include <sys/ino.h>
#include <time.h>
#define tp(x,y) {if(j&x) putchar(y); else putchar('-');}
struct stat sbuf;
struct dinode dsbuf;
main(argc,argv) char *argv[];
{
int i,j;
int f, iflag=0;
unsigned ino;
char *tm;
for(i=1;i<argc;i++) {
if (strcmp(argv[i], "-i")==0) {
iflag++;
i++;
f = open(argv[i], 0);
if (f<0) {
printf("stat: can't open %s\n", argv[i]);
exit(2);
}
continue;
}
if (iflag) {
ino = atoi(argv[i]);
lseek(f, (ino-1)*64L+1024, 0);
j = 0;
if (read(f, &dsbuf, sizeof(dsbuf)) != sizeof(dsbuf))
j = -1;
sbuf.st_mode = dsbuf.di_mode;
sbuf.st_nlink = dsbuf.di_nlink;
sbuf.st_uid = dsbuf.di_uid;
sbuf.st_gid = dsbuf.di_gid;
sbuf.st_size = dsbuf.di_size;
sbuf.st_atime = dsbuf.di_atime;
sbuf.st_mtime = dsbuf.di_mtime;
sbuf.st_ctime = dsbuf.di_ctime;
sbuf.st_rdev = 0;
sbuf.st_dev = 0;
} else if (strcmp(argv[i], "-")==0)
j = fstat(atoi(argv[i]+1));
else
j = stat(argv[i],&sbuf);
if(j==-1) {
perror(argv[i]);
continue;
}
j=sbuf.st_mode;
switch(j&S_IFMT) {
case S_IFREG: putchar('-'); break;
case S_IFDIR: putchar('d'); break;
case S_IFCHR: putchar('c'); break;
case S_IFBLK: putchar('b'); break;
default: putchar('?'); break;
}
tp(S_ISUID,'u');
tp(S_ISGID,'g');
tp(S_ISVTX,'t');
tp(0400,'r');
tp(0200,'w');
tp(0100,'x');
tp(040,'r');
tp(020,'w');
tp(010,'x');
tp(4,'r');
tp(2,'w');
tp(1,'x');
putchar(' ');
printf("M%d m%d Mr%d mr%d u%d g%d L%d %ld i%u: %s\n",
major(sbuf.st_dev),minor(sbuf.st_dev),
major(sbuf.st_rdev),minor(sbuf.st_rdev),
sbuf.st_uid,sbuf.st_gid,sbuf.st_nlink,
sbuf.st_size,sbuf.st_ino,argv[i]);
ptime(&sbuf.st_atime);
ptime(&sbuf.st_mtime);
ptime(&sbuf.st_ctime);
printf("\n\n");
}
}
ptime(t)
long *t;
{
register struct tm *ctp;
ctp = localtime(t);
printf(" %02d:%02d:%02d %02d/%02d/%02d",
ctp->tm_hour, ctp->tm_min, ctp->tm_sec,
ctp->tm_year, ctp->tm_mon+1, ctp->tm_mday);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.