Archive-Unzip-Burst
view release on metacpan or search on metacpan
unzip-6.0/extract.c view on Meta::CPAN
* appropiate system-specific configuration header when needed.
*/
# define UZ_FNFILTER_REPLACECHAR '?'
# endif
if (!isprint(*r)) {
if (*r < 32) {
/* ASCII control codes are escaped as "^{letter}". */
if (se != NULL && (s > (space + (size-4)))) {
have_overflow = TRUE;
break;
}
*s++ = '^', *s++ = (uch)(64 + *r++);
} else {
/* Other unprintable codes are replaced by the
* placeholder character. */
if (se != NULL && (s > (space + (size-3)))) {
have_overflow = TRUE;
break;
}
*s++ = UZ_FNFILTER_REPLACECHAR;
INCSTR(r);
}
#else /* !HAVE_WORKING_ISPRINT */
if (*r < 32) {
/* ASCII control codes are escaped as "^{letter}". */
if (se != NULL && (s > (space + (size-4)))) {
have_overflow = TRUE;
break;
}
*s++ = '^', *s++ = (uch)(64 + *r++);
#endif /* ?HAVE_WORKING_ISPRINT */
} else {
#ifdef _MBCS
unsigned i = CLEN(r);
if (se != NULL && (s > (space + (size-i-2)))) {
have_overflow = TRUE;
break;
}
for (; i > 0; i--)
*s++ = *r++;
#else
if (se != NULL && (s > (space + (size-3)))) {
have_overflow = TRUE;
break;
}
*s++ = *r++;
#endif
}
}
if (have_overflow) {
strcpy((char *)se, "...");
} else {
*s = '\0';
}
#ifdef WINDLL
INTERN_TO_ISO((char *)space, (char *)space); /* translate to ANSI */
#else
#if (defined(WIN32) && !defined(_WIN32_WCE))
/* Win9x console always uses OEM character coding, and
WinNT console is set to OEM charset by default, too */
INTERN_TO_OEM((char *)space, (char *)space);
#endif /* (WIN32 && !_WIN32_WCE) */
#endif /* ?WINDLL */
return (char *)space;
#else /* NATIVE: EBCDIC or whatever */
return (char *)raw;
#endif
} /* end function fnfilter() */
#ifdef SET_DIR_ATTRIB
/* must sort saved directories so can set perms from bottom up */
/************************/
/* Function dircomp() */
/************************/
static int Cdecl dircomp(a, b) /* used by qsort(); swiped from Zip */
ZCONST zvoid *a, *b;
{
/* order is significant: this sorts in reverse order (deepest first) */
return strcmp((*(direntry **)b)->fn, (*(direntry **)a)->fn);
/* return namecmp((*(direntry **)b)->fn, (*(direntry **)a)->fn); */
}
#endif /* SET_DIR_ATTRIB */
#ifdef USE_BZIP2
/**************************/
/* Function UZbunzip2() */
/**************************/
int UZbunzip2(__G)
__GDEF
/* decompress a bzipped entry using the libbz2 routines */
{
int retval = 0; /* return code: 0 = "no error" */
int err=BZ_OK;
int repeated_buf_err;
bz_stream bstrm;
#if (defined(DLL) && !defined(NO_SLIDE_REDIR))
if (G.redirect_slide)
wsize = G.redirect_size, redirSlide = G.redirect_buffer;
else
wsize = WSIZE, redirSlide = slide;
#endif
bstrm.next_out = (char *)redirSlide;
bstrm.avail_out = wsize;
bstrm.next_in = (char *)G.inptr;
bstrm.avail_in = G.incnt;
( run in 1.456 second using v1.01-cache-2.11-cpan-140bd7fdf52 )