source: src/router/services/sysinit/tools/recover.c @ 17208

Last change on this file since 17208 was 17208, checked in by BrainSlayer, 2 years ago

new x86 code

File size: 1.4 KB
Line 
1void start_backup(void)
2{
3        char drive[64];
4#ifdef HAVE_RB600
5        sprintf(drive, "/dev/sda");
6#else
7        strcpy(drive, getdisc());
8#endif
9        //backup nvram
10        fprintf(stderr, "backup nvram\n");
11        FILE *in = fopen("/usr/local/nvram/nvram.bin", "rb");
12        if (in) {
13                char *mem = malloc(65536);
14                fread(mem, 65536, 1, in);
15                fclose(in);
16                in = fopen(drive, "r+b");
17                fseeko(in, 0, SEEK_END);
18                off_t mtdlen = ftello(in);
19                fseeko(in, mtdlen-(65536*2), SEEK_SET);
20                fwrite(mem, 65536, 1, in);
21                fclose(in);
22                eval("sync");
23                fprintf(stderr, "reread for sync disc\n");
24                in = fopen(drive, "rb");
25                fseeko(in, mtdlen-(65536*2), SEEK_SET);
26                fread(mem, 65536, 1, in);
27                fprintf(stderr, "%X%X%X%X\n", mem[0] & 0xff, mem[1] & 0xff,
28                        mem[2] & 0xff, mem[3] & 0xff);
29                fclose(in);
30                free(mem);
31        }
32
33}
34
35void start_recover(void)
36{
37        FILE *in;
38        char dev[64];
39        fprintf(stderr, "recover broken nvram\n");
40#ifdef HAVE_RB600
41        sprintf(dev, "/dev/sda");
42#else
43        strcpy(dev, getdisc());
44#endif
45        in = fopen(dev, "rb");
46        fseeko(in, 0, SEEK_END);
47        off_t mtdlen = ftello64(in);
48        fseeko(in, mtdlen-(65536*2), SEEK_SET);
49
50        unsigned char *mem = malloc(65536);
51        fread(mem, 65536, 1, in);
52        fclose(in);
53        if (mem[0] == 0x46 && mem[1] == 0x4c && mem[2] == 0x53
54            && mem[3] == 0x48) {
55                fprintf(stderr, "found recovery\n");
56                in = fopen("/usr/local/nvram/nvram.bin", "wb");
57                if (in != NULL) {
58                        fwrite(mem, 65536, 1, in);
59                        fclose(in);
60                }
61        }
62        free(mem);
63
64}
65
Note: See TracBrowser for help on using the repository browser.