Re: [PATCH 2/9] strbuf: add strbuf_tolower function

2014-05-23 Thread Jeff King
On Thu, May 22, 2014 at 03:52:08PM -0700, Kyle J. McKay wrote:

 Christian brought this up elsewhere, and I agree it's probably better to
 work over the whole buffer, NULs included. I'm happy to re-roll (or you
 can just pick up the version of the patch in this thread),
 
 The only reason I brought up the code difference in the first place was that
 the comment was This makes config's lowercase() function public which made
 me expect to see basically the equivalent of replacing a static with an
 extern, but actually the function being made public was a different
 implementation than config's lowercase() function.  So it looks like the
 original PATCH 2/9 version of the code is best, but perhaps the comment can
 be tweaked a bit to not convey the same impression I got.  Maybe something
 like Replace config's lowercase() function with a public one.

Yeah, sorry if it sounded like I was complaining about your review
elsewhere. I mostly found it amusing that I got two opposite-direction
reviews.

I agree that clarifying the situation in the commit message is best, and
I've done that in the version I just posted.

-Peff
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/9] strbuf: add strbuf_tolower function

2014-05-23 Thread Kyle J. McKay

On May 23, 2014, at 13:05, Jeff King wrote:

On Thu, May 22, 2014 at 03:52:08PM -0700, Kyle J. McKay wrote:

Christian brought this up elsewhere, and I agree it's probably  
better to
work over the whole buffer, NULs included. I'm happy to re-roll  
(or you

can just pick up the version of the patch in this thread),


The only reason I brought up the code difference in the first place  
was that
the comment was This makes config's lowercase() function public  
which made
me expect to see basically the equivalent of replacing a static  
with an

extern, but actually the function being made public was a different
implementation than config's lowercase() function.


Yeah, sorry if it sounded like I was complaining about your review
elsewhere. I mostly found it amusing that I got two opposite-direction
reviews.


I didn't seem like complaining to me.  I also was amused.  :)

I agree that clarifying the situation in the commit message is best,  
and

I've done that in the version I just posted.


It looks great.  And I suspect you're correct that a modern compiler  
would optimize the index-based version to be as efficient as the  
pointer arithmetic version.


--Kyle
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/9] strbuf: add strbuf_tolower function

2014-05-22 Thread Junio C Hamano
Jeff King p...@peff.net writes:

 On Wed, May 21, 2014 at 05:07:36PM -0700, Kyle J. McKay wrote:

 +void strbuf_tolower(struct strbuf *sb)
 +{
 +   size_t i;
 +   for (i = 0; i  sb-len; i++)
 +   sb-buf[i] = tolower(sb-buf[i]);
 +}
 +
 
 Wouldn't a direct transfer of the lowercase function be something more like:
 
 
 void strbuf_tolower(struct strbuf *sb)
 {
  char *p = sb-buf;
  for (; *p; p++)
  *p = tolower(*p);
 }
 
 That seems to me to be a bit more efficient.  According to the comments in
 strbuf.c, people can always assume buf is non NULL and -buf is NUL
 terminated even for a freshly initialized strbuf.

 Yes, and that would be fine with me (I actually wrote strbuf_tolower for
 my own use, and _then_ realized that we already had such a thing that
 could be replaced).

Do we forbid that sb-buf[x] for some x  sb-len to be NUL, and if
there is such a byte we stop running tolower() on the remainder?


--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/9] strbuf: add strbuf_tolower function

2014-05-22 Thread Jeff King
On Thu, May 22, 2014 at 11:36:37AM -0700, Junio C Hamano wrote:

  Yes, and that would be fine with me (I actually wrote strbuf_tolower for
  my own use, and _then_ realized that we already had such a thing that
  could be replaced).
 
 Do we forbid that sb-buf[x] for some x  sb-len to be NUL, and if
 there is such a byte we stop running tolower() on the remainder?

Christian brought this up elsewhere, and I agree it's probably better to
work over the whole buffer, NULs included. I'm happy to re-roll (or you
can just pick up the version of the patch in this thread), but I think
the bigger question is: is this refactor worth doing, since there is
only one caller?

-Peff
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/9] strbuf: add strbuf_tolower function

2014-05-22 Thread Junio C Hamano
Jeff King p...@peff.net writes:

  Yes, and that would be fine with me (I actually wrote strbuf_tolower for
  my own use, and _then_ realized that we already had such a thing that
  could be replaced).
 ...
 ... I think
 the bigger question is: is this refactor worth doing, since there is
 only one caller?

