galeb-mkfiles

Извори пакета за Галеб
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

0008-unzip-6.0-close.patch (6218B)


      1 diff -up unzip60/extract.c.close unzip60/extract.c
      2 --- unzip60/extract.c.close	2009-03-14 02:32:52.000000000 +0100
      3 +++ unzip60/extract.c	2009-11-19 08:17:23.481263496 +0100
      4 @@ -1924,24 +1924,21 @@ static int extract_or_test_member(__G)  
      5  
      6  #ifdef VMS                  /* VMS:  required even for stdout! (final flush) */
      7      if (!uO.tflag)           /* don't close NULL file */
      8 -        close_outfile(__G);
      9 +        error = close_outfile(__G);
     10  #else
     11  #ifdef DLL
     12      if (!uO.tflag && (!uO.cflag || G.redirect_data)) {
     13          if (G.redirect_data)
     14              FINISH_REDIRECT();
     15          else
     16 -            close_outfile(__G);
     17 +            error = close_outfile(__G);
     18      }
     19  #else
     20      if (!uO.tflag && !uO.cflag)   /* don't close NULL file or stdout */
     21 -        close_outfile(__G);
     22 +        error = close_outfile(__G);
     23  #endif
     24  #endif /* VMS */
     25  
     26 -            /* GRR: CONVERT close_outfile() TO NON-VOID:  CHECK FOR ERRORS! */
     27 -
     28 -
     29      if (G.disk_full) {            /* set by flush() */
     30          if (G.disk_full > 1) {
     31  #if (defined(DELETE_IF_FULL) && defined(HAVE_UNLINK))
     32 diff -up unzip60/unix/unix.c.close unzip60/unix/unix.c
     33 --- unzip60/unix/unix.c.close	2009-01-24 00:31:26.000000000 +0100
     34 +++ unzip60/unix/unix.c	2009-11-19 08:33:25.568389171 +0100
     35 @@ -1096,10 +1096,41 @@ static int get_extattribs(__G__ pzt, z_u
     36  #ifndef MTS
     37  
     38  /****************************/
     39 +/* Function CloseError()    */
     40 +/***************************/
     41 +
     42 +int CloseError(__G)
     43 +    __GDEF
     44 +{
     45 +    int errval = PK_OK;
     46 +    
     47 +    if (fclose(G.outfile) < 0) {
     48 +          switch (errno) {
     49 +                case ENOSPC:
     50 +                    /* Do we need this on fileio.c? */
     51 +                    Info(slide, 0x4a1, ((char *)slide, "%s: write error (disk full?).   Continue? (y/n/^C) ",
     52 +                          FnFilter1(G.filename)));
     53 +                    fgets(G.answerbuf, 9, stdin);
     54 +                    if (*G.answerbuf == 'y')     /* stop writing to this file */
     55 +                        G.disk_full = 1;         /* pass to next */
     56 +                    else
     57 +                        G.disk_full = 2;         /* no: exit program */
     58 +          
     59 +                    errval = PK_DISK;
     60 +                    break;
     61 +
     62 +                default:
     63 +                    errval = PK_WARN;
     64 +          }
     65 +     }
     66 +     return errval;
     67 +} /* End of CloseError() */
     68 +
     69 +/****************************/
     70  /* Function close_outfile() */
     71  /****************************/
     72  
     73 -void close_outfile(__G)    /* GRR: change to return PK-style warning level */
     74 +int close_outfile(__G) 
     75      __GDEF
     76  {
     77      union {
     78 @@ -1108,6 +1139,7 @@ void close_outfile(__G)    /* GRR: chang
     79      } zt;
     80      ulg z_uidgid[2];
     81      int have_uidgid_flg;
     82 +    int errval = PK_OK;
     83  
     84      have_uidgid_flg = get_extattribs(__G__ &(zt.t3), z_uidgid);
     85  
     86 @@ -1141,16 +1173,16 @@ void close_outfile(__G)    /* GRR: chang
     87              Info(slide, 0x201, ((char *)slide,
     88                "warning:  symbolic link (%s) failed: mem alloc overflow\n",
     89                FnFilter1(G.filename)));
     90 -            fclose(G.outfile);
     91 -            return;
     92 +            errval = CloseError(G.outfile, G.filename);
     93 +            return errval ? errval : PK_WARN;
     94          }
     95  
     96          if ((slnk_entry = (slinkentry *)malloc(slnk_entrysize)) == NULL) {
     97              Info(slide, 0x201, ((char *)slide,
     98                "warning:  symbolic link (%s) failed: no mem\n",
     99                FnFilter1(G.filename)));
    100 -            fclose(G.outfile);
    101 -            return;
    102 +            errval = CloseError(G.outfile, G.filename);
    103 +            return errval ? errval : PK_WARN;
    104          }
    105          slnk_entry->next = NULL;
    106          slnk_entry->targetlen = ucsize;
    107 @@ -1174,10 +1206,10 @@ void close_outfile(__G)    /* GRR: chang
    108                "warning:  symbolic link (%s) failed\n",
    109                FnFilter1(G.filename)));
    110              free(slnk_entry);
    111 -            fclose(G.outfile);
    112 -            return;
    113 +            errval = CloseError(G.outfile, G.filename);
    114 +            return errval ? errval : PK_WARN;
    115          }
    116 -        fclose(G.outfile);                  /* close "link" file for good... */
    117 +        errval = CloseError(G.outfile, G.filename); /* close "link" file for good... */
    118          slnk_entry->target[ucsize] = '\0';
    119          if (QCOND2)
    120              Info(slide, 0, ((char *)slide, "-> %s ",
    121 @@ -1188,7 +1220,7 @@ void close_outfile(__G)    /* GRR: chang
    122          else
    123              G.slink_head = slnk_entry;
    124          G.slink_last = slnk_entry;
    125 -        return;
    126 +        return errval;
    127      }
    128  #endif /* SYMLINKS */
    129  
    130 @@ -1201,7 +1233,7 @@ void close_outfile(__G)    /* GRR: chang
    131  #endif
    132  
    133  #if (defined(NO_FCHOWN))
    134 -    fclose(G.outfile);
    135 +    errval = CloseError(G.outfile, G.filename);
    136  #endif
    137  
    138      /* if -X option was specified and we have UID/GID info, restore it */
    139 @@ -1227,7 +1259,7 @@ void close_outfile(__G)    /* GRR: chang
    140      }
    141  
    142  #if (!defined(NO_FCHOWN) && defined(NO_FCHMOD))
    143 -    fclose(G.outfile);
    144 +    errval = CloseError(G.outfile, G.filename);
    145  #endif
    146  
    147  #if (!defined(NO_FCHOWN) && !defined(NO_FCHMOD))
    148 @@ -1239,7 +1271,7 @@ void close_outfile(__G)    /* GRR: chang
    149      if (fchmod(fileno(G.outfile), filtattr(__G__ G.pInfo->file_attr)))
    150          perror("fchmod (file attributes) error");
    151  
    152 -    fclose(G.outfile);
    153 +    errval = CloseError(G.outfile, G.filename);
    154  #endif /* !NO_FCHOWN && !NO_FCHMOD */
    155  
    156      /* skip restoring time stamps on user's request */
    157 @@ -1267,6 +1299,7 @@ void close_outfile(__G)    /* GRR: chang
    158  #endif
    159  #endif /* NO_FCHOWN || NO_FCHMOD */
    160  
    161 +    return errval;
    162  } /* end function close_outfile() */
    163  
    164  #endif /* !MTS */
    165 diff -up unzip60/unzpriv.h.close unzip60/unzpriv.h
    166 --- unzip60/unzpriv.h.close	2009-04-20 01:59:26.000000000 +0200
    167 +++ unzip60/unzpriv.h	2009-11-19 08:19:08.610388618 +0100
    168 @@ -2604,7 +2604,7 @@ char    *GetLoadPath     OF((__GPRO));  
    169     int   SetFileSize     OF((FILE *file, zusz_t filesize));         /* local */
    170  #endif
    171  #ifndef MTS /* macro in MTS */
    172 -   void  close_outfile   OF((__GPRO));                              /* local */
    173 +   int  close_outfile   OF((__GPRO));                              /* local */
    174  #endif
    175  #ifdef SET_SYMLINK_ATTRIBS
    176     int  set_symlnk_attribs  OF((__GPRO__ slinkentry *slnk_entry));  /* local */