Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/thirdparty/zint/backend/filemem.h @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:1d09e1dec1d9 | 2:b50eed0cc0ef |
|---|---|
| 1 /* filemem.h - write to file/memory abstraction */ | |
| 2 /* | |
| 3 libzint - the open source barcode library | |
| 4 Copyright (C) 2023-2024 Robin Stuart <rstuart114@gmail.com> | |
| 5 | |
| 6 Redistribution and use in source and binary forms, with or without | |
| 7 modification, are permitted provided that the following conditions | |
| 8 are met: | |
| 9 | |
| 10 1. Redistributions of source code must retain the above copyright | |
| 11 notice, this list of conditions and the following disclaimer. | |
| 12 2. Redistributions in binary form must reproduce the above copyright | |
| 13 notice, this list of conditions and the following disclaimer in the | |
| 14 documentation and/or other materials provided with the distribution. | |
| 15 3. Neither the name of the project nor the names of its contributors | |
| 16 may be used to endorse or promote products derived from this software | |
| 17 without specific prior written permission. | |
| 18 | |
| 19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | |
| 20 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
| 21 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
| 22 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE | |
| 23 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
| 24 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
| 25 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
| 26 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
| 27 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
| 28 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
| 29 SUCH DAMAGE. | |
| 30 */ | |
| 31 /* SPDX-License-Identifier: BSD-3-Clause */ | |
| 32 | |
| 33 #ifndef Z_FILEMEM_H | |
| 34 #define Z_FILEMEM_H | |
| 35 | |
| 36 #ifdef __cplusplus | |
| 37 extern "C" { | |
| 38 #endif /* __cplusplus */ | |
| 39 | |
| 40 #include <stdio.h> | |
| 41 #include "common.h" | |
| 42 | |
| 43 /* Whether `vsnprintf()` available */ | |
| 44 #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(ZINT_IS_C89) /* Pre-MSVC 2015 (C++ 14.0) or C89 */ | |
| 45 #define FM_NO_VSNPRINTF | |
| 46 #endif | |
| 47 | |
| 48 struct filemem { | |
| 49 FILE *fp; | |
| 50 unsigned char *mem; | |
| 51 size_t memsize; /* Size of `mem` buffer (capacity) */ | |
| 52 size_t mempos; /* Current position */ | |
| 53 size_t memend; /* For use by `fm_seek()`, points to highest `mempos` reached */ | |
| 54 int flags; /* BARCODE_MEMORY_FILE or BARCODE_STDOUT */ | |
| 55 int err; /* `errno` values, reset only on `fm_open()` */ | |
| 56 #ifdef FM_NO_VSNPRINTF | |
| 57 FILE *fp_null; /* Only used for BARCODE_MEMORY_FILE */ | |
| 58 #endif | |
| 59 }; | |
| 60 | |
| 61 /* `fopen()` if file, setup memory buffer if BARCODE_MEMORY_FILE, returning 1 on success, 0 on failure */ | |
| 62 INTERNAL int fm_open(struct filemem *restrict const fmp, struct zint_symbol *symbol, const char *mode); | |
| 63 | |
| 64 /* `fwrite()` to file or memory, returning 1 on success, 0 on failure */ | |
| 65 INTERNAL int fm_write(const void *restrict ptr, const size_t size, const size_t nitems, | |
| 66 struct filemem *restrict const fmp); | |
| 67 | |
| 68 /* `fputc()` to file or memory, returning 1 on success, 0 on failure */ | |
| 69 INTERNAL int fm_putc(const int ch, struct filemem *restrict const fmp); | |
| 70 | |
| 71 /* `fputs()` to file or memory, returning 1 on success, 0 on failure */ | |
| 72 INTERNAL int fm_puts(const char *str, struct filemem *restrict const fmp); | |
| 73 | |
| 74 /* `fprintf()` to file or memory, returning 1 on success, 0 on failure */ | |
| 75 INTERNAL int fm_printf(struct filemem *restrict const fmp, const char *format, ...) ZINT_FORMAT_PRINTF(2, 3); | |
| 76 | |
| 77 /* Output float without trailing zeroes to `fmp` with decimal pts `dp` (precision), returning 1 on success, 0 on | |
| 78 failure */ | |
| 79 INTERNAL int fm_putsf(const char *prefix, const int dp, const float arg, struct filemem *restrict const fmp); | |
| 80 | |
| 81 /* `fclose()` if file, set `symbol->memfile` & `symbol->memfile_size` if memory, returning 1 on success, 0 on | |
| 82 failure */ | |
| 83 INTERNAL int fm_close(struct filemem *restrict const fmp, struct zint_symbol *symbol); | |
| 84 | |
| 85 /* `fseek()` to file/memory offset, returning 1 on success, 0 on failure */ | |
| 86 INTERNAL int fm_seek(struct filemem *restrict const fmp, const long offset, const int whence); | |
| 87 | |
| 88 /* `ftell()` returns current file/memory offset if successful, -1 on failure */ | |
| 89 INTERNAL long fm_tell(struct filemem *restrict const fmp); | |
| 90 | |
| 91 /* Return `err`, which uses `errno` values; if file and `err` not set, test `ferror()` also */ | |
| 92 INTERNAL int fm_error(struct filemem *restrict const fmp); | |
| 93 | |
| 94 /* `fflush()` if file, no-op if memory, returning 1 on success, 0 on failure | |
| 95 NOTE: don't use, included only for libpng compatibility */ | |
| 96 INTERNAL int fm_flush(struct filemem *restrict const fmp); | |
| 97 | |
| 98 #ifdef __cplusplus | |
| 99 } | |
| 100 #endif /* __cplusplus */ | |
| 101 | |
| 102 /* vim: set ts=4 sw=4 et : */ | |
| 103 #endif /* Z_FILEMEM_H */ |