If you wrote it for your own use and then realized that it is
applicable to this codepath, wouldn't that say that there are
multiple potential callers that would benefit from having it?
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/9] strbuf: add strbuf_tolower function

2014-05-22 Thread Kyle J. McKay

On May 22, 2014, at 11:41, Jeff King wrote:


On Thu, May 22, 2014 at 11:36:37AM -0700, Junio C Hamano wrote:

Yes, and that would be fine with me (I actually wrote  
strbuf_tolower for
my own use, and _then_ realized that we already had such a thing  
that

could be replaced).


Do we forbid that sb-buf[x] for some x  sb-len to be NUL, and if
there is such a byte we stop running tolower() on the remainder?


Christian brought this up elsewhere, and I agree it's probably  
better to
work over the whole buffer, NULs included. I'm happy to re-roll (or  
you

can just pick up the version of the patch in this thread),


The only reason I brought up the code difference in the first place  
was that the comment was This makes config's lowercase() function  
public which made me expect to see basically the equivalent of  
replacing a static with an extern, but actually the function being  
made public was a different implementation than config's lowercase()  
function.  So it looks like the original PATCH 2/9 version of the code  
is best, but perhaps the comment can be tweaked a bit to not convey  
the same impression I got.  Maybe something like Replace config's  
lowercase() function with a public one.


--Kyle
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/9] strbuf: add strbuf_tolower function

2014-05-21 Thread Jeff King
This makes config's lowercase() function public.

Note that we could continue to offer a pure-string
lowercase, but there would be no callers (in most
pure-string cases, we actually duplicate and lowercase the
duplicate).

Signed-off-by: Jeff King p...@peff.net
---
This ones gets used later on...

 Documentation/technical/api-strbuf.txt | 4 
 config.c   | 8 +---
 strbuf.c   | 7 +++
 strbuf.h   | 1 +
 4 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/Documentation/technical/api-strbuf.txt 
b/Documentation/technical/api-strbuf.txt
index 3350d97..8480f89 100644
--- a/Documentation/technical/api-strbuf.txt
+++ b/Documentation/technical/api-strbuf.txt
@@ -125,6 +125,10 @@ Functions
 
Strip whitespace from the end of a string.
 
+`strbuf_tolower`::
+
+   Lowercase each character in the buffer using `tolower`.
+
 `strbuf_cmp`::
 
Compare two buffers. Returns an integer less than, equal to, or greater
diff --git a/config.c b/config.c
index a30cb5c..03ce5c6 100644
--- a/config.c
+++ b/config.c
@@ -147,12 +147,6 @@ int git_config_include(const char *var, const char *value, 
void *data)
return ret;
 }
 
