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