helly Tue Feb 18 17:19:18 2003 EDT
Modified files:
/php4/ext/dba/libflatfile flatfile.c
Log:
- wrong use of sizeof(char)
- use define for block size
- a bit faster
Index: php4/ext/dba/libflatfile/flatfile.c
diff -u php4/ext/dba/libflatfile/flatfile.c:1.9
php4/ext/dba/libflatfile/flatfile.c:1.10
--- php4/ext/dba/libflatfile/flatfile.c:1.9 Tue Feb 18 15:49:52 2003
+++ php4/ext/dba/libflatfile/flatfile.c Tue Feb 18 17:19:18 2003
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: flatfile.c,v 1.9 2003/02/18 20:49:52 helly Exp $ */
+/* $Id: flatfile.c,v 1.10 2003/02/18 22:19:18 helly Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -38,6 +38,8 @@
#include "flatfile.h"
+#define FLATFILE_BLOCK_SIZE 1024
+
/*
* ret = -1 means that database was opened for read-only
* ret = 0 success
@@ -84,25 +86,16 @@
*/
datum flatfile_fetch(flatfile *dba, datum key_datum TSRMLS_DC) {
datum value_datum = {NULL, 0};
- size_t num=0;
- size_t buf_size = 1024;
- char *buf;
+ char buf[16];
if (flatfile_findkey(dba, key_datum TSRMLS_CC)) {
- buf = emalloc((buf_size+1) * sizeof(char));
- if (php_stream_gets(dba->fp, buf, 15)) {
- num = atoi(buf);
- if (num > buf_size) {
- buf_size+=num;
- buf = erealloc(buf, (buf_size+1)*sizeof(char));
- }
- php_stream_read(dba->fp, buf, num);
- value_datum.dptr = buf;
- value_datum.dsize = num;
+ if (php_stream_gets(dba->fp, buf, sizeof(buf))) {
+ value_datum.dsize = atoi(buf);
+ value_datum.dptr = emalloc(value_datum.dsize+1);
+ value_datum.dsize = php_stream_read(dba->fp, value_datum.dptr,
+value_datum.dsize);
} else {
value_datum.dptr = NULL;
value_datum.dsize = 0;
- efree(buf);
}
}
return value_datum;
@@ -114,62 +107,55 @@
int flatfile_delete(flatfile *dba, datum key_datum TSRMLS_DC) {
char *key = key_datum.dptr;
size_t size = key_datum.dsize;
-
- char *buf;
+ size_t buf_size = FLATFILE_BLOCK_SIZE;
+ char *buf = emalloc(buf_size);
size_t num;
- size_t buf_size = 1024;
size_t pos;
php_stream_rewind(dba->fp);
-
- buf = emalloc((buf_size + 1)*sizeof(char));
while(!php_stream_eof(dba->fp)) {
/* read in the length of the key name */
if (!php_stream_gets(dba->fp, buf, 15)) {
break;
}
num = atoi(buf);
- if (num > buf_size) {
- buf_size += num;
- buf = erealloc(buf, (buf_size+1)*sizeof(char));
+ if (num >= buf_size) {
+ buf_size = num + FLATFILE_BLOCK_SIZE;
+ buf = erealloc(buf, buf_size);
}
pos = php_stream_tell(dba->fp);
/* read in the key name */
- num = php_stream_read(dba->fp, buf, sizeof(char)*num);
+ num = php_stream_read(dba->fp, buf, num);
if (num < 0) {
break;
}
- *(buf+num) = '\0';
if (size == num && !memcmp(buf, key, size)) {
php_stream_seek(dba->fp, pos, SEEK_SET);
php_stream_putc(dba->fp, 0);
php_stream_flush(dba->fp);
php_stream_seek(dba->fp, 0L, SEEK_END);
- if (buf) {
- efree(buf);
- }
+ efree(buf);
return SUCCESS;
}
/* read in the length of the value */
- if (!php_stream_gets(dba->fp, buf, 15))
+ if (!php_stream_gets(dba->fp, buf, 15)) {
break;
+ }
num = atoi(buf);
- if (num > buf_size) {
- buf_size+=num;
- buf = erealloc(buf, (buf_size+1)*sizeof(char));
+ if (num >= buf_size) {
+ buf_size = num + FLATFILE_BLOCK_SIZE;
+ buf = erealloc(buf, buf_size);
}
/* read in the value */
- num = php_stream_read(dba->fp, buf, sizeof(char)*num);
+ num = php_stream_read(dba->fp, buf, num);
if (num < 0) {
break;
}
}
- if (buf) {
- efree(buf);
- }
+ efree(buf);
return FAILURE;
}
/* }}} */
@@ -177,27 +163,27 @@
/* {{{ flatfile_findkey
*/
int flatfile_findkey(flatfile *dba, datum key_datum TSRMLS_DC) {
- char *buf = NULL;
+ size_t buf_size = FLATFILE_BLOCK_SIZE;
+ char *buf = emalloc(buf_size);
size_t num;
- size_t buf_size = 1024;
int ret=0;
void *key = key_datum.dptr;
size_t size = key_datum.dsize;
php_stream_rewind(dba->fp);
- buf = emalloc((buf_size+1)*sizeof(char));
while (!php_stream_eof(dba->fp)) {
- if (!php_stream_gets(dba->fp, buf, 15)) {
+ if (!php_stream_gets(dba->fp, buf, 15)) {
break;
}
num = atoi(buf);
- if (num > buf_size) {
- buf_size+=num;
- buf = erealloc(buf, (buf_size+1)*sizeof(char));
- }
- num = php_stream_read(dba->fp, buf, sizeof(char)*num);
- if (num<0) break;
- *(buf+num) = '\0';
+ if (num >= buf_size) {
+ buf_size = num + FLATFILE_BLOCK_SIZE;
+ buf = erealloc(buf, buf_size);
+ }
+ num = php_stream_read(dba->fp, buf, num);
+ if (num < 0) {
+ break;
+ }
if (size == num) {
if (!memcmp(buf, key, size)) {
ret = 1;
@@ -208,121 +194,120 @@
break;
}
num = atoi(buf);
- if (num > buf_size) {
- buf_size+=num;
- buf = erealloc(buf, (buf_size+1)*sizeof(char));
+ if (num >= buf_size) {
+ buf_size = num + FLATFILE_BLOCK_SIZE;
+ buf = erealloc(buf, buf_size);
}
- num = php_stream_read(dba->fp, buf, sizeof(char)*num);
+ num = php_stream_read(dba->fp, buf, num);
if (num < 0) {
break;
}
- *(buf+num) = '\0';
- }
- if (buf) {
- efree(buf);
}
- return(ret);
+ efree(buf);
+ return ret;
}
/* }}} */
/* {{{ flatfile_firstkey
*/
datum flatfile_firstkey(flatfile *dba TSRMLS_DC) {
- datum buf;
+ datum res;
size_t num;
- size_t buf_size = 1024;
+ size_t buf_size = FLATFILE_BLOCK_SIZE;
+ char *buf = emalloc(buf_size);
php_stream_rewind(dba->fp);
- buf.dptr = emalloc((buf_size+1)*sizeof(char));
while(!php_stream_eof(dba->fp)) {
- if (!php_stream_gets(dba->fp, buf.dptr, 15)) {
+ if (!php_stream_gets(dba->fp, buf, 15)) {
break;
}
- num = atoi(buf.dptr);
- if (num > buf_size) {
- buf_size+=num;
- buf.dptr = erealloc(buf.dptr, (buf_size+1)*sizeof(char));
+ num = atoi(buf);
+ if (num >= buf_size) {
+ buf_size = num + FLATFILE_BLOCK_SIZE;
+ buf = erealloc(buf, buf_size);
}
- num = php_stream_read(dba->fp, buf.dptr, num);
+ num = php_stream_read(dba->fp, buf, num);
if (num < 0) {
break;
}
- buf.dsize = num;
- if (*(buf.dptr)!=0) {
+ if (*(buf) != 0) {
dba->CurrentFlatFilePos = php_stream_tell(dba->fp);
- return(buf);
+ res.dptr = buf;
+ res.dsize = num;
+ return res;
+ }
+ if (!php_stream_gets(dba->fp, buf, 15)) {
+ break;
}
- if (!php_stream_gets(dba->fp, buf.dptr, 15)) break;
- num = atoi(buf.dptr);
- if (num > buf_size) {
- buf_size+=num;
- buf.dptr = erealloc(buf.dptr, (buf_size+1)*sizeof(char));
+ num = atoi(buf);
+ if (num >= buf_size) {
+ buf_size = num + FLATFILE_BLOCK_SIZE;
+ buf = erealloc(buf, buf_size);
}
- num = php_stream_read(dba->fp, buf.dptr, num);
+ num = php_stream_read(dba->fp, buf, num);
if (num < 0) {
break;
}
}
- if (buf.dptr) {
- efree(buf.dptr);
- }
- buf.dptr = NULL;
- return(buf);
+ efree(buf);
+ res.dptr = NULL;
+ res.dsize = 0;
+ return res;
}
/* }}} */
/* {{{ flatfile_nextkey
*/
datum flatfile_nextkey(flatfile *dba TSRMLS_DC) {
- datum buf;
+ datum res;
size_t num;
- size_t buf_size = 1024;
+ size_t buf_size = FLATFILE_BLOCK_SIZE;
+ char *buf = emalloc(buf_size);
php_stream_seek(dba->fp, dba->CurrentFlatFilePos, SEEK_SET);
- buf.dptr = emalloc((buf_size+1)*sizeof(char));
while(!php_stream_eof(dba->fp)) {
- if (!php_stream_gets(dba->fp, buf.dptr, 15)) {
+ if (!php_stream_gets(dba->fp, buf, 15)) {
break;
}
- num = atoi(buf.dptr);
- if (num > buf_size) {
- buf_size+=num;
- buf.dptr = erealloc(buf.dptr, (buf_size+1)*sizeof(char));
+ num = atoi(buf);
+ if (num >= buf_size) {
+ buf_size = num + FLATFILE_BLOCK_SIZE;
+ buf = erealloc(buf, buf_size);
}
- num = php_stream_read(dba->fp, buf.dptr, num);
+ num = php_stream_read(dba->fp, buf, num);
if (num < 0) {
break;
}
- if (!php_stream_gets(dba->fp, buf.dptr, 15)) {
+ if (!php_stream_gets(dba->fp, buf, 15)) {
break;
}
- num = atoi(buf.dptr);
- if (num > buf_size) {
- buf_size+=num;
- buf.dptr = erealloc(buf.dptr, (buf_size+1)*sizeof(char));
+ num = atoi(buf);
+ if (num >= buf_size) {
+ buf_size = num + FLATFILE_BLOCK_SIZE;
+ buf = erealloc(buf, buf_size);
}
- num = php_stream_read(dba->fp, buf.dptr, num);
+ num = php_stream_read(dba->fp, buf, num);
if (num < 0) {
break;
}
- buf.dsize = num;
- if (*(buf.dptr)!=0) {
+ if (*(buf)!=0) {
dba->CurrentFlatFilePos = php_stream_tell(dba->fp);
- return(buf);
+ res.dptr = buf;
+ res.dsize = num;
+ return res;
}
}
- if (buf.dptr) {
- efree(buf.dptr);
- }
- buf.dptr = NULL;
- return(buf);
+ efree(buf);
+ res.dptr = NULL;
+ res.dsize = 0;
+ return res;
}
/* }}} */
/* {{{ flatfile_version */
char *flatfile_version()
{
- return "1.0, $Revision: 1.9 $";
+ return "1.0, $Revision: 1.10 $";
}
/* }}} */
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php