-static void lowercase(char *p)
-{
-   for (; *p; p++)
-   *p = tolower(*p);
-}
-
 void git_config_push_parameter(const char *text)
 {
struct strbuf env = STRBUF_INIT;
@@ -180,7 +174,7 @@ int git_config_parse_parameter(const char *text,
strbuf_list_free(pair);
return error(bogus config parameter: %s, text);
}
-   lowercase(pair[0]-buf);
+   strbuf_tolower(pair[0]);
if (fn(pair[0]-buf, pair[1] ? pair[1]-buf : NULL, data)  0) {
strbuf_list_free(pair);
return -1;
diff --git a/strbuf.c b/strbuf.c
index ee96dcf..a1b8a47 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -106,6 +106,13 @@ void strbuf_ltrim(struct strbuf *sb)
sb-buf[sb-len] = '\0';
 }
 
+void strbuf_tolower(struct strbuf *sb)
+{
+   size_t i;
+   for (i = 0; i  sb-len; i++)
+   sb-buf[i] = tolower(sb-buf[i]);
+}
+
 struct strbuf **strbuf_split_buf(const char *str, size_t slen,
 int terminator, int max)
 {
diff --git a/strbuf.h b/strbuf.h
index 39c14cf..6b6f745 100644
--- a/strbuf.h
+++ b/strbuf.h
@@ -45,6 +45,7 @@ static inline void strbuf_setlen(struct strbuf *sb, size_t 
len)
 extern void strbuf_trim(struct strbuf *);
 extern void strbuf_rtrim(struct strbuf *);
 extern void strbuf_ltrim(struct strbuf *);
+extern void strbuf_tolower(struct strbuf *sb);
 extern int strbuf_cmp(const struct strbuf *, const struct strbuf *);
 
 /*
-- 
2.0.0.rc1.436.g03cb729

--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/9] strbuf: add strbuf_tolower function

2014-05-21 Thread Kyle J. McKay

On May 21, 2014, at 03:27, Jeff King wrote:


This makes config's lowercase() function public.

Note that we could continue to offer a pure-string
lowercase, but there would be no callers (in most
pure-string cases, we actually duplicate and lowercase the
duplicate).

Signed-off-by: Jeff King p...@peff.net
---
This ones gets used later on...

Documentation/technical/api-strbuf.txt | 4 
config.c   | 8 +---
strbuf.c   | 7 +++
strbuf.h   | 1 +
4 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/Documentation/technical/api-strbuf.txt b/Documentation/ 
technical/api-strbuf.txt

index 3350d97..8480f89 100644
--- a/Documentation/technical/api-strbuf.txt
+++ b/Documentation/technical/api-strbuf.txt
@@ -125,6 +125,10 @@ Functions

Strip whitespace from the end of a string.

+`strbuf_tolower`::
+
+   Lowercase each character in the buffer using `tolower`.
+
`strbuf_cmp`::

	Compare two buffers. Returns an integer less than, equal to, or  
greater

diff --git a/config.c b/config.c
index a30cb5c..03ce5c6 100644
--- a/config.c
+++ b/config.c
@@ -147,12 +147,6 @@ int git_config_include(const char *var, const  
char *value, void *data)

return ret;
}

-static void lowercase(char *p)
-{
-   for (; *p; p++)
-   *p = tolower(*p);
-}
-
void git_config_push_parameter(const char *text)
{
struct strbuf env = STRBUF_INIT;
@@ -180,7 +174,7 @@ int git_config_parse_parameter(const char *text,
strbuf_list_free(pair);
return error(bogus config parameter: %s, text);
}
-   lowercase(pair[0]-buf);
+   strbuf_tolower(pair[0]);
if (fn(pair[0]-buf, pair[1] ? pair[1]-buf : NULL, data)  0) {
strbuf_list_free(pair);
return -1;
diff --git a/strbuf.c b/strbuf.c
index ee96dcf..a1b8a47 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -106,6 +106,13 @@ void strbuf_ltrim(struct strbuf *sb)
sb-buf[sb-len] = '\0';
}

+void strbuf_tolower(struct strbuf *sb)
+{
+   size_t i;
+   for (i = 0; i  sb-len; i++)
+   sb-buf[i] = tolower(sb-buf[i]);
+}
+


Wouldn't a direct transfer of the lowercase function be something more  
like:



void strbuf_tolower(struct strbuf *sb)
{
char *p = sb-buf;
for (; *p; p++)
*p = tolower(*p);
}

That seems to me to be a bit more efficient.  According to the  
comments in strbuf.c, people can always assume buf is non NULL and - 
buf is NUL terminated even for a freshly initialized strbuf.



struct strbuf **strbuf_split_buf(const char *str, size_t slen,
 int terminator, int max)
{
diff --git a/strbuf.h b/strbuf.h
index 39c14cf..6b6f745 100644
--- a/strbuf.h
+++ b/strbuf.h
@@ -45,6 +45,7 @@ static inline void strbuf_setlen(struct strbuf  
*sb, size_t len)

extern void strbuf_trim(struct strbuf *);
extern void strbuf_rtrim(struct strbuf *);
extern void strbuf_ltrim(struct strbuf *);
+extern void strbuf_tolower(struct strbuf *sb);
extern int strbuf_cmp(const struct strbuf *, const struct strbuf *);

/*
--
2.0.0.rc1.436.g03cb729



--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/9] strbuf: add strbuf_tolower function

2014-05-21 Thread Jeff King
On Wed, May 21, 2014 at 05:07:36PM -0700, Kyle J. McKay wrote:

 +void strbuf_tolower(struct strbuf *sb)
 +{
 +size_t i;
 +for (i = 0; i  sb-len; i++)
 +sb-buf[i] = tolower(sb-buf[i]);
 +}
 +
 
 Wouldn't a direct transfer of the lowercase function be something more like:
 
 
 void strbuf_tolower(struct strbuf *sb)
 {
   char *p = sb-buf;
   for (; *p; p++)
   *p = tolower(*p);
 }
 
 That seems to me to be a bit more efficient.  According to the comments in
 strbuf.c, people can always assume buf is non NULL and -buf is NUL
 terminated even for a freshly initialized strbuf.

Yes, and that would be fine with me (I actually wrote strbuf_tolower for
my own use, and _then_ realized that we already had such a thing that
could be replaced).

-Peff
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html