]> granicus.if.org Git - fortune-mod/commitdiff
avoid double traversal.
authorShlomi Fish <shlomif@shlomifish.org>
Mon, 30 Mar 2020 08:51:25 +0000 (11:51 +0300)
committerShlomi Fish <shlomif@shlomifish.org>
Mon, 30 Mar 2020 08:51:54 +0000 (11:51 +0300)
fortune-mod/ChangeLog
fortune-mod/fortune/fortune.c
fortune-mod/tests/t/lib/FortTestInst.pm
fortune-mod/tests/t/test-fortune-m.t
fortune-mod/ver.txt

index 2a7b0f333a24c4c8f2ed29162e2fe8f465da2ca8..4d54a27801045490de8bd95164616b636373fe56 100644 (file)
@@ -1,6 +1,10 @@
 (Note: this file has been re-arranged to be in reverse chronological
 order, which is The Right Thing for ChangeLogs - DLC)
 
+March 30, 2020 (fortune-mod 2.18.0)
+
+       Avoid double traversal if FORTDIR == LOCFORTDIR.
+
 February 26, 2020 (fortune-mod 2.16.0)
 
        Better portability to Microsoft Windows and other OSes
index 86dbaa3613ce3f08e17ed1997052de44ae24b26f..8834d2de0d46730784cd938d13868f9efb00958f 100644 (file)
@@ -868,6 +868,16 @@ int add_dir(register FILEDESC * fp)
 * form_file_list:
 *      Form the file list from the file specifications.
 */
+
+static int cond_top_level__add_file(const char *dirpath, const char*possible_dup)
+{
+    if (!strcmp(dirpath, possible_dup))
+    {
+        return 0;
+    }
+    return add_file(NO_PROB, dirpath, NULL, &File_list, &File_tail, NULL);
+}
+
 static int form_file_list(register char **files, register int file_cnt)
 {
     register int i, percent;
@@ -882,15 +892,12 @@ static int form_file_list(register char **files, register int file_cnt)
                     &File_tail, NULL)
                 | add_file(NO_PROB, LOCOFFDIR, NULL, &File_list,
                     &File_tail, NULL)
-                | add_file(NO_PROB, FORTDIR, NULL, &File_list,
-                    &File_tail, NULL)
-                | add_file(NO_PROB, OFFDIR, NULL, &File_list,
-                    &File_tail, NULL));
+                | cond_top_level__add_file(FORTDIR, LOCFORTDIR)
+                | cond_top_level__add_file(OFFDIR, LOCOFFDIR));
         else if (Offend)
             return (add_file(NO_PROB, LOCOFFDIR, NULL, &File_list,
                     &File_tail, NULL)
-                | add_file(NO_PROB, OFFDIR, NULL, &File_list,
-                    &File_tail, NULL));
+                | cond_top_level__add_file(OFFDIR, LOCOFFDIR));
         else {
             if (env_lang) {
                 char *lang;
@@ -929,17 +936,14 @@ static int form_file_list(register char **files, register int file_cnt)
                 /* default */
                 return (add_file(NO_PROB, LOCFORTDIR, NULL, &File_list,
                         &File_tail, NULL)
-                    | add_file(NO_PROB, FORTDIR, NULL, &File_list,
-                        &File_tail, NULL));
+                    | cond_top_level__add_file(FORTDIR, LOCFORTDIR));
 
             }
             else
                 /* no locales available, use default */
                 return (add_file(NO_PROB, LOCFORTDIR, NULL, &File_list,
                         &File_tail, NULL)
-                    | add_file(NO_PROB, FORTDIR, NULL, &File_list,
-                        &File_tail, NULL));
-
+                    | cond_top_level__add_file(FORTDIR, LOCFORTDIR));
         }
     }
 
index 45fddabddf5104fd6b1313a3b89c2b4372d00525..697f04a225e8414042c3d1ab6b37995469066eb8 100644 (file)
@@ -44,6 +44,7 @@ sub install
                     : ()
                 ),
                 "-DCMAKE_INSTALL_PREFIX=$inst_dir",
+                "-DLOCALDIR=$inst_dir/share/games/fortunes",
                 ( $IS_WIN ? ("-DCMAKE_BUILD_TYPE=Debug") : () ),
                 $ENV{SRC_DIR}
             ]
index 2a40a1af641e25b6119fc28f7130ac98e26b68ed..a4a8bca8dd40a11f315ae83b506c164f1dcb5752 100644 (file)
@@ -7,7 +7,7 @@ use 5.014;
 use FindBin;
 use lib "$FindBin::Bin/lib";
 use FortTestInst ();
-use Test::More tests => 1;
+use Test::More tests => 3;
 
 {
     my $inst_dir = FortTestInst::install("fortune-m");
@@ -31,3 +31,29 @@ use Test::More tests => 1;
     # TEST
     like( $text, qr/Newton/, 'fortune -m matched' );
 }
+
+{
+    my $inst_dir = FortTestInst::install("fortune-m");
+    my $IS_WIN   = ( $^O eq "MSWin32" );
+    my @cmd = ( $inst_dir->child( 'games', 'fortune' ), '-m', '"wet paint"' );
+
+    # Does not help:
+    # if ($IS_WIN)
+    if (0)
+    {
+        print "IS_WIN=1\n";
+        $cmd[0] = ( "$cmd[0]" =~ s#/#\\\\#gr );
+        $cmd[0] .= ".exe";
+        print "TransformedRun [@cmd]\n";
+    }
+    print "Running [@cmd]\n";
+    my $text = `@cmd`;
+    my $rc   = $?;
+    print "AfterRun rc=$rc [@cmd]\n";
+
+    # TEST
+    like( $text, qr/wet paint/, 'fortune -m matched' );
+
+    # TEST
+    unlike( $text, qr/wet paint.*?wet paint/ms, 'no duplicate fortunes' );
+}
index 75249069675e6eb182137522df12405f18d3e2f7..cf8690732fe3ef1414b99886dc496065db8e8712 100644 (file)
@@ -1 +1 @@
-2.16.0
+2.18.0