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