Fix: save errno for second command
[rrq/maintain_lilo.git] / debian / patches / 12_save-errno-for-second-command.patch
1 Package:     lilo
2 Subject:     save errno for second command
3 Author:      Joachim Wiedorn <ad_debian at joonet.de>
4 Forwarded:   yes
5 Last-Update: 2011-02-17
6
7 The problem is that fprintf can alter the value of errno 
8 (see man perror). In a weired case the user get a bogus error 
9 because the real error was hidden by fprintf. 
10 ---
11
12 diff -urN s11/src/device.c s12/src/device.c
13 --- s11/src/device.c    2011-02-17 22:07:17.167142581 +0100
14 +++ s12/src/device.c    2011-02-17 22:20:03.047152869 +0100
15 @@ -197,6 +197,7 @@
16      char name[PATH_MAX];
17      ST_BUF st;
18      int count;
19 +    int err;
20  
21      if (lookup_dev(name,dev,number)) dev->delete = 0;
22      else {
23 @@ -235,11 +236,12 @@
24  #endif
25      if (flags == O_BYPASS) dev->fd = -1;
26      else if ((dev->fd = open(name,flags)) < 0) {
27 -            fprintf (errstd, "Cannot proceed. Maybe you need to add "
28 +        err = errno;
29 +        fprintf (errstd, "Cannot proceed. Maybe you need to add "
30                          "this to your lilo.conf:\n"
31                           "\tdisk=%s inaccessible\n"
32                          "(real error shown below)\n", name);
33 -           die("open %s: %s",name,strerror(errno));
34 +           die("open %s: %s",name,strerror(err));
35      }
36      dev->name = stralloc(name);
37      return dev->fd;
38 @@ -714,11 +716,11 @@
39         
40      fd = dev_open(&dev, device, option ? O_RDWR : O_RDONLY);
41      if (read(fd, &buf, sizeof(buf)) != sizeof(buf)) {
42 -       fprintf (errstd, "Cannot proceed. Maybe you need to add "
43 +      fprintf (errstd, "Cannot proceed. Maybe you need to add "
44                          "this to your lilo.conf:\n"
45                           "\tdisk=%s inaccessible\n"
46                          "(real error shown below)\n", dev.name);
47 -       die("VolumeID read error: sector 0 of %s not readable", dev.name);
48 +      die("VolumeID read error: sector 0 of %s not readable", dev.name);
49      }
50      if (option==ID_SET) {
51         make_backup(NULL, 0, &buf, device,