1/****************************************************************************
2
3gif_lib_private.h - internal giflib routines and structures
4
5SPDX-License-Identifier: MIT
6
7****************************************************************************/
8
9#ifndef _GIF_LIB_PRIVATE_H
10#define _GIF_LIB_PRIVATE_H
11
12#include "gif_lib.h"
13#include "gif_hash.h"
14
15#if !defined(_WIN32) || !defined(_MSC_VER)
16 #include <unistd.h>
17 #define posix_open open
18 #define posix_close close
19 #define posix_fdopen fdopen
20 #define posix_unlink unlink
21#endif
22
23#ifdef _WIN32
24 #include <io.h>
25 #ifdef _MSC_VER
26 #define posix_open _open
27 #define posix_close _close
28 #define posix_fdopen _fdopen
29 #define posix_unlink _unlink
30 #endif
31#else
32 #include <sys/types.h>
33#endif /* _WIN32 */
34#include <sys/stat.h>
35
36#ifndef SIZE_MAX
37 #define SIZE_MAX UINTPTR_MAX
38#endif
39
40#define EXTENSION_INTRODUCER 0x21
41#define DESCRIPTOR_INTRODUCER 0x2c
42#define TERMINATOR_INTRODUCER 0x3b
43
44#define LZ_MAX_CODE 4095 /* Biggest code possible in 12 bits. */
45#define LZ_BITS 12
46
47#define FLUSH_OUTPUT 4096 /* Impossible code, to signal flush. */
48#define FIRST_CODE 4097 /* Impossible code, to signal first. */
49#define NO_SUCH_CODE 4098 /* Impossible code, to signal empty. */
50
51#define FILE_STATE_WRITE 0x01
52#define FILE_STATE_SCREEN 0x02
53#define FILE_STATE_IMAGE 0x04
54#define FILE_STATE_READ 0x08
55
56#define IS_READABLE(Private) (Private->FileState & FILE_STATE_READ)
57#define IS_WRITEABLE(Private) (Private->FileState & FILE_STATE_WRITE)
58
59typedef struct GifFilePrivateType {
60 GifWord FileState, FileHandle, /* Where all this data goes to! */
61 BitsPerPixel, /* Bits per pixel (Codes uses at least this + 1). */
62 ClearCode, /* The CLEAR LZ code. */
63 EOFCode, /* The EOF LZ code. */
64 RunningCode, /* The next code algorithm can generate. */
65 RunningBits, /* The number of bits required to represent RunningCode. */
66 MaxCode1, /* 1 bigger than max. possible code, in RunningBits bits. */
67 LastCode, /* The code before the current code. */
68 CrntCode, /* Current algorithm code. */
69 StackPtr, /* For character stack (see below). */
70 CrntShiftState; /* Number of bits in CrntShiftDWord. */
71 unsigned long CrntShiftDWord; /* For bytes decomposition into codes. */
72 unsigned long PixelCount; /* Number of pixels in image. */
73 FILE *File; /* File as stream. */
74 InputFunc Read; /* function to read gif input (TVT) */
75 OutputFunc Write; /* function to write gif output (MRB) */
76 GifByteType Buf[256]; /* Compressed input is buffered here. */
77 GifByteType Stack[LZ_MAX_CODE]; /* Decoded pixels are stacked here. */
78 GifByteType Suffix[LZ_MAX_CODE + 1]; /* So we can trace the codes. */
79 GifPrefixType Prefix[LZ_MAX_CODE + 1];
80 GifHashTableType *HashTable;
81 bool gif89;
82} GifFilePrivateType;
83
84#ifndef HAVE_REALLOCARRAY
85extern void *openbsd_reallocarray(void *optr, size_t nmemb, size_t size);
86#define reallocarray openbsd_reallocarray
87#endif
88
89#endif /* _GIF_LIB_PRIVATE_H */
90
91/* end */
92