Annotation of libwww/Library/src/HTFWrite.c, revision 2.45

2.1       frystyk     1: /*                                                                 HTFWrite.c
2.45    ! frystyk     2: **     BASIC FILE WRITER STREAM
2.1       frystyk     3: **
2.6       frystyk     4: **     (c) COPYRIGHT MIT 1995.
2.1       frystyk     5: **     Please first read the full copyright statement in the file COPYRIGH.
2.45    ! frystyk     6: **     @(#) $Id: HTFWrite.c,v 2.44 1998/10/20 13:11:59 frystyk Exp $
2.1       frystyk     7: **
                      8: **     This version of the stream object just writes to a C file.
                      9: **     The file is assumed open and left open.
                     10: **
                     11: **     Bugs:
                     12: **             strings written must be less than buffer size.
                     13: **
                     14: **      History:
                     15: **         HFN: wrote it
                     16: **         HWL: converted the caching scheme to be hierachical by taking
                     17: **              AL code from Deamon
2.10      frystyk    18: **        HFN: moved cache code to HTCache module
2.1       frystyk    19: **
                     20: */
                     21: 
                     22: /* Library include files */
2.42      frystyk    23: #include "wwwsys.h"
2.35      frystyk    24: #include "WWWUtil.h"
2.45    ! frystyk    25: #include "WWWCore.h"
2.3       frystyk    26: #include "HTFWrite.h"                                   /* Implemented here */
2.1       frystyk    27: 
2.3       frystyk    28: struct _HTStream {
2.28      frystyk    29:     const HTStreamClass *isa;
2.24      frystyk    30:     FILE *             fp;
2.31      frystyk    31:     BOOL               leave_open;                 /* Close file when free? */
2.3       frystyk    32: };
2.1       frystyk    33: 
2.3       frystyk    34: /* ------------------------------------------------------------------------- */
2.1       frystyk    35: 
2.16      frystyk    36: PRIVATE int HTFWriter_put_character (HTStream * me, char c)
2.3       frystyk    37: {
                     38:     return (fputc(c, me->fp) == EOF) ? HT_ERROR : HT_OK;
                     39: }
                     40: 
2.28      frystyk    41: PRIVATE int HTFWriter_put_string (HTStream * me, const char* s)
2.3       frystyk    42: {
                     43:     if (*s)                                         /* For vms :-( 10/04-94 */
                     44:        return (fputs(s, me->fp) == EOF) ? HT_ERROR : HT_OK;
                     45:     return HT_OK;
                     46: }
                     47: 
2.16      frystyk    48: PRIVATE int HTFWriter_flush (HTStream * me)
2.3       frystyk    49: {
2.7       frystyk    50:     return (fflush(me->fp) == EOF) ? HT_ERROR : HT_OK;
2.3       frystyk    51: }
                     52: 
2.28      frystyk    53: PRIVATE int HTFWriter_write (HTStream * me, const char* s, int l)
2.3       frystyk    54: {
2.7       frystyk    55:     int status ;
                     56:     status = (fwrite(s, 1, l, me->fp) != l) ? HT_ERROR : HT_OK ;
2.24      frystyk    57:     if (l > 1 && status == HT_OK) (void) HTFWriter_flush(me);
2.7       frystyk    58:     return status ;
2.3       frystyk    59: }
2.7       frystyk    60: 
2.30      frystyk    61: PRIVATE int HTFWriter_free (HTStream * me)
2.3       frystyk    62: {
2.24      frystyk    63:     if (me) {
2.41      frystyk    64:        if (me->leave_open != YES)
                     65:            fclose(me->fp);
                     66:        else
                     67:            HTFWriter_flush(me);
2.26      frystyk    68:        HT_FREE(me);
2.3       frystyk    69:     }
                     70:     return HT_OK;
                     71: }
                     72: 
2.18      frystyk    73: PRIVATE int HTFWriter_abort (HTStream * me, HTList * e)
2.3       frystyk    74: {
2.27      eric       75:     if (STREAM_TRACE) HTTrace("FileWriter.. ABORTING...\n");
2.24      frystyk    76:     if (me) {
                     77:        if (me->leave_open != YES) fclose(me->fp);
2.26      frystyk    78:        HT_FREE(me);
2.3       frystyk    79:     }
                     80:     return HT_ERROR;
                     81: }
                     82: 
2.28      frystyk    83: PRIVATE const HTStreamClass HTFWriter = /* As opposed to print etc */
2.3       frystyk    84: {              
                     85:     "FileWriter",
                     86:     HTFWriter_flush,
2.30      frystyk    87:     HTFWriter_free,
2.3       frystyk    88:     HTFWriter_abort,
                     89:     HTFWriter_put_character,
                     90:     HTFWriter_put_string,
                     91:     HTFWriter_write
                     92: };
                     93: 
2.24      frystyk    94: PUBLIC HTStream * HTFWriter_new (HTRequest * request, FILE * fp,
                     95:                                 BOOL leave_open)
2.3       frystyk    96: {
2.24      frystyk    97:     HTStream * me = NULL;
2.3       frystyk    98:     if (!fp) {
2.27      eric       99:        if (STREAM_TRACE)HTTrace("FileWriter.. Bad file descriptor\n");
2.24      frystyk   100:        return HTErrorStream();
2.3       frystyk   101:     }
2.26      frystyk   102:     if ((me = (HTStream *) HT_CALLOC(1, sizeof(HTStream))) == NULL)
                    103:         HT_OUTOFMEM("HTFWriter_new");
2.3       frystyk   104:     me->isa = &HTFWriter;       
                    105:     me->fp = fp;
2.24      frystyk   106:     me->leave_open = leave_open;
2.3       frystyk   107:     return me;
2.1       frystyk   108: }
                    109: 

Webmaster