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
112447373f182dbfeb47fb86c0f5a6ac5773c65ac2Philip P. Moltmann * 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