1 /*
2   Copyright 1999-2021 ImageMagick Studio LLC, a non-profit organization
3   dedicated to making software imaging solutions freely available.
4 
5   You may not use this file except in compliance with the License.  You may
6   obtain a copy of the License at
7 
8     https://imagemagick.org/script/license.php
9 
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15 
16   MagickCore Binary Large OBjects private methods.
17 */
18 #ifndef MAGICKCORE_BLOB_PRIVATE_H
19 #define MAGICKCORE_BLOB_PRIVATE_H
20 
21 #include "magick/image.h"
22 #include "magick/stream.h"
23 #include "magick/nt-base-private.h"
24 
25 #if defined(__cplusplus) || defined(c_plusplus)
26 extern "C" {
27 #endif
28 
29 #define MagickMinBlobExtent  32767L
30 #if defined(MAGICKCORE_HAVE_FSEEKO)
31 # define fseek  fseeko
32 # define ftell  ftello
33 #endif
34 
35 typedef enum
36 {
37   UndefinedBlobMode,
38   ReadBlobMode,
39   ReadBinaryBlobMode,
40   WriteBlobMode,
41   WriteBinaryBlobMode,
42   AppendBlobMode,
43   AppendBinaryBlobMode
44 } BlobMode;
45 
46 typedef enum
47 {
48   UndefinedStream,
49   FileStream,
50   StandardStream,
51   PipeStream,
52   ZipStream,
53   BZipStream,
54   FifoStream,
55   BlobStream
56 } StreamType;
57 
58 typedef int
59   *(*BlobFifo)(const Image *,const void *,const size_t);
60 
61 extern MagickExport BlobInfo
62   *CloneBlobInfo(const BlobInfo *),
63   *ReferenceBlob(BlobInfo *);
64 
65 extern MagickExport char
66   *ReadBlobString(Image *,char *);
67 
68 extern MagickExport const struct stat
69   *GetBlobProperties(const Image *);
70 
71 extern MagickExport const void
72   *ReadBlobStream(Image *,const size_t,void *magick_restrict,ssize_t *)
73     magick_hot_spot;
74 
75 extern MagickExport double
76   ReadBlobDouble(Image *);
77 
78 extern MagickExport float
79   ReadBlobFloat(Image *);
80 
81 extern MagickExport int
82   EOFBlob(const Image *),
83   ErrorBlob(const Image *),
84   ReadBlobByte(Image *);
85 
86 extern MagickExport MagickBooleanType
87   CloseBlob(Image *),
88   DiscardBlobBytes(Image *,const MagickSizeType),
89   OpenBlob(const ImageInfo *,Image *,const BlobMode,ExceptionInfo *),
90   SetBlobExtent(Image *,const MagickSizeType),
91   UnmapBlob(void *,const size_t);
92 
93 extern MagickExport MagickOffsetType
94   SeekBlob(Image *,const MagickOffsetType,const int),
95   TellBlob(const Image *);
96 
97 extern MagickExport MagickSizeType
98   ReadBlobLongLong(Image *),
99   ReadBlobMSBLongLong(Image *);
100 
101 extern MagickExport signed int
102   ReadBlobLSBSignedLong(Image *),
103   ReadBlobMSBSignedLong(Image *),
104   ReadBlobSignedLong(Image *);
105 
106 extern MagickExport signed short
107   ReadBlobLSBSignedShort(Image *),
108   ReadBlobMSBSignedShort(Image *),
109   ReadBlobSignedShort(Image *);
110 
111 extern MagickExport ssize_t
112   ReadBlob(Image *,const size_t,unsigned char *),
113   WriteBlob(Image *,const size_t,const unsigned char *),
114   WriteBlobByte(Image *,const unsigned char),
115   WriteBlobFloat(Image *,const float),
116   WriteBlobLong(Image *,const unsigned int),
117   WriteBlobShort(Image *,const unsigned short),
118   WriteBlobLSBLong(Image *,const unsigned int),
119   WriteBlobLSBShort(Image *,const unsigned short),
120   WriteBlobLSBSignedLong(Image *,const signed int),
121   WriteBlobLSBSignedShort(Image *,const signed short),
122   WriteBlobMSBLong(Image *,const unsigned int),
123   WriteBlobMSBLongLong(Image *,const MagickSizeType),
124   WriteBlobMSBShort(Image *,const unsigned short),
125   WriteBlobMSBSignedLong(Image *,const signed int),
126   WriteBlobMSBSignedShort(Image *,const signed short),
127   WriteBlobString(Image *,const char *);
128 
129 extern MagickExport unsigned char
130   *DetachBlob(BlobInfo *),
131   *MapBlob(int,const MapMode,const MagickOffsetType,const size_t);
132 
133 extern MagickExport unsigned int
134   ReadBlobLong(Image *),
135   ReadBlobLSBLong(Image *),
136   ReadBlobMSBLong(Image *);
137 
138 extern MagickExport unsigned short
139   ReadBlobShort(Image *),
140   ReadBlobLSBShort(Image *),
141   ReadBlobMSBShort(Image *);
142 
143 extern MagickExport void
144   AttachBlob(BlobInfo *,const void *,const size_t),
145   GetBlobInfo(BlobInfo *),
146   MSBOrderLong(unsigned char *,const size_t),
147   MSBOrderShort(unsigned char *,const size_t);
148 
149 extern MagickPrivate void
150   DisassociateBlob(Image *);
151 
152 #if defined(__cplusplus) || defined(c_plusplus)
153 }
154 #endif
155 
156 #endif
157