This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Change some strncmp(), etc. to strBEGINs()
authorKarl Williamson <khw@cpan.org>
Thu, 9 Mar 2017 17:55:38 +0000 (10:55 -0700)
committerKarl Williamson <khw@cpan.org>
Mon, 6 Nov 2017 19:50:05 +0000 (12:50 -0700)
The latter is much clearer as to what's going on, and the programmer and
program reader don't have to count characters.

14 files changed:
cygwin/cygwin.c
djgpp/djgpp.c
ext/VMS-Stdio/Stdio.pm
ext/VMS-Stdio/Stdio.xs
ext/XS-APItest/APItest.xs
op.c
perl.c
pp.c
pp_ctl.c
pp_pack.c
regcomp.c
toke.c
vms/vms.c
win32/win32.c

index 7bcf02a..a234825 100644 (file)
@@ -98,7 +98,7 @@ do_spawn (char *cmd)
     while (*cmd && isSPACE(*cmd))
        cmd++;
 
-    if (strnEQ (cmd,"/bin/sh",7) && isSPACE (cmd[7]))
+    if (strBEGINs (cmd,"/bin/sh") && isSPACE (cmd[7]))
         cmd+=5;
 
     /* save an extra exec if possible */
@@ -107,7 +107,7 @@ do_spawn (char *cmd)
        goto doshell;
     if (*cmd=='.' && isSPACE (cmd[1]))
        goto doshell;
-    if (strnEQ (cmd,"exec",4) && isSPACE (cmd[4]))
+    if (strBEGINs (cmd,"exec") && isSPACE (cmd[4]))
        goto doshell;
     for (s=cmd; *s && isALPHA (*s); s++) ;     /* catch VAR=val gizmo */
        if (*s=='=')
index 6d136e3..d1c09aa 100644 (file)
@@ -162,7 +162,7 @@ do_spawn2 (pTHX_ char *cmd,int execf)
     while (*cmd && isSPACE(*cmd))
        cmd++;
 
-    if (strnEQ (cmd,"/bin/sh",7) && isSPACE (cmd[7]))
+    if (strBEGINs (cmd,"/bin/sh") && isSPACE (cmd[7]))
         cmd+=5;
 
     /* save an extra exec if possible */
@@ -173,7 +173,7 @@ do_spawn2 (pTHX_ char *cmd,int execf)
     {
         if (*cmd=='.' && isSPACE (cmd[1]))
             goto doshell;
-        if (strnEQ (cmd,"exec",4) && isSPACE (cmd[4]))
+        if (strBEGINs (cmd,"exec") && isSPACE (cmd[4]))
             goto doshell;
         for (s=cmd; *s && isALPHA (*s); s++) ; /* catch VAR=val gizmo */
             if (*s=='=')
@@ -265,7 +265,7 @@ glob_handler (__FSEXT_Fnumber n,int *rv,va_list args)
             STRLEN len;
             glob_t pglob;
 
-            if (strnNE (name,"/dev/dosglob/",13))
+            if (! strBEGINs (name,"/dev/dosglob/"))
                 break;
             if ((gi=searchfd (-1)) == NULL)
                 break;
index f9ed211..e692e05 100644 (file)
@@ -13,7 +13,7 @@ use Carp '&croak';
 use DynaLoader ();
 use Exporter ();
  
-$VERSION = '2.42';
+$VERSION = '2.43';
 @ISA = qw( Exporter DynaLoader IO::File );
 @EXPORT = qw( &O_APPEND &O_CREAT &O_EXCL  &O_NDELAY &O_NOWAIT
               &O_RDONLY &O_RDWR  &O_TRUNC &O_WRONLY );
index 144f937..1e96cdb 100644 (file)
@@ -15,7 +15,7 @@
 static bool
 constant(char *name, IV *pval)
 {
-    if (strnNE(name, "O_", 2)) return FALSE;
+    if (! strBEGINs(name, "O_")) return FALSE;
 
     if (strEQ(name, "O_APPEND"))
 #ifdef O_APPEND
index fa11b05..5dc1b27 100644 (file)
@@ -2346,8 +2346,7 @@ CODE:
     SP -= retcnt;
     errsv = ERRSV;
     errstr = SvPV_nolen(errsv);
-    if(strnEQ(errstr, "Undefined subroutine &main:: called at",
-              sizeof("Undefined subroutine &main:: called at") - 1)) {
+    if(strBEGINs(errstr, "Undefined subroutine &main:: called at")) {
         PUSHMARK(SP);
         retcnt = call_sv((SV*)i_sub, 0); /* call again to increase counter */
         SPAGAIN;
@@ -2359,8 +2358,7 @@ CODE:
     SP -= retcnt;
     errsv = ERRSV;
     errstr = SvPV_nolen(errsv);
-    if(strnEQ(errstr, "Can't use an undefined value as a subroutine reference at",
-              sizeof("Can't use an undefined value as a subroutine reference at") - 1)) {
+    if(strBEGINs(errstr, "Can't use an undefined value as a subroutine reference at")) {
         PUSHMARK(SP);
         retcnt = call_sv((SV*)i_sub, 0); /* call again to increase counter */
         SPAGAIN;
@@ -2372,8 +2370,7 @@ CODE:
     SP -= retcnt;
     errsv = ERRSV;
     errstr = SvPV_nolen(errsv);
-    if(strnEQ(errstr, "Not a CODE reference at",
-              sizeof("Not a CODE reference at") - 1)) {
+    if(strBEGINs(errstr, "Not a CODE reference at")) {
         PUSHMARK(SP);
         retcnt = call_sv((SV*)i_sub, 0); /* call again to increase counter */
         SPAGAIN;
diff --git a/op.c b/op.c
index d8d2c32..17581bd 100644 (file)
--- a/op.c
+++ b/op.c
@@ -11831,7 +11831,7 @@ Perl_ck_method(pTHX_ OP *o)
     }
 
     /* $proto->MyClass::method() and $proto->MyClass::SUPER::method() */
-    if (nsplit >= 9 && strnEQ(method+nsplit-9, "::SUPER::", 9)) {
+    if (nsplit >= 9 && strBEGINs(method+nsplit-9, "::SUPER::")) {
         rclass = newSVpvn_share(method, utf8*(nsplit-9), 0);
         new_op = newMETHOP_named(OP_METHOD_REDIR_SUPER, 0, methsv);
     } else {
diff --git a/perl.c b/perl.c
index 500c30c..8818005 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -3921,9 +3921,9 @@ S_open_script(pTHX_ const char *scriptname, bool dosearch, bool *suidscript)
 #endif
        rsfp = PerlIO_open(scriptname,PERL_SCRIPT_MODE);
 #ifdef FAKE_BIT_BUCKET
-       if (memEQ(scriptname, FAKE_BIT_BUCKET_PREFIX,
-                 sizeof(FAKE_BIT_BUCKET_PREFIX) - 1)
-           && strlen(scriptname) == sizeof(tmpname) - 1) {
+        if (   strBEGINs(scriptname, FAKE_BIT_BUCKET_PREFIX)
+           && strlen(scriptname) == sizeof(tmpname) - 1)
+        {
            unlink(scriptname);
        }
        scriptname = BIT_BUCKET;
diff --git a/pp.c b/pp.c
index 382ee96..30b8406 100644 (file)
--- a/pp.c
+++ b/pp.c
@@ -384,7 +384,7 @@ PP(pp_prototype)
     if (SvGMAGICAL(TOPs)) SETs(sv_mortalcopy(TOPs));
     if (SvPOK(TOPs) && SvCUR(TOPs) >= 7) {
        const char * s = SvPVX_const(TOPs);
-       if (strnEQ(s, "CORE::", 6)) {
+       if (strBEGINs(s, "CORE::")) {
            const int code = keyword(s + 6, SvCUR(TOPs) - 6, 1);
            if (!code)
                DIE(aTHX_ "Can't find an opnumber for \"%" UTF8f "\"",
index 967614a..1c219f1 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -916,7 +916,7 @@ PP(pp_formline)
                            *t++ = ' ';
                    }
                    s1 = t - 3;
-                   if (strnEQ(s1,"   ",3)) {
+                   if (strBEGINs(s1,"   ")) {
                        while (s1 > SvPVX_const(PL_formtarget) && isSPACE(s1[-1]))
                            s1--;
                    }
index 7a882ba..f2d56b4 100644 (file)
--- a/pp_pack.c
+++ b/pp_pack.c
@@ -191,7 +191,7 @@ S_mul128(pTHX_ SV *sv, U8 m)
 
   PERL_ARGS_ASSERT_MUL128;
 
-  if (!strnEQ(s, "0000", 4)) {  /* need to grow sv */
+  if (! strBEGINs(s, "0000")) {  /* need to grow sv */
     SV * const tmpNew = newSVpvs("0000000000");
 
     sv_catsv(tmpNew, sv);
index 3d7f0c9..e99a563 100644 (file)
--- a/regcomp.c
+++ b/regcomp.c
@@ -12061,8 +12061,8 @@ S_grok_bslash_N(pTHX_ RExC_state_t *pRExC_state,
     }
     else if(!(endbrace == RExC_parse           /* nothing between the {} */
               || (endbrace - RExC_parse >= 2   /* U+ (bad hex is checked... */
-                  && strnEQ(RExC_parse, "U+", 2)))) /* ... below for a better
-                                                       error msg) */
+                  && strBEGINs(RExC_parse, "U+")))) /* ... below for a better
+                                                     error msg) */
     {
        RExC_parse = endbrace;  /* position msg's '<--HERE' */
        vFAIL("\\N{NAME} must be resolved by the lexer");
diff --git a/toke.c b/toke.c
index c9e0f8b..2e6f9ed 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -4877,7 +4877,7 @@ Perl_yylex(pTHX)
            }
            else {
                I32 tmp;
-                if (strnEQ(s, "L\\u", 3) || strnEQ(s, "U\\l", 3))
+                if (strBEGINs(s, "L\\u") || strBEGINs(s, "U\\l"))
                     tmp = *s, *s = s[2], s[2] = (char)tmp;     /* misordered... */
                if ((*s == 'L' || *s == 'U' || *s == 'F')
                     && (strpbrk(PL_lex_casestack, "LUF")))
index 49494e4..72cf4d6 100644 (file)
--- a/vms/vms.c
+++ b/vms/vms.c
@@ -285,7 +285,7 @@ is_unix_filespec(const char *path)
     const char * pch1;
 
     ret_val = 0;
-    if (strncmp(path,"\"^UP^",5) != 0) {
+    if (! strBEGINs(path,"\"^UP^")) {
        pch1 = strchr(path, '/');
        if (pch1 != NULL)
            ret_val = 1;
@@ -6427,7 +6427,7 @@ int_fileify_dirspec(const char *dir, char *buf, int *utf8_fl)
           if (!cp1) cp1 = strstr(my_esa,"]<");
           dirlen = cp1 - my_esa;
           memcpy(buf, my_esa, dirlen);
-          if (!strncmp(cp1+2,"000000]",7)) {
+          if (strBEGINs(cp1+2,"000000]")) {
             buf[dirlen-1] = '\0';
            /* fix-me Not full ODS-5, just extra dots in directories for now */
            cp1 = buf + dirlen - 1;
@@ -7032,7 +7032,7 @@ int_tounixspec(const char *spec, char *rslt, int * utf8_fl)
    * glob passes filenames with trailing '\n' and expects this preserved.
    */
   if (decc_posix_compliant_pathnames) {
-    if (strncmp(spec, "\"^UP^", 5) == 0) {
+    if (! strBEGINs(spec, "\"^UP^")) {
       char * uspec;
       char *tunix;
       int tunix_len;
@@ -7463,7 +7463,7 @@ posix_root_to_vms(char *vmspath, int vmspath_len,
 #if __CRTL_VER >= 80200000
   /* If not a posix spec already, convert it */
   if (decc_posix_compliant_pathnames) {
-    if (strncmp(unixpath,"\"^UP^",5) != 0) {
+    if (! strBEGINs(unixpath,"\"^UP^")) {
       sprintf(vmspath,"\"^UP^%s\"",unixpath);
     }
     else {
@@ -7578,7 +7578,7 @@ posix_root_to_vms(char *vmspath, int vmspath_len,
   /* on any failure, returned the POSIX ^UP^ filespec */
   if (!(sts & 1)) {
      /* This can happen if user does not have permission to read directories */
-     if (strncmp(unixpath,"\"^UP^",5) != 0)
+     if (! strBEGINs(unixpath,"\"^UP^"))
        sprintf(vmspath,"\"^UP^%s\"",unixpath);
      else
        my_strlcpy(vmspath, unixpath, vmspath_len + 1);
@@ -7717,7 +7717,7 @@ posix_to_vmsspec_hardway(char *vmspath, int vmspath_len, const char *unixpath,
 
   quoted = 0;
   /* This could have a "^UP^ on the front */
-  if (strncmp(unixptr,"\"^UP^",5) == 0) {
+  if (strBEGINs(unixptr,"\"^UP^")) {
     quoted = 1;
     unixptr+= 5;
     unixlen-= 5;
@@ -8435,7 +8435,7 @@ int_tovmsspec(const char *path, char *rslt, int dir_flag, int * utf8_flag)
   /*--------------------------------------------------*/
 #if __CRTL_VER >= 80200000
   if (decc_posix_compliant_pathnames) {
-    if (strncmp(path,"\"^UP^",5) == 0) {
+    if (strBEGINs(path,"\"^UP^")) {
       posix_to_vmsspec_hardway(rslt, rslt_len, path, dir_flag, utf8_flag);
       return rslt;
     }
@@ -8576,7 +8576,7 @@ int_tovmsspec(const char *path, char *rslt, int dir_flag, int * utf8_flag)
        islnm = simple_trnlnm(rslt,trndev,VMS_MAXRSS-1);
       }
       else if (strEQ(rslt,"dev")) {
-       if (strncmp(cp2,"/null", 5) == 0) {
+       if (strBEGINs(cp2,"/null")) {
          if ((cp2[5] == 0) || (cp2[5] == '/')) {
            strcpy(rslt,"NLA0");
            cp1 = rslt + 4;
@@ -11838,7 +11838,7 @@ static int
 is_null_device(const char *name)
 {
   if (decc_bug_devnull != 0) {
-    if (strncmp("/dev/null", name, 9) == 0)
+    if (strBEGINs(name, "/dev/null"))
       return 1;
   }
     /* The VMS null device is named "_NLA0:", usually abbreviated as "NL:".
index f41ce6d..89522ab 100644 (file)
@@ -1849,7 +1849,7 @@ win32_getenv(const char *name)
        else {
            /* last ditch: allow any environment variables that begin with 'PERL'
               to be obtained from the registry, if found there */
-           if (strncmp(name, "PERL", 4) == 0)
+           if (strBEGINs(name, "PERL"))
                (void)get_regstr(name, &curitem);
        }
 #endif