]> granicus.if.org Git - php/commitdiff
- wrong use of sizeof(char)
authorMarcus Boerger <helly@php.net>
Tue, 18 Feb 2003 22:19:18 +0000 (22:19 +0000)
committerMarcus Boerger <helly@php.net>
Tue, 18 Feb 2003 22:19:18 +0000 (22:19 +0000)
- use define for block size
- a bit faster

ext/dba/libflatfile/flatfile.c

index e28cc0a03336b10b98d9d8a6ad299d1eba4b4167..44ef3d53a3e31fea228ff8f259df4c20f4826426 100644 (file)
@@ -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;
 }      
 /* }}} */