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 "MagickCore/image.h"
22 #include "MagickCore/stream.h"
23 #include "MagickCore/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   CustomStream
57 } StreamType;
58 
59 extern MagickExport BlobInfo
60   *CloneBlobInfo(const BlobInfo *),
61   *ReferenceBlob(BlobInfo *);
62 
63 extern MagickExport char
64   *ReadBlobString(Image *,char *);
65 
66 extern MagickExport const struct stat
67   *GetBlobProperties(const Image *);
68 
69 extern MagickExport const void
70   *ReadBlobStream(Image *,const size_t,void *magick_restrict ,ssize_t *)
71     magick_hot_spot;
72 
73 extern MagickExport double
74   ReadBlobDouble(Image *);
75 
76 extern MagickExport float
77   ReadBlobFloat(Image *);
78 
79 extern MagickExport int
80   EOFBlob(const Image *),
81   ErrorBlob(const Image *),
82   ReadBlobByte(Image *);
83 
84 extern MagickExport MagickBooleanType
85   CloseBlob(Image *),
86   DiscardBlobBytes(Image *,const MagickSizeType),
87   OpenBlob(const ImageInfo *,Image *,const BlobMode,ExceptionInfo *),
88   SetBlobExtent(Image *,const MagickSizeType),
89   UnmapBlob(void *,const size_t);
90 
91 extern MagickExport MagickOffsetType
92   SeekBlob(Image *,const MagickOffsetType,const int),
93   TellBlob(const Image *);
94 
95 extern MagickExport MagickSizeType
96   ReadBlobLongLong(Image *),
97   ReadBlobMSBLongLong(Image *);
98 
99 extern MagickExport signed int
100   ReadBlobLSBSignedLong(Image *),
101   ReadBlobMSBSignedLong(Image *),
102   ReadBlobSignedLong(Image *);
103 
104 extern MagickExport signed short
105   ReadBlobLSBSignedShort(Image *),
106   ReadBlobMSBSignedShort(Image *),
107   ReadBlobSignedShort(Image *);
108 
109 extern MagickExport ssize_t
110   ReadBlob(Image *,const size_t,void *),
111   WriteBlob(Image *,const size_t,const void *),
112   WriteBlobByte(Image *,const unsigned char),
113   WriteBlobFloat(Image *,const float),
114   WriteBlobLong(Image *,const unsigned int),
115   WriteBlobLongLong(Image *,const MagickSizeType),
116   WriteBlobShort(Image *,const unsigned short),
117   WriteBlobSignedLong(Image *,const signed int),
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   WriteBlobMSBShort(Image *,const unsigned short),
124   WriteBlobMSBSignedShort(Image *,const signed short),
125   WriteBlobString(Image *,const char *);
126 
127 extern MagickExport unsigned int
128   ReadBlobLong(Image *),
129   ReadBlobLSBLong(Image *),
130   ReadBlobMSBLong(Image *);
131 
132 extern MagickExport unsigned short
133   ReadBlobShort(Image *),
134   ReadBlobLSBShort(Image *),
135   ReadBlobMSBShort(Image *);
136 
137 extern MagickExport void
138   AttachBlob(BlobInfo *,const void *,const size_t),
139   AttachCustomStream(BlobInfo *,CustomStreamInfo *),
140   *DetachBlob(BlobInfo *),
141   DisassociateBlob(Image *),
142   GetBlobInfo(BlobInfo *),
143   *MapBlob(int,const MapMode,const MagickOffsetType,const size_t),
144   MSBOrderLong(unsigned char *,const size_t),
145   MSBOrderShort(unsigned char *,const size_t);
146 
147 #if defined(__cplusplus) || defined(c_plusplus)
148 }
149 #endif
150 
151 #endif
152