123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- diff -up unzip60/extract.c.close unzip60/extract.c
- --- unzip60/extract.c.close 2009-03-14 02:32:52.000000000 +0100
- +++ unzip60/extract.c 2009-11-19 08:17:23.481263496 +0100
- @@ -1924,24 +1924,21 @@ static int extract_or_test_member(__G)
-
- #ifdef VMS /* VMS: required even for stdout! (final flush) */
- if (!uO.tflag) /* don't close NULL file */
- - close_outfile(__G);
- + error = close_outfile(__G);
- #else
- #ifdef DLL
- if (!uO.tflag && (!uO.cflag || G.redirect_data)) {
- if (G.redirect_data)
- FINISH_REDIRECT();
- else
- - close_outfile(__G);
- + error = close_outfile(__G);
- }
- #else
- if (!uO.tflag && !uO.cflag) /* don't close NULL file or stdout */
- - close_outfile(__G);
- + error = close_outfile(__G);
- #endif
- #endif /* VMS */
-
- - /* GRR: CONVERT close_outfile() TO NON-VOID: CHECK FOR ERRORS! */
- -
- -
- if (G.disk_full) { /* set by flush() */
- if (G.disk_full > 1) {
- #if (defined(DELETE_IF_FULL) && defined(HAVE_UNLINK))
- diff -up unzip60/unix/unix.c.close unzip60/unix/unix.c
- --- unzip60/unix/unix.c.close 2009-01-24 00:31:26.000000000 +0100
- +++ unzip60/unix/unix.c 2009-11-19 08:33:25.568389171 +0100
- @@ -1096,10 +1096,41 @@ static int get_extattribs(__G__ pzt, z_u
- #ifndef MTS
-
- /****************************/
- +/* Function CloseError() */
- +/***************************/
- +
- +int CloseError(__G)
- + __GDEF
- +{
- + int errval = PK_OK;
- +
- + if (fclose(G.outfile) < 0) {
- + switch (errno) {
- + case ENOSPC:
- + /* Do we need this on fileio.c? */
- + Info(slide, 0x4a1, ((char *)slide, "%s: write error (disk full?). Continue? (y/n/^C) ",
- + FnFilter1(G.filename)));
- + fgets(G.answerbuf, 9, stdin);
- + if (*G.answerbuf == 'y') /* stop writing to this file */
- + G.disk_full = 1; /* pass to next */
- + else
- + G.disk_full = 2; /* no: exit program */
- +
- + errval = PK_DISK;
- + break;
- +
- + default:
- + errval = PK_WARN;
- + }
- + }
- + return errval;
- +} /* End of CloseError() */
- +
- +/****************************/
- /* Function close_outfile() */
- /****************************/
-
- -void close_outfile(__G) /* GRR: change to return PK-style warning level */
- +int close_outfile(__G)
- __GDEF
- {
- union {
- @@ -1108,6 +1139,7 @@ void close_outfile(__G) /* GRR: chang
- } zt;
- ulg z_uidgid[2];
- int have_uidgid_flg;
- + int errval = PK_OK;
-
- have_uidgid_flg = get_extattribs(__G__ &(zt.t3), z_uidgid);
-
- @@ -1141,16 +1173,16 @@ void close_outfile(__G) /* GRR: chang
- Info(slide, 0x201, ((char *)slide,
- "warning: symbolic link (%s) failed: mem alloc overflow\n",
- FnFilter1(G.filename)));
- - fclose(G.outfile);
- - return;
- + errval = CloseError(G.outfile, G.filename);
- + return errval ? errval : PK_WARN;
- }
-
- if ((slnk_entry = (slinkentry *)malloc(slnk_entrysize)) == NULL) {
- Info(slide, 0x201, ((char *)slide,
- "warning: symbolic link (%s) failed: no mem\n",
- FnFilter1(G.filename)));
- - fclose(G.outfile);
- - return;
- + errval = CloseError(G.outfile, G.filename);
- + return errval ? errval : PK_WARN;
- }
- slnk_entry->next = NULL;
- slnk_entry->targetlen = ucsize;
- @@ -1174,10 +1206,10 @@ void close_outfile(__G) /* GRR: chang
- "warning: symbolic link (%s) failed\n",
- FnFilter1(G.filename)));
- free(slnk_entry);
- - fclose(G.outfile);
- - return;
- + errval = CloseError(G.outfile, G.filename);
- + return errval ? errval : PK_WARN;
- }
- - fclose(G.outfile); /* close "link" file for good... */
- + errval = CloseError(G.outfile, G.filename); /* close "link" file for good... */
- slnk_entry->target[ucsize] = '\0';
- if (QCOND2)
- Info(slide, 0, ((char *)slide, "-> %s ",
- @@ -1188,7 +1220,7 @@ void close_outfile(__G) /* GRR: chang
- else
- G.slink_head = slnk_entry;
- G.slink_last = slnk_entry;
- - return;
- + return errval;
- }
- #endif /* SYMLINKS */
-
- @@ -1201,7 +1233,7 @@ void close_outfile(__G) /* GRR: chang
- #endif
-
- #if (defined(NO_FCHOWN))
- - fclose(G.outfile);
- + errval = CloseError(G.outfile, G.filename);
- #endif
-
- /* if -X option was specified and we have UID/GID info, restore it */
- @@ -1227,7 +1259,7 @@ void close_outfile(__G) /* GRR: chang
- }
-
- #if (!defined(NO_FCHOWN) && defined(NO_FCHMOD))
- - fclose(G.outfile);
- + errval = CloseError(G.outfile, G.filename);
- #endif
-
- #if (!defined(NO_FCHOWN) && !defined(NO_FCHMOD))
- @@ -1239,7 +1271,7 @@ void close_outfile(__G) /* GRR: chang
- if (fchmod(fileno(G.outfile), filtattr(__G__ G.pInfo->file_attr)))
- perror("fchmod (file attributes) error");
-
- - fclose(G.outfile);
- + errval = CloseError(G.outfile, G.filename);
- #endif /* !NO_FCHOWN && !NO_FCHMOD */
-
- /* skip restoring time stamps on user's request */
- @@ -1267,6 +1299,7 @@ void close_outfile(__G) /* GRR: chang
- #endif
- #endif /* NO_FCHOWN || NO_FCHMOD */
-
- + return errval;
- } /* end function close_outfile() */
-
- #endif /* !MTS */
- diff -up unzip60/unzpriv.h.close unzip60/unzpriv.h
- --- unzip60/unzpriv.h.close 2009-04-20 01:59:26.000000000 +0200
- +++ unzip60/unzpriv.h 2009-11-19 08:19:08.610388618 +0100
- @@ -2604,7 +2604,7 @@ char *GetLoadPath OF((__GPRO));
- int SetFileSize OF((FILE *file, zusz_t filesize)); /* local */
- #endif
- #ifndef MTS /* macro in MTS */
- - void close_outfile OF((__GPRO)); /* local */
- + int close_outfile OF((__GPRO)); /* local */
- #endif
- #ifdef SET_SYMLINK_ATTRIBS
- int set_symlnk_attribs OF((__GPRO__ slinkentry *slnk_entry)); /* local */
|