Re: [PATCH setxkbmap; 2nd try] Consistent handling of memory allocation errors.
On 02/25/11 11:43 AM, Van de Bugger wrote: Macro `OOM' (Out of memory) introduced for checking and reporting memory allocation errors. The same macro is used in all the cases. One check was missed in original source; fixed. Signed-off-by: Van de Bugger van.de.bug...@gmail.com --- setxkbmap.c | 27 +-- 1 files changed, 9 insertions(+), 18 deletions(-) diff --git a/setxkbmap.c b/setxkbmap.c index f7dbade..7aa56f7 100644 --- a/setxkbmap.c +++ b/setxkbmap.c @@ -170,6 +170,8 @@ static int deviceSpec = XkbUseCoreKbd; #define ERR2(s,a,b) fprintf(stderr,s,a,b) #define ERR3(s,a,b,c) fprintf(stderr,s,a,b,c) +#define OOM(ptr){ if ((ptr) == NULL) { ERR(Out of memory.\n); abort(); }; } There's an extra ; between the last two }'s there. Also, you probably want to stick with the original exit(-1), not force a core dump with abort(); The idiom normally used in the X code (and much C code in fact) for a compound statement in a macro like this you want to make look like a function call is: #define OOM(ptr) \ do { if ((ptr) == NULL) { ERR(Out of memory.\n); abort(); } } while (0) The do { ... } while(0) allows OOM(); to end with a ; without any compiler warnings about empty statements or without causing any issues in breaking other blocks, like if/else pairs, that you may wind up adjacent to. For more complete explanations, see: http://kernelnewbies.org/FAQ/DoWhile0 http://www.rtems.com/ml/rtems-users/2001/august/msg00086.html http://stackoverflow.com/questions/923822/whats-the-use-of-do-while0-when-we-define-a-macro -- -Alan Coopersmith-alan.coopersm...@oracle.com Oracle Solaris Platform Engineering: X Window System ___ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
Re: [PATCH setxkbmap; 2nd try] Consistent handling of memory allocation errors.
Got it. See the next version. On Fri, 2011-02-25 at 14:50 -0800, Alan Coopersmith wrote: On 02/25/11 11:43 AM, Van de Bugger wrote: Macro `OOM' (Out of memory) introduced for checking and reporting memory allocation errors. The same macro is used in all the cases. One check was missed in original source; fixed. Signed-off-by: Van de Bugger van.de.bug...@gmail.com --- setxkbmap.c | 27 +-- 1 files changed, 9 insertions(+), 18 deletions(-) diff --git a/setxkbmap.c b/setxkbmap.c index f7dbade..7aa56f7 100644 --- a/setxkbmap.c +++ b/setxkbmap.c @@ -170,6 +170,8 @@ static int deviceSpec = XkbUseCoreKbd; #define ERR2(s,a,b) fprintf(stderr,s,a,b) #define ERR3(s,a,b,c) fprintf(stderr,s,a,b,c) +#define OOM(ptr){ if ((ptr) == NULL) { ERR(Out of memory.\n); abort(); }; } There's an extra ; between the last two }'s there. Also, you probably want to stick with the original exit(-1), not force a core dump with abort(); The idiom normally used in the X code (and much C code in fact) for a compound statement in a macro like this you want to make look like a function call is: #define OOM(ptr) \ do { if ((ptr) == NULL) { ERR(Out of memory.\n); abort(); } } while (0) The do { ... } while(0) allows OOM(); to end with a ; without any compiler warnings about empty statements or without causing any issues in breaking other blocks, like if/else pairs, that you may wind up adjacent to. For more complete explanations, see: http://kernelnewbies.org/FAQ/DoWhile0 http://www.rtems.com/ml/rtems-users/2001/august/msg00086.html http://stackoverflow.com/questions/923822/whats-the-use-of-do-while0-when-we-define-a-macro ___ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel