summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Wallner <mike@php.net>2006-08-08 15:53:54 +0000
committerMichael Wallner <mike@php.net>2006-08-08 15:53:54 +0000
commite9aaf0b16b85ec350fe97acb8afeaa06328c7365 (patch)
tree2e8a780bfd9763aed5dbec8a64400a8a8c60a37c
parent936ebdbe1f747fd0999acde3e7c995d8a12f7d31 (diff)
downloadphp-git-e9aaf0b16b85ec350fe97acb8afeaa06328c7365.tar.gz
- implement #38357 (dbase_open can't open DBase 3 dbf file)
-rw-r--r--ext/dbase/dbase.c11
-rw-r--r--ext/dbase/dbf_head.c2
2 files changed, 13 insertions, 0 deletions
diff --git a/ext/dbase/dbase.c b/ext/dbase/dbase.c
index 1d38b15719..4c9d6dea20 100644
--- a/ext/dbase/dbase.c
+++ b/ext/dbase/dbase.c
@@ -490,6 +490,13 @@ static void php_dbase_get_record(INTERNAL_FUNCTION_PARAMETERS, int assoc)
}
}
break;
+ case 'F':
+ if (!assoc) {
+ add_next_index_double(return_value, atof(str_value));
+ } else {
+ add_assoc_double(return_value, cur_f->db_fname, atof(str_value));
+ }
+ break;
case 'L': /* we used to FALL THROUGH, but now we check for T/Y and F/N
and insert 1 or 0, respectively. db_fdc is the number of
decimals, which we don't care about. 3/14/2001 LEW */
@@ -667,6 +674,9 @@ PHP_FUNCTION(dbase_create)
case 'D':
cur_f->db_flen = 8;
break;
+ case 'F':
+ cur_f->db_flen = 20;
+ break;
case 'N':
case 'C':
/* field length */
@@ -839,6 +849,7 @@ PHP_FUNCTION(dbase_get_header_info)
case 'N': add_assoc_string(row, "type", "number", 1); break;
case 'L': add_assoc_string(row, "type", "boolean", 1); break;
case 'M': add_assoc_string(row, "type", "memo", 1); break;
+ case 'F': add_assoc_string(row, "type", "float", 1); break;
default: add_assoc_string(row, "type", "unknown", 1); break;
}
diff --git a/ext/dbase/dbf_head.c b/ext/dbase/dbf_head.c
index be3fe5cd98..24b3d06ac9 100644
--- a/ext/dbase/dbf_head.c
+++ b/ext/dbase/dbf_head.c
@@ -148,6 +148,7 @@ int get_dbf_field(dbhead_t *dbh, dbfield_t *dbf)
dbf->db_type = dbfield.dbf_type;
switch (dbf->db_type) {
case 'N':
+ case 'F':
dbf->db_flen = dbfield.dbf_flen[0];
dbf->db_fdc = dbfield.dbf_flen[1];
break;
@@ -231,6 +232,7 @@ char *get_dbf_f_fmt(dbfield_t *dbf)
case 'N':
case 'L':
case 'D':
+ case 'F':
sprintf(format, "%%%ds", dbf->db_flen);
break;
case 'M':