This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
POSIX: Prefer system's NAN/INFINITY for POSIX::NAN and POSIX::INFINITY.
[perl5.git] / util.h
diff --git a/util.h b/util.h
index 0b6b59a..b2e0b77 100644 (file)
--- a/util.h
+++ b/util.h
 
 #ifdef VMS
 #  define PERL_FILE_IS_ABSOLUTE(f) \
 
 #ifdef VMS
 #  define PERL_FILE_IS_ABSOLUTE(f) \
-       (*(f) == '/'                                                    \
-        || (strchr(f,':')                                              \
-            || ((*(f) == '[' || *(f) == '<')                           \
-                && (isWORDCHAR((f)[1]) || strchr("$-_]>",(f)[1])))))
-
-#else          /* !VMS */
-#  if defined(WIN32) || defined(__CYGWIN__)
-#    define PERL_FILE_IS_ABSOLUTE(f) \
-       (*(f) == '/' || *(f) == '\\'            /* UNC/rooted path */   \
-        || ((f)[0] && (f)[1] == ':'))          /* drive name */
-#  else                /* !WIN32 */
-#  ifdef NETWARE
-#    define PERL_FILE_IS_ABSOLUTE(f) \
-       (((f)[0] && (f)[1] == ':')              /* drive name */        \
-        || ((f)[0] == '\\' && (f)[1] == '\\')  /* UNC path */  \
-        ||     ((f)[3] == ':'))                                /* volume name, currently only sys */
-#  else                /* !NETWARE */
-#    if defined(DOSISH) || defined(__SYMBIAN32__)
-#      define PERL_FILE_IS_ABSOLUTE(f) \
-       (*(f) == '/'                                                    \
-        || ((f)[0] && (f)[1] == ':'))          /* drive name */
-#    else      /* NEITHER DOSISH NOR SYMBIANISH */
-#      define PERL_FILE_IS_ABSOLUTE(f) (*(f) == '/')
-#    endif     /* DOSISH */
-#   endif      /* NETWARE */
-#  endif       /* WIN32 */
-#endif         /* VMS */
+        (*(f) == '/'                                                   \
+         || (strchr(f,':')                                             \
+             || ((*(f) == '[' || *(f) == '<')                          \
+                 && (isWORDCHAR((f)[1]) || memCHRs("$-_]>",(f)[1])))))
+
+#elif defined(WIN32) || defined(__CYGWIN__)
+#  define PERL_FILE_IS_ABSOLUTE(f) \
+        (*(f) == '/' || *(f) == '\\'           /* UNC/rooted path */   \
+         || ((f)[0] && (f)[1] == ':'))         /* drive name */
+#elif defined(NETWARE)
+#  define PERL_FILE_IS_ABSOLUTE(f) \
+        (((f)[0] && (f)[1] == ':')             /* drive name */        \
+         || ((f)[0] == '\\' && (f)[1] == '\\') /* UNC path */  \
+         ||    ((f)[3] == ':'))                                /* volume name, currently only sys */
+#elif defined(DOSISH)
+#  define PERL_FILE_IS_ABSOLUTE(f) \
+        (*(f) == '/'                                                   \
+         || ((f)[0] && (f)[1] == ':'))         /* drive name */
+#else  /* NOT DOSISH */
+#  define PERL_FILE_IS_ABSOLUTE(f)     (*(f) == '/')
+#endif
 
 /*
 
 /*
-=head1 Miscellaneous Functions
+=for apidoc_section $string
 
 =for apidoc ibcmp
 
 
 =for apidoc ibcmp
 
@@ -53,17 +47,22 @@ This is a synonym for S<C<(! foldEQ())>>
 
 This is a synonym for S<C<(! foldEQ_locale())>>
 
 
 This is a synonym for S<C<(! foldEQ_locale())>>
 
+=for apidoc ibcmp_utf8
+
+This is a synonym for S<C<(! foldEQ_utf8())>>
+
 =cut
 */
 #define ibcmp(s1, s2, len)         cBOOL(! foldEQ(s1, s2, len))
 #define ibcmp_locale(s1, s2, len)  cBOOL(! foldEQ_locale(s1, s2, len))
 =cut
 */
 #define ibcmp(s1, s2, len)         cBOOL(! foldEQ(s1, s2, len))
 #define ibcmp_locale(s1, s2, len)  cBOOL(! foldEQ_locale(s1, s2, len))
+#define ibcmp_utf8(s1, pe1, l1, u1, s2, pe2, l2, u2) \
+                    cBOOL(! foldEQ_utf8(s1, pe1, l1, u1, s2, pe2, l2, u2))
 
 /* outside the core, perl.h undefs HAS_QUAD if IV isn't 64-bit
    We can't swap this to HAS_QUAD, because the logic here affects the type of
    perl_drand48_t below, and that is visible outside of the core.  */
 
 /* outside the core, perl.h undefs HAS_QUAD if IV isn't 64-bit
    We can't swap this to HAS_QUAD, because the logic here affects the type of
    perl_drand48_t below, and that is visible outside of the core.  */
-#if defined(U64TYPE) && !defined(USING_MSVC6)
-/* use a faster implementation when quads are available,
- * but not with VC6 on Windows */
+#if defined(U64TYPE)
+/* use a faster implementation when quads are available */
 #    define PERL_DRAND48_QUAD
 #endif
 
 #    define PERL_DRAND48_QUAD
 #endif
 
@@ -239,14 +238,45 @@ means arg not present, 1 is empty string/null byte */
 #  define HS_CXT cv
 #endif
 
 #  define HS_CXT cv
 #endif
 
-#define instr(haystack, needle) strstr(haystack, needle)
+/*
+=for apidoc instr
+Same as L<strstr(3)>, which finds and returns a pointer to the first occurrence
+of the NUL-terminated substring C<little> in the NUL-terminated string C<big>,
+returning NULL if not found.  The terminating NUL bytes are not compared.
+
+=cut
+*/
+
+
+#define instr(haystack, needle) strstr((char *) haystack, (char *) needle)
 
 #ifdef HAS_MEMMEM
 #   define ninstr(big, bigend, little, lend)                                \
             ((char *) memmem((big), (bigend) - (big),                       \
                              (little), (lend) - (little)))
 
 #ifdef HAS_MEMMEM
 #   define ninstr(big, bigend, little, lend)                                \
             ((char *) memmem((big), (bigend) - (big),                       \
                              (little), (lend) - (little)))
+#else
+#   define ninstr(a,b,c,d) Perl_ninstr(a,b,c,d)
 #endif
 
 #endif
 
+#ifdef __Lynx__
+/* Missing proto on LynxOS */
+int mkstemp(char*);
+#endif
+
+#ifdef PERL_CORE
+#   if defined(VMS)
+/* only useful for calls to our mkostemp() emulation */
+#       define O_VMS_DELETEONCLOSE 0x40000000
+#       ifdef HAS_MKOSTEMP
+#           error 134221 will need a new solution for VMS
+#       endif
+#   else
+#       define O_VMS_DELETEONCLOSE 0
+#   endif
+#endif
+#if defined(HAS_MKOSTEMP) && defined(PERL_CORE)
+#   define Perl_my_mkostemp(templte, flags) mkostemp(templte, flags)
+#endif
 #if defined(HAS_MKSTEMP) && defined(PERL_CORE)
 #   define Perl_my_mkstemp(templte) mkstemp(templte)
 #endif
 #if defined(HAS_MKSTEMP) && defined(PERL_CORE)
 #   define Perl_my_mkstemp(templte) mkstemp(templte)
 #endif