Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2005  David Turner
      3  * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
      4  * Copyright (C) 2007  Red Hat, Inc.
      5  *
      6  * This is part of HarfBuzz, an OpenType Layout engine library.
      7  *
      8  * Permission is hereby granted, without written agreement and without
      9  * license or royalty fees, to use, copy, modify, and distribute this
     10  * software and its documentation for any purpose, provided that the
     11  * above copyright notice and the following two paragraphs appear in
     12  * all copies of this software.
     13  *
     14  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
     15  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
     16  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
     17  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
     18  * DAMAGE.
     19  *
     20  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
     21  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
     22  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
     23  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
     24  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
     25  *
     26  * Red Hat Author(s): Behdad Esfahbod
     27  */
     28 
     29 #include "harfbuzz-impl.h"
     30 #include "harfbuzz-stream-private.h"
     31 #include <stdlib.h>
     32 
     33 #if 0
     34 #include <stdio.h>
     35 #define  LOG(x)  _hb_log x
     36 
     37 static void
     38 _hb_log( const char*   format, ... )
     39 {
     40   va_list  ap;
     41 
     42   va_start( ap, format );
     43   vfprintf( stderr, format, ap );
     44   va_end( ap );
     45 }
     46 
     47 #else
     48 #define  LOG(x)  do {} while (0)
     49 #endif
     50 
     51 HB_INTERNAL void
     52 _hb_close_stream( HB_Stream stream )
     53 {
     54   if (!stream)
     55       return;
     56   free(stream->base);
     57   free(stream);
     58 }
     59 
     60 
     61 HB_INTERNAL HB_Int
     62 _hb_stream_pos( HB_Stream stream )
     63 {
     64   LOG(( "_hb_stream_pos() -> %ld\n", stream->pos ));
     65   return stream->pos;
     66 }
     67 
     68 
     69 HB_INTERNAL HB_Error
     70 _hb_stream_seek( HB_Stream stream,
     71 		 HB_UInt pos )
     72 {
     73   HB_Error  error = (HB_Error)0;
     74 
     75   stream->pos = pos;
     76   if (pos > stream->size)
     77       error = ERR(HB_Err_Read_Error);
     78 
     79   LOG(( "_hb_stream_seek(%ld) -> 0x%04X\n", pos, error ));
     80   return error;
     81 }
     82 
     83 
     84 HB_INTERNAL HB_Error
     85 _hb_stream_frame_enter( HB_Stream stream,
     86 			HB_UInt count )
     87 {
     88   HB_Error  error = HB_Err_Ok;
     89 
     90   /* check new position, watch for overflow */
     91   if (HB_UNLIKELY (stream->pos + count > stream->size ||
     92 		   stream->pos + count < stream->pos))
     93   {
     94     error = ERR(HB_Err_Read_Error);
     95     goto Exit;
     96   }
     97 
     98   /* set cursor */
     99   stream->cursor = stream->base + stream->pos;
    100   stream->pos   += count;
    101 
    102 Exit:
    103   LOG(( "_hb_stream_frame_enter(%ld) -> 0x%04X\n", count, error ));
    104   return error;
    105 }
    106 
    107 
    108 HB_INTERNAL void
    109 _hb_stream_frame_exit( HB_Stream stream )
    110 {
    111   stream->cursor = NULL;
    112 
    113   LOG(( "_hb_stream_frame_exit()\n" ));
    114 }
    115