Fix build on ARM
[platform/upstream/make.git] / makeint.h
1 /* Miscellaneous global declarations and portability cruft for GNU Make.
2 Copyright (C) 1988-2013 Free Software Foundation, Inc.
3 This file is part of GNU Make.
4
5 GNU Make is free software; you can redistribute it and/or modify it under the
6 terms of the GNU General Public License as published by the Free Software
7 Foundation; either version 3 of the License, or (at your option) any later
8 version.
9
10 GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
11 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12 A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License along with
15 this program.  If not, see <http://www.gnu.org/licenses/>.  */
16
17 /* We use <config.h> instead of "config.h" so that a compilation
18    using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h
19    (which it would do because makeint.h was found in $srcdir).  */
20 #include <config.h>
21 #undef  HAVE_CONFIG_H
22 #define HAVE_CONFIG_H 1
23
24 /* Specify we want GNU source code.  This must be defined before any
25    system headers are included.  */
26
27 #define _GNU_SOURCE 1
28
29 /* AIX requires this to be the first thing in the file.  */
30 #if HAVE_ALLOCA_H
31 # include <alloca.h>
32 #else
33 # ifdef _AIX
34  #pragma alloca
35 # else
36 #  if !defined(__GNUC__) && !defined(WINDOWS32)
37 #   ifndef alloca /* predefined by HP cc +Olibcalls */
38 char *alloca ();
39 #   endif
40 #  endif
41 # endif
42 #endif
43
44 /* Disable assert() unless we're a maintainer.
45    Some asserts are compute-intensive.  */
46 #ifndef MAKE_MAINTAINER_MODE
47 # define NDEBUG 1
48 #endif
49
50 /* Include the externally-visible content.
51    Be sure to use the local one, and not one installed on the system.
52    Define GMK_BUILDING_MAKE for proper selection of dllexport/dllimport
53    declarations for MS-Windows.  */
54 #ifdef WINDOWS32
55 # define GMK_BUILDING_MAKE
56 #endif
57 #include "gnumake.h"
58
59 #ifdef  CRAY
60 /* This must happen before #include <signal.h> so
61    that the declaration therein is changed.  */
62 # define signal bsdsignal
63 #endif
64
65 /* If we're compiling for the dmalloc debugger, turn off string inlining.  */
66 #if defined(HAVE_DMALLOC_H) && defined(__GNUC__)
67 # define __NO_STRING_INLINES
68 #endif
69
70 #include <sys/types.h>
71 #include <sys/stat.h>
72 #include <signal.h>
73 #include <stdio.h>
74 #include <ctype.h>
75
76 #ifdef HAVE_SYS_TIMEB_H
77 /* SCO 3.2 "devsys 4.2" has a prototype for 'ftime' in <time.h> that bombs
78    unless <sys/timeb.h> has been included first.  */
79 # include <sys/timeb.h>
80 #endif
81 #if TIME_WITH_SYS_TIME
82 # include <sys/time.h>
83 # include <time.h>
84 #else
85 # if HAVE_SYS_TIME_H
86 #  include <sys/time.h>
87 # else
88 #  include <time.h>
89 # endif
90 #endif
91
92 #include <errno.h>
93
94 #ifndef errno
95 extern int errno;
96 #endif
97
98 #ifndef isblank
99 # define isblank(c)     ((c) == ' ' || (c) == '\t')
100 #endif
101
102 #ifdef  HAVE_UNISTD_H
103 # include <unistd.h>
104 /* Ultrix's unistd.h always defines _POSIX_VERSION, but you only get
105    POSIX.1 behavior with 'cc -YPOSIX', which predefines POSIX itself!  */
106 # if defined (_POSIX_VERSION) && !defined (ultrix) && !defined (VMS)
107 #  define POSIX 1
108 # endif
109 #endif
110
111 /* Some systems define _POSIX_VERSION but are not really POSIX.1.  */
112 #if (defined (butterfly) || defined (__arm) || (defined (__mips) && defined (_SYSTYPE_SVR3)) || (defined (sequent) && defined (i386)))
113 # undef POSIX
114 #endif
115
116 #if !defined (POSIX) && defined (_AIX) && defined (_POSIX_SOURCE)
117 # define POSIX 1
118 #endif
119
120 #ifndef RETSIGTYPE
121 # define RETSIGTYPE     void
122 #endif
123
124 #ifndef sigmask
125 # define sigmask(sig)   (1 << ((sig) - 1))
126 #endif
127
128 #ifndef HAVE_SA_RESTART
129 # define SA_RESTART 0
130 #endif
131
132 #ifdef  HAVE_LIMITS_H
133 # include <limits.h>
134 #endif
135 #ifdef  HAVE_SYS_PARAM_H
136 # include <sys/param.h>
137 #endif
138
139 #ifndef PATH_MAX
140 # ifndef POSIX
141 #  define PATH_MAX      MAXPATHLEN
142 # endif
143 #endif
144 #ifndef MAXPATHLEN
145 # define MAXPATHLEN 1024
146 #endif
147
148 #ifdef  PATH_MAX
149 # define GET_PATH_MAX   PATH_MAX
150 # define PATH_VAR(var)  char var[PATH_MAX]
151 #else
152 # define NEED_GET_PATH_MAX 1
153 # define GET_PATH_MAX   (get_path_max ())
154 # define PATH_VAR(var)  char *var = alloca (GET_PATH_MAX)
155 unsigned int get_path_max (void);
156 #endif
157
158 #ifndef CHAR_BIT
159 # define CHAR_BIT 8
160 #endif
161
162 #ifndef USHRT_MAX
163 # define USHRT_MAX 65535
164 #endif
165
166 /* Nonzero if the integer type T is signed.
167    Use <= to avoid GCC warnings about always-false expressions.  */
168 #define INTEGER_TYPE_SIGNED(t) ((t) -1 <= 0)
169
170 /* The minimum and maximum values for the integer type T.
171    Use ~ (t) 0, not -1, for portability to 1's complement hosts.  */
172 #define INTEGER_TYPE_MINIMUM(t) \
173   (! INTEGER_TYPE_SIGNED (t) ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))
174 #define INTEGER_TYPE_MAXIMUM(t) (~ (t) 0 - INTEGER_TYPE_MINIMUM (t))
175
176 /* The maximum number of digits needed to represent the largest integer.  */
177 #define INTEGER_LENGTH sizeof("18446744073709551616")
178
179 #ifndef CHAR_MAX
180 # define CHAR_MAX INTEGER_TYPE_MAXIMUM (char)
181 #endif
182
183 #ifdef STAT_MACROS_BROKEN
184 # ifdef S_ISREG
185 #  undef S_ISREG
186 # endif
187 # ifdef S_ISDIR
188 #  undef S_ISDIR
189 # endif
190 #endif  /* STAT_MACROS_BROKEN.  */
191
192 #ifndef S_ISREG
193 # define S_ISREG(mode)  (((mode) & S_IFMT) == S_IFREG)
194 #endif
195 #ifndef S_ISDIR
196 # define S_ISDIR(mode)  (((mode) & S_IFMT) == S_IFDIR)
197 #endif
198
199 #ifdef VMS
200 # include <fcntl.h>
201 # include <types.h>
202 # include <unixlib.h>
203 # include <unixio.h>
204 # include <perror.h>
205 /* Needed to use alloca on VMS.  */
206 # include <builtins.h>
207 #endif
208
209 #ifndef __attribute__
210 /* This feature is available in gcc versions 2.5 and later.  */
211 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
212 #  define __attribute__(x)
213 # endif
214 /* The __-protected variants of 'format' and 'printf' attributes
215    are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
216 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
217 #  define __format__ format
218 #  define __printf__ printf
219 # endif
220 #endif
221 #define UNUSED  __attribute__ ((unused))
222
223 #if defined (STDC_HEADERS) || defined (__GNU_LIBRARY__)
224 # include <stdlib.h>
225 # include <string.h>
226 # define ANSI_STRING 1
227 #else   /* No standard headers.  */
228 # ifdef HAVE_STRING_H
229 #  include <string.h>
230 #  define ANSI_STRING 1
231 # else
232 #  include <strings.h>
233 # endif
234 # ifdef HAVE_MEMORY_H
235 #  include <memory.h>
236 # endif
237 # ifdef HAVE_STDLIB_H
238 #  include <stdlib.h>
239 # else
240 void *malloc (int);
241 void *realloc (void *, int);
242 void free (void *);
243
244 void abort (void) __attribute__ ((noreturn));
245 void exit (int) __attribute__ ((noreturn));
246 # endif /* HAVE_STDLIB_H.  */
247
248 #endif /* Standard headers.  */
249
250 /* These should be in stdlib.h.  Make sure we have them.  */
251 #ifndef EXIT_SUCCESS
252 # define EXIT_SUCCESS 0
253 #endif
254 #ifndef EXIT_FAILURE
255 # define EXIT_FAILURE 1
256 #endif
257
258 #ifndef  ANSI_STRING
259
260 /* SCO Xenix has a buggy macro definition in <string.h>.  */
261 #undef  strerror
262 #if !defined(__DECC)
263 char *strerror (int errnum);
264 #endif
265
266 #endif  /* !ANSI_STRING.  */
267 #undef  ANSI_STRING
268
269 #if HAVE_INTTYPES_H
270 # include <inttypes.h>
271 #endif
272 #if HAVE_STDINT_H
273 # include <stdint.h>
274 #endif
275 #define FILE_TIMESTAMP uintmax_t
276
277 #if !defined(HAVE_STRSIGNAL)
278 char *strsignal (int signum);
279 #endif
280
281 /* ISDIGIT offers the following features:
282    - Its arg may be any int or unsigned int; it need not be an unsigned char.
283    - It's guaranteed to evaluate its argument exactly once.
284       NOTE!  Make relies on this behavior, don't change it!
285    - It's typically faster.
286    POSIX 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that
287    only '0' through '9' are digits.  Prefer ISDIGIT to isdigit() unless
288    it's important to use the locale's definition of 'digit' even when the
289    host does not conform to POSIX.  */
290 #define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
291
292 /* Test if two strings are equal. Is this worthwhile?  Should be profiled.  */
293 #define streq(a, b) \
294    ((a) == (b) || \
295     (*(a) == *(b) && (*(a) == '\0' || !strcmp ((a) + 1, (b) + 1))))
296
297 /* Test if two strings are equal, but match case-insensitively on systems
298    which have case-insensitive filesystems.  Should only be used for
299    filenames!  */
300 #ifdef HAVE_CASE_INSENSITIVE_FS
301 # define patheq(a, b) \
302     ((a) == (b) \
303      || (tolower((unsigned char)*(a)) == tolower((unsigned char)*(b)) \
304          && (*(a) == '\0' || !strcasecmp ((a) + 1, (b) + 1))))
305 #else
306 # define patheq(a, b) streq(a, b)
307 #endif
308
309 #define strneq(a, b, l) (strncmp ((a), (b), (l)) == 0)
310
311 #if defined(__GNUC__) || defined(ENUM_BITFIELDS)
312 # define ENUM_BITFIELD(bits)    :bits
313 #else
314 # define ENUM_BITFIELD(bits)
315 #endif
316
317 /* Handle gettext and locales.  */
318
319 #if HAVE_LOCALE_H
320 # include <locale.h>
321 #else
322 # define setlocale(category, locale)
323 #endif
324
325 #include <gettext.h>
326
327 #define _(msgid)            gettext (msgid)
328 #define N_(msgid)           gettext_noop (msgid)
329 #define S_(msg1,msg2,num)   ngettext (msg1,msg2,num)
330
331 /* Handle other OSs.
332    To overcome an issue parsing paths in a DOS/Windows environment when
333    built in a unix based environment, override the PATH_SEPARATOR_CHAR
334    definition unless being built for Cygwin. */
335 #if defined(HAVE_DOS_PATHS) && !defined(__CYGWIN__)
336 # undef PATH_SEPARATOR_CHAR
337 # define PATH_SEPARATOR_CHAR ';'
338 #elif !defined(PATH_SEPARATOR_CHAR)
339 # if defined (VMS)
340 #  define PATH_SEPARATOR_CHAR ','
341 # else
342 #  define PATH_SEPARATOR_CHAR ':'
343 # endif
344 #endif
345
346 /* This is needed for getcwd() and chdir(), on some W32 systems.  */
347 #if defined(HAVE_DIRECT_H)
348 # include <direct.h>
349 #endif
350
351 #ifdef WINDOWS32
352 # include <fcntl.h>
353 # include <malloc.h>
354 # define pipe(_p)        _pipe((_p), 512, O_BINARY)
355 # define kill(_pid,_sig) w32_kill((_pid),(_sig))
356 /* MSVC doesn't have ftruncate.  */
357 # ifdef _MSC_VER
358 #  define ftruncate(_fd,_len) _chsize(_fd,_len)
359 # endif
360 /* MinGW64 doesn't have _S_ISDIR.  */
361 # ifndef _S_ISDIR
362 #  define _S_ISDIR(m)  S_ISDIR(m)
363 # endif
364
365 void sync_Path_environment (void);
366 int w32_kill (pid_t pid, int sig);
367 int find_and_set_default_shell (const char *token);
368
369 /* indicates whether or not we have Bourne shell */
370 extern int no_default_sh_exe;
371
372 /* is default_shell unixy? */
373 extern int unixy_shell;
374
375 /* We don't have a preferred fixed value for LOCALEDIR.  */
376 # ifndef LOCALEDIR
377 #  define LOCALEDIR NULL
378 # endif
379
380 /* Include only the minimal stuff from windows.h.   */
381 #define WIN32_LEAN_AND_MEAN
382 #endif  /* WINDOWS32 */
383
384 #define ANY_SET(_v,_m)  (((_v)&(_m)) != 0)
385 #define NONE_SET(_v,_m) (! ANY_SET ((_v),(_m)))
386
387 #define MAP_NUL         0x0001
388 #define MAP_BLANK       0x0002
389 #define MAP_SPACE       0x0004
390 #define MAP_COMMENT     0x0008
391 #define MAP_SEMI        0x0010
392 #define MAP_EQUALS      0x0020
393 #define MAP_COLON       0x0040
394 #define MAP_PERCENT     0x0080
395 #define MAP_PIPE        0x0100
396 #define MAP_DOT         0x0200
397 #define MAP_COMMA       0x0400
398
399 /* These are the valid characters for a user-defined function.  */
400 #define MAP_USERFUNC    0x2000
401 /* This means not only a '$', but skip the variable reference.  */
402 #define MAP_VARIABLE    0x4000
403 /* The set of characters which are path separators is OS-specific.  */
404 #define MAP_PATHSEP     0x8000
405
406 #ifdef VMS
407 # define MAP_VMSCOMMA   MAP_COMMA
408 #else
409 # define MAP_VMSCOMMA   0x0000
410 #endif
411
412 #define STOP_SET(_v,_m) ANY_SET (stopchar_map[(int)(_v)],(_m))
413
414 #if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT)
415 # define SET_STACK_SIZE
416 #endif
417 #ifdef SET_STACK_SIZE
418 # include <sys/resource.h>
419 extern struct rlimit stack_limit;
420 #endif
421
422 #define NILF ((gmk_floc *)0)
423
424 #define CSTRLEN(_s) (sizeof (_s)-1)
425 #define STRING_SIZE_TUPLE(_s) (_s), CSTRLEN(_s)
426
427 \f
428 const char *concat (unsigned int, ...);
429 void message (int prefix, const char *fmt, ...)
430               __attribute__ ((__format__ (__printf__, 2, 3)));
431 void error (const gmk_floc *flocp, const char *fmt, ...)
432             __attribute__ ((__format__ (__printf__, 2, 3)));
433 void fatal (const gmk_floc *flocp, const char *fmt, ...)
434                    __attribute__ ((noreturn, __format__ (__printf__, 2, 3)));
435
436 void die (int) __attribute__ ((noreturn));
437 void pfatal_with_name (const char *) __attribute__ ((noreturn));
438 void perror_with_name (const char *, const char *);
439 #define xstrlen(_s) ((_s)==NULL ? 0 : strlen (_s))
440 void *xmalloc (unsigned int);
441 void *xcalloc (unsigned int);
442 void *xrealloc (void *, unsigned int);
443 char *xstrdup (const char *);
444 char *xstrndup (const char *, unsigned int);
445 char *find_next_token (const char **, unsigned int *);
446 char *next_token (const char *);
447 char *end_of_token (const char *);
448 void collapse_continuations (char *);
449 char *lindex (const char *, const char *, int);
450 int alpha_compare (const void *, const void *);
451 void print_spaces (unsigned int);
452 char *find_percent (char *);
453 const char *find_percent_cached (const char **);
454
455 #ifndef NO_ARCHIVES
456 int ar_name (const char *);
457 void ar_parse_name (const char *, char **, char **);
458 int ar_touch (const char *);
459 time_t ar_member_date (const char *);
460
461 typedef long int (*ar_member_func_t) (int desc, const char *mem, int truncated,
462                                       long int hdrpos, long int datapos,
463                                       long int size, long int date, int uid,
464                                       int gid, int mode, const void *arg);
465
466 long int ar_scan (const char *archive, ar_member_func_t function, const void *arg);
467 int ar_name_equal (const char *name, const char *mem, int truncated);
468 #ifndef VMS
469 int ar_member_touch (const char *arname, const char *memname);
470 #endif
471 #endif
472
473 int dir_file_exists_p (const char *, const char *);
474 int file_exists_p (const char *);
475 int file_impossible_p (const char *);
476 void file_impossible (const char *);
477 const char *dir_name (const char *);
478 void hash_init_directories (void);
479
480 void define_default_variables (void);
481 void undefine_default_variables (void);
482 void set_default_suffixes (void);
483 void install_default_suffix_rules (void);
484 void install_default_implicit_rules (void);
485
486 void build_vpath_lists (void);
487 void construct_vpath_list (char *pattern, char *dirpath);
488 const char *vpath_search (const char *file, FILE_TIMESTAMP *mtime_ptr,
489                           unsigned int* vpath_index, unsigned int* path_index);
490 int gpath_search (const char *file, unsigned int len);
491
492 void construct_include_path (const char **arg_dirs);
493
494 void user_access (void);
495 void make_access (void);
496 void child_access (void);
497
498 char *strip_whitespace (const char **begpp, const char **endpp);
499
500 /* String caching  */
501 void strcache_init (void);
502 void strcache_print_stats (const char *prefix);
503 int strcache_iscached (const char *str);
504 const char *strcache_add (const char *str);
505 const char *strcache_add_len (const char *str, unsigned int len);
506 int strcache_setbufsize (unsigned int size);
507
508 /* Guile support  */
509 #ifdef HAVE_GUILE
510 int guile_gmake_setup (const gmk_floc *flocp);
511 #endif
512
513 /* Loadable object support.  Sets to the strcached name of the loaded file.  */
514 typedef int (*load_func_t)(const gmk_floc *flocp);
515 int load_file (const gmk_floc *flocp, const char **filename, int noerror);
516 void unload_file (const char *name);
517
518 /* We omit these declarations on non-POSIX systems which define _POSIX_VERSION,
519    because such systems often declare them in header files anyway.  */
520
521 #if !defined (__GNU_LIBRARY__) && !defined (POSIX) && !defined (_POSIX_VERSION) && !defined(WINDOWS32)
522
523 long int atol ();
524 # ifndef VMS
525 long int lseek ();
526 # endif
527
528 #endif  /* Not GNU C library or POSIX.  */
529
530 #ifdef  HAVE_GETCWD
531 # if !defined(VMS) && !defined(__DECC)
532 char *getcwd ();
533 # endif
534 #else
535 char *getwd ();
536 # define getcwd(buf, len)       getwd (buf)
537 #endif
538
539 #if !HAVE_STRCASECMP
540 # if HAVE_STRICMP
541 #  define strcasecmp stricmp
542 # elif HAVE_STRCMPI
543 #  define strcasecmp strcmpi
544 # else
545 /* Create our own, in misc.c */
546 int strcasecmp (const char *s1, const char *s2);
547 # endif
548 #endif
549
550 #if !HAVE_STRNCASECMP
551 # if HAVE_STRNICMP
552 #  define strncasecmp strnicmp
553 # elif HAVE_STRNCMPI
554 #  define strncasecmp strncmpi
555 # else
556 /* Create our own, in misc.c */
557 int strncasecmp (const char *s1, const char *s2, int n);
558 # endif
559 #endif
560
561 #define OUTPUT_SYNC_NONE    0
562 #define OUTPUT_SYNC_LINE    1
563 #define OUTPUT_SYNC_TARGET  2
564 #define OUTPUT_SYNC_RECURSE 3
565
566 extern const gmk_floc *reading_file;
567 extern const gmk_floc **expanding_var;
568
569 extern char **environ;
570
571 extern unsigned short stopchar_map[];
572
573 extern int just_print_flag, silent_flag, ignore_errors_flag, keep_going_flag;
574 extern int print_data_base_flag, question_flag, touch_flag, always_make_flag;
575 extern int env_overrides, no_builtin_rules_flag, no_builtin_variables_flag;
576 extern int print_version_flag, print_directory_flag, check_symlink_flag;
577 extern int warn_undefined_variables_flag, trace_flag, posix_pedantic;
578 extern int not_parallel, second_expansion, clock_skew_detected;
579 extern int rebuilding_makefiles, one_shell, output_sync, verify_flag;
580
581 /* can we run commands via 'sh -c xxx' or must we use batch files? */
582 extern int batch_mode_shell;
583
584 /* Resetting the command script introduction prefix character.  */
585 #define RECIPEPREFIX_NAME          ".RECIPEPREFIX"
586 #define RECIPEPREFIX_DEFAULT       '\t'
587 extern char cmd_prefix;
588
589 extern unsigned int job_slots;
590 extern int job_fds[2];
591 extern int job_rfd;
592 #ifndef NO_FLOAT
593 extern double max_load_average;
594 #else
595 extern int max_load_average;
596 #endif
597
598 extern char *program;
599 extern char *starting_directory;
600 extern unsigned int makelevel;
601 extern char *version_string, *remote_description, *make_host;
602
603 extern unsigned int commands_started;
604
605 extern int handling_fatal_signal;
606
607
608 #ifndef MIN
609 #define MIN(_a,_b) ((_a)<(_b)?(_a):(_b))
610 #endif
611 #ifndef MAX
612 #define MAX(_a,_b) ((_a)>(_b)?(_a):(_b))
613 #endif
614
615 #ifdef VMS
616 #  define MAKE_SUCCESS 1
617 #  define MAKE_TROUBLE 2
618 #  define MAKE_FAILURE 3
619 #else
620 #  define MAKE_SUCCESS 0
621 #  define MAKE_TROUBLE 1
622 #  define MAKE_FAILURE 2
623 #endif
624
625 /* Set up heap debugging library dmalloc.  */
626
627 #ifdef HAVE_DMALLOC_H
628 #include <dmalloc.h>
629 #endif
630
631 #ifndef initialize_main
632 # ifdef __EMX__
633 #  define initialize_main(pargc, pargv) \
634                           { _wildcard(pargc, pargv); _response(pargc, pargv); }
635 # else
636 #  define initialize_main(pargc, pargv)
637 # endif
638 #endif
639
640 #ifdef __EMX__
641 # if !defined chdir
642 #  define chdir _chdir2
643 # endif
644 # if !defined getcwd
645 #  define getcwd _getcwd2
646 # endif
647
648 /* NO_CHDIR2 causes make not to use _chdir2() and _getcwd2() instead of
649    chdir() and getcwd(). This avoids some error messages for the
650    make testsuite but restricts the drive letter support. */
651 # ifdef NO_CHDIR2
652 #  warning NO_CHDIR2: usage of drive letters restricted
653 #  undef chdir
654 #  undef getcwd
655 # endif
656 #endif
657
658 #ifndef initialize_main
659 # define initialize_main(pargc, pargv)
660 #endif
661
662
663 /* Some systems (like Solaris, PTX, etc.) do not support the SA_RESTART flag
664    properly according to POSIX.  So, we try to wrap common system calls with
665    checks for EINTR.  Note that there are still plenty of system calls that
666    can fail with EINTR but this, reportedly, gets the vast majority of
667    failure cases.  If you still experience failures you'll need to either get
668    a system where SA_RESTART works, or you need to avoid -j.  */
669
670 #define EINTRLOOP(_v,_c)   while (((_v)=_c)==-1 && errno==EINTR)
671
672 /* While system calls that return integers are pretty consistent about
673    returning -1 on failure and setting errno in that case, functions that
674    return pointers are not always so well behaved.  Sometimes they return
675    NULL for expected behavior: one good example is readdir() which returns
676    NULL at the end of the directory--and _doesn't_ reset errno.  So, we have
677    to do it ourselves here.  */
678
679 #define ENULLLOOP(_v,_c)   do { errno = 0; (_v) = _c; } \
680                            while((_v)==0 && errno==EINTR)