helly Sat Feb 22 18:47:10 2003 EDT
Modified files:
/php4/ext/dba/libinifile inifile.c
Log:
Dropped optimization
# It is impossible to combine skip=-1 searches with firstkey/nextkey results
Index: php4/ext/dba/libinifile/inifile.c
diff -u php4/ext/dba/libinifile/inifile.c:1.3 php4/ext/dba/libinifile/inifile.c:1.4
--- php4/ext/dba/libinifile/inifile.c:1.3 Sat Feb 22 15:49:07 2003
+++ php4/ext/dba/libinifile/inifile.c Sat Feb 22 18:47:09 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: inifile.c,v 1.3 2003/02/22 20:49:07 helly Exp $ */
+/* $Id: inifile.c,v 1.4 2003/02/22 23:47:09 helly Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -44,7 +44,7 @@
/* {{{ inifile_version */
char *inifile_version()
{
- return "1.0, $Revision: 1.3 $";
+ return "1.0, $Revision: 1.4 $";
}
/* }}} */
@@ -254,40 +254,12 @@
val_type val;
int res, grp_eq = 0;
- if (skip == -1) {
- if (dba->next.key.group && dba->next.key.name &&
!inifile_key_cmp(&dba->next.key, key TSRMLS_CC)) {
- /* we got it already from last fetch */
- val.value = estrdup(dba->next.val.value ? dba->next.val.value
: "");
- /* allow faster access by automatically getting next key */
- php_stream_seek(dba->fp, dba->next.pos, SEEK_SET);
- ln.key.group = estrdup(dba->next.key.group ?
dba->next.key.group : "");
- inifile_read(dba, &ln TSRMLS_CC);
- inifile_line_free(&dba->next);
- dba->next = ln;
- return val;
- } else if (dba->curr.key.group && dba->curr.key.name &&
!inifile_key_cmp(&dba->curr.key, key TSRMLS_CC)) {
- /* we got it already from firstkey/lastkey */
- /*
- * this optimisation does not work when firstkey/nextkey found
- * any instance other than the one instance wanted.
- */
- val.value = estrdup(dba->curr.val.value ? dba->curr.val.value
: "");
- /* allow faster access by automatically getting next key
- * we must use the line pointer 'next' since we cannot change
the
- * line pointer of firstkey/nextkey
- */
- php_stream_seek(dba->fp, dba->curr.pos, SEEK_SET);
- ln.key.group = estrdup(dba->curr.key.group ?
dba->curr.key.group : "");
- inifile_read(dba, &ln TSRMLS_CC);
- inifile_line_free(&dba->next);
- dba->next = ln;
- return val;
- }
- }
-
- /* the slow way: restart and seacrch */
- if (skip != -1 || !dba->next.key.group || !dba->next.key.name ||
inifile_key_cmp(&dba->next.key, key TSRMLS_CC)) {
+ if (skip == -1 && dba->next.key.group && dba->next.key.name &&
!inifile_key_cmp(&dba->next.key, key TSRMLS_CC)) {
+ /* we got position already from last fetch */
+ php_stream_seek(dba->fp, dba->next.pos, SEEK_SET);
+ } else {
/* specific instance or not same key -> restart search */
+ /* the slow way: restart and seacrch */
php_stream_rewind(dba->fp);
}
inifile_line_free(&dba->next);
@@ -298,10 +270,10 @@
if (!(res=inifile_key_cmp(&ln.key, key TSRMLS_CC))) {
if (!skip) {
val.value = estrdup(ln.val.value ? ln.val.value : "");
- /* allow faster access by automatically getting next
key */
- inifile_read(dba, &ln TSRMLS_CC);
+ /* allow faster access by updating key read into next
*/
inifile_line_free(&dba->next);
dba->next = ln;
+ dba->next.pos = php_stream_tell(dba->fp);;
return val;
}
skip--;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php