From owner-freebsd-ports-bugs@FreeBSD.ORG Tue Dec 13 17:40:17 2005 Return-Path: X-Original-To: freebsd-ports-bugs@hub.freebsd.org Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0AD3A16A423 for ; Tue, 13 Dec 2005 17:40:17 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id E21F643D55 for ; Tue, 13 Dec 2005 17:40:08 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id jBDHe3gj092086 for ; Tue, 13 Dec 2005 17:40:03 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id jBDHe3c0092085; Tue, 13 Dec 2005 17:40:03 GMT (envelope-from gnats) Resent-Date: Tue, 13 Dec 2005 17:40:03 GMT Resent-Message-Id: <200512131740.jBDHe3c0092085@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, "Michael C. Shultz" Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 80DD516A41F for ; Tue, 13 Dec 2005 17:36:56 +0000 (GMT) (envelope-from ringworm01@gmail.com) Received: from vms046pub.verizon.net (vms046pub.verizon.net [206.46.252.46]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1176A43D60 for ; Tue, 13 Dec 2005 17:36:56 +0000 (GMT) (envelope-from ringworm01@gmail.com) Received: from ringworm.mechee.com ([71.102.14.129]) by vms046.mailsrvcs.net (Sun Java System Messaging Server 6.2-4.02 (built Sep 9 2005)) with ESMTPA id <0IRG0055767OJP5E@vms046.mailsrvcs.net> for FreeBSD-gnats-submit@freebsd.org; Tue, 13 Dec 2005 11:35:50 -0600 (CST) Received: by ringworm.mechee.com (Postfix, from userid 1001) id 78D34130C22; Tue, 13 Dec 2005 09:35:48 -0800 (PST) Message-Id: <20051213173548.78D34130C22@ringworm.mechee.com> Date: Tue, 13 Dec 2005 09:35:48 -0800 (PST) From: "Michael C. Shultz" To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: Subject: ports/90339: [MAINTAINER] update sysutils/portmanager X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: "Michael C. Shultz" List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Dec 2005 17:40:17 -0000 >Number: 90339 >Category: ports >Synopsis: [MAINTAINER] update sysutils/portmanager >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: maintainer-update >Submitter-Id: current-users >Arrival-Date: Tue Dec 13 17:40:02 GMT 2005 >Closed-Date: >Last-Modified: >Originator: Michael C. Shultz >Release: FreeBSD 5.4-STABLE i386 >Organization: >Environment: System: FreeBSD ringworm.mechee.com 5.4-STABLE FreeBSD 5.4-STABLE #0: Wed Nov 30 13:51:49 PST 2005 root@ringworm.mechee.com:/usr5/obj/usr5/src/sys/RINGWORM5 i386 >Description: update sysutils/portmanager to 0.4.0_1 1. Fixes potential seg fault on 4.11 systems. 2. Added log entry times Note to comitter: adds files/patch-0.4.0_1 >How-To-Repeat: N/A >Fix: --- portmanager-0.4.0_1.diff begins here --- diff -ruN portmanager/Makefile portmanager-0.4.0_1/Makefile --- portmanager/Makefile Mon Dec 12 12:04:20 2005 +++ portmanager-0.4.0_1/Makefile Tue Dec 13 08:36:10 2005 @@ -7,6 +7,7 @@ PORTNAME= portmanager PORTVERSION= 0.4.0 +PORTREVISION= 1 CATEGORIES= sysutils MASTER_SITES= http://portmanager.sunsite.dk/distfiles/ \ ${MASTER_SITE_SOURCEFORGE} diff -ruN portmanager/files/patch-0.4.0_1 portmanager-0.4.0_1/files/patch-0.4.0_1 --- portmanager/files/patch-0.4.0_1 Wed Dec 31 16:00:00 1969 +++ portmanager-0.4.0_1/files/patch-0.4.0_1 Tue Dec 13 08:35:41 2005 @@ -0,0 +1,520 @@ +diff -ruN ../0.4.0/libMG/src/libMG.h ./libMG/src/libMG.h +--- ../0.4.0/libMG/src/libMG.h Sun Dec 11 17:39:06 2005 ++++ ./libMG/src/libMG.h Tue Dec 13 07:39:00 2005 +@@ -48,6 +48,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -155,6 +156,24 @@ + while( fflush( stderr ) ); \ + assert( 0 ); \ + } ++ ++#define MGmSystem( command, environment ) \ ++ MGm__pid = fork(); \ ++ if( MGm__pid == 0 ) /* child */ \ ++ { \ ++ execve( command[0], command, environment ); \ ++ _exit(127); \ ++ } \ ++ while( waitpid( MGm__pid, &MGm__forkStatus, 0 ) < 0 ) /* parent */ \ ++ { \ ++ if( WIFEXITED( MGm__forkStatus ) == 0 ) \ ++ { \ ++ fprintf( stderr, "%s error: command %s exited abnormally\n", id, command[0] ); \ ++ while( fflush( stderr ) ); \ ++ assert( 0 ); \ ++ } \ ++ } ++ + + #define MGmFopen( fileStream, fileName, mode ) \ + if( mode[0] == 'w' ) \ +diff -ruN ../0.4.0/libMGPM/src/MGPMlogAdd.c ./libMGPM/src/MGPMlogAdd.c +--- ../0.4.0/libMGPM/src/MGPMlogAdd.c Sun Dec 11 09:34:27 2005 ++++ ./libMGPM/src/MGPMlogAdd.c Tue Dec 13 08:03:34 2005 +@@ -34,6 +34,9 @@ + { + FILE* logFileStream; + char id[] = "MGPMlogAdd"; ++ time_t timeObj; ++ ++ timeObj = time(NULL); + + if( property->log == 0 ) + { +@@ -48,7 +51,8 @@ + } + + MGmFopen( logFileStream, property->logFile->parent.path, "a" ); +- fprintf( logFileStream, "%-35s %-30s\n %-35s %-35s %-30s\n\n", victemName, victemDir, crime, suspectName, suspectDir ); ++ fprintf( logFileStream, "%s %-35s %-30s\n %-35s %-35s %-30s\n\n", ++ ctime( &timeObj ), victemName, victemDir, crime, suspectName, suspectDir ); + fclose( logFileStream ); + return( 0 ); + } +diff -ruN ../0.4.0/libMGPM/src/MGPMlogDestroy.c ./libMGPM/src/MGPMlogDestroy.c +--- ../0.4.0/libMGPM/src/MGPMlogDestroy.c Sun Dec 11 09:33:14 2005 ++++ ./libMGPM/src/MGPMlogDestroy.c Tue Dec 13 08:03:40 2005 +@@ -32,9 +32,14 @@ + + int MGPMlogDestroy( structProperty* property ) + { ++ FILE* logHandle; + char id[] = "MGPMlogDestroy"; + char* command = NULL; + ++ time_t timeObj; ++ ++ timeObj = time(NULL); ++ + if( property->log == 0 ) + { + return( 1 ); +@@ -49,11 +54,11 @@ + assert(0); + } + +- MGmStrcpy( command, "echo \" end of log \" " ); +- MGmStrcat( command, " >> /var/log/portmanager.log" ); +- system( command ); +- MGmStrcpy( command, "date >> /var/log/portmanager.log" ); +- system( command ); ++ ++ MGmFopen( logHandle, "/var/log/portmanager.log", "a" ); ++ fprintf( logHandle, "%s end of log\n", ctime( &timeObj ) ); ++ ++ fclose( logHandle ); + + /* 666 indicates demise of this object */ + property->logFile->parent.type = 666; +diff -ruN ../0.4.0/libMGPM/src/MGPMrCommandLine.c ./libMGPM/src/MGPMrCommandLine.c +--- ../0.4.0/libMGPM/src/MGPMrCommandLine.c Sun Dec 11 09:41:53 2005 ++++ ./libMGPM/src/MGPMrCommandLine.c Mon Dec 12 16:30:28 2005 +@@ -64,7 +64,7 @@ + int rParseCommandLine( structProperty* property, int argc, char** argv ); + int rSetXtermTitle( void ); + +-int MGPMrCommandLine( int argc, char** argv ) ++int MGPMrCommandLine( int argc, char** argv, char** argp ) + { + DIR* dirStream = NULL; + char id[] = "MGPMrCommandLine"; +@@ -76,6 +76,9 @@ + + signal( SIGINT, MGPMrCatchSignal ); + ++ ++ property.argp = argp; ++ + path = (char*)calloc( 511, 1 ); + + /* +@@ -260,7 +263,7 @@ + buffer = calloc( bufferSize, 1 ); + MGmFopen( handle, property->helpFile, "r" ); + fread( buffer, bufferSize, 1, handle ); +- fprintf( stdout, buffer ); ++ fprintf( stdout, "%s\n", buffer ); + free( buffer ); + fclose( handle ); + return( 0 ); +diff -ruN ../0.4.0/libMGPM/src/MGPMrUpdate.c ./libMGPM/src/MGPMrUpdate.c +--- ../0.4.0/libMGPM/src/MGPMrUpdate.c Sun Dec 11 21:12:02 2005 ++++ ./libMGPM/src/MGPMrUpdate.c Tue Dec 13 05:48:01 2005 +@@ -31,6 +31,10 @@ + #define OK 0 + #include + ++ ++int MGrIfDirEntry( char* dirName, char* fileName ); ++ ++ + int rBsdPortMkPatch( structProperty* property, structLocalProperty* localProperty ); + int rCleanDir( char* portDir, char* workDir ); + int rCleanUp( structProperty* property, structLocalProperty* localProperty ); +@@ -48,12 +52,10 @@ + char backUp[] = "--back-up"; + char bu[] = "-bu"; + char exact[] = "exact"; +- char failMsg1[] = "failed during make, adding to ignore.db"; + char id[] = "MGPMrUpdate"; + char ip[] = "-ip"; + char l[] = "-l"; + char log[] = "--log"; +- char space[] = " "; + char strike[] = "0"; + char y[] = "-y"; + char yes[] = "--yes"; +@@ -66,6 +68,7 @@ + char* stinker = NULL; + char* stopPortDirPtr = NULL; + char* strikePtr = NULL; ++ char** cmd; + int answer = 1; + int availableDependenciesDbIDX = 0; + int availableDependenciesDbQTY = 0; +@@ -80,7 +83,13 @@ + + property->optionsChanged = 0; + +- localProperty.options = calloc( MAXBUFFERSIZE, 1 ); ++ localProperty.environment = malloc( sizeof( char** ) * 4 ); ++ localProperty.environment[0] = malloc( MAXSTRINGSIZE ); ++ localProperty.environment[1] = malloc( MAXSTRINGSIZE ); ++ localProperty.environment[2] = malloc( MAXSTRINGSIZE ); ++ localProperty.environment[3] = 0; ++ ++ localProperty.CURDIR = calloc( MAXSTRINGSIZE, 1 ); + localProperty.afterOptionsFileSize = calloc( MAXSTRINGSIZE, 1 ); + localProperty.afterOptionsFileTime = calloc( MAXSTRINGSIZE, 1 ); + localProperty.batchCheck = calloc( MAXSTRINGSIZE, 1 ); +@@ -92,6 +101,7 @@ + localProperty.installedPortName = calloc( MAXSTRINGSIZE, 1 ); + localProperty.newPortDir = calloc( MAXSTRINGSIZE, 1 ); + localProperty.newPortName = calloc( MAXSTRINGSIZE, 1 ); ++ localProperty.options = calloc( MAXBUFFERSIZE, 1 ); + localProperty.optionsCheck = calloc( MAXSTRINGSIZE, 1 ); + localProperty.optionsDir = calloc( MAXSTRINGSIZE, 1 ); + localProperty.startPortCmd = calloc( MAXSTRINGSIZE, 1 ); +@@ -99,6 +109,7 @@ + localProperty.stopPortCmd = calloc( MAXSTRINGSIZE, 1 ); + localProperty.stopPortDir = calloc( MAXSTRINGSIZE, 1 ); + localProperty.workDir = calloc( MAXSTRINGSIZE, 1 ); ++ localProperty.workFullPath = calloc( MAXSTRINGSIZE, 1 ); + + property->availableDependenciesDb = MGdbOpen( property->availableDependenciesDbFileName ); + property->availablePortsDb = MGdbOpen( property->availablePortsDbFileName ); +@@ -111,15 +122,39 @@ + if( ( strcmp( "/sysutils/portmanager", oldPortDir ) == 0 || strcmp( "/local/sysutils/portmanager", oldPortDir ) == 0 ) && property->forced ) + { + fprintf( stdout, "ignoring portmanager, will not self update in forced mode by design\n" ); ++ while( fflush( stdout ) ); + MGPMlogAdd( property, "ignoring portmanager ", "will not self update in forced mode by design", + oldPortDir, "added to ignore.db", " " ); + + MGdbAdd( property->ignoreDb, oldPortDir, "skipping portmanager, will not self update in forced mode by design\n", NULL ); +- while( fflush( stdout ) ); + rCleanUp( property, &localProperty ); + return( 0 ); + } + ++ /* ++ * setup environment ++ */ ++ MGmStrcpy( localProperty.environment[0], "PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/X11R6/bin" ); ++ ++ if( getenv( "CCACHE_DIR" ) != NULL ) ++ { ++ MGmStrcpy( localProperty.environment[1], "CCACHE_DIR=" ); ++ MGmStrcat( localProperty.environment[1], getenv( "CCACHE_DIR" ) ); ++ } ++ else ++ { ++ localProperty.environment[1][0] = 0; ++ } ++ ++ if( getenv( "CCACHE_PATH" ) != NULL ) ++ { ++ MGmStrcpy( localProperty.environment[2], "CCACHE_PATH=/usr/bin:/usr/local/bin" ); ++ } ++ else ++ { ++ localProperty.environment[2][0] = 0; ++ } ++ + /* + * test for bsd.ports.mk patch + */ +@@ -128,6 +163,30 @@ + property->bsdPortMkPatched = rBsdPortMkPatch( property, &localProperty ); + } + ++ /* ++ * store localProperty.CURDIR ++ */ ++ MGmStrcpy( localProperty.CURDIR, "cd " ); ++ MGmStrcat( localProperty.CURDIR, PORTSDIR ); ++ MGmStrcat( localProperty.CURDIR, oldPortDir ); ++ MGmStrcat( localProperty.CURDIR, " && make -V .CURDIR" ); ++ localProperty.buffer[0] = 0; ++ pHandle = popen( localProperty.CURDIR, "r" ); ++ fread( localProperty.buffer, MAXBUFFERSIZE, 1, pHandle ); ++ pclose( pHandle ); ++ idx = 0; ++ while( idx < MAXSTRINGSIZE ) ++ { ++ if( localProperty.buffer[idx] == LINEFEED || localProperty.buffer[idx] == TAB || localProperty.buffer[idx] == SPACE ) ++ { ++ localProperty.buffer[idx] = 0; ++ break; ++ } ++ idx++; ++ } ++ MGmStrcpy( localProperty.CURDIR, localProperty.buffer ); ++ ++ + /* + * store localProperty.workDir + */ +@@ -152,6 +211,13 @@ + MGmStrcpy( localProperty.workDir, localProperty.buffer ); + + /* ++ * build localProperty.workFullPath ++ */ ++ MGmStrcpy( localProperty.workFullPath, localProperty.workDir ); ++ MGmStrcat( localProperty.workFullPath, localProperty.CURDIR ); ++ MGmStrcat( localProperty.workFullPath, "/work" ); ++ ++ /* + * store localProperty.optionsDir + */ + MGmStrcpy( localProperty.optionsDir, "cd " ); +@@ -182,8 +248,6 @@ + + if( MGrIfFileExist( localProperty.optionsDir ) ) + { +- MGmFopen( fileStream, localProperty.optionsDir, "r" ); +- fclose( fileStream ); + MGmStrcpy( localProperty.beforeOptionsFileTime, MGrIntToString( (int)MGrFileTime( localProperty.optionsDir ) ) ); + MGmStrcpy( localProperty.beforeOptionsFileSize, MGrIntToString( MGrFileSize( localProperty.optionsDir ) ) ); + } +@@ -402,7 +466,7 @@ + /************************************************************************/ + /* Command "2" " make conf" */ + /************************************************************************/ +- if( MGrStrlen( localProperty.buffer ) > 4 ) ++ if( MGrBufferlen( localProperty.buffer, MAXBUFFERSIZE ) > 4 ) + { + /* + fprintf( stderr, "%s DEBUG: MGrStrlen( localProperty.buffer )-=>%d localProperty.buffer-=>%s localProperty.optionsDir->%s\n", id, +@@ -410,8 +474,8 @@ + while( fflush( stderr ) ); + */ + /* +- * If here we know OPTIONS is defined, now need to know if +- * /var/db/ports/{package name}/options exists ++ * If here we know OPTIONS is defined, need to run make config ++ * if /var/db/ports/{package name}/options exists + */ + if( MGrIfFileExist( localProperty.optionsDir ) == 0 ) + { +@@ -429,20 +493,12 @@ + fprintf( stdout, "%s %s command: #2 of 14 %s\n", id, PACKAGE_VERSION, localProperty.command ); + fprintf( stdout, "%s\n", SINGLE_LINES ); + while( fflush( stdout ) ); +- + system(localProperty.command); +- fclose( fileStream ); +- +- localProperty.afterOptionsFileTime[0] = 0; +- localProperty.afterOptionsFileSize[0] = 0; + } +- else +- { +- MGmStrcpy( localProperty.afterOptionsFileTime, ++ MGmStrcpy( localProperty.afterOptionsFileTime, + MGrIntToString( (int)MGrFileTime( localProperty.optionsDir ) ) ); +- MGmStrcpy( localProperty.afterOptionsFileSize, ++ MGmStrcpy( localProperty.afterOptionsFileSize, + MGrIntToString( MGrFileSize( localProperty.optionsDir ) ) ); +- } + + /* + * test to see if any options changed +@@ -958,29 +1014,70 @@ + /************************************************************************/ + /* Command "9" " make" */ + /************************************************************************/ +- MGmStrcpy( localProperty.command, "cd " ); +- MGmStrcat( localProperty.command, PORTSDIR ); +- MGmStrcat( localProperty.command, oldPortDir ); +- MGmStrcat( localProperty.command, " && make " ); + if( MGrStrlen( localProperty.options ) > 0 ) + { +- MGmStrcat( localProperty.command, localProperty.options ); ++ cmd = malloc( sizeof( char** ) * 3 ); ++ cmd[0] = malloc( MAXSTRINGSIZE ); ++ cmd[1] = malloc( MAXBUFFERSIZE ); ++ cmd[2] = 0; ++ MGmStrcpy( cmd[0], PORTSDIR ); ++ MGmStrcat( cmd[0], oldPortDir ); ++ if( chdir( cmd[0] ) != 0 ) ++ { ++ fprintf( stderr, "%s error: chdir %s failed\n", id, cmd[0] ); ++ perror( "chroot" ); ++ while( fflush( stderr ) ); ++ assert( 0 ); ++ } ++ MGmStrcpy( cmd[0], "/usr/bin/make" ); ++ MGmBuffercpy( cmd[1], localProperty.options, MAXBUFFERSIZE ); ++ fprintf( stdout, "%s\n", SINGLE_LINES ); ++ fprintf( stdout, "update %s \n", oldPortName ); ++ fprintf( stdout, "%s %s command: #9 of 14 %s\nOPTIONS-=>%s\n", id, PACKAGE_VERSION, cmd[0], cmd[1] ); ++ fprintf( stdout, "%s\n", SINGLE_LINES ); ++ while( fflush( stdout ) ); ++ MGmSystem( cmd, localProperty.environment ); ++ free( cmd[0] ); ++ free( cmd[1] ); ++ free( cmd ); + } +- +- fprintf( stdout, "%s\n", SINGLE_LINES ); +- fprintf( stdout, "update %s \n", oldPortName ); +- fprintf( stdout, "%s %s command: #9 of 14 %s\n", id, PACKAGE_VERSION, localProperty.command ); +- fprintf( stdout, "%s\n", SINGLE_LINES ); +- while( fflush( stdout ) ); +- if( ( errorCode = system(localProperty.command) ) ) ++ else + { +- MGPMlogAdd( property, oldPortName, oldPortDir, failMsg1, space, space ); +- fprintf( stdout, "%s %s error: make returned an error, adding %s to ignore.db\n", id, PACKAGE_VERSION, oldPortDir ); ++ cmd = malloc( sizeof( char** ) * 2 ); ++ cmd[0] = malloc( MAXSTRINGSIZE ); ++ cmd[1] = 0; ++ MGmStrcpy( cmd[0], PORTSDIR ); ++ MGmStrcat( cmd[0], oldPortDir ); ++ if( chdir( cmd[0] ) != 0 ) ++ { ++ fprintf( stderr, "%s error: chdir %s failed\n", id, cmd[0] ); ++ perror( "chroot" ); ++ while( fflush( stderr ) ); ++ assert( 0 ); ++ } ++ MGmStrcpy( cmd[0], "/usr/bin/make" ); ++ fprintf( stdout, "%s\n", SINGLE_LINES ); ++ fprintf( stdout, "update %s \n", oldPortName ); ++ fprintf( stdout, "%s %s command: #9 of 14 %s\n", id, PACKAGE_VERSION, cmd[0] ); ++ fprintf( stdout, "%s\n", SINGLE_LINES ); + while( fflush( stdout ) ); +- MGdbAdd( property->ignoreDb, oldPortDir, "failed during make", NULL ); ++ MGmSystem( cmd, localProperty.environment ); ++ free( cmd[0] ); ++ free( cmd ); ++ } ++ ++ if( MGrIfDirEntry( localProperty.workFullPath, ".build_done" ) == 0 ) ++ { ++ fprintf( stderr, "%s\n", SINGLE_LINES ); ++ fprintf( stderr, "%s error: %s %s failed during make, adding to ignore.db\n", id, oldPortName, oldPortDir ); ++ fprintf( stderr, "%s\n", SINGLE_LINES ); ++ while( fflush( stderr ) ); ++ MGPMlogAdd( property, oldPortName, oldPortDir, "port failed to build during make, adding to ignore.db", " ", " " ); ++ MGdbAdd( property->ignoreDb, oldPortDir, "port failed to build during make\n", NULL ); + rCleanUp( property, &localProperty ); + return(0); + } ++ + /************************************************************************/ + /* Command "10" pkg_create -b */ + /************************************************************************/ +@@ -1468,6 +1565,13 @@ + MGdbDestroy( property->installedPortsDb ); + MGdbDestroy( property->strikesDb ); + ++ ++ free( localProperty->environment[0] ); ++ free( localProperty->environment[1] ); ++ free( localProperty->environment[2] ); ++ free( localProperty->environment ); ++ ++ free( localProperty->CURDIR ); + free( localProperty->afterOptionsFileSize ); + free( localProperty->afterOptionsFileTime ); + free( localProperty->batchCheck ); +@@ -1487,6 +1591,7 @@ + free( localProperty->stopPortCmd ); + free( localProperty->stopPortDir ); + free( localProperty->workDir ); ++ free( localProperty->workFullPath ); + + return(0); + } +@@ -1782,4 +1887,27 @@ + } + free( command ); + return( 0 ); ++} ++ ++int MGrIfDirEntry( char* dirName, char* fileName ) ++{ ++/* char id[] = "MGrIfDirEntry"; */ ++ DIR* dirStream; ++ struct dirent* dirRecord; ++ unsigned int fileNameLength = 0; ++ ++ fileNameLength = MGrStrlen( fileName ); ++ ++ dirStream = opendir( dirName ); ++ ++ while( ( dirRecord = readdir( dirStream ) ) != NULL ) ++ { ++ if( dirRecord->d_namlen >= fileNameLength && strncmp( fileName, dirRecord->d_name, fileNameLength ) == 0 ) ++ { ++ closedir( dirStream ); ++ return( 1 ); /* FOUND */ ++ } ++ } ++ closedir( dirStream ); ++ return( 0 ); /* NOT_FOUND */ + } +diff -ruN ../0.4.0/libMGPM/src/libMGPM.h ./libMGPM/src/libMGPM.h +--- ../0.4.0/libMGPM/src/libMGPM.h Sun Dec 11 09:33:14 2005 ++++ ./libMGPM/src/libMGPM.h Mon Dec 12 21:00:55 2005 +@@ -91,6 +91,7 @@ + + typedef struct + { ++ char* CURDIR; + char* afterOptionsFileSize; + char* afterOptionsFileTime; + char* batchCheck; +@@ -112,13 +113,16 @@ + char* stopPortCmd; + char* stopPortDir; + char* workDir; ++ char* workFullPath; + char* xtermTitle; ++ char** environment; + int bufferSize; + int optionsBufferSize; + } structLocalProperty; + + typedef struct + { ++ char** argp; + /* + * default flags + */ +@@ -227,7 +231,7 @@ + int MGPMlogDestroy( structProperty* property ); + int MGPMrBestOldPort( structProperty* property, char* oldPortDir, char* oldPortName ); + int MGPMrCleanUp( structProperty* property ); +-int MGPMrCommandLine( int argc, char** argv ); ++int MGPMrCommandLine( int argc, char** argv, char** argp ); + int MGPMrController( structProperty* property, char* path, char** argv ); + int MGPMrCreateAllUpdateStatusDb( structProperty* property ); + int MGPMrCreateInstalledDb( structProperty* property ); +diff -ruN ../0.4.0/portmanager/portmanager.c ./portmanager/portmanager.c +--- ../0.4.0/portmanager/portmanager.c Sat Dec 10 06:00:32 2005 ++++ ./portmanager/portmanager.c Mon Dec 12 16:20:58 2005 +@@ -31,11 +31,11 @@ + /* + * Jumping through a hoop so main is accessable with gdb + */ +-int main( int argc, char** argv ) ++int main( int argc, char** argv, char** argp) + { + int errorCode = 0; + +- errorCode = MGPMrCommandLine( argc, (char**)argv ); ++ errorCode = MGPMrCommandLine( argc, (char**)argv, (char**)argp ); + exit( errorCode ); + } + +Binary files ../0.4.0/portmanager-0.4.1.tar.gz and ./portmanager-0.4.1.tar.gz differ --- portmanager-0.4.0_1.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted: