📄 yp.c
字号:
/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2007 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Stephanie Wehner <_@r4k.net> | | Fredrik Ohrn | +----------------------------------------------------------------------+ *//* $Id: yp.c,v 1.31.8.6.4.2 2007/01/01 09:46:50 sebastian Exp $ */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "php.h"#include "ext/standard/info.h"#if HAVE_YP#include "php_yp.h"#include <rpcsvc/ypclnt.h>/* {{{ thread safety stuff */#ifdef ZTSint yp_globals_id;#elsePHP_YP_API php_yp_globals yp_globals;#endif/* }}} */function_entry yp_functions[] = { PHP_FE(yp_get_default_domain, NULL) PHP_FE(yp_order, NULL) PHP_FE(yp_master, NULL) PHP_FE(yp_match, NULL) PHP_FE(yp_first, NULL) PHP_FE(yp_next, NULL) PHP_FE(yp_all, NULL) PHP_FE(yp_cat, NULL) PHP_FE(yp_errno, NULL) PHP_FE(yp_err_string, NULL) {NULL, NULL, NULL}};zend_module_entry yp_module_entry = { STANDARD_MODULE_HEADER, "yp", yp_functions, PHP_MINIT(yp), NULL, PHP_RINIT(yp), NULL, PHP_MINFO(yp), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES};#ifdef COMPILE_DL_YPZEND_GET_MODULE(yp)#endif/* {{{ proto string yp_get_default_domain(void) Returns the domain or false */PHP_FUNCTION(yp_get_default_domain){ char *outdomain; if (ZEND_NUM_ARGS()) { WRONG_PARAM_COUNT; } if((YP(error) = yp_get_default_domain(&outdomain))) { php_error(E_WARNING, yperr_string (YP(error))); RETURN_FALSE; } RETVAL_STRING(outdomain,1);}/* }}} *//* {{{ proto int yp_order(string domain, string map) Returns the order number or false */PHP_FUNCTION(yp_order){ pval **domain, **map;#if SOLARIS_YP unsigned long outval;#else int outval;#endif if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2,&domain,&map) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(domain); convert_to_string_ex(map); if((YP(error) = yp_order(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), &outval))) { php_error(E_WARNING, yperr_string (YP(error))); RETURN_FALSE; } RETVAL_LONG(outval);}/* }}} *//* {{{ proto string yp_master(string domain, string map) Returns the machine name of the master */PHP_FUNCTION(yp_master){ pval **domain, **map; char *outname; if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2,&domain,&map) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(domain); convert_to_string_ex(map); if((YP(error) = yp_master(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), &outname))) { php_error(E_WARNING, yperr_string (YP(error))); RETURN_FALSE; } RETVAL_STRING(outname,1);}/* }}} *//* {{{ proto string yp_match(string domain, string map, string key) Returns the matched line or false */PHP_FUNCTION(yp_match){ pval **domain, **map, **key; char *outval; int outvallen; if((ZEND_NUM_ARGS() != 3) || zend_get_parameters_ex(3,&domain,&map,&key) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(domain); convert_to_string_ex(map); convert_to_string_ex(key); if((YP(error) = yp_match(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), Z_STRVAL_PP (key), Z_STRLEN_PP (key), &outval, &outvallen))) { php_error(E_WARNING, yperr_string (YP(error))); RETURN_FALSE; } RETVAL_STRINGL(outval,outvallen,1);}/* }}} *//* {{{ proto array yp_first(string domain, string map) Returns the first key as array with $var[$key] and the the line as the value */PHP_FUNCTION(yp_first){ pval **domain, **map; char *outval, *outkey; int outvallen, outkeylen; if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2,&domain,&map) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(domain); convert_to_string_ex(map); if((YP(error) = yp_first(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), &outkey, &outkeylen, &outval, &outvallen))) { php_error(E_WARNING, yperr_string (YP(error))); RETURN_FALSE; } array_init(return_value); add_assoc_stringl_ex(return_value,outkey,outkeylen+1,outval,outvallen,1); /* Deprecated */ add_assoc_stringl(return_value,"key",outkey,outkeylen,1); add_assoc_stringl(return_value,"value",outval,outvallen,1);}/* }}} *//* {{{ proto array yp_next(string domain, string map, string key) Returns an array with $var[$key] and the the line as the value */PHP_FUNCTION(yp_next){ pval **domain, **map, **key; char *outval, *outkey; int outvallen, outkeylen; if((ZEND_NUM_ARGS() != 3) || zend_get_parameters_ex(3,&domain,&map,&key) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(domain); convert_to_string_ex(map); convert_to_string_ex(key); if((YP(error) = yp_next(Z_STRVAL_PP (domain), Z_STRVAL_PP (map), Z_STRVAL_PP (key), Z_STRLEN_PP (key), &outkey, &outkeylen, &outval, &outvallen))) { php_error(E_WARNING, yperr_string (YP(error))); RETURN_FALSE; } array_init(return_value); add_assoc_stringl_ex(return_value,outkey,outkeylen+1,outval,outvallen,1);}/* }}} *//* {{{ php_foreach_all */static int php_foreach_all (int instatus, char *inkey, int inkeylen, char *inval, int invallen, char *indata){ int r; zval *status, *key, *value; zval **args [3]; zval *retval; TSRMLS_FETCH(); args[0] = &status; args[1] = &key; args[2] = &value; MAKE_STD_ZVAL (status); ZVAL_LONG (status, ypprot_err (instatus)); MAKE_STD_ZVAL (key); ZVAL_STRINGL (key, inkey, inkeylen, 1); MAKE_STD_ZVAL (value); ZVAL_STRINGL (value, inval, invallen, 1); if(call_user_function_ex(CG(function_table), NULL, *((zval **)indata), &retval, 3, args, 0, NULL TSRMLS_CC) != SUCCESS) { zend_error(E_ERROR, "Function call failed"); return 1; } convert_to_long_ex(&retval); r = Z_LVAL_P (retval); zval_ptr_dtor(&retval); zval_ptr_dtor(&status); zval_ptr_dtor(&key); zval_ptr_dtor(&value); return r;}/* }}} *//* {{{ proto void yp_all(string domain, string map, string callback) Traverse the map and call a function on each entry */PHP_FUNCTION(yp_all){ pval **domain, **map, **php_callback; struct ypall_callback callback; if((ZEND_NUM_ARGS() != 3) || zend_get_parameters_ex(3,&domain,&map,&php_callback) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(domain); convert_to_string_ex(map); callback.foreach = php_foreach_all; callback.data = (char *) php_callback; yp_all(Z_STRVAL_PP(domain),Z_STRVAL_PP(map),&callback); RETURN_FALSE;}/* }}} *//* {{{ php_foreach_cat */static int php_foreach_cat (int instatus, char *inkey, int inkeylen, char *inval, int invallen, char *indata){ int err; err = ypprot_err (instatus); if (!err) { if (inkeylen) { char *key = emalloc(inkeylen+1); if(key) { strlcpy(key, inkey, inkeylen+1); add_assoc_stringl_ex((zval *) indata, key, inkeylen+1, inval, invallen, 1); efree(key); } else { php_error(E_WARNING, "Can't allocate %d bytes for key buffer in yp_cat()", inkeylen+1); } } return 0; } if (err != YPERR_NOMORE) { TSRMLS_FETCH(); YP(error) = err; php_error(E_WARNING, yperr_string (err)); } return 0;}/* }}} *//* {{{ proto array yp_cat(string domain, string map) Return an array containing the entire map */PHP_FUNCTION(yp_cat){ pval **domain, **map; struct ypall_callback callback; if((ZEND_NUM_ARGS() != 2) || zend_get_parameters_ex(2,&domain,&map) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(domain); convert_to_string_ex(map); array_init(return_value); callback.foreach = php_foreach_cat; callback.data = (char *) return_value; yp_all(Z_STRVAL_PP(domain),Z_STRVAL_PP(map),&callback);}/* }}} *//* {{{ proto int yp_errno() Returns the error code from the last call or 0 if no error occured */PHP_FUNCTION(yp_errno){ if((ZEND_NUM_ARGS() != 0)) { WRONG_PARAM_COUNT; } RETURN_LONG (YP(error));}/* }}} *//* {{{ proto string yp_err_string(int errorcode) Returns the corresponding error string for the given error code */PHP_FUNCTION(yp_err_string){ pval **error; char *string; if((ZEND_NUM_ARGS() != 1) || zend_get_parameters_ex(1,&error) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(error); if((string = yperr_string(Z_LVAL_PP(error))) == NULL) { RETURN_FALSE; } RETVAL_STRING(string,1);}/* }}} *//* {{{ PHP_MINIT_FUNCTION */PHP_MINIT_FUNCTION(yp){#ifdef ZTS ts_allocate_id(&yp_globals_id, sizeof(php_yp_globals), NULL, NULL);#endif REGISTER_LONG_CONSTANT("YPERR_BADARGS", YPERR_BADARGS, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("YPERR_BADDB", YPERR_BADDB, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("YPERR_BUSY", YPERR_BUSY, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("YPERR_DOMAIN", YPERR_DOMAIN, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("YPERR_KEY", YPERR_KEY, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("YPERR_MAP", YPERR_MAP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("YPERR_NODOM", YPERR_NODOM, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("YPERR_NOMORE", YPERR_NOMORE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("YPERR_PMAP", YPERR_PMAP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("YPERR_RESRC", YPERR_RESRC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("YPERR_RPC", YPERR_RPC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("YPERR_YPBIND", YPERR_YPBIND, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("YPERR_YPERR", YPERR_YPERR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("YPERR_YPSERV", YPERR_YPSERV, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("YPERR_VERS", YPERR_VERS, CONST_CS | CONST_PERSISTENT); return SUCCESS;}/* }}} */PHP_RINIT_FUNCTION(yp){ YP(error) = 0; return SUCCESS;}PHP_MINFO_FUNCTION(yp){ php_info_print_table_start(); php_info_print_table_row(2, "YP Support", "enabled"); php_info_print_table_end();}#endif /* HAVE_YP *//* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -