⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filepro.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		} else {			for (tmp = FP_GLOBAL(fp_fieldlist); tmp; tmp = tmp->next) {				if (!tmp->next) {					tmp->next = new_field;					tmp = new_field;				}			}		}	}	fclose(fp);			FP_GLOBAL(fp_database) = estrndup(Z_STRVAL_P(dir), Z_STRLEN_P(dir));	RETVAL_TRUE;}/* }}} *//* * LONG filePro_rowcount(void) *  * Count the used rows in the database.  filePro just marks deleted records * as deleted; they are not removed.  Since no counts are maintained we need * to go in and count records ourselves.  <sigh> *  * Errors return false, success returns the row count. *//* {{{ proto int filepro_rowcount(void)   Find out how many rows are in a filePro database */PHP_FUNCTION(filepro_rowcount){	FILE *fp;	char workbuf[MAXPATHLEN];	char readbuf[256];	int recsize = 0, records = 0;	FP_TLS_VARS;	if (ZEND_NUM_ARGS() != 0) {		WRONG_PARAM_COUNT;	}	if (!FP_GLOBAL(fp_database)) {		php_error(E_WARNING,					"%s(): Must set database directory first!", get_active_function_name(TSRMLS_C));		RETURN_FALSE;	}		recsize = FP_GLOBAL(fp_keysize) + 19; /* 20 bytes system info -1 to save time later */		/* Now read the records in, moving forward recsize-1 bytes each time */	snprintf(workbuf, sizeof(workbuf), "%s/key", FP_GLOBAL(fp_database));	if (PG(safe_mode) && (!php_checkuid(workbuf, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {		RETURN_FALSE;	}		if (php_check_open_basedir(workbuf TSRMLS_CC)) {		RETURN_FALSE;	}	if (!(fp = VCWD_FOPEN(workbuf, "r"))) {		php_error(E_WARNING, "%s(): Cannot open key: [%d] %s", get_active_function_name(TSRMLS_C),					errno, strerror(errno));		RETURN_FALSE;	}	while (!feof(fp)) {		if (fread(readbuf, 1, 1, fp) == 1) {			if (readbuf[0])				records++;			fseek(fp, recsize, SEEK_CUR);		}	}	fclose(fp);		RETVAL_LONG(records);}/* }}} *//* * STRING filePro_fieldname(LONG field_number) *  * Errors return false, success returns the name of the field. *//* {{{ proto string filepro_fieldname(int fieldnumber)   Gets the name of a field */PHP_FUNCTION(filepro_fieldname){	pval *fno;	FP_FIELD *lp;	int i;	FP_TLS_VARS;	if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &fno) == FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_long(fno);	if (!FP_GLOBAL(fp_database)) {		php_error(E_WARNING,					"%s(): Must set database directory first!", get_active_function_name(TSRMLS_C));		RETURN_FALSE;	}		for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp; lp = lp->next, i++) {		if (i == Z_LVAL_P(fno)) {			RETURN_STRING(lp->name, 1);		}	}	php_error(E_WARNING,				"%s(): Unable to locate field number %ld.", get_active_function_name(TSRMLS_C),				Z_LVAL_P(fno));	RETVAL_FALSE;}/* }}} *//* * STRING filePro_fieldtype(LONG field_number) *  * Errors return false, success returns the type (edit) of the field *//* {{{ proto string filepro_fieldtype(int field_number)   Gets the type of a field */PHP_FUNCTION(filepro_fieldtype){	pval *fno;	FP_FIELD *lp;	int i;	FP_TLS_VARS;	if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &fno) == FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_long(fno);	if (!FP_GLOBAL(fp_database)) {		php_error(E_WARNING,					"%s(): Must set database directory first!", get_active_function_name(TSRMLS_C));		RETURN_FALSE;	}		for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp; lp = lp->next, i++) {		if (i == Z_LVAL_P(fno)) {			RETURN_STRING(lp->format, 1);		}	}	php_error(E_WARNING,				"%s(): Unable to locate field number %ld.", get_active_function_name(TSRMLS_C),				Z_LVAL_P(fno));	RETVAL_FALSE;}/* }}} *//* * STRING filePro_fieldwidth(int field_number) *  * Errors return false, success returns the character width of the field. *//* {{{ proto int filepro_fieldwidth(int field_number)   Gets the width of a field */PHP_FUNCTION(filepro_fieldwidth){	pval *fno;	FP_FIELD *lp;	int i;	FP_TLS_VARS;	if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &fno) == FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_long(fno);	if (!FP_GLOBAL(fp_database)) {		php_error(E_WARNING,					"%s(): Must set database directory first!", get_active_function_name(TSRMLS_C));		RETURN_FALSE;	}		for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp; lp = lp->next, i++) {		if (i == Z_LVAL_P(fno)) {			RETURN_LONG(lp->width);		}	}	php_error(E_WARNING,				"%s(): Unable to locate field number %ld.", get_active_function_name(TSRMLS_C),				Z_LVAL_P(fno));	RETVAL_FALSE;}/* }}} *//* * LONG filePro_fieldcount(void) *  * Errors return false, success returns the field count. *//* {{{ proto int filepro_fieldcount(void)   Find out how many fields are in a filePro database */PHP_FUNCTION(filepro_fieldcount){	FP_TLS_VARS;	if (ZEND_NUM_ARGS() != 0) {		WRONG_PARAM_COUNT;	}	if (!FP_GLOBAL(fp_database)) {		php_error(E_WARNING,					"%s(): Must set database directory first!", get_active_function_name(TSRMLS_C));		RETURN_FALSE;	}		/* Read in the first line from the map file */	RETVAL_LONG(FP_GLOBAL(fp_fcount));}/* }}} *//* * STRING filePro_retrieve(int row_number, int field_number) *  * Errors return false, success returns the datum. *//* {{{ proto string filepro_retrieve(int row_number, int field_number)   Retrieves data from a filePro database */PHP_FUNCTION(filepro_retrieve){	pval *rno, *fno;	FP_FIELD *lp;	FILE *fp;	char workbuf[MAXPATHLEN];	char *readbuf;	int i, fnum, rnum;	long offset;	FP_TLS_VARS;	if (ZEND_NUM_ARGS() != 2 || getParameters(ht, 2, &rno, &fno) == FAILURE) {		WRONG_PARAM_COUNT;	}	if (!FP_GLOBAL(fp_database)) {		php_error(E_WARNING,					"%s(): Must set database directory first!", get_active_function_name(TSRMLS_C));		RETURN_FALSE;	}		convert_to_long(rno);	convert_to_long(fno);	fnum = Z_LVAL_P(fno);	rnum = Z_LVAL_P(rno);    	if (rnum < 0 || fnum < 0 || fnum >= FP_GLOBAL(fp_fcount)) {		php_error(E_WARNING, "%s(): Parameters out of range", get_active_function_name(TSRMLS_C));		RETURN_FALSE;	}    	offset = (rnum + 1) * (FP_GLOBAL(fp_keysize) + 20) + 20; /* Record location */	for (i = 0, lp = FP_GLOBAL(fp_fieldlist); lp && i < fnum; lp = lp->next, i++) {		offset += lp->width;	}	if (!lp) {		php_error(E_WARNING, "%s(): Cannot locate field", get_active_function_name(TSRMLS_C));		RETURN_FALSE;	}    	/* Now read the record in */	snprintf(workbuf, sizeof(workbuf), "%s/key", FP_GLOBAL(fp_database));	if (PG(safe_mode) && (!php_checkuid(workbuf, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {		RETURN_FALSE;	}		if (php_check_open_basedir(workbuf TSRMLS_CC)) {		RETURN_FALSE;	}	if (!(fp = VCWD_FOPEN(workbuf, "r"))) {		php_error(E_WARNING, "%s(): Cannot open key: [%d] %s", get_active_function_name(TSRMLS_C),					errno, strerror(errno));		fclose(fp);		RETURN_FALSE;	}	fseek(fp, offset, SEEK_SET);		readbuf = emalloc (lp->width+1);	if (fread(readbuf, lp->width, 1, fp) != 1) {        	php_error(E_WARNING, "%s(): Cannot read data: [%d] %s", get_active_function_name(TSRMLS_C),					errno, strerror(errno));		efree(readbuf);		fclose(fp);		RETURN_FALSE;	}	readbuf[lp->width] = '\0';	fclose(fp);	RETURN_STRING(readbuf, 0);}/* }}} */#endif/* * 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 + -