1 /*
2   Copyright 1999-2019 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 *,ssize_t *);
71 
72 extern MagickExport double
73   ReadBlobDouble(Image *);
74 
75 extern MagickExport float
76   ReadBlobFloat(Image *);
77 
78 extern MagickExport int
79   EOFBlob(const Image *),
80   ErrorBlob(const Image *),
81   ReadBlobByte(Image *);
82 
83 extern MagickExport MagickBooleanType
84   CloseBlob(Image *),
85   DiscardBlobBytes(Image *,const MagickSizeType),
86   OpenBlob(const ImageInfo *,Image *,const BlobMode,ExceptionInfo *),
87   SetBlobExtent(Image *,const MagickSizeType),
88   UnmapBlob(void *,const size_t);
89 
90 extern MagickExport MagickOffsetType
91   SeekBlob(Image *,const MagickOffsetType,const int),
92   TellBlob(const Image *);
93 
94 extern MagickExport MagickSizeType
95   ReadBlobLongLong(Image *),
96   ReadBlobMSBLongLong(Image *);
97 
98 extern MagickExport signed int
99   ReadBlobLSBSignedLong(Image *),
100   ReadBlobMSBSignedLong(Image *),
101   ReadBlobSignedLong(Image *);
102 
103 extern MagickExport signed short
104   ReadBlobLSBSignedShort(Image *),
105   ReadBlobMSBSignedShort(Image *),
106   ReadBlobSignedShort(Image *);
107 
108 extern MagickExport ssize_t
109   ReadBlob(Image *,const size_t,void *),
110   WriteBlob(Image *,const size_t,const void *),
111   WriteBlobByte(Image *,const unsigned char),
112   WriteBlobFloat(Image *,const float),
113   WriteBlobLong(Image *,const unsigned int),
114   WriteBlobLongLong(Image *,const MagickSizeType),
115   WriteBlobShort(Image *,const unsigned short),
116   WriteBlobSignedLong(Image *,const signed int),
117   WriteBlobLSBLong(Image *,const unsigned int),
118   WriteBlobLSBShort(Image *,const unsigned short),
119   WriteBlobLSBSignedLong(Image *,const signed int),
120   WriteBlobLSBSignedShort(Image *,const signed short),
121   WriteBlobMSBLong(Image *,const unsigned int),
122   WriteBlobMSBShort(Image *,const unsigned short),
123   WriteBlobMSBSignedShort(Image *,const signed short),
124   WriteBlobString(Image *,const char *);
125 
126 extern MagickExport unsigned int
127   ReadBlobLong(Image *),
128   ReadBlobLSBLong(Image *),
129   ReadBlobMSBLong(Image *);
130 
131 extern MagickExport unsigned short
132   ReadBlobShort(Image *),
133   ReadBlobLSBShort(Image *),
134   ReadBlobMSBShort(Image *);
135 
136 extern MagickExport void
137   AttachBlob(BlobInfo *,const void *,const size_t),
138   AttachCustomStream(BlobInfo *,CustomStreamInfo *),
139   *DetachBlob(BlobInfo *),
140   DisassociateBlob(Image *),
141   GetBlobInfo(BlobInfo *),
142   *MapBlob(int,const MapMode,const MagickOffsetType,const size_t),
143   MSBOrderLong(unsigned char *,const size_t),
144   MSBOrderShort(unsigned char *,const size_t);
145 
146 #if defined(__cplusplus) || defined(c_plusplus)
147 }
148 #endif
149 
150 #endif
151