git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [AGGREGATED PATCH] Fix in-place editing functions in convert.c

From
Sam Ravnborg <sam@ravnborg.org>
Date
Oct 5, 2007, 16:21 UTC
Message-ID
<20071005162139.GC31413@uranus.ravnborg.org>
In-Reply-To
<alpine.LFD.0.999.0710050819540.23684@woody.linux-foundation.org>
On Fri, Oct 05, 2007 at 08:26:44AM -0700, Linus Torvalds wrote:
Show 21 quoted lines
> 
> 
> On Fri, 5 Oct 2007, Pierre Habouzit wrote:
> >  
> > -	strbuf_grow(buf, len);
> > +	/* only grow if not in place */
> > +	if (strbuf_avail(buf) + buf->len < len)
> > +		strbuf_grow(buf, len - buf->len);
> 
> Umm. This is really ugly.
> 
> The whole point of strbuf's was that you shouldn't be doing your own 
> allocation decisions etc. So why do it?
> 
> Wouldn't it be much better to have a strbuf_make_room() interface that 
> just guarantees that there is enough room fo "len"? 
> 
> Otherwise, code like the above would seem to make the whole point of a 
> safer string interface rather pointless. The above code only makes sense 
> if you know how the strbuf's are internally done, so it should not exists 
> except as internal strbuf code. No?

Took a short look at strbuf.h after seeing the above code. And I was suprised to see that all strbuf users were exposed to the strbuf structure. Following patch would at least make sure noone fiddle with strbuf internals. Cut'n'paste - only for the example of it. It simply moves strbuf declaration to the .c file where it rightfully belongs.

git did not build with this change....
	Sam
diff --git a/strbuf.c b/strbuf.c
index e33d06b..0d2d578 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -1,6 +1,14 @@
 #include "cache.h"
 #include "strbuf.h"
 
+struct strbuf {
+       int alloc;
+       int len;
+       int eof;
+       char *buf;
+};
+
+
 void strbuf_init(struct strbuf *sb) {
        sb->buf = NULL;
        sb->eof = sb->alloc = sb->len = 0;
diff --git a/strbuf.h b/strbuf.h
index 74cc012..c057be3 100644
--- a/strbuf.h
+++ b/strbuf.h
@@ -1,11 +1,6 @@
 #ifndef STRBUF_H
 #define STRBUF_H
-struct strbuf {
-       int alloc;
-       int len;
-       int eof;
-       char *buf;
-};
+struct strbuf;
 
 extern void strbuf_init(struct strbuf *);
 extern void read_line(struct strbuf *, FILE *, int);
Previous: Pierre HabouzitNext: Pierre Habouzit
Message 7 of 18 in “Fix in-place editing in crlf_to_git and ident_to_git.”
  1. Fix in-place editing in crlf_to_git and ident_to_git.Pierre Habouzit, Oct 5, 2007
  2. Fix in-place editing functions in convert.cPierre Habouzit, Oct 5, 2007
  3. Johannes SixtOct 5, 2007
  4. Bernt HansenOct 5, 2007
  5. Linus TorvaldsOct 5, 2007
  6. Pierre HabouzitOct 5, 2007
  7. Sam RavnborgOct 5, 2007
  8. Pierre HabouzitOct 5, 2007
  9. Sam RavnborgOct 5, 2007
  10. Linus TorvaldsOct 5, 2007
  11. Sam RavnborgOct 5, 2007
  12. Linus TorvaldsOct 5, 2007
  13. Dmitry PotapovOct 5, 2007
  14. Linus TorvaldsOct 5, 2007
  15. Fix memory leak in apply_filter.Pierre Habouzit, Oct 5, 2007
  16. Fix memory leak in apply_filter.Pierre Habouzit, Oct 5, 2007
  17. Johannes SchindelinOct 5, 2007
  18. Pierre HabouzitOct 5, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.