1/* 2 * "$Id: file-private.h 11693 2014-03-11 01:24:45Z msweet $" 3 * 4 * Private file definitions for CUPS. 5 * 6 * Since stdio files max out at 256 files on many systems, we have to 7 * write similar functions without this limit. At the same time, using 8 * our own file functions allows us to provide transparent support of 9 * gzip'd print files, PPD files, etc. 10 * 11 * Copyright 2007-2011 by Apple Inc. 12 * Copyright 1997-2007 by Easy Software Products, all rights reserved. 13 * 14 * These coded instructions, statements, and computer programs are the 15 * property of Apple Inc. and are protected by Federal copyright 16 * law. Distribution and use rights are outlined in the file "LICENSE.txt" 17 * which should have been included with this file. If this file is 18 * file is missing or damaged, see the license at "http://www.cups.org/". 19 * 20 * This file is subject to the Apple OS-Developed Software exception. 21 */ 22 23#ifndef _CUPS_FILE_PRIVATE_H_ 24# define _CUPS_FILE_PRIVATE_H_ 25 26/* 27 * Include necessary headers... 28 */ 29 30# include "cups-private.h" 31# include <stdio.h> 32# include <stdlib.h> 33# include <stdarg.h> 34# include <fcntl.h> 35 36# ifdef HAVE_LIBZ 37# include <zlib.h> 38# endif /* HAVE_LIBZ */ 39# ifdef WIN32 40# include <io.h> 41# include <sys/locking.h> 42# endif /* WIN32 */ 43 44 45/* 46 * Some operating systems support large files via open flag O_LARGEFILE... 47 */ 48 49# ifndef O_LARGEFILE 50# define O_LARGEFILE 0 51# endif /* !O_LARGEFILE */ 52 53 54/* 55 * Some operating systems don't define O_BINARY, which is used by Microsoft 56 * and IBM to flag binary files... 57 */ 58 59# ifndef O_BINARY 60# define O_BINARY 0 61# endif /* !O_BINARY */ 62 63 64# ifdef __cplusplus 65extern "C" { 66# endif /* __cplusplus */ 67 68 69/* 70 * Types and structures... 71 */ 72 73typedef enum /**** _cupsFileCheck return values ****/ 74{ 75 _CUPS_FILE_CHECK_OK = 0, /* Everything OK */ 76 _CUPS_FILE_CHECK_MISSING = 1, /* File is missing */ 77 _CUPS_FILE_CHECK_PERMISSIONS = 2, /* File (or parent dir) has bad perms */ 78 _CUPS_FILE_CHECK_WRONG_TYPE = 3, /* File has wrong type */ 79 _CUPS_FILE_CHECK_RELATIVE_PATH = 4 /* File contains a relative path */ 80} _cups_fc_result_t; 81 82typedef enum /**** _cupsFileCheck file type values ****/ 83{ 84 _CUPS_FILE_CHECK_FILE = 0, /* Check the file and parent directory */ 85 _CUPS_FILE_CHECK_PROGRAM = 1, /* Check the program and parent directory */ 86 _CUPS_FILE_CHECK_FILE_ONLY = 2, /* Check the file only */ 87 _CUPS_FILE_CHECK_DIRECTORY = 3 /* Check the directory */ 88} _cups_fc_filetype_t; 89 90typedef void (*_cups_fc_func_t)(void *context, _cups_fc_result_t result, 91 const char *message); 92 93struct _cups_file_s /**** CUPS file structure... ****/ 94 95{ 96 int fd; /* File descriptor */ 97 char mode, /* Mode ('r' or 'w') */ 98 compressed, /* Compression used? */ 99 is_stdio, /* stdin/out/err? */ 100 eof, /* End of file? */ 101 buf[4096], /* Buffer */ 102 *ptr, /* Pointer into buffer */ 103 *end; /* End of buffer data */ 104 off_t pos, /* Position in file */ 105 bufpos; /* File position for start of buffer */ 106 107#ifdef HAVE_LIBZ 108 z_stream stream; /* (De)compression stream */ 109 Bytef cbuf[4096]; /* (De)compression buffer */ 110 uLong crc; /* (De)compression CRC */ 111#endif /* HAVE_LIBZ */ 112 113 char *printf_buffer; /* cupsFilePrintf buffer */ 114 size_t printf_size; /* Size of cupsFilePrintf buffer */ 115}; 116 117 118/* 119 * Prototypes... 120 */ 121 122extern _cups_fc_result_t _cupsFileCheck(const char *filename, 123 _cups_fc_filetype_t filetype, 124 int dorootchecks, 125 _cups_fc_func_t cb, 126 void *context); 127extern void _cupsFileCheckFilter(void *context, 128 _cups_fc_result_t result, 129 const char *message); 130 131# ifdef __cplusplus 132} 133# endif /* __cplusplus */ 134 135#endif /* !_CUPS_FILE_PRIVATE_H_ */ 136 137/* 138 * End of "$Id: file-private.h 11693 2014-03-11 01:24:45Z msweet $". 139 */ 140