[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Bug in +[NSError _lastError] ?
From: |
David Chisnall |
Subject: |
Re: Bug in +[NSError _lastError] ? |
Date: |
Wed, 29 Feb 2012 10:38:55 +0000 |
Note that this will break on any non-GNU platform, where the standards are
actually implemented even if _GNU_SOURCE is defined. The correct test is
probably #if __GNU__ or __glibc__. I think in Étoilé we have a
__drepper_can_not_read_standards__ macro for cases like this.
David
On 29 Feb 2012, at 00:56, Jens Alfke wrote:
>
> On Feb 28, 2012, at 4:43 PM, I wrote:
>
>> I’m not sure what the best way is to fix this. It looks like one could
>> either add
>> #undef _GNU_SOURCE
>> near the top of the file where it defines _XOPEN_SOURCE; or one could use an
>> #if around the call to strerror_r to call either version depending on which
>> one is available.
>>
>> For now I’m going to try the first option since it’s simpler.
>
> That didn’t work, because “common.h” both defines _GNU_SOURCE and ends up
> including <string.h> so the GNU version of strerror_r is already declared. So
> I went with the second option, which was pretty easy.
>
> I’ll get around to formally submitting a patch once I’ve got more stuff
> working, but here’s a diff showing what I did:
>
> Index: Source/Additions/NSError+GNUstepBase.m
> ===================================================================
> --- Source/Additions/NSError+GNUstepBase.m (revision 34837)
> +++ Source/Additions/NSError+GNUstepBase.m (working copy)
> @@ -130,12 +130,17 @@
>
> /* FIXME ... not all are POSIX, should we use NSMachErrorDomain for some? */
> domain = NSPOSIXErrorDomain;
> +#if _GNU_SOURCE
> + message = [NSString stringWithCString: strerror_r(code, buf, BUFSIZ)
> + encoding: [NSString defaultCStringEncoding]];
> +#else
> if (strerror_r(code, buf, BUFSIZ) < 0)
> {
> snprintf(buf, sizeof(buf), "%ld", code);
> }
> message = [NSString stringWithCString: buf
> encoding: [NSString defaultCStringEncoding]];
> +#endif
> /* FIXME ... can we do better localisation? */
> info = [NSMutableDictionary dictionaryWithObjectsAndKeys:
> message, NSLocalizedDescriptionKey,
>
>
>
> _______________________________________________
> Discuss-gnustep mailing list
> Discuss-gnustep@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnustep
-- Send from my Jacquard Loom