diff options
author | foobar <sniper@php.net> | 2001-08-14 11:07:18 +0000 |
---|---|---|
committer | foobar <sniper@php.net> | 2001-08-14 11:07:18 +0000 |
commit | 80277be8e31e7678141a2750d5de478967aa6d6a (patch) | |
tree | 8b89b5bef30697af92bdb5c4801a3ebbbbf92756 /ext/dbase | |
parent | b3e96d34f3edaa7ae4f72d81a112498898f9b096 (diff) | |
download | php-git-80277be8e31e7678141a2750d5de478967aa6d6a.tar.gz |
@- Fixed a bug in dbase_get_record() and dbase_get_record_with_names().
@ boolean fields are now returned correctly.
@ Patch by Lawrence E. Widman <widman@cardiothink.com> (Jani)
Diffstat (limited to 'ext/dbase')
-rw-r--r-- | ext/dbase/dbase.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/ext/dbase/dbase.c b/ext/dbase/dbase.c index 02f863f9f6..b3d16af230 100644 --- a/ext/dbase/dbase.c +++ b/ext/dbase/dbase.c @@ -473,14 +473,26 @@ PHP_FUNCTION(dbase_get_record) case 'D': add_next_index_string(return_value, str_value, 1); break; - case 'N': /* FALLS THROUGH */ - case 'L': /* FALLS THROUGH */ + case 'N': if (cur_f->db_fdc == 0) { add_next_index_long(return_value, strtol(str_value, NULL, 10)); } else { add_next_index_double(return_value, 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 */ + if ((*str_value == 'T') || (*str_value == 'Y')) { + add_next_index_long(return_value, strtol("1", NULL, 10)); + } else { + if ((*str_value == 'F') || (*str_value == 'N')) { + add_next_index_long(return_value, strtol("0", NULL, 10)); + } else { + add_next_index_long(return_value, strtol(" ", NULL, 10)); + } + } + break; case 'M': /* this is a memo field. don't know how to deal with this yet */ @@ -552,14 +564,26 @@ PHP_FUNCTION(dbase_get_record_with_names) case 'D': add_assoc_string(return_value, cur_f->db_fname, str_value, 1); break; - case 'N': /* FALLS THROUGH */ - case 'L': /* FALLS THROUGH */ + case 'N': if (cur_f->db_fdc == 0) { add_assoc_long(return_value, cur_f->db_fname, strtol(str_value, NULL, 10)); } 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 */ + if ((*str_value == 'T') || (*str_value == 'Y')) { + add_assoc_long(return_value, cur_f->db_fname,strtol("1", NULL, 10)); + } else { + if ((*str_value == 'F') || (*str_value == 'N')) { + add_assoc_long(return_value, cur_f->db_fname,strtol("0", NULL, 10)); + } else { + add_assoc_long(return_value, cur_f->db_fname,strtol(" ", NULL, 10)); + } + } + break; case 'M': /* this is a memo field. don't know how to deal with this yet */ break; |