1 /* 2 * Private file definitions for CUPS. 3 * 4 * Since stdio files max out at 256 files on many systems, we have to 5 * write similar functions without this limit. At the same time, using 6 * our own file functions allows us to provide transparent support of 7 * different line endings, gzip'd print files, PPD files, etc. 8 * 9 * Copyright © 2007-2018 by Apple Inc. 10 * Copyright © 1997-2007 by Easy Software Products, all rights reserved. 11 * 12 * Licensed under Apache License v2.0. See the file "LICENSE" for more 13 * information. 14 */ 15 16 #ifndef _CUPS_FILE_PRIVATE_H_ 17 # define _CUPS_FILE_PRIVATE_H_ 18 19 /* 20 * Include necessary headers... 21 */ 22 23 # include "cups-private.h" 24 # include <stdio.h> 25 # include <stdlib.h> 26 # include <stdarg.h> 27 # include <fcntl.h> 28 29 # ifdef _WIN32 30 # include <io.h> 31 # include <sys/locking.h> 32 # endif /* _WIN32 */ 33 34 35 /* 36 * Some operating systems support large files via open flag O_LARGEFILE... 37 */ 38 39 # ifndef O_LARGEFILE 40 # define O_LARGEFILE 0 41 # endif /* !O_LARGEFILE */ 42 43 44 /* 45 * Some operating systems don't define O_BINARY, which is used by Microsoft 46 * and IBM to flag binary files... 47 */ 48 49 # ifndef O_BINARY 50 # define O_BINARY 0 51 # endif /* !O_BINARY */ 52 53 54 # ifdef __cplusplus 55 extern "C" { 56 # endif /* __cplusplus */ 57 58 59 /* 60 * Types and structures... 61 */ 62 63 typedef enum /**** _cupsFileCheck return values ****/ 64 { 65 _CUPS_FILE_CHECK_OK = 0, /* Everything OK */ 66 _CUPS_FILE_CHECK_MISSING = 1, /* File is missing */ 67 _CUPS_FILE_CHECK_PERMISSIONS = 2, /* File (or parent dir) has bad perms */ 68 _CUPS_FILE_CHECK_WRONG_TYPE = 3, /* File has wrong type */ 69 _CUPS_FILE_CHECK_RELATIVE_PATH = 4 /* File contains a relative path */ 70 } _cups_fc_result_t; 71 72 typedef enum /**** _cupsFileCheck file type values ****/ 73 { 74 _CUPS_FILE_CHECK_FILE = 0, /* Check the file and parent directory */ 75 _CUPS_FILE_CHECK_PROGRAM = 1, /* Check the program and parent directory */ 76 _CUPS_FILE_CHECK_FILE_ONLY = 2, /* Check the file only */ 77 _CUPS_FILE_CHECK_DIRECTORY = 3 /* Check the directory */ 78 } _cups_fc_filetype_t; 79 80 typedef void (*_cups_fc_func_t)(void *context, _cups_fc_result_t result, 81 const char *message); 82 83 /* 84 * Prototypes... 85 */ 86 87 extern _cups_fc_result_t _cupsFileCheck(const char *filename, _cups_fc_filetype_t filetype, int dorootchecks, _cups_fc_func_t cb, void *context) _CUPS_PRIVATE; 88 extern void _cupsFileCheckFilter(void *context, _cups_fc_result_t result, const char *message) _CUPS_PRIVATE; 89 extern int _cupsFilePeekAhead(cups_file_t *fp, int ch); 90 91 # ifdef __cplusplus 92 } 93 # endif /* __cplusplus */ 94 95 #endif /* !_CUPS_FILE_PRIVATE_H_ */ 96