* is_compress() returns 0 if uncompressed, number of bits if compressed.
* uncompress(old, n, newch) - uncompress old into new, return sizeof new
* compress.c,v 1.1 1993/06/10 00:38:05 jtc Exp
/* Check for compression, return nbits. Algorithm, in magic(4) format:
* 0 string \037\235 compressed data
* >2 byte&0x80 >0 block compressed
if (*p
!= '\037' || *(/*signed*/ char*)(p
+1) != '\235')
return 0; /* not compress()ed */
uncompress(old
, newch
, n
)
const unsigned char *old
;
if (pipe(fdin
) == -1 || pipe(fdout
) == -1) {
error("cannot create pipe (%s).\n", strerror(errno
));
execlp("uncompress", "uncompress", "-c", NULL
);
error("could not execute `uncompress' (%s).\n",
error("could not fork (%s).\n", strerror(errno
));
if (write(fdin
[1], old
, n
) != n
) {
error("write failed (%s).\n", strerror(errno
));
if ((*newch
= (unsigned char *) malloc(n
)) == NULL
) {
error("out of memory.\n");
if ((n
= read(fdout
[0], *newch
, n
)) <= 0) {
error("read failed (%s).\n", strerror(errno
));