StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
sfs_header.C
1 #include <stdio.h>
2 #include <sys/types.h>
3 #include <sys/stat.h>
4 #include <fcntl.h>
5 #include <errno.h>
6 #include <string.h>
7 #include <stdlib.h>
8 #include <unistd.h>
9 #include <time.h>
10 #include <ctype.h>
11 #include "sfs_index.h"
12 
13 
14 void printittr(SFS_ittr *ittr, int ctr) {
15  // n, offset, type, attr, name, stickypath, ppath, fullpath,
16  char attr[5];
17  attr[0] = (ittr->entry.attr == SFS_ATTR_CD) ? 'C' : '-';
18  attr[1] = (ittr->entry.attr & SFS_ATTR_NOCD) ? 'N' : '-';
19  attr[2] = (ittr->entry.attr & SFS_ATTR_STICKY_CD) ? 'S' : '-';
20  attr[3] = (ittr->entry.attr & SFS_ATTR_POPSTICKY) ? 'P' : '-';
21  attr[4] = '\0';
22  char type[5];
23  memcpy(type, ittr->entry.type, 4);
24  type[4] = '\0';
25  printf("#%05d@%12lld: %s %s %s [S:%s] [P:%s] [F:%s] (totsz=%d) (skipped %d)\n",
26  ctr,ittr->fileoffset,
27  type,
28  attr,
29  ittr->entry.name,
30  ittr->stickypath,
31  ittr->ppath,
32  ittr->fullpath,
33  ittr->entry.sz + ittr->entry.head_sz,
34  ittr->skipped_bytes);
35 }
36 
37 int main(int argc, char *argv[])
38 {
39  if(argc < 2) {
40  printf("sfs_headers filename\n");
41  return -1;
42  }
43 
44  char *fn = argv[1];
45 
46  struct stat statbuf;
47  stat(fn, &statbuf);
48  long long int sz = statbuf.st_size;
49 
50  SFS_ittr ittr;
51  wrapfile file;
52 
53  if(file.opendisk(fn, O_RDONLY) < 0) {
54  printf("Error openeing file %s (%s)\n",fn,strerror(errno));
55  return -1;
56  }
57 
58  int ctr=1;
59 
60  ittr.get(&file);
61 
62  long long int pos = 0;
63  while((ittr.next() >=0) && (ittr.filepos >= 0)) {
64  printittr(&ittr,ctr);
65  ctr++;
66  //printf("pos = %lld + %d + %d\n",pos, ittr.entry.sz, ittr.entry.head_sz);
67  pos += ittr.entry.sz + ittr.entry.head_sz + ittr.skipped_bytes;
68  //printf("pos = %lld (%llx)\n",pos,pos);
69  }
70 
71  printf("Filesz = %lld Position = %lld\n",sz,pos);
72  if(sz != pos) {
73  int fd = open(fn, O_RDONLY);
74  lseek(fd, pos-200, SEEK_SET);
75  char buff[25600];
76  int ret = read(fd, buff, 25600);
77 
78  printf("Errr Buffer: \n\t");
79  for(int i=0;i<ret;i++) {
80  char c;
81  c = buff[i];
82 
83  if(!isprint(c)) c = '.';
84 
85  printf("%c",c);
86  if((i+1) % 10 == 0) printf(" ");
87  if((i+1) % 100 == 0) printf("\n\t");
88  if((i+1) == 200) printf("\n\t-----------------------\n\n\t");
89  }
90 
91  }
92 
93 }
94 
95