dickmeiss Tue Mar 13 09:04:05 2001 EDT Modified files: /php4/ext/yaz php_yaz.c php_yaz.h Log: Added yaz_database. Option bit ExtendedServices set for InitRequest. Index: php4/ext/yaz/php_yaz.c diff -u php4/ext/yaz/php_yaz.c:1.13 php4/ext/yaz/php_yaz.c:1.14 --- php4/ext/yaz/php_yaz.c:1.13 Sun Feb 25 22:07:26 2001 +++ php4/ext/yaz/php_yaz.c Tue Mar 13 09:04:05 2001 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_yaz.c,v 1.13 2001/02/26 06:07:26 andi Exp $ */ +/* $Id: php_yaz.c,v 1.14 2001/03/13 17:04:05 dickmeiss Exp $ */ #include "php.h" @@ -72,6 +72,7 @@ char *host_port; int num_databaseNames; char **databaseNames; + char *local_databases; COMSTACK cs; char *cookie; char *auth_open; @@ -110,6 +111,7 @@ p->host_port = 0; p->num_databaseNames = 0; p->databaseNames = 0; + p->local_databases = 0; p->cs = 0; p->cookie = 0; p->auth_open = 0; @@ -149,6 +151,7 @@ if (!p) return ; xfree (p->host_port); + xfree (p->local_databases); for (i = 0; i<p->num_databaseNames; i++) xfree (p->databaseNames[i]); xfree (p->databaseNames); @@ -221,6 +224,7 @@ PHP_FE(yaz_present, NULL) PHP_FE(yaz_ccl_conf, NULL) PHP_FE(yaz_ccl_parse, NULL) + PHP_FE(yaz_database, NULL) {NULL, NULL, NULL} }; @@ -656,12 +660,21 @@ return 0; } +/* set database names. Take local databases (if set); otherwise + take databases given in ZURL (if set); otherwise use Default */ static char **set_DatabaseNames (Yaz_Association t, int *num) { char **databaseNames; - char *c, *cp = strchr (t->host_port, '/'); + char *c; int no = 2; + char *cp = t->local_databases; + if (!cp || !*cp) + { + cp = strchr (t->host_port, '/'); + if (cp) + cp++; + } if (cp) { c = cp; @@ -672,23 +685,26 @@ } } else - cp = "/Default"; + cp = "Default"; databaseNames = odr_malloc (t->odr_out, no * sizeof(*databaseNames)); no = 0; while (*cp) { - c = ++cp; - c = strchr (c, '+'); + c = strchr (cp, '+'); if (!c) c = cp + strlen(cp); else if (c == cp) + { + cp++; continue; + } /* cp ptr to first char of db name, c is char following db name */ databaseNames[no] = odr_malloc (t->odr_out, 1+c-cp); memcpy (databaseNames[no], cp, c-cp); - databaseNames[no][c-cp] = '\0'; - no++; + databaseNames[no++][c-cp] = '\0'; cp = c; + if (*cp) + cp++; } databaseNames[no] = NULL; *num = no; @@ -822,6 +838,7 @@ ODR_MASK_SET(ireq->options, Z_Options_present); ODR_MASK_SET(ireq->options, Z_Options_namedResultSets); ODR_MASK_SET(ireq->options, Z_Options_scan); + ODR_MASK_SET(ireq->options, Z_Options_extendedServices); ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_1); ODR_MASK_SET(ireq->protocolVersion, Z_ProtocolVersion_2); @@ -1062,6 +1079,8 @@ shared_associations[i]->group = xstrdup (group_str); shared_associations[i]->pass = xstrdup (pass_str); } + xfree (shared_associations[i]->local_databases); + shared_associations[i]->local_databases = 0; #ifdef ZTS tsrm_mutex_unlock (yaz_mutex); #endif @@ -2245,6 +2264,33 @@ RETVAL_TRUE; } ccl_rpn_delete(rpn); + } + else + RETVAL_FALSE; + release_assoc (p); +} +/* }}} */ + +/* {{{ proto int yaz_ccl_parse(int id, string query, array res) + Parse a CCL query */ + +PHP_FUNCTION(yaz_database) +{ + pval **pval_id, **pval_database; + Yaz_Association p; + if (ZEND_NUM_ARGS() != 2 || + zend_get_parameters_ex(2, &pval_id, &pval_database) == + FAILURE) + { + WRONG_PARAM_COUNT; + } + convert_to_string_ex (pval_database); + p = get_assoc (pval_id); + if (p) + { + xfree (p->local_databases); + p->local_databases = xstrdup ((*pval_database)->value.str.val); + RETVAL_TRUE; } else RETVAL_FALSE; Index: php4/ext/yaz/php_yaz.h diff -u php4/ext/yaz/php_yaz.h:1.4 php4/ext/yaz/php_yaz.h:1.5 --- php4/ext/yaz/php_yaz.h:1.4 Sun Feb 25 22:07:26 2001 +++ php4/ext/yaz/php_yaz.h Tue Mar 13 09:04:05 2001 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_yaz.h,v 1.4 2001/02/26 06:07:26 andi Exp $ */ +/* $Id: php_yaz.h,v 1.5 2001/03/13 17:04:05 dickmeiss Exp $ */ #ifndef PHP_YAZ_H #define PHP_YAZ_H @@ -48,6 +48,7 @@ PHP_FUNCTION(yaz_present); PHP_FUNCTION(yaz_ccl_conf); PHP_FUNCTION(yaz_ccl_parse); +PHP_FUNCTION(yaz_database); #else -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]