summaryrefslogtreecommitdiff
path: root/ext/dba/libflatfile
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2003-02-18 22:19:18 +0000
committerMarcus Boerger <helly@php.net>2003-02-18 22:19:18 +0000
commitb8f518a451774d1328d362ebbbe5b166f3797fd1 (patch)
tree27234b37c2b5a0c31bef0c135c3713103118661d /ext/dba/libflatfile
parent7b6fb4b7b3db24b6393ff094eaba2fb4c16e7aa6 (diff)
downloadphp-git-b8f518a451774d1328d362ebbbe5b166f3797fd1.tar.gz
- wrong use of sizeof(char)
- use define for block size - a bit faster
Diffstat (limited to 'ext/dba/libflatfile')
-rw-r--r--ext/dba/libflatfile/flatfile.c185
1 files changed, 85 insertions, 100 deletions
diff --git a/ext/dba/libflatfile/flatfile.c b/ext/dba/libflatfile/flatfile.c
index e28cc0a033..44ef3d53a3 100644
--- a/ext/dba/libflatfile/flatfile.c
+++ b/ext/dba/libflatfile/flatfile.c
@@ -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 @@ int flatfile_store(flatfile *dba, datum key_datum, datum value_datum, int mode T
*/
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 @@ datum flatfile_fetch(flatfile *dba, datum key_datum TSRMLS_DC) {
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 @@ int flatfile_delete(flatfile *dba, datum key_datum TSRMLS_DC) {
/* {{{ 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));
+ 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;
}
- num = php_stream_read(dba->fp, buf, sizeof(char)*num);
- if (num<0) break;
- *(buf+num) = '\0';
if (size == num) {
if (!memcmp(buf, key, size)) {
ret = 1;
@@ -208,114 +194,113 @@ int flatfile_findkey(flatfile *dba, datum key_datum TSRMLS_DC) {
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.dptr, 15)) break;
- num = atoi(buf.dptr);
- if (num > buf_size) {
- buf_size+=num;
- buf.dptr = erealloc(buf.dptr, (buf_size+1)*sizeof(char));
+ if (!php_stream_gets(dba->fp, buf, 15)) {
+ break;
+ }
+ 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;
}
/* }}} */