1 | /*
2 | fcfs_readobj.c
3 | -------------
4 |
5 | reads an object from FCFS and writes it to stdout
6 |
7 | $Id: fcfs_readobj.c,v 1.2 2003/09/22 09:03:04 stewart Exp $
8 |
9 | (C)2003 Stewart Smith
10 | Distributed under the GPL
11 | */
12 |
13 | #include <stdio.h>
14 | #include <stdlib.h>
15 | #include <sys/stat.h>
16 | #include <unistd.h>
17 | #include <fcntl.h>
18 | #include <string.h>
19 | #include <time.h>
20 |
21 |
22 | #include "testkit/block_dev.h"
23 | #include "testkit/types.h"
24 | #include "testkit/bitops.h"
25 | #include "disk.h"
26 |
27 | #include "super_block.h"
28 | #include "onode.h"
29 | #include "onode_index.h"
30 | #include "space_bitmap.h"
31 | #include "fcfs_vfs.h"
32 |
33 | #define EXPERIMENTAL
34 |
35 | int main(int argc, char* argv[])
36 | {
37 | struct fcfs_disk* disk;
38 | struct fcfs_onode_index* index;
39 | int i;
40 | struct fcfs_disk_block *onode_block;
41 | struct fcfs_onode1 *onode;
42 | struct fcfs_block_run onode_br;
43 | int forknr;
44 | char *data; int j;
45 | int infile;
46 | u64 rlen, len;
47 | struct fcfs_block *b;
48 |
49 | data = (char*)malloc(50000);
50 |
51 | if(argc<3)
52 | {
53 | fprintf(stderr,"fcfs_readobj\n");
54 | fprintf(stderr,"-----------\n");
55 | fprintf(stderr,"$Id: fcfs_readobj.c,v 1.2 2003/09/22 09:03:04 stewart Exp $\n");
56 | fprintf(stderr,"Usage:\n");
57 | fprintf(stderr,"\t%s volume objid\n\n",argv[0]);
58 | exit(1);
59 | }
60 |
61 | disk = fcfs_mount(argv[1]);
62 |
63 | index = onode_index_read(disk);
64 |
65 | onode_block = onode_index_lookup(index, &onode_br,atoi(argv[2]));
66 | onode = (struct fcfs_onode1*)onode_block->data;
67 |
68 | for(rlen = 0; (len=onode1_fork_read(disk,onode,1,rlen,1000,data)) && len>0;rlen+=len)
69 | write(1,data,len);
70 |
71 | disk_freeblock(onode_block);
72 | fcfs_umount(disk);
73 |
74 | return 0;
75 | }