|
|
Message-ID: <5365A82C.1070509@midipix.org>
Date: Sat, 03 May 2014 22:38:36 -0400
From: "writeonce@...ipix.org" <writeonce@...ipix.org>
To: musl@...ts.openwall.com
Subject: Re: adding errc to support sed (FreeBSD)
On 05/03/2014 09:54 PM, Rich Felker wrote:
> On Sat, May 03, 2014 at 09:34:41PM -0400, writeonce@...ipix.org wrote:
>> On 05/03/2014 08:04 PM, Rich Felker wrote:
>>> On Sat, May 03, 2014 at 07:58:48PM -0400, writeonce@...ipix.org wrote:
>>>> Greetings,
>>>>
>>>> The FreeBSD implementation of sed uses errc; its implementation
>>>> should probably be as simple as:
>>>>
>>>> _Noreturn void errc(int eval, int status, const char *fmt, ...)
>>>> {
>>>> va_list ap;
>>>> va_start(ap, fmt);
>>>> vwarnx(status, fmt, ap);
>>>> va_end(ap);
>>>> exit(eval);
>>>> }
>>> What's the difference between this and other forms in err.h? Is there
>>> a 'v' version of it too?
>> The missing feature seems to consist in an exit code (eval) that
>> could be distinct from the error code (status).
> I would at least rename the argument and refactor a bit, but I think
> this is probably acceptable to add. (Normally "status" means exit
> status; I have no idea what "eval" means. I would call them "status"
> and "error" rather than "eval" and "status", respectively.)
I'm not sure what _eval_ means either, but that's the argument used by
FreeBSD;-) "status" and "error" (or "code" or "errcode") definitely works.
>
>>>> The FreeBSD sed also needs a couple of macros that are currently not
>>>> defined, specifically ALLPERMS, DEFFILEMODE and REG_STARTEND. Any
>>>> reason not to add them when _BSD_SOURCE is defined?
>>> Where would these be defined? If they're in a junk header I'm not so
>>> opposed to them, but musl aims to have a cleaner namespace than legacy
>>> systems, whereas at least ALLPERMS and DEFFILEMODE are ugly and don't
>>> fit any sort of namespace pattern.
>> I agree they are ugly, but unfortunately they're also essential for
>> most bsd utilities to build. As a hopefully non-intrusive solution,
>> I wanted to suggest a new sys/bsd.h header, to be conditionally
>> included from within alltypes.h when _BSD_SOURCE is defined.
> That's definitely not appropriate; I'm not sure why alltypes seems
> like a natural place to put it. FYI _BSD_SOURCE is the default.
>
> Anyway, these programs should just be fixed at the source level, but
> they can also easily be fixed by CFLAGS:
>
> -DALLPERMS=07777 -DDEFFILEMODE=0666
Yes, but there are also some bsd-specific macros that cannot be defined
from the command line since they take arguments. If not provided by
musl, a separate header would still need to exist and be included via
--include=bsd.h
With _BSD_SOURCE being the default, a useful compromise might be to 1)
provide bsd.h for compatibility with bsd utilities; and 2) have users
manually include that file via --include=<sys/bsd.h>
Does that work?
>
>>> As for REG_STARTEND, is it an alias for some regex flag that already
>>> exists, or a feature that would need to be implemented?
>> Apparently REG_STARTEND is not a simple #define as the other macros,
>> but rather a flag that is accounted for in _regcomp_. The feature
>> itself is not too complicated, though, and seems to add only a few
>> lines of code to the FreeBSD implementation of regex.
> Being trivial in one implementation doesn't necessarily make it
> trivial in another. The start part is trivial, but the end part is
> not.
>
> Rich
>
>
I see. Do you see any chance of looking into this for possible
inclusion in musl? For most scenarios a no-op (defined as zero)
REG_STARTEND should work, but that's far from ideal.
zg
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.