@@ -130,6 +130,8 @@ static MCStreamCallbacks kMCMemoryInputStreamCallbacks =
130130
131131bool MCMemoryInputStreamCreate (const void *p_block, size_t p_size, MCStreamRef& r_stream)
132132{
133+ MCAssert (nil != p_block);
134+
133135 MCStreamRef t_stream;
134136 if (!MCStreamCreate (&kMCMemoryInputStreamCallbacks , sizeof (__MCMemoryInputStream), t_stream))
135137 return false ;
@@ -200,6 +202,14 @@ static MCValueCustomCallbacks kMCStreamCustomValueCallbacks =
200202 __MCStreamDescribe,
201203};
202204
205+ static inline void __MCAssertIsStream (MCStreamRef ref)
206+ {
207+ __MCValue *val = reinterpret_cast <__MCValue *>(ref);
208+ MCAssert (nil != val &&
209+ __MCValueGetTypeCode (val) == kMCValueTypeCodeCustom &&
210+ __MCValueGetCustomCallbacks (val) == &kMCStreamCustomValueCallbacks );
211+ }
212+
203213bool MCStreamCreate (const MCStreamCallbacks *p_callbacks, size_t p_extra_bytes, MCStreamRef& r_stream)
204214{
205215 __MCStream *self;
@@ -215,63 +225,85 @@ bool MCStreamCreate(const MCStreamCallbacks *p_callbacks, size_t p_extra_bytes,
215225
216226const MCStreamCallbacks *MCStreamGetCallbacks (MCStreamRef self)
217227{
228+ __MCAssertIsStream (self);
229+
218230 return self -> callbacks;
219231}
220232
221233// //////////////////////////////////////////////////////////////////////////////
222234
223235bool MCStreamIsReadable (MCStreamRef self)
224236{
237+ __MCAssertIsStream (self);
238+
225239 return self -> callbacks -> read != nil;
226240}
227241
228242bool MCStreamIsWritable (MCStreamRef self)
229243{
244+ __MCAssertIsStream (self);
245+
230246 return self -> callbacks -> write != nil;
231247}
232248
233249bool MCStreamIsMarkable (MCStreamRef self)
234250{
251+ __MCAssertIsStream (self);
252+
235253 return self -> callbacks -> mark != nil;
236254}
237255
238256bool MCStreamIsSeekable (MCStreamRef self)
239257{
258+ __MCAssertIsStream (self);
259+
240260 return self -> callbacks -> seek != nil;
241261}
242262
243263// //////////////////////////////////////////////////////////////////////////////
244264
245265bool MCStreamGetAvailableForRead (MCStreamRef self, size_t & r_available)
246266{
267+ __MCAssertIsStream (self);
268+
247269 if (self -> callbacks -> get_available_for_read == nil)
248270 return false ;
249271 return self -> callbacks -> get_available_for_read (self, r_available);
250272}
251273
252274bool MCStreamRead (MCStreamRef self, void *p_buffer, size_t p_amount)
253275{
276+ __MCAssertIsStream (self);
277+ MCAssert (nil != p_buffer);
278+
254279 if (self -> callbacks -> read == nil)
255280 return false ;
256281 return self -> callbacks -> read (self, p_buffer, p_amount);
257282}
258283
259284bool MCStreamGetAvailableForWrite (MCStreamRef self, size_t & r_available)
260285{
286+ __MCAssertIsStream (self);
287+
261288 if (self -> callbacks -> get_available_for_write == nil)
262289 return false ;
263290 return self -> callbacks -> get_available_for_write (self, r_available);
264291}
265292
266293bool MCStreamWrite (MCStreamRef self, const void *p_buffer, size_t p_amount)
267294{
295+ __MCAssertIsStream (self);
296+ MCAssert (nil != p_buffer);
297+
268298 if (self -> callbacks -> write == nil)
269299 return false ;
270300 return self -> callbacks -> write (self, p_buffer, p_amount);
271301}
272302
273303bool MCStreamSkip (MCStreamRef self, size_t p_amount)
274304{
305+ __MCAssertIsStream (self);
306+
275307 if (self -> callbacks -> skip != nil)
276308 return self -> callbacks -> skip (self, p_amount);
277309 if (self -> callbacks -> seek != nil)
@@ -288,13 +320,17 @@ bool MCStreamSkip(MCStreamRef self, size_t p_amount)
288320
289321bool MCStreamMark (MCStreamRef self, size_t p_read_limit)
290322{
323+ __MCAssertIsStream (self);
324+
291325 if (self -> callbacks -> mark == nil)
292326 return false ;
293327 return self -> callbacks -> mark (self, p_read_limit);
294328}
295329
296330bool MCStreamReset (MCStreamRef self)
297331{
332+ __MCAssertIsStream (self);
333+
298334 if (self -> callbacks -> reset == nil)
299335 return false ;
300336 return self -> callbacks -> reset (self);
@@ -304,13 +340,17 @@ bool MCStreamReset(MCStreamRef self)
304340
305341bool MCStreamTell (MCStreamRef self, filepos_t & r_position)
306342{
343+ __MCAssertIsStream (self);
344+
307345 if (self -> callbacks -> tell == nil)
308346 return false ;
309347 return self -> callbacks -> tell (self, r_position);
310348}
311349
312350bool MCStreamSeek (MCStreamRef self, filepos_t p_position)
313351{
352+ __MCAssertIsStream (self);
353+
314354 if (self -> callbacks -> seek == nil)
315355 return false ;
316356 return self -> callbacks -> seek (self, p_position);
0 commit comments