125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/*
225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Private file definitions for CUPS.
325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann *
425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Since stdio files max out at 256 files on many systems, we have to
525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * write similar functions without this limit.  At the same time, using
625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * our own file functions allows us to provide transparent support of
725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * gzip'd print files, PPD files, etc.
825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann *
925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Copyright 2007-2014 by Apple Inc.
1025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Copyright 1997-2007 by Easy Software Products, all rights reserved.
1125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann *
1225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * These coded instructions, statements, and computer programs are the
1325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * property of Apple Inc. and are protected by Federal copyright
1425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * law.  Distribution and use rights are outlined in the file "LICENSE.txt"
1525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * which should have been included with this file.  If this file is
162447373f182dbfeb47fb86c0f5a6ac5773c65ac2Philip P. Moltmann * missing or damaged, see the license at "http://www.cups.org/".
1725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann *
1825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * This file is subject to the Apple OS-Developed Software exception.
1925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */
2025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
2125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#ifndef _CUPS_FILE_PRIVATE_H_
2225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  define _CUPS_FILE_PRIVATE_H_
2325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
2425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/*
2525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Include necessary headers...
2625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */
2725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
2825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  include "cups-private.h"
2925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  include <stdio.h>
3025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  include <stdlib.h>
3125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  include <stdarg.h>
3225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  include <fcntl.h>
3325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
3425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  ifdef HAVE_LIBZ
3525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#    include <zlib.h>
3625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  endif /* HAVE_LIBZ */
3725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  ifdef WIN32
3825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#    include <io.h>
3925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#    include <sys/locking.h>
4025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  endif /* WIN32 */
4125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
4225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
4325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/*
4425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Some operating systems support large files via open flag O_LARGEFILE...
4525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */
4625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
4725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  ifndef O_LARGEFILE
4825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#    define O_LARGEFILE 0
4925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  endif /* !O_LARGEFILE */
5025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
5125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
5225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/*
5325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Some operating systems don't define O_BINARY, which is used by Microsoft
5425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * and IBM to flag binary files...
5525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */
5625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
5725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  ifndef O_BINARY
5825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#    define O_BINARY 0
5925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  endif /* !O_BINARY */
6025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
6125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
6225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  ifdef __cplusplus
6325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern "C" {
6425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  endif /* __cplusplus */
6525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
6625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
6725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/*
6825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Types and structures...
6925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */
7025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
7125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef enum				/**** _cupsFileCheck return values ****/
7225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann{
7325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  _CUPS_FILE_CHECK_OK = 0,		/* Everything OK */
7425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  _CUPS_FILE_CHECK_MISSING = 1,		/* File is missing */
7525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  _CUPS_FILE_CHECK_PERMISSIONS = 2,	/* File (or parent dir) has bad perms */
7625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  _CUPS_FILE_CHECK_WRONG_TYPE = 3,	/* File has wrong type */
7725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  _CUPS_FILE_CHECK_RELATIVE_PATH = 4	/* File contains a relative path */
7825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann} _cups_fc_result_t;
7925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
8025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef enum				/**** _cupsFileCheck file type values ****/
8125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann{
8225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  _CUPS_FILE_CHECK_FILE = 0,		/* Check the file and parent directory */
8325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  _CUPS_FILE_CHECK_PROGRAM = 1,		/* Check the program and parent directory */
8425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  _CUPS_FILE_CHECK_FILE_ONLY = 2,	/* Check the file only */
8525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  _CUPS_FILE_CHECK_DIRECTORY = 3	/* Check the directory */
8625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann} _cups_fc_filetype_t;
8725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
8825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmanntypedef void (*_cups_fc_func_t)(void *context, _cups_fc_result_t result,
8925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann				const char *message);
9025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
9125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannstruct _cups_file_s			/**** CUPS file structure... ****/
9225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
9325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann{
9425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  int		fd;			/* File descriptor */
9525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  char		mode,			/* Mode ('r' or 'w') */
9625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann		compressed,		/* Compression used? */
9725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann		is_stdio,		/* stdin/out/err? */
9825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann		eof,			/* End of file? */
9925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann		buf[4096],		/* Buffer */
10025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann		*ptr,			/* Pointer into buffer */
10125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann		*end;			/* End of buffer data */
10225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  off_t		pos,			/* Position in file */
10325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann		bufpos;			/* File position for start of buffer */
10425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
10525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#ifdef HAVE_LIBZ
10625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  z_stream	stream;			/* (De)compression stream */
10725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  Bytef		cbuf[4096];		/* (De)compression buffer */
10825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  uLong		crc;			/* (De)compression CRC */
10925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#endif /* HAVE_LIBZ */
11025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
11125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  char		*printf_buffer;		/* cupsFilePrintf buffer */
11225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann  size_t	printf_size;		/* Size of cupsFilePrintf buffer */
11325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann};
11425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
11525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
11625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann/*
11725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann * Prototypes...
11825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann */
11925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
12025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern _cups_fc_result_t	_cupsFileCheck(const char *filename,
12125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann					       _cups_fc_filetype_t filetype,
12225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann				               int dorootchecks,
12325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann					       _cups_fc_func_t cb,
12425aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann					       void *context);
12525aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmannextern void			_cupsFileCheckFilter(void *context,
12625aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann						     _cups_fc_result_t result,
12725aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann						     const char *message);
12825aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
12925aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  ifdef __cplusplus
13025aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann}
13125aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#  endif /* __cplusplus */
13225aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann
13325aee82d491492e1fa3b005e5880e684dc081ffbPhilip P. Moltmann#endif /* !_CUPS_FILE_PRIVATE_H_ */
134