another gitignore commit
[kvm-coreboot.git] / packages / kexec-boot-loader / symlink.patch.bak
blob990d79eff4fd6281bab7dd06dc0a838d3ad26915
1 Index: kexec-boot-loader/main.c
2 ===================================================================
3 --- kexec-boot-loader.orig/main.c       2006-07-25 10:37:59.000000000 -0600
4 +++ kexec-boot-loader/main.c    2006-07-25 11:10:34.000000000 -0600
5 @@ -11,6 +11,36 @@
6         print("no %s, %s\n", err, what);
7         exit(1);
8  }
9 +                                                               
10 +static int xreadlink(const char *base, const char *file, char *result,
11 +                     int len) 
12 +{      
13 +        struct stat s;
14 +        char *buf;
15 +        char *f = alloca(strlen(base) + strlen(file) + 5);
16 +       
17 +        if (file[0] == '/')
18 +               sprintf(f, "%s/.%s", base, file);
19 +        else
20 +               sprintf(f, "%s/%s", base, file);
21 +       
22 +        if (lstat(f, &s))
23 +                return -1;
25 +        if (S_ISLNK(s.st_mode)) {
26 +                buf = alloca(len + 1);
27 +                memset(buf, 0, len);
29 +                if (readlink(f, buf, len) == -1)
30 +                        return -1;
32 +                return xreadlink(base, buf, result, len);
33 +       }
34 +       
35 +        strncpy(result, f, len);
36 +        return 0;
40  int stat_file(char *file)
41  {
42 @@ -30,15 +60,27 @@
43  int main (int argc, char *argv[])
44  {
45         int ret;
46 +       char *kernel, *cmd = NULL, *init = NULL;
47 +       char rkernel[128];
49 -       char *kernel = argv[1], *cmd = argv[2], *init = argv[3];
50 +       if (argc < 2) 
51 +               no("few", "arguments");
52 +       
53 +       kernel = argv[1];
55 +       if (argc >= 3)
56 +               cmd = argv[2];
57 +       
58 +       if (argc >= 4)
59 +               init = argv[3];
61 -       printf("argc is %d, argv[1] %s, argv[2] %s, argv[3] %s\n", argc, argv[1], argv[2], argv[3]);
62 +       if (xreadlink(dirname(kernel), kernel, rkernel, sizeof(rkernel)))
63 +         no("readlink", kernel);
65 -       if (stat_file(kernel))
66 -               no("kernel", kernel);
67 +       if (stat_file(rkernel))
68 +               no("kernel", rkernel);
70 -       ret = my_load(cmd, kernel, init);
71 +       ret = my_load(cmd, rkernel, init);
72         if (ret)
73                 no("load", "failed");