1 | /*
2 | fcfs_updateobj.c
3 | -------------
4 |
5 | Real nasty stuff that tries to do updates to objects.
6 | I'm quaking in my boots doing this kinda stuff.
7 |
8 | $Id: fcfs_updateobj.c,v 1.1 2003/09/30 12:56:25 stewart Exp $
9 |
10 | (C)2003 Stewart Smith
11 | Distributed under the GPL
12 | */
13 |
14 | #include <stdio.h>
15 | #include <stdlib.h>
16 | #include <sys/stat.h>
17 | #include <unistd.h>
18 | #include <fcntl.h>
19 | #include <string.h>
20 | #include <time.h>
21 |
22 |
23 | #include "testkit/block_dev.h"
24 | #include "testkit/types.h"
25 | #include "testkit/bitops.h"
26 | #include "disk.h"
27 |
28 | #include "super_block.h"
29 | #include "onode.h"
30 | #include "onode_index.h"
31 | #include "space_bitmap.h"
32 | #include "fcfs_vfs.h"
33 |
34 | #define EXPERIMENTAL
35 |
36 | int main(int argc, char* argv[])
37 | {
38 | struct fcfs_disk* disk;
39 | struct fcfs_onode_index* index;
40 | int i;
41 |
42 | if(argc<3)
43 | {
44 | fprintf(stderr,"fcfs_newobj\n");
45 | fprintf(stderr,"-----------\n");
46 | fprintf(stderr,"$Id: fcfs_updateobj.c,v 1.1 2003/09/30 12:56:25 stewart Exp $\n");
47 | fprintf(stderr,"Usage:\n");
48 | fprintf(stderr,"\t%s volume file offset length onode_id\n\n",argv[0]);
49 | exit(1);
50 | }
51 |
52 | disk = fcfs_mount(argv[1]);
53 |
54 | index = onode_index_read(disk);
55 |
56 | {
57 | struct fcfs_onode1 *onode;
58 | struct fcfs_disk_block *onode_block;
59 | struct fcfs_block_run onode_br;
60 | char *data; int j;
61 | int infile;
62 | int rlen;
63 | struct stat statbuf;
64 |
65 | onode_block = onode_index_lookup(index, &onode_br,atoi(argv[5]));
66 | onode = (struct fcfs_onode1*)onode_block->data;
67 |
68 | infile = open(argv[2],O_RDONLY);
69 | fstat(infile,&statbuf);
70 | lseek(infile,atoi(argv[3]),SEEK_SET);
71 |
72 | fprintf(stderr,"+++++++GOING TO GO AND WRITE %s++++++++\n",argv[3]);
73 |
74 | data = (char*)malloc(sizeof(char)*atoi(argv[4]));
75 |
76 | j=0;
77 | rlen = read(infile,data,atoi(argv[4]));
78 | fprintf(stderr,"*******WRITING %d bytes*******\n",rlen);
79 | onode1_fork_write_versioned(disk,onode,&onode_br,1,atoi(argv[3]),(u64)rlen,data);
80 |
81 | close(infile);
82 | free(onode);
83 | free(data);
84 | }
85 |
86 | fcfs_umount(disk);
87 |
88 | return 0;
89 | }