bin/172542: [patch] FICL assumes standalone environment for testmain

Jan Beich jbeich at tormail.org
Thu Aug 1 04:50:02 UTC 2013


The following reply was made to PR bin/172542; it has been noted by GNATS.

From: Jan Beich <jbeich at tormail.org>
To: Peter Jeremy <peter at rulingia.com>
Cc: bug-followup at freebsd.org
Subject: Re: bin/172542: [patch] FICL assumes standalone environment for testmain
Date: Thu, 01 Aug 2013 04:43:04 +0000

 --=-=-=
 Content-Type: text/plain
 
 testmain was further broken by freaddir in r253172.
 
 
 --=-=-=
 Content-Type: text/x-patch
 Content-Disposition: attachment; filename=ficl_testmain.diff
 
 Index: sys/boot/ficl/loader.c
 ===================================================================
 --- sys/boot/ficl/loader.c	(revision 253788)
 +++ sys/boot/ficl/loader.c	(working copy)
 @@ -33,11 +33,17 @@
  *******************************************************************/
  
  #ifdef TESTMAIN
 +#include <sys/stat.h>
 +#include <dirent.h>
 +#include <fcntl.h>
 +#include <stdio.h>
  #include <stdlib.h>
 +#include <time.h>
 +#include <unistd.h>
  #else
  #include <stand.h>
 +#include "bootstrap.h"
  #endif
 -#include "bootstrap.h"
  #include <string.h>
  #include "ficl.h"
  
 @@ -135,9 +141,9 @@ void
  ficlGetenv(FICL_VM *pVM)
  {
  #ifndef TESTMAIN
 -	char	*name;
 +	char	*name, *value;
  #endif
 -	char	*namep, *value;
 +	char	*namep;
  	int	names;
  
  #if FICL_ROBUST > 1
 @@ -243,9 +249,9 @@ void
  ficlFindfile(FICL_VM *pVM)
  {
  #ifndef TESTMAIN
 -	char	*name;
 +	char	*type, *name;
  #endif
 -	char	*type, *namep, *typep;
 +	char	*namep, *typep;
  	struct	preloaded_file* fp;
  	int	names, types;
  
 @@ -511,7 +517,7 @@ static void pfread(FICL_VM *pVM)
   */
  static void pfreaddir(FICL_VM *pVM)
  {
 -    struct dirent *d;
 +    struct dirent *d = NULL;
      int fd;
  
  #if FICL_ROBUST > 1
 @@ -519,7 +525,15 @@ static void pfreaddir(FICL_VM *pVM)
  #endif
  
      fd = stackPopINT(pVM->pStack);
 +#ifdef TESTMAIN
 +    static DIR *dir;
 +    if (lseek(fd, 0, SEEK_CUR) == 0)
 +       dir = fdopendir(fd);
 +    if (dir != NULL)
 +       d = readdir(dir);
 +#else
      d = readdirfd(fd);
 +#endif
      if (d != NULL) {
          stackPushPtr(pVM->pStack, d->d_name);
          stackPushINT(pVM->pStack, strlen(d->d_name));
 
 --=-=-=--


More information about the freebsd-bugs mailing list