Re: [Bug-wget] [PATCH] bit cleanup in utils.c

2013-05-12 Thread Giuseppe Scrivano
Hi,

Tim Rühsen tim.rueh...@gmx.de writes:

 I replaced some hand-written string code by standard library functions.
 In any case these functions may be found in gnulib as well.

 From d540fd5dbd3644936a8ad1a384516abba10de268 Mon Sep 17 00:00:00 2001
 From: Tim Ruehsen tim.rueh...@gmx.de
 Date: Thu, 9 May 2013 19:53:36 +0200
 Subject: [PATCH 1/3] src/utils.c cleanup

thanks for the patch, I amended these trivial changes and applied it:

  src/ChangeLog |6 ++

2013-05-09  Tim Ruehsen  tim.rueh...@gmx.de

* utils.c (acceptable): use standard string functions instead of
self-written code.
(match_tail): Likewise.
(suffix): Likewise.
(has_wildcards_p): Likewise.
(test_subdir_p): Fix some warnings.
(test_dir_matches_p): Likewise.


  src/utils.c   |   66 
 -


 +  if ((p = strrchr(s, '/')))

+  if ((p = strrchr (s, '/')))

 +  int pos = strlen (string) - strlen(tail);

+  int pos = strlen (string) - strlen (tail);

 +   return false; /* tail is longer than string */

 +return false;  /* tail is longer than string.  */



 +  if ((p = strrchr(str, '.'))  !strchr(p + 1, '/'))

+  if ((p = strrchr (str, '.'))  !strchr (p + 1, '/'))


 +   return p + 1;

+return p + 1;

 + return !!strpbrk(s, *?[]);

+  return !!strpbrk (s, *?[]);


-- 
Giuseppe



[Bug-wget] [PATCH] bit cleanup in utils.c

2013-05-11 Thread Tim Rühsen
I replaced some hand-written string code by standard library functions.
In any case these functions may be found in gnulib as well.

Regards, Tim
From d540fd5dbd3644936a8ad1a384516abba10de268 Mon Sep 17 00:00:00 2001
From: Tim Ruehsen tim.rueh...@gmx.de
Date: Thu, 9 May 2013 19:53:36 +0200
Subject: [PATCH 1/3] src/utils.c cleanup

---
 src/ChangeLog |6 ++
 src/utils.c   |   66 -
 2 files changed, 29 insertions(+), 43 deletions(-)

diff --git a/src/ChangeLog b/src/ChangeLog
index f4fa342..84a9645 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2013-05-09  Tim Ruehsen  tim.rueh...@gmx.de
+
+	* utils.c: use standard string functions instead of self-written
+	code in acceptable(), match_tail(), suffix(), has_wildcards_p().
+	Avoid some warnings in test code.
+
 2013-05-05  mancha  manc...@hush.com (tiny change)
 
 	* gnutls.c (ssl_connect_wget): Don't abort on non-fatal alerts
diff --git a/src/utils.c b/src/utils.c
index faae62e..f7baed6 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -900,15 +900,14 @@ static bool in_acclist (const char *const *, const char *, bool);
 bool
 acceptable (const char *s)
 {
-  int l = strlen (s);
+  const char *p;
 
   if (opt.output_document  strcmp (s, opt.output_document) == 0)
 return true;
 
-  while (l  s[l] != '/')
---l;
-  if (s[l] == '/')
-s += (l + 1);
+  if ((p = strrchr(s, '/')))
+s = p + 1;
+
   if (opt.accepts)
 {
   if (opt.rejects)
@@ -919,6 +918,7 @@ acceptable (const char *s)
 }
   else if (opt.rejects)
 return !in_acclist ((const char *const *)opt.rejects, s, true);
+
   return true;
 }
 
@@ -1018,29 +1018,15 @@ accdir (const char *directory)
 bool
 match_tail (const char *string, const char *tail, bool fold_case)
 {
-  int i, j;
+  int pos = strlen (string) - strlen(tail);
 
-  /* We want this to be fast, so we code two loops, one with
- case-folding, one without. */
+  if (pos  0)
+	  return false; /* tail is longer than string */
 
   if (!fold_case)
-{
-  for (i = strlen (string), j = strlen (tail); i = 0  j = 0; i--, j--)
-if (string[i] != tail[j])
-  break;
-}
-  else
-{
-  for (i = strlen (string), j = strlen (tail); i = 0  j = 0; i--, j--)
-if (c_tolower (string[i]) != c_tolower (tail[j]))
-  break;
-}
-
-  /* If the tail was exhausted, the match was succesful.  */
-  if (j == -1)
-return true;
+return strcmp (string + pos, tail);
   else
-return false;
+return strcasecmp (string + pos, tail);
 }
 
 /* Checks whether string S matches each element of ACCEPTS.  A list
@@ -1089,15 +1075,12 @@ in_acclist (const char *const *accepts, const char *s, bool backward)
 char *
 suffix (const char *str)
 {
-  int i;
+  char *p;
 
-  for (i = strlen (str); i  str[i] != '/'  str[i] != '.'; i--)
-;
+  if ((p = strrchr(str, '.'))  !strchr(p + 1, '/'))
+	  return p + 1;
 
-  if (str[i++] == '.')
-return (char *)str + i;
-  else
-return NULL;
+  return NULL;
 }
 
 /* Return true if S contains globbing wildcards (`*', `?', `[' or
@@ -1106,10 +1089,7 @@ suffix (const char *str)
 bool
 has_wildcards_p (const char *s)
 {
-  for (; *s; s++)
-if (*s == '*' || *s == '?' || *s == '[' || *s == ']')
-  return true;
-  return false;
+	return !!strpbrk(s, *?[]);
 }
 
 /* Return true if FNAME ends with a typical HTML suffix.  The
@@ -2553,16 +2533,16 @@ get_max_length (const char *path, int length, int name)
 const char *
 test_subdir_p()
 {
-  int i;
-  struct {
-char *d1;
-char *d2;
+  static struct {
+const char *d1;
+const char *d2;
 bool result;
   } test_array[] = {
 { /somedir, /somedir, true },
 { /somedir, /somedir/d2, true },
 { /somedir/d1, /somedir, false },
   };
+  unsigned i;
 
   for (i = 0; i  countof(test_array); ++i)
 {
@@ -2578,10 +2558,9 @@ test_subdir_p()
 const char *
 test_dir_matches_p()
 {
-  int i;
-  struct {
-char *dirlist[3];
-char *dir;
+  static struct {
+const char *dirlist[3];
+const char *dir;
 bool result;
   } test_array[] = {
 { { /somedir, /someotherdir, NULL }, somedir, true },
@@ -2600,6 +2579,7 @@ test_dir_matches_p()
 { { /Tmp/has, NULL, NULL }, /Tmp/has space, false },
 { { /Tmp/has, NULL, NULL }, /Tmp/has,comma, false },
   };
+  unsigned i;
 
   for (i = 0; i  countof(test_array); ++i)
 {
-- 
1.7.10.4