Re: cvs: php4(PHP_4_2_0) /ext/filepro filepro.c

From: Date: Wed, 20 Mar 2002 18:35:44 +0000
Subject: Re: cvs: php4(PHP_4_2_0) /ext/filepro filepro.c
References: 1  Groups: php.cvs 
Request: Send a blank email to php-cvs+get-10491@lists.php.net to get a copy of this message
Hello, do you need to merge more? I'm about to build the RC1. Derick On Wed, 20 Mar 2002, Stefan Esser wrote: > sesser Wed Mar 20 13:21:19 2002 EDT > > Modified files: (Branch: PHP_4_2_0) > /php4/ext/filepro filepro.c > Log: > MFH: filepro fixes > > > > Index: php4/ext/filepro/filepro.c > diff -u php4/ext/filepro/filepro.c:1.43 php4/ext/filepro/filepro.c:1.43.2.1 > --- php4/ext/filepro/filepro.c:1.43 Thu Feb 28 03:26:07 2002 > +++ php4/ext/filepro/filepro.c Wed Mar 20 13:21:19 2002 > @@ -16,7 +16,7 @@ > +----------------------------------------------------------------------+ > */ > > -/* $Id: filepro.c,v 1.43 2002/02/28 08:26:07 sebastian Exp $ */ > +/* $Id: filepro.c,v 1.43.2.1 2002/03/20 18:21:19 sesser Exp $ */ > > /* > filePro 4.x support developed by Chad Robinson, chadr@brttech.com > @@ -159,23 +159,23 @@ > DWORD ul_reason_for_call, > LPVOID lpReserved) > { > - switch( ul_reason_for_call ) { > - case DLL_PROCESS_ATTACH: > - if ((FPTls=TlsAlloc())==0xFFFFFFFF){ > - return 0; > - } > - break; > - case DLL_THREAD_ATTACH: > - break; > - case DLL_THREAD_DETACH: > - break; > - case DLL_PROCESS_DETACH: > - if (!TlsFree(FPTls)){ > - return 0; > - } > - break; > - } > - return 1; > + switch( ul_reason_for_call ) { > + case DLL_PROCESS_ATTACH: > + if ((FPTls=TlsAlloc())==0xFFFFFFFF) { > + return 0; > + } > + break; > + case DLL_THREAD_ATTACH: > + break; > + case DLL_THREAD_DETACH: > + break; > + case DLL_PROCESS_DETACH: > + if (!TlsFree(FPTls)) { > + return 0; > + } > + break; > + } > + return 1; > } > #endif > #endif > @@ -194,11 +194,11 @@ > { > pval *dir; > FILE *fp; > - char workbuf[256]; /* FIX - should really be the max filename length */ > + char workbuf[MAXPATHLEN]; > char readbuf[256]; > char *strtok_buf = NULL; > int i; > - FP_FIELD *new_field, *tmp; > + FP_FIELD *new_field, *tmp, *next; > FP_TLS_VARS; > > if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &dir) == FAILURE) { > @@ -207,13 +207,26 @@ > > convert_to_string(dir); > > - /* FIX - we should really check and free these if they are used! */ > + /* free memory */ > + if (FP_GLOBAL(fp_database) != NULL) { > + efree (FP_GLOBAL(fp_database)); > + } > + > + /* free linked list of fields */ > + tmp = FP_GLOBAL(fp_fieldlist); > + while (tmp != NULL) { > + next = tmp->next; > + efree(tmp); > + tmp = next; > + } > + > + /* init the global vars */ > FP_GLOBAL(fp_database) = NULL; > - FP_GLOBAL(fp_fieldlist) = NULL; > + FP_GLOBAL(fp_fieldlist) = NULL; > FP_GLOBAL(fp_fcount) = -1; > - FP_GLOBAL(fp_keysize) = -1; > + FP_GLOBAL(fp_keysize) = -1; > > - sprintf(workbuf, "%s/map", Z_STRVAL_P(dir)); > + snprintf(workbuf, sizeof(workbuf), "%s/map", Z_STRVAL_P(dir)); > > if (PG(safe_mode) && (!php_checkuid(workbuf, NULL, CHECKUID_CHECK_FILE_AND_DIR))) { > RETURN_FALSE; > @@ -228,7 +241,7 @@ > errno, strerror(errno)); > RETURN_FALSE; > } > - if (!fgets(readbuf, 250, fp)) { > + if (!fgets(readbuf, sizeof(readbuf), fp)) { > fclose(fp); > php_error(E_WARNING, "filePro: cannot read map: [%d] %s", > errno, strerror(errno)); > @@ -243,10 +256,10 @@ > FP_GLOBAL(fp_keysize) = atoi(php_strtok_r(NULL, ":", &strtok_buf)); > php_strtok_r(NULL, ":", &strtok_buf); > FP_GLOBAL(fp_fcount) = atoi(php_strtok_r(NULL, ":", &strtok_buf)); > - > - /* Read in the fields themselves */ > + > + /* Read in the fields themselves */ > for (i = 0; i < FP_GLOBAL(fp_fcount); i++) { > - if (!fgets(readbuf, 250, fp)) { > + if (!fgets(readbuf, sizeof(readbuf), fp)) { > fclose(fp); > php_error(E_WARNING, "filePro: cannot read map: [%d] %s", > errno, strerror(errno)); > @@ -311,7 +324,7 @@ > 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 */ > - sprintf(workbuf, "%s/key", FP_GLOBAL(fp_database)); > + 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; > @@ -333,7 +346,7 @@ > fseek(fp, recsize, SEEK_CUR); > } > } > - fclose(fp); > + fclose(fp); > > RETVAL_LONG(records); > } > @@ -496,12 +509,12 @@ > PHP_FUNCTION(filepro_retrieve) > { > pval *rno, *fno; > - FP_FIELD *lp; > - FILE *fp; > - char workbuf[MAXPATHLEN]; > - char readbuf[1024]; /* FIX - Work out better buffering! */ > - int i, fnum, rnum; > - long offset; > + 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) { > @@ -520,22 +533,22 @@ > fnum = Z_LVAL_P(fno); > rnum = Z_LVAL_P(rno); > > - if (rnum < 0 || fnum < 0 || fnum >= FP_GLOBAL(fp_fcount)) { > - php_error(E_WARNING, "filepro: parameters out of range"); > + if (rnum < 0 || fnum < 0 || fnum >= FP_GLOBAL(fp_fcount)) { > + php_error(E_WARNING, "filepro: parameters out of range"); > 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, "filePro: cannot locate field"); > + 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, "filePro: cannot locate field"); > RETURN_FALSE; > - } > + } > > /* Now read the record in */ > - sprintf(workbuf, "%s/key", FP_GLOBAL(fp_database)); > + 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; > @@ -548,19 +561,22 @@ > if (!(fp = VCWD_FOPEN(workbuf, "r"))) { > php_error(E_WARNING, "filePro: cannot open key: [%d] %s", > errno, strerror(errno)); > - fclose(fp); > + fclose(fp); > RETURN_FALSE; > } > - fseek(fp, offset, SEEK_SET); > + fseek(fp, offset, SEEK_SET); > + > + readbuf = emalloc (lp->width+1); > if (fread(readbuf, lp->width, 1, fp) != 1) { > - php_error(E_WARNING, "filePro: cannot read data: [%d] %s", > + php_error(E_WARNING, "filePro: cannot read data: [%d] %s", > errno, strerror(errno)); > - fclose(fp); > + efree(readbuf); > + fclose(fp); > RETURN_FALSE; > - } > - readbuf[lp->width] = '\0'; > - fclose(fp); > - RETURN_STRING(readbuf, 1); > + } > + readbuf[lp->width] = '\0'; > + fclose(fp); > + RETURN_STRING(readbuf, 0); > } > /* }}} */ > > > > > -- > PHP CVS Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > ----------------------------------------------------------------------- PHP: Scripting the Web - derick@php.net All your branches are belong to me! SRM: Script Running Machine - www.vl-srm.net -----------------------------------------------------------------------

« previous php.cvs (#10491) next »