~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

TidyLib
tidy/src/fileio.c

Version: ~ [ 1.0 ] ~

** Warning: Cannot open xref database.

1 /* fileio.c -- does standard I/O 2 3 (c) 1998-2005 (W3C) MIT, ERCIM, Keio University 4 See tidy.h for the copyright notice. 5 6 CVS Info : 7 8 $Author: arnaud02 $ 9 $Date: 2005/08/02 10:07:28 $ 10 $Revision: 1.8 $ 11 12 Default implementations of Tidy input sources 13 and output sinks based on standard C FILE*. 14 15 */ 16 17 #include <stdio.h> 18 19 #include "fileio.h" 20 #include "tidy.h" 21 22 23 typedef struct _fp_input_source 24 { 25 FILE* fp; 26 TidyBuffer unget; 27 } FileSource; 28 29 static int TIDY_CALL filesrc_getByte( ulong sourceData ) 30 { 31 FileSource* fin = (FileSource*) sourceData; 32 int bv; 33 if ( fin->unget.size > 0 ) 34 bv = tidyBufPopByte( &fin->unget ); 35 else 36 bv = fgetc( fin->fp ); 37 return bv; 38 } 39 40 static Bool TIDY_CALL filesrc_eof( ulong sourceData ) 41 { 42 FileSource* fin = (FileSource*) sourceData; 43 Bool isEOF = ( fin->unget.size == 0 ); 44 if ( isEOF ) 45 isEOF = feof( fin->fp ) != 0; 46 return isEOF; 47 } 48 49 static void TIDY_CALL filesrc_ungetByte( ulong sourceData, byte bv ) 50 { 51 FileSource* fin = (FileSource*) sourceData; 52 tidyBufPutByte( &fin->unget, bv ); 53 } 54 55 void TIDY_CALL initFileSource( TidyInputSource* inp, FILE* fp ) 56 { 57 FileSource* fin = NULL; 58 59 inp->getByte = filesrc_getByte; 60 inp->eof = filesrc_eof; 61 inp->ungetByte = filesrc_ungetByte; 62 63 fin = (FileSource*) MemAlloc( sizeof(FileSource) ); 64 ClearMemory( fin, sizeof(FileSource) ); 65 fin->fp = fp; 66 inp->sourceData = (ulong) fin; 67 } 68 69 void TIDY_CALL freeFileSource( TidyInputSource* inp, Bool closeIt ) 70 { 71 FileSource* fin = (FileSource*) inp->sourceData; 72 if ( closeIt && fin && fin->fp ) 73 fclose( fin->fp ); 74 tidyBufFree( &fin->unget ); 75 MemFree( fin ); 76 } 77 78 void TIDY_CALL filesink_putByte( ulong sinkData, byte bv ) 79 { 80 FILE* fout = (FILE*) sinkData; 81 fputc( bv, fout ); 82 } 83 84 void TIDY_CALL initFileSink( TidyOutputSink* outp, FILE* fp ) 85 { 86 outp->putByte = filesink_putByte; 87 outp->sinkData = (ulong) fp; 88 } 89 90

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.