rem: if (!linktarget || fread(linktarget, 1, ucsize, G.outfile) != (int)ucsize) {
add: if (!linktarget || fread(linktarget, 1, ucsize, G.outfile) != (size_t)ucsize) {
context: void close_outfile(__G)    /* GRR: change to return PK-style warning level */    __GDEF{    iztimes zt;    ush z_uidgid[2];    unsigned eb_izux_flg;/*---------------------------------------------------------------------------    If symbolic links are supported, allocate a storage area, put the uncom-    pressed "data" in it, and create the link.  Since we know it's a symbolic    link to start with, we shouldn't have to worry about overflowing unsigned    ints with unsigned longs.  ---------------------------------------------------------------------------*/#ifdef SYMLINKS    if (G.symlnk) {        unsigned ucsize = (unsigned)G.lrec.ucsize;        char *linktarget = (char *)malloc((unsigned)G.lrec.ucsize+1);        fclose(G.outfile);                      /* close "data" file... */        G.outfile = fopen(G.filename, FOPR);    /* ...and reopen for reading */        if (!linktarget || fread(linktarget, 1, ucsize, G.outfile) !=                           (int)ucsize)        {            Info(slide, 0x201, ((char *)slide,              "warning:  symbolic link (%s) failed\n", FnFilter1(G.filename)));            if (linktarget)                free(linktarget);            fclose(G.outfile);            return;        }        fclose(G.outfile);                  /* close "data" file for good... */        unlink(G.filename);                 /* ...and delete it */        linktarget[ucsize] = '\0';        if (QCOND2)            Info(slide, 0, ((char *)slide, "-> %s ", FnFilter1(linktarget)));        if (symlink(linktarget, G.filename))  /* create the real link */            perror("symlink error");        if (!uO.J_flag) {            /* Symlinks can have attributes, too. */            void *ptr = scanBeOSexfield( G.extra_field,                                         G.lrec.extra_field_length );            if (ptr) {                setBeOSexfield( G.filename, ptr );            }        }        free(linktarget);        return;                             /* can't set time on symlinks */    }#endif /* SYMLINKS */    fclose(G.outfile);    /* handle the BeOS extra field if present */    if (!uO.J_flag) {        void *ptr = scanBeOSexfield( G.extra_field,                                     G.lrec.extra_field_length );        if (ptr) {            setBeOSexfield( G.filename, ptr );#ifdef BEOS_ASSIGN_FILETYPE        } else {            /* Otherwise, ask the system to try assigning a MIME type. */            assign_MIME( G.filename );#endif        }    }/*---------------------------------------------------------------------------    Change the file permissions from default ones to those stored in the    zipfile.  ---------------------------------------------------------------------------*/#ifndef NO_CHMOD    if (chmod(G.filename, 0xffff & G.pInfo->file_attr))        perror("chmod (file attributes) error");#endif/*---------------------------------------------------------------------------    Convert from MSDOS-format local time and date to Unix-format 32-bit GMT    time:  adjust base year from 1980 to 1970, do usual conversions from    yy/mm/dd hh:mm:ss to elapsed seconds, and account for timezone and day-    light savings time differences.  If we have a Unix extra field, however,    we're laughing:  both mtime and atime are ours.  On the other hand, we    then have to check for restoration of UID/GID.  ---------------------------------------------------------------------------*/    eb_izux_flg = (G.extra_field ? ef_scan_for_izux(G.extra_field,                   G.lrec.extra_field_length, 0, G.lrec.last_mod_dos_datetime,#ifdef IZ_CHECK_TZ                   (G.tz_is_valid ? &zt : NULL),#else                   &zt,#endif                   z_uidgid) : 0);    if (eb_izux_flg & EB_UT_FL_MTIME) {        TTrace((stderr, "\nclose_outfile:  Unix e.f. modif. time = %ld\n",          zt.mtime));    } else {        zt.mtime = dos_to_unix_time(G.lrec.last_mod_dos_datetime);    }    if (eb_izux_flg & EB_UT_FL_ATIME) {        TTrace((stderr, "close_outfile:  Unix e.f. access time = %ld\n",          zt.atime));    } else {        zt.atime = zt.mtime;        TTrace((stderr, "\nclose_outfile:  modification/access times = %ld\n",          zt.mtime));    }    /* if -X option was specified and we have UID/GID info, restore it */    if (uO.X_flag && eb_izux_flg & EB_UX2_VALID) {        TTrace((stderr, "close_outfile:  restoring Unix UID/GID info\n"));        if (chown(G.filename, (uid_t)z_uidgid[0], (gid_t)z_uidgid[1]))        {            if (uO.qflag)                Info(slide, 0x201, ((char *)slide,                  "warning:  cannot set UID %d and/or GID %d for %s\n",                  z_uidgid[0], z_uidgid[1], FnFilter1(G.filename)));            else                Info(slide, 0x201, ((char *)slide,                  " (warning) cannot set UID %d and/or GID %d",                  z_uidgid[0], z_uidgid[1]));        }    }    /* set the file's access and modification times */    if (utime(G.filename, (struct utimbuf *)&zt)) {        if (uO.qflag)            Info(slide, 0x201, ((char *)slide,              "warning:  cannot set time for %s\n", FnFilter1(G.filename)));        else            Info(slide, 0x201, ((char *)slide,              " (warning) cannot set time"));    }} /* end function close_outfile() */