cvs: php4 /main Makefile.in memory_streams.c php.h php_memory_streams.h

From: Date: Sat, 16 Mar 2002 20:11:07 +0000
Subject: cvs: php4 /main Makefile.in memory_streams.c php.h php_memory_streams.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-10263@lists.php.net to get a copy of this message
helly Sat Mar 16 15:11:07 2002 EDT Added files: /php4/main memory_streams.c php_memory_streams.h Modified files: /php4/main Makefile.in php.h Log: -added memory streams @added memory streams (marcus) Index: php4/main/Makefile.in diff -u php4/main/Makefile.in:1.16 php4/main/Makefile.in:1.17 --- php4/main/Makefile.in:1.16 Sat Jan 19 21:30:18 2002 +++ php4/main/Makefile.in Sat Mar 16 15:11:06 2002 @@ -6,7 +6,7 @@ php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \ strlcat.c mergesort.c reentrancy.c php_variables.c php_ticks.c \ streams.c network.c php_open_temporary_file.c php_logos.c \ - output.c + output.c memory_stream.c LTLIBRARY_SOURCES = $(LTLIBRARY_SOURCES_COMMON) internal_functions.c Index: php4/main/php.h diff -u php4/main/php.h:1.164 php4/main/php.h:1.165 --- php4/main/php.h:1.164 Sat Mar 16 12:54:11 2002 +++ php4/main/php.h Sat Mar 16 15:11:06 2002 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php.h,v 1.164 2002/03/16 17:54:11 wez Exp $ */ +/* $Id: php.h,v 1.165 2002/03/16 20:11:06 helly Exp $ */ #ifndef PHP_H #define PHP_H @@ -172,6 +172,7 @@ #endif #include "php_streams.h" +#include "php_memory_streams.h" #include "fopen_wrappers.h" #if (REGEX == 1 || REGEX == 0) && !defined(NO_REGEX_EXTRA_H) @@ -357,7 +358,7 @@ #define XtOffsetOf(s_type, field) XtOffset(s_type*, field) #endif #endif /* !XtOffsetOf */ - + PHPAPI PHP_FUNCTION(warn_not_available); #endif Index: php4/main/memory_streams.c +++ php4/main/memory_streams.c /* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: | | Marcus Boerger <helly@php.net> | +----------------------------------------------------------------------+ */ #define _GNU_SOURCE #include "php.h" #include "php_streams.h" /* {{{ ------- MEMORY stream implementation -------*/ typedef struct { char *data; size_t fpos; size_t fsize; } php_memory_stream_data; static size_t php_memory_stream_write(php_stream *stream, const char *buf, size_t count) {/* {{{ */ php_memory_stream_data *ms; assert(stream != NULL); ms = stream->abstract; assert(ms != NULL); if ( ms->fpos + count > ms->fsize) { char *tmp; if ( !ms->data) { tmp = emalloc( ms->fpos + count); } else { tmp = erealloc( ms->data, ms->fpos + count); } if ( !tmp) { count = ms->fsize - ms->fpos + 1; } else { ms->data = tmp; ms->fsize = ms->fpos + count; } } if ( !ms->data) count = 0; if ( count) { assert(buf!= NULL); memcpy( ms->data+ms->fpos, (char*)buf, count); ms->fpos += count; } return count; } /* }}} */ static size_t php_memory_stream_read(php_stream *stream, char *buf, size_t count) {/* {{{ */ php_memory_stream_data *ms; assert(stream != NULL); ms = stream->abstract; assert(ms != NULL); if (buf == NULL && count == 0) { /* check for EOF condition */ if (ms->fpos >= ms->fsize) { return EOF; } return 0; } if ( ms->fpos + count > ms->fsize) { count = ms->fsize - ms->fpos; } if ( count) { assert(buf!= NULL); memcpy( buf, ms->data+ms->fpos, count); ms->fpos += count; } return count; } /* }}} */ static int php_memory_stream_close(php_stream *stream, int close_handle) {/* {{{ */ php_memory_stream_data *ms; assert(stream != NULL); ms = stream->abstract; assert(ms != NULL); if (ms->data) { efree(ms->data); } ms->data = NULL; ms->fsize = 0; ms->fpos = 0; } /* }}} */ static int php_memory_stream_flush(php_stream *stream) {/* {{{ */ // nothing to do here return 0; } /* }}} */ static int php_memory_stream_seek(php_stream *stream, off_t offset, int whence) {/* {{{ */ php_memory_stream_data *ms; assert(stream != NULL); ms = stream->abstract; assert(ms != NULL); if (offset == 0 && whence == SEEK_CUR) return ms->fpos; switch( whence) { case SEEK_CUR: if ( offset < 0) { if ( ms->fpos < -offset) { ms->fpos = 0; /*return EINVAL;*/ } else { ms->fpos = ms->fpos + offset; } } else { if ( ms->fpos < offset) { ms->fpos = ms->fsize; /*return EINVAL;*/ } else { ms->fpos = ms->fpos + offset; } } return 0; case SEEK_SET: if ( offset > ms->fsize) { ms->fpos = ms->fsize; /*return EINVAL;*/ } else { ms->fpos = offset; } return 0; case SEEK_END: if ( offset > 0) { ms->fpos = ms->fsize; /*return EINVAL;*/ } else if ( ms->fpos < -offset) { ms->fpos = 0; /*return EINVAL;*/ } else { ms->fpos = ms->fsize + offset; } return 0; default: return 0; return /*EINVAL*/; } } /* }}} */ php_stream_ops php_stream_memory_ops = { php_memory_stream_write, php_memory_stream_read, php_memory_stream_close, php_memory_stream_flush, php_memory_stream_seek, NULL, NULL, "MEMORY" }; PHPAPI php_stream *php_memory_stream_create() {/* {{{ */ php_memory_stream_data *self; self = emalloc(sizeof(*self)); assert( self != NULL); self->data = NULL; self->fpos = 0; self->fsize = 0; return php_stream_alloc(&php_stream_memory_ops, self, 0, "rwb"); } /* }}} */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ Index: php4/main/php_memory_streams.h +++ php4/main/php_memory_streams.h /* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2002 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Marcus Boerger <helly@php.net> | +----------------------------------------------------------------------+ */ #ifndef PHP_MEMORY_STREAM_H #define PHP_MEMORY_STREAM_H #include "php_streams.h" PHPAPI php_stream *php_memory_stream_create(); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */

« previous php.cvs (#10263) next »