In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/b8070b0795640313148acfe846c5f9320bec5745?hp=5f81fa4069cb15ccd77b1c4253c870df84c1788a>

- Log -----------------------------------------------------------------
commit b8070b0795640313148acfe846c5f9320bec5745
Author: Karl Williamson <[email protected]>
Date:   Tue May 10 22:17:22 2016 -0600

    Use memmem() if available on the platform for Perl_ninstr()
-----------------------------------------------------------------------

Summary of changes:
 embed.fnc |  5 +++++
 embed.h   |  4 +++-
 proto.h   | 19 ++++++++++++++-----
 util.c    |  8 ++++++++
 util.h    |  5 +++++
 5 files changed, 35 insertions(+), 6 deletions(-)

diff --git a/embed.fnc b/embed.fnc
index da809ef..bf3b8c5 100644
--- a/embed.fnc
+++ b/embed.fnc
@@ -1093,8 +1093,13 @@ Apd      |SV*    |vstringify     |NN SV *vs
 Apd    |int    |vcmp           |NN SV *lhv|NN SV *rhv
 : Used in pp_hot.c and pp_sys.c
 p      |PerlIO*|nextargv       |NN GV* gv|bool nomagicopen
+#ifdef HAS_MEMMEM
+AdnopP |char*  |ninstr         |NN const char* big|NN const char* bigend \
+                               |NN const char* little|NN const char* lend
+#else
 AdnpP  |char*  |ninstr         |NN const char* big|NN const char* bigend \
                                |NN const char* little|NN const char* lend
+#endif
 Apd    |void   |op_free        |NULLOK OP* arg
 Mp     |OP*    |op_unscope     |NULLOK OP* o
 #ifdef PERL_CORE
diff --git a/embed.h b/embed.h
index 6028a3d..6071c31 100644
--- a/embed.h
+++ b/embed.h
@@ -420,7 +420,6 @@
 #define new_numeric(a)         Perl_new_numeric(aTHX_ a)
 #define new_stackinfo(a,b)     Perl_new_stackinfo(aTHX_ a,b)
 #define new_version(a)         Perl_new_version(aTHX_ a)
-#define ninstr                 Perl_ninstr
 #define nothreadhook()         Perl_nothreadhook(aTHX)
 #define op_append_elem(a,b,c)  Perl_op_append_elem(aTHX_ a,b,c)
 #define op_append_list(a,b,c)  Perl_op_append_list(aTHX_ a,b,c)
@@ -760,6 +759,9 @@
 #define whichsig_pvn(a,b)      Perl_whichsig_pvn(aTHX_ a,b)
 #define whichsig_sv(a)         Perl_whichsig_sv(aTHX_ a)
 #define wrap_op_checker(a,b,c) Perl_wrap_op_checker(aTHX_ a,b,c)
+#if !(defined(HAS_MEMMEM))
+#define ninstr                 Perl_ninstr
+#endif
 #if !(defined(HAS_SIGACTION) && defined(SA_SIGINFO))
 #define csighandler            Perl_csighandler
 #endif
diff --git a/proto.h b/proto.h
index 3751f48..d16dd07 100644
--- a/proto.h
+++ b/proto.h
@@ -2319,11 +2319,6 @@ PERL_CALLCONV STRLEN *   
Perl_new_warnings_bitfield(pTHX_ STRLEN *buffer, const ch
 PERL_CALLCONV PerlIO*  Perl_nextargv(pTHX_ GV* gv, bool nomagicopen);
 #define PERL_ARGS_ASSERT_NEXTARGV      \
        assert(gv)
-PERL_CALLCONV char*    Perl_ninstr(const char* big, const char* bigend, const 
char* little, const char* lend)
-                       __attribute__pure__;
-#define PERL_ARGS_ASSERT_NINSTR        \
-       assert(big); assert(bigend); assert(little); assert(lend)
-
 PERL_CALLCONV_NO_RET void      Perl_noperl_die(const char* pat, ...)
                        __attribute__noreturn__
                        __attribute__format__(__printf__,1,2);
@@ -3690,6 +3685,13 @@ STATIC int       S_sv_2iuv_non_preserve(pTHX_ SV *const 
sv);
 #    endif
 #  endif
 #endif
+#if !(defined(HAS_MEMMEM))
+PERL_CALLCONV char*    Perl_ninstr(const char* big, const char* bigend, const 
char* little, const char* lend)
+                       __attribute__pure__;
+#define PERL_ARGS_ASSERT_NINSTR        \
+       assert(big); assert(bigend); assert(little); assert(lend)
+
+#endif
 #if !(defined(HAS_SIGACTION) && defined(SA_SIGINFO))
 PERL_CALLCONV Signal_t Perl_csighandler(int sig);
 PERL_CALLCONV Signal_t Perl_sighandler(int sig);
@@ -4037,6 +4039,13 @@ PERL_CALLCONV void       Perl_dump_sv_child(pTHX_ SV 
*sv);
 #define PERL_ARGS_ASSERT_DUMP_SV_CHILD \
        assert(sv)
 #endif
+#if defined(HAS_MEMMEM)
+PERL_CALLCONV char*    Perl_ninstr(const char* big, const char* bigend, const 
char* little, const char* lend)
+                       __attribute__pure__;
+#define PERL_ARGS_ASSERT_NINSTR        \
+       assert(big); assert(bigend); assert(little); assert(lend)
+
+#endif
 #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
 PERL_CALLCONV I32      Perl_do_ipcctl(pTHX_ I32 optype, SV** mark, SV** sp);
 #define PERL_ARGS_ASSERT_DO_IPCCTL     \
diff --git a/util.c b/util.c
index 447a19f..2f78825 100644
--- a/util.c
+++ b/util.c
@@ -584,6 +584,11 @@ char *
 Perl_ninstr(const char *big, const char *bigend, const char *little, const 
char *lend)
 {
     PERL_ARGS_ASSERT_NINSTR;
+
+#ifdef HAS_MEMMEM
+    return ninstr(big, bigend, little, lend);
+#else
+
     if (little >= lend)
         return (char*)big;
     {
@@ -602,6 +607,9 @@ Perl_ninstr(const char *big, const char *bigend, const char 
*little, const char
         }
     }
     return NULL;
+
+#endif
+
 }
 
 /*
diff --git a/util.h b/util.h
index 3a74bd0..8f4171b 100644
--- a/util.h
+++ b/util.h
@@ -231,6 +231,11 @@ means arg not present, 1 is empty string/null byte */
 
 #define instr(haystack, needle) strstr(haystack, needle)
 
+#ifdef HAS_MEMMEM
+#   define ninstr(big, bigend, little, lend)                                \
+            ((char *) memmem(big, bigend - big, little, lend - little))
+#endif
+
 /*
  * ex: set ts=8 sts=4 sw=4 et:
  */

--
Perl5 Master Repository

Reply via email to