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