diff options
author | jlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2006-01-13 01:51:53 +0000 |
---|---|---|
committer | jlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2006-01-13 01:51:53 +0000 |
commit | ef416fc25c4af449e930416117bedb12fc9924ba (patch) | |
tree | 11f8aa8c5d3565a17d4a6d5121d3edba22e2a21e /filter/gziptoany.c | |
parent | 9ec11526e139aeacf6a052799a6aa22cbbe6ebb2 (diff) | |
download | cups-ef416fc25c4af449e930416117bedb12fc9924ba.tar.gz |
Load cups into easysw/current.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@2 a1ca3aef-8c08-0410-bb20-df032aa958be
Diffstat (limited to 'filter/gziptoany.c')
-rw-r--r-- | filter/gziptoany.c | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/filter/gziptoany.c b/filter/gziptoany.c new file mode 100644 index 000000000..b83082fb4 --- /dev/null +++ b/filter/gziptoany.c @@ -0,0 +1,131 @@ +/* + * "$Id: gziptoany.c 4494 2005-02-18 02:18:11Z mike $" + * + * GZIP pre-filter for the Common UNIX Printing System (CUPS). + * + * Copyright 1993-2005 by Easy Software Products. + * + * These coded instructions, statements, and computer programs are the + * property of Easy Software Products and are protected by Federal + * copyright law. Distribution and use rights are outlined in the file + * "LICENSE.txt" which should have been included with this file. If this + * file is missing or damaged please contact Easy Software Products + * at: + * + * Attn: CUPS Licensing Information + * Easy Software Products + * 44141 Airport View Drive, Suite 204 + * Hollywood, Maryland 20636 USA + * + * Voice: (301) 373-9600 + * EMail: cups-info@cups.org + * WWW: http://www.cups.org + * + * This file is subject to the Apple OS-Developed Software exception. + * + * Contents: + * + * main() - Uncompress gzip'd files and send them to stdout... + */ + +/* + * Include necessary headers... + */ + +#include <cups/string.h> +#include <stdlib.h> +#include <errno.h> + +#ifdef HAVE_LIBZ +# include <zlib.h> +#endif /* HAVE_LIBZ */ + + +/* + * 'main()' - Uncompress gzip'd files and send them to stdout... + */ + +int /* O - Exit status */ +main(int argc, /* I - Number of command-line arguments */ + char *argv[]) /* I - Command-line arguments */ +{ +#ifdef HAVE_LIBZ + gzFile fp; /* GZIP'd file */ + char buffer[8192]; /* Data buffer */ + int bytes; /* Number of bytes read/written */ + int copies; /* Number of copies */ + const char *content_type; /* Content type for file... */ + + + /* + * Check command-line... + */ + + if (argc != 7) + { + fputs("ERROR: gziptoany job-id user title copies options file\n", stderr); + return (1); + } + + /* + * Get the copy count; if the MIME type is "application/vnd.cups-raw" then + * make copies since the file is going straight to a backend... + */ + + if ((content_type = getenv("CONTENT_TYPE")) != NULL && + !strcasecmp(content_type, "application/vnd.cups-raw")) + copies = atoi(argv[4]); + else + copies = 1; + + /* + * Open the gzip file... + */ + + if ((fp = gzopen(argv[6], "rb")) == NULL) + { + fprintf(stderr, "ERROR: Unable to open GZIP file: %s\n", strerror(errno)); + return (1); + } + + /* + * Copy the gzip file to stdout... + */ + + setbuf(stdout, NULL); + + while (copies > 0) + { + gzrewind(fp); + + while ((bytes = gzread(fp, buffer, sizeof(buffer))) > 0) + if (fwrite(buffer, 1, bytes, stdout) < bytes) + { + fprintf(stderr, "ERROR: Unable to write uncompressed document data: %s\n", + strerror(ferror(stdout))); + gzclose(fp); + + return (1); + } + + copies --; + } + + /* + * Close the file and return... + */ + + gzclose(fp); + + return (0); +#else + fputs("INFO: Hint: recompile CUPS with ZLIB.\n", stderr); + fputs("ERROR: GZIP compression support not compiled in!\n", stderr); + return (1); +#endif /* HAVE_LIBZ */ +} + + +/* + * End of "$Id: gziptoany.c 4494 2005-02-18 02:18:11Z mike $". + */ |