Hi

You'll have to implement wordexp(3) in libc too before this does us any
good.


On Tue, Apr 06, 2010 at 03:49:58PM +0930, Matthew Haub wrote:
> Hello,
> 
> On Fri, Apr 02, 2010 at 07:08:43PM -0700, Philip Guenther wrote:
> > are we still tracking the upstream less(1) and if so, is the
> > behavioral change acceptable there?
> 
> On Sat, Apr 03, 2010 at 03:37:46PM +1030, Matthew Haub wrote:
> > We no longer track upstream less(1). The last sync was 7 years ago.
> 
> On Sat, Apr 03, 2010 at 07:34:40AM +0100, Nicholas Marriott wrote:
> > Yes, but is that for a reason or just because nobody has updated it?
> 
> Todd Miller would be the person to ask. Either way I've emailed the less
> maintainer to see whether he would be interested in using wordexp over
> lessecho on systems that support it.
> 
> On Fri, Apr 02, 2010 at 07:08:43PM -0700, Philip Guenther wrote:
> > if you want this, you should just implement wordexp(3) in libc and
> > then use that.
> 
> Done. This patch uses wordexp as a drop in replacement for glob when
> available.
> 
> Matthew
> 
> Index: configure
> ===================================================================
> RCS file: /cvs/src/usr.bin/less/configure,v
> retrieving revision 1.3
> diff -u configure
> --- configure 13 Apr 2003 18:26:25 -0000      1.3
> +++ configure 6 Apr 2010 04:26:47 -0000
> @@ -4456,7 +4456,7 @@
>  
>  
>  
> -for ac_func in fsync memcpy popen _setjmp sigprocmask sigsetmask stat strchr 
> strstr system
> +for ac_func in fsync memcpy popen _setjmp sigprocmask sigsetmask stat strchr 
> strstr system wordexp
>  do
>  as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
>  echo "$as_me:$LINENO: checking for $ac_func" >&5
> Index: configure.ac
> ===================================================================
> RCS file: /cvs/src/usr.bin/less/configure.ac,v
> retrieving revision 1.1.1.1
> diff -u configure.ac
> --- configure.ac      13 Apr 2003 18:21:21 -0000      1.1.1.1
> +++ configure.ac      6 Apr 2010 04:26:48 -0000
> @@ -211,7 +211,7 @@
>  
>  # Checks for library functions.
>  AC_TYPE_SIGNAL
> -AC_CHECK_FUNCS([fsync memcpy popen _setjmp sigprocmask sigsetmask stat 
> strchr strstr system])
> +AC_CHECK_FUNCS([fsync memcpy popen _setjmp sigprocmask sigsetmask stat 
> strchr strstr system wordexp])
>  
>  # Some systems have termios.h but not the corresponding functions.
>  AC_CHECK_FUNC(tcgetattr, AC_DEFINE(HAVE_TERMIOS_FUNCS))
> Index: defines.h.in
> ===================================================================
> RCS file: /cvs/src/usr.bin/less/defines.h.in,v
> retrieving revision 1.2
> diff -u defines.h.in
> --- defines.h.in      14 Apr 2003 14:33:57 -0000      1.2
> +++ defines.h.in      6 Apr 2010 04:26:48 -0000
> @@ -346,6 +346,9 @@
>  /* Define HAVE_VOID if your compiler supports the "void" type. */
>  #undef HAVE_VOID
>  
> +/* Define to 1 if you have the `wordexp' function. */
> +#undef HAVE_WORDEXP
> +
>  /* Define to 1 if you have the `_setjmp' function. */
>  #undef HAVE__SETJMP
>  
> Index: filename.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/less/filename.c,v
> retrieving revision 1.13
> diff -u filename.c
> --- filename.c        6 Dec 2006 05:03:29 -0000       1.13
> +++ filename.c        6 Apr 2010 04:26:48 -0000
> @@ -37,6 +37,9 @@
>  #include <signal.h>
>  #endif
>  
> +#if HAVE_WORDEXP
> +#include <wordexp.h>
> +#endif
>  #if HAVE_STAT
>  #include <sys/stat.h>
>  #ifndef S_ISDIR
> Index: lglob.h
> ===================================================================
> RCS file: /cvs/src/usr.bin/less/lglob.h,v
> retrieving revision 1.3
> diff -u lglob.h
> --- lglob.h   22 Apr 2003 22:57:13 -0000      1.3
> +++ lglob.h   6 Apr 2010 04:26:48 -0000
> @@ -23,7 +23,18 @@
>   */
>  
>  #include <glob.h>
> +#include "defines.h"
>  
> +#if HAVE_WORDEXP
> +#define      GLOB_FLAGS                      (WRDE_NOCMD)
> +#define      DECL_GLOB_LIST(list)            wordexp_t list; int i; int 
> list##error;
> +#define      GLOB_LIST_FAILED(list)          list##error != 0
> +#define      SCAN_GLOB_LIST(list,p)          i = 0; i < list.we_wordc; i++
> +#define      INIT_GLOB_LIST(list,p)          p = list.we_wordv[i]
> +#define      GLOB_LIST_DONE(list)            wordfree(&list)
> +#define      GLOB_LIST(path,list)            list##error = \
> +                                         wordexp(path,&list,GLOB_FLAGS)
> +#else
>  #define GLOB_FLAGS                   (GLOB_NOCHECK|GLOB_BRACE|GLOB_TILDE)
>  #define      DECL_GLOB_LIST(list)            glob_t list;  int i;
>  #define      GLOB_LIST(filename,list)        
> glob(filename,GLOB_FLAGS,0,&list)
> @@ -31,3 +42,4 @@
>  #define      SCAN_GLOB_LIST(list,p)          i = 0;  i < list.gl_pathc;  i++
>  #define      INIT_GLOB_LIST(list,p)          p = list.gl_pathv[i]
>  #define      GLOB_LIST_DONE(list)            globfree(&list)
> +#endif

Reply via email to