X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/2e08dfb2b133af0fbcb4346f8d096ca68454ca54..HEAD:/util.h diff --git a/util.h b/util.h index 3310b11..d9b6161 100644 --- a/util.h +++ b/util.h @@ -8,38 +8,31 @@ * */ +#ifndef PERL_UTIL_H_ +#define PERL_UTIL_H_ + + #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(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 @@ -49,17 +42,22 @@ This is a synonym for S> This is a synonym for S> +=for apidoc ibcmp_utf8 + +This is a synonym for S> + =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. */ -#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 @@ -85,6 +83,12 @@ typedef struct PERL_DRAND48_T perl_drand48_t; #define Perl_drand48_init(seed) (Perl_drand48_init_r(&PL_random_state, (seed))) #define Perl_drand48() (Perl_drand48_r(&PL_random_state)) +#ifdef PERL_CORE +/* uses a different source of randomness to avoid interfering with the results + * of rand() */ +#define Perl_internal_drand48() (Perl_drand48_r(&PL_internal_random_state)) +#endif + #ifdef USE_C_BACKTRACE typedef struct { @@ -180,7 +184,7 @@ typedef struct { /* uses var file to set default filename for newXS_deffile to use for CvFILE */ #define HSf_SETXSUBFN 0x00000020 #define HSf_POPMARK 0x00000040 /* popmark mode or you must supply ax and items */ -#define HSf_IMP_CXT 0x00000080 /* ABI, threaded/PERL_IMPLICIT_CONTEXT, pTHX_ present */ +#define HSf_IMP_CXT 0x00000080 /* ABI, threaded, MULTIPLICITY, pTHX_ present */ #define HSm_INTRPSIZE 0xFFFF0000 /* ABI, interp struct size */ /* A mask of bits in the key which must always match between a XS mod and interp. Also if all ABI bits in a key are true, skip all ABI checks, it is very @@ -194,7 +198,7 @@ typedef struct { /* if in the future "" and NULL must be separated, XSVERLEN would be 0 means arg not present, 1 is empty string/null byte */ /* (((key) & 0x0000FF00) >> 8) is less efficient on Visual C */ -#define HS_GETXSVERLEN(key) ((key) >> 8 & 0xFF) +#define HS_GETXSVERLEN(key) ((U8) ((key) >> 8)) #define HS_GETAPIVERLEN(key) ((key) & HSm_APIVERLEN) /* internal to util.h macro to create a packed handshake key, all args must be constants */ @@ -217,7 +221,7 @@ means arg not present, 1 is empty string/null byte */ not public API. This more friendly version already collected all ABI info */ /* U32 return = (bool setxsubfn, bool popmark, "litteral_string_api_ver", "litteral_string_xs_ver") */ -#ifdef PERL_IMPLICIT_CONTEXT +#ifdef MULTIPLICITY # define HS_KEY(setxsubfn, popmark, apiver, xsver) \ HS_KEYp(sizeof(PerlInterpreter), TRUE, setxsubfn, popmark, \ sizeof("" apiver "")-1, sizeof("" xsver "")-1) @@ -230,5 +234,52 @@ means arg not present, 1 is empty string/null byte */ #endif /* +=for apidoc instr +Same as L, which finds and returns a pointer to the first occurrence +of the NUL-terminated substring C in the NUL-terminated string C, +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) \ + (__ASSERT_(bigend >= big) \ + __ASSERT_(lend >= little) \ + (char *) memmem((big), (bigend) - (big), \ + (little), (lend) - (little))) +#else +# define ninstr(a,b,c,d) Perl_ninstr(a,b,c,d) +#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 + +#endif /* PERL_UTIL_H_ */ + +/* * ex: set ts=8 sts=4 sw=4 et: */