diff options
| author | Marcus Boerger <helly@php.net> | 2002-12-09 17:54:13 +0000 |
|---|---|---|
| committer | Marcus Boerger <helly@php.net> | 2002-12-09 17:54:13 +0000 |
| commit | ba534ac7c8e646258e00aa48ece5344af6c3a278 (patch) | |
| tree | f2af0446f64433da47fd5d9ecce5ee43c03c0330 /ext/dba/dba.c | |
| parent | 2421e79b60d1e5306a364ad9f5eee09dded458c6 (diff) | |
| download | php-git-ba534ac7c8e646258e00aa48ece5344af6c3a278.tar.gz | |
Added open modifier '-' to skip/ignore locking. See bug #20828, #20858
Diffstat (limited to 'ext/dba/dba.c')
| -rw-r--r-- | ext/dba/dba.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/ext/dba/dba.c b/ext/dba/dba.c index b93db1ba01..36a05203de 100644 --- a/ext/dba/dba.c +++ b/ext/dba/dba.c @@ -426,14 +426,22 @@ static void php_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent) */ strlcpy(mode, Z_STRVAL_PP(args[1]), sizeof(mode)); pmode = &mode[0]; - if (pmode[0] && (pmode[1]=='d' || pmode[1]=='l')) { /* force lock on db file or lck file */ - if (pmode[1]=='d') { + if (pmode[0] && (pmode[1]=='d' || pmode[1]=='l' || pmode[1]=='-')) { /* force lock on db file or lck file or disable locking */ + switch (pmode[1]) { + case 'd': if ((hptr->flags & DBA_LOCK_ALL) == 0) { php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_NOTICE, "Handler %s does locking internally", hptr->name); } lock_dbf = 1; + /* no break */ + case 'l': + lock_flag = DBA_LOCK_ALL; + break; + default: + case '-': + lock_flag = 0; + break; } - lock_flag = DBA_LOCK_ALL; } else { lock_flag = (hptr->flags&DBA_LOCK_ALL); } @@ -463,18 +471,23 @@ static void php_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent) lock_mode = 0; file_mode = ""; } - if (*pmode=='d' || *pmode=='l') { + if (*pmode=='d' || *pmode=='l' || *pmode=='-') { pmode++; /* done already - skip here */ } if (*pmode=='t') { pmode++; + if (!lock_flag) { + php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "You cannot combine modifiers - (no lock) and t (test lock)", hptr->name); + FREENOW; + RETURN_FALSE; + } if (!lock_mode) { if ((hptr->flags & DBA_LOCK_ALL) == 0) { - php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Handler %s uses its own locking which doesn't support mode modifier t (testing)", hptr->name); + php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Handler %s uses its own locking which doesn't support mode modifier t (test lock)", hptr->name); FREENOW; RETURN_FALSE; } else { - php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Handler %s doesn't uses locking for this mode which makes modifier t (testing) obsolete", hptr->name); + php_error_docref2(NULL TSRMLS_CC, Z_STRVAL_PP(args[0]), Z_STRVAL_PP(args[1]), E_WARNING, "Handler %s doesn't uses locking for this mode which makes modifier t (test lock) obsolete", hptr->name); FREENOW; RETURN_FALSE; } @@ -788,3 +801,4 @@ PHP_FUNCTION(dba_list) * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ + |
