gziptoany.c revision 25aee82d491492e1fa3b005e5880e684dc081ffb
125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * GZIP/raw pre-filter for CUPS. 325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * 425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Copyright 2007-2015 by Apple Inc. 525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Copyright 1993-2007 by Easy Software Products. 625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * 725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * These coded instructions, statements, and computer programs are the 825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * property of Apple Inc. and are protected by Federal copyright 925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * law. Distribution and use rights are outlined in the file "LICENSE.txt" 1025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * which should have been included with this file. If this file is 1125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * file is missing or damaged, see the license at "http://www.cups.org/". 1225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * 1325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * This file is subject to the Apple OS-Developed Software exception. 1425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 1525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 1625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 1725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Include necessary headers... 1825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 1925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 2025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#include <cups/cups-private.h> 2125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 2225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 2325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/* 2425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * 'main()' - Copy (and uncompress) files to stdout. 2525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 2625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 2725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannint /* O - Exit status */ 2825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannmain(int argc, /* I - Number of command-line arguments */ 2925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char *argv[]) /* I - Command-line arguments */ 3025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann{ 3125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann cups_file_t *fp; /* File */ 3225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann char buffer[8192]; /* Data buffer */ 3325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann ssize_t bytes; /* Number of bytes read/written */ 3425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann int copies; /* Number of copies */ 3525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 3625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 3725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* 3825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Check command-line... 3925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 4025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 4125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann if (argc < 6 || argc > 7) 4225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann { 4325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _cupsLangPrintf(stderr, 4425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _("Usage: %s job-id user title copies options [file]"), 4525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann argv[0]); 4625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann return (1); 4725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann } 4825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 4925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* 5025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Get the copy count; if we have no final content type, this is a 5125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * raw queue or raw print file, so we need to make copies... 5225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 5325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 5425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann if (!getenv("FINAL_CONTENT_TYPE")) 5525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann copies = atoi(argv[4]); 5625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann else 5725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann copies = 1; 5825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 5925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* 6025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Open the file... 6125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 6225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 6325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann if (argc == 6) 6425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann { 6525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann copies = 1; 6625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann fp = cupsFileStdin(); 6725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann } 6825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann else if ((fp = cupsFileOpen(argv[6], "r")) == NULL) 6925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann { 7025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann fprintf(stderr, "DEBUG: Unable to open \"%s\".\n", argv[6]); 7125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _cupsLangPrintError("ERROR", _("Unable to open print file")); 7225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann return (1); 7325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann } 7425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 7525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* 7625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Copy the file to stdout... 7725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 7825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 7925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann while (copies > 0) 8025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann { 8125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann if (!getenv("FINAL_CONTENT_TYPE")) 8225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann fputs("PAGE: 1 1\n", stderr); 8325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 8425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann cupsFileRewind(fp); 8525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 8625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann while ((bytes = cupsFileRead(fp, buffer, sizeof(buffer))) > 0) 8725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann if (write(1, buffer, (size_t)bytes) < bytes) 8825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann { 8925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _cupsLangPrintFilter(stderr, "ERROR", 9025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann _("Unable to write uncompressed print data: %s"), 9125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann strerror(errno)); 9225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann if (argc == 7) 9325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann cupsFileClose(fp); 9425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 9525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann return (1); 9625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann } 9725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 9825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann copies --; 9925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann } 10025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 10125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann /* 10225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Close the file and return... 10325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */ 10425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 10525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann if (argc == 7) 10625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann cupsFileClose(fp); 10725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann 10825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann return (0); 10925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann} 110