Re: git: 1e0743f54d2d - main - glob: Add blocks support
- In reply to: Bojan Novković : "git: 1e0743f54d2d - main - glob: Add blocks support"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 02 Jun 2025 10:41:59 UTC
On Mon, Jun 02, 2025 at 09:33:14AM +0000, Bojan Novković wrote: > The branch main has been updated by bnovkov: > > URL: https://cgit.FreeBSD.org/src/commit/?id=1e0743f54d2d3624cd4de2167d373aa38597778e > > commit 1e0743f54d2d3624cd4de2167d373aa38597778e > Author: Bojan Novković <bnovkov@FreeBSD.org> > AuthorDate: 2025-05-23 13:26:04 +0000 > Commit: Bojan Novković <bnovkov@FreeBSD.org> > CommitDate: 2025-06-02 09:32:50 +0000 > > glob: Add blocks support > > This change introduces the `glob_b` function which takes a block instead > of a function pointer. > > Relnotes: yes > Sponsored by: Klara, Inc. > Inspired by: https://github.com/apple-oss-distributions/Libc > Differential Revision: https://reviews.freebsd.org/D50485 > --- > include/glob.h | 16 +++++++++-- > lib/libc/gen/Makefile.inc | 1 + > lib/libc/gen/Symbol.map | 1 + > lib/libc/gen/glob.3 | 66 ++++++++++++++++++++++++++++++++++++++------ > lib/libc/gen/glob.c | 70 +++++++++++++++++++++++++++++++++++++---------- > 5 files changed, 128 insertions(+), 26 deletions(-) > > diff --git a/include/glob.h b/include/glob.h > index dc86cdf99929..cbe99bfef6ed 100644 > --- a/include/glob.h > +++ b/include/glob.h > @@ -50,8 +50,15 @@ typedef struct { > size_t gl_offs; /* Reserved at beginning of gl_pathv. */ > int gl_flags; /* Copy of flags parameter to glob. */ > char **gl_pathv; /* List of paths matching pattern. */ > - /* Copy of errfunc parameter to glob. */ > - int (*gl_errfunc)(const char *, int); > + /* Copy of error callback parameter to glob. */ > + union { > + int (*gl_errfunc)(const char *, int); > +#ifdef __BLOCKS__ > + int (^gl_errblk)(const char *, int); > +#else > + void *gl_errblk; > +#endif > + }; > > /* > * Alternate filesystem access methods for glob; replacement > @@ -90,6 +97,7 @@ typedef struct { > #define GLOB_QUOTE 0x0400 /* Quote special chars with \. */ > #define GLOB_TILDE 0x0800 /* Expand tilde names from the passwd file. */ > #define GLOB_LIMIT 0x1000 /* limit number of returned paths */ > +#define _GLOB_ERR_BLOCK 0x08000000 /* (internal) error callback is a block */ > > /* source compatibility, these are the old names */ > #define GLOB_MAXPATH GLOB_LIMIT > @@ -99,6 +107,10 @@ typedef struct { > __BEGIN_DECLS > int glob(const char * __restrict, int, > int (*)(const char *, int), glob_t * __restrict); > +#ifdef __BLOCKS__ > +int glob_b(const char * __restrict, int, > + int (^)(const char *, int), glob_t * __restrict); > +#endif glob.h is POSIX header, the non-standard prototype visibility must be limited.