On Tue, Oct 10, 2000 at 06:39:10PM -0400, Greg Hudson wrote:
> I support this change, but it might be nice to hear the opion of one
> of the original Subversion people for such a basic change.
Yes, I am not going to commit this without approval.
> > + /* pool from which the string was originally allocated -- used only
> > + for growing the string, and is NOT destroyed when the string is
> > + destroyed */
>
> You can't destroy a Subversion string, so this comment doesn't quite
> make sense. I'm not sure what alternative wording to use; perhaps
> "and is NOT necessarily specific to the string".
Okay, will change...
> > This also removes the feature that svn_string_append* will allocate
> > the string if they are passed the NULL.
>
> That feature doesn't make sense anyway. (A string is allocated and
> then immediately forgotten about.) I think someone wasn't paying
> attention when they put that in.
I did think it was a silly feature, didn't realise it was *that* silly
though. :)
Updated patch: [sorry these patches are quite big]
- Changes comment as suggested
- Covers new base64.c
Index: include/svn_string.h
===================================================================
RCS file: /cvs/subversion/subversion/include/svn_string.h,v
retrieving revision 1.35
diff -u -r1.35 svn_string.h
--- include/svn_string.h 2000/10/02 18:29:04 1.35
+++ include/svn_string.h 2000/10/11 20:08:59
@@ -63,6 +63,10 @@
char *data; /* pointer to the bytestring */
apr_size_t len; /* length of bytestring */
apr_size_t blocksize; /* total size of buffer allocated */
+ /* pool from which this string was originally allocated, and is not
+ necessarily specific to this string. This is used only for
+ allocating more memory from when the string needs to grow. */
+ apr_pool_t *pool;
} svn_string_t;
@@ -77,11 +81,9 @@
/* Make sure that the string STR has at least MINIMUM_SIZE bytes of
space available in the memory block. (MINIMUM_SIZE should include
- space for the terminating null character.) If we need more memory,
- get it from POOL. */
+ space for the terminating null character.) */
void svn_string_ensure (svn_string_t *str,
- apr_size_t minimum_size,
- apr_pool_t *pool);
+ apr_size_t minimum_size);
/* Set/get a bytestring empty */
@@ -97,14 +99,11 @@
onto a svn_string_t. reallocs() if necessary. */
void svn_string_appendbytes (svn_string_t *str, const char *bytes,
- const size_t count, apr_pool_t *pool);
+ const size_t count);
void svn_string_appendstr (svn_string_t *targetstr,
- const svn_string_t *appendstr,
- apr_pool_t *pool);
+ const svn_string_t *appendstr);
void svn_string_appendcstr (svn_string_t *targetstr,
- const char *cstr,
- apr_pool_t *pool);
-
+ const char *cstr);
/* Duplicate a bytestring; returns freshly malloc'd copy. */
Index: libsvn_delta/svndiff.c
===================================================================
RCS file: /cvs/subversion/subversion/libsvn_delta/svndiff.c,v
retrieving revision 1.5
diff -u -r1.5 svndiff.c
--- libsvn_delta/svndiff.c 2000/10/11 01:19:10 1.5
+++ libsvn_delta/svndiff.c 2000/10/11 20:09:00
@@ -125,7 +125,7 @@
char buf[128], *p;
p = encode_int (buf, val);
- svn_string_appendbytes (header, buf, p - buf, pool);
+ svn_string_appendbytes (header, buf, p - buf);
}
@@ -177,7 +177,7 @@
ip = encode_int (ip + 1, op->length);
if (op->action_code != svn_txdelta_new)
ip = encode_int (ip, op->offset);
- svn_string_appendbytes (instructions, ibuf, ip - ibuf, pool);
+ svn_string_appendbytes (instructions, ibuf, ip - ibuf);
}
/* Encode the header. */
@@ -409,7 +409,7 @@
}
/* Concatenate the old with the new. */
- svn_string_appendbytes (db->buffer, buffer, *len, db->subpool);
+ svn_string_appendbytes (db->buffer, buffer, *len);
/* Read the header, if we have enough bytes for that. */
p = (const unsigned char *) db->buffer->data;
Index: libsvn_delta/text_delta.c
===================================================================
RCS file: /cvs/subversion/subversion/libsvn_delta/text_delta.c,v
retrieving revision 1.15
diff -u -r1.15 text_delta.c
--- libsvn_delta/text_delta.c 2000/10/10 07:27:50 1.15
+++ libsvn_delta/text_delta.c 2000/10/11 20:09:00
@@ -163,7 +163,7 @@
op->action_code = opcode;
op->offset = window->new->len;
op->length = length;
- svn_string_appendbytes (window->new, new_data, length, window->pool);
+ svn_string_appendbytes (window->new, new_data, length);
break;
default:
assert (!"unknown delta op.");
Index: libsvn_delta/xml_parse.c
===================================================================
RCS file: /cvs/subversion/subversion/libsvn_delta/xml_parse.c,v
retrieving revision 1.122
diff -u -r1.122 xml_parse.c
--- libsvn_delta/xml_parse.c 2000/10/10 07:27:50 1.122
+++ libsvn_delta/xml_parse.c 2000/10/11 20:09:03
@@ -1300,8 +1300,7 @@
if (digger->current_propdelta)
svn_string_appendbytes (digger->current_propdelta->value,
- data, length,
- digger->pool);
+ data, length);
}
else
Index: libsvn_fs/id.c
===================================================================
RCS file: /cvs/subversion/subversion/libsvn_fs/id.c,v
retrieving revision 1.3
diff -u -r1.3 id.c
--- libsvn_fs/id.c 2000/10/11 18:18:29 1.3
+++ libsvn_fs/id.c 2000/10/11 20:09:04
@@ -294,7 +294,7 @@
if (id[i + 1] != -1)
buf[len++] = '.';
- svn_string_appendbytes (unparsed, buf, len, pool);
+ svn_string_appendbytes (unparsed, buf, len);
}
return unparsed;
Index: libsvn_fs/skel.c
===================================================================
RCS file: /cvs/subversion/subversion/libsvn_fs/skel.c,v
retrieving revision 1.4
diff -u -r1.4 skel.c
--- libsvn_fs/skel.c 2000/10/11 18:18:29 1.4
+++ libsvn_fs/skel.c 2000/10/11 20:09:05
@@ -395,8 +395,8 @@
/* Append an atom to STR. */
if (use_implicit (skel))
{
- svn_string_appendbytes (str, skel->data, skel->len, pool);
- svn_string_appendbytes (str, " ", 1, pool);
+ svn_string_appendbytes (str, skel->data, skel->len);
+ svn_string_appendbytes (str, " ", 1);
}
else
{
@@ -411,11 +411,10 @@
/* Make sure we have room for the length, the space, and the
atom's contents. */
svn_string_ensure (str,
- str->len + length_len + 1 + skel->len,
- pool);
- svn_string_appendbytes (str, buf, length_len, pool);
+ str->len + length_len + 1 + skel->len);
+ svn_string_appendbytes (str, buf, length_len);
str->data[str->len++] = '\n';
- svn_string_appendbytes (str, skel->data, skel->len, pool);
+ svn_string_appendbytes (str, skel->data, skel->len);
}
}
else
@@ -425,7 +424,7 @@
int i;
/* The opening paren has been indented by the parent, if necessary. */
- svn_string_ensure (str, str->len + 1, pool);
+ svn_string_ensure (str, str->len + 1);
str->data[str->len++] = '(';
depth++;
@@ -434,7 +433,7 @@
for (child = skel->children; child; child = child->next)
{
/* Add a newline, and indentation. */
- svn_string_ensure (str, str->len + 1 + depth * 2, pool);
+ svn_string_ensure (str, str->len + 1 + depth * 2);
str->data[str->len++] = '\n';
for (i = 0; i < depth * 2; i++)
str->data[str->len++] = ' ';
@@ -448,7 +447,7 @@
There should be no newline after a closing paren; a skel must
entirely fill its string. If we're part of a parent list,
the parent will take care of adding that. */
- svn_string_ensure (str, str->len + 1 + depth * 2 + 1, pool);
+ svn_string_ensure (str, str->len + 1 + depth * 2 + 1);
str->data[str->len++] = '\n';
for (i = 0; i < depth * 2; i++)
str->data[str->len++] = ' ';
Index: libsvn_string/svn_string.c
===================================================================
RCS file: /cvs/subversion/subversion/libsvn_string/svn_string.c,v
retrieving revision 1.49
diff -u -r1.49 svn_string.c
--- libsvn_string/svn_string.c 2000/10/03 22:33:37 1.49
+++ libsvn_string/svn_string.c 2000/10/11 20:09:06
@@ -97,6 +97,7 @@
new_string->data = (char *) apr_palloc (pool, size + 1);
new_string->len = size;
new_string->blocksize = size + 1;
+ new_string->pool = pool;
memcpy (new_string->data, bytes, size);
@@ -161,8 +162,7 @@
void
svn_string_ensure (svn_string_t *str,
- apr_size_t minimum_size,
- apr_pool_t *pool)
+ apr_size_t minimum_size)
{
/* Keep doubling capacity until have enough. */
if (str->blocksize < minimum_size)
@@ -177,28 +177,22 @@
str->data = (char *) my__realloc (str->data,
str->len,
str->blocksize,
- pool);
+ str->pool);
}
/* Copy COUNT bytes from BYTES onto the end of bytestring STR. */
void
svn_string_appendbytes (svn_string_t *str, const char *bytes,
- const apr_size_t count, apr_pool_t *pool)
+ const apr_size_t count)
{
apr_size_t total_len;
void *start_address;
- if (str == NULL)
- {
- str = svn_string_ncreate (bytes, count, pool);
- return;
- }
-
total_len = str->len + count; /* total size needed */
/* +1 for null terminator. */
- svn_string_ensure (str, (total_len + 1), pool);
+ svn_string_ensure (str, (total_len + 1));
/* get address 1 byte beyond end of original bytestring */
start_address = (str->data + str->len);
@@ -214,21 +208,17 @@
/* Append APPENDSTR onto TARGETSTR. */
void
-svn_string_appendstr (svn_string_t *targetstr, const svn_string_t *appendstr,
- apr_pool_t *pool)
+svn_string_appendstr (svn_string_t *targetstr, const svn_string_t *appendstr)
{
- svn_string_appendbytes (targetstr, appendstr->data,
- appendstr->len, pool);
+ svn_string_appendbytes (targetstr, appendstr->data, appendstr->len);
}
/* Append CSTR onto TARGETSTR. */
void
-svn_string_appendcstr (svn_string_t *targetstr,
- const char *cstr,
- apr_pool_t *pool)
+svn_string_appendcstr (svn_string_t *targetstr, const char *cstr)
{
- svn_string_appendbytes (targetstr, cstr, strlen(cstr), pool);
+ svn_string_appendbytes (targetstr, cstr, strlen(cstr));
}
Index: libsvn_subr/base64.c
===================================================================
RCS file: /cvs/subversion/subversion/libsvn_subr/base64.c,v
retrieving revision 1.1
diff -u -r1.1 base64.c
--- libsvn_subr/base64.c 2000/10/11 19:19:51 1.1
+++ libsvn_subr/base64.c 2000/10/11 20:09:06
@@ -112,11 +112,11 @@
memset (eb->buf + eb->buflen, 0, 3 - eb->buflen);
encode_group (eb->buf, group);
memset (group + (eb->buflen + 1), '=', 4 - (eb->buflen + 1));
- svn_string_appendbytes (encoded, group, 4, subpool);
+ svn_string_appendbytes (encoded, group, 4);
eb->linelen += 4;
}
if (eb->linelen != 0)
- svn_string_appendcstr (encoded, "\n", subpool);
+ svn_string_appendcstr (encoded, "\n");
}
else
{
@@ -129,12 +129,12 @@
memcpy (eb->buf + eb->buflen, p, 3 - eb->buflen);
p += (3 - eb->buflen);
encode_group (eb->buf, group);
- svn_string_appendbytes (encoded, group, 4, subpool);
+ svn_string_appendbytes (encoded, group, 4);
eb->buflen = 0;
eb->linelen += 4;
if (eb->linelen == BASE64_LINELEN)
{
- svn_string_appendcstr (encoded, "\n", subpool);
+ svn_string_appendcstr (encoded, "\n");
eb->linelen = 0;
}
}
@@ -238,7 +238,7 @@
{
memset (db->buf + db->buflen, 0, 4 - db->buflen);
decode_group (db->buf, group);
- svn_string_appendbytes (decoded, group, db->buflen - 1, subpool);
+ svn_string_appendbytes (decoded, group, db->buflen - 1);
}
db->done = TRUE;
}
@@ -250,7 +250,7 @@
if (db->buflen == 4)
{
decode_group (db->buf, group);
- svn_string_appendbytes (decoded, group, 3, subpool);
+ svn_string_appendbytes (decoded, group, 3);
db->buflen = 0;
}
}
Index: libsvn_subr/path.c
===================================================================
RCS file: /cvs/subversion/subversion/libsvn_subr/path.c,v
retrieving revision 1.13
diff -u -r1.13 path.c
--- libsvn_subr/path.c 2000/10/04 20:50:20 1.13
+++ libsvn_subr/path.c 2000/10/11 20:09:06
@@ -88,9 +88,9 @@
char dirsep = SVN_PATH_REPOS_SEPARATOR;
if (! svn_string_isempty (path))
- svn_string_appendbytes (path, &dirsep, sizeof (dirsep), pool);
+ svn_string_appendbytes (path, &dirsep, sizeof (dirsep));
- svn_string_appendbytes (path, component, len, pool);
+ svn_string_appendbytes (path, component, len);
canonicalize (path, style);
}
Index: libsvn_subr/svn_parse.c
===================================================================
RCS file: /cvs/subversion/subversion/libsvn_subr/svn_parse.c,v
retrieving revision 1.39
diff -u -r1.39 svn_parse.c
--- libsvn_subr/svn_parse.c 2000/10/10 00:28:25 1.39
+++ libsvn_subr/svn_parse.c 2000/10/11 20:09:07
@@ -85,14 +85,14 @@
if (c == '\n') /* line is finished. */
{
/* store the newline in our bytestring (important!) */
- svn_string_appendbytes (line, &c, 1, pool);
+ svn_string_appendbytes (line, &c, 1);
return APR_SUCCESS;
}
else /* otherwise, just append this byte to the bytestring */
{
- svn_string_appendbytes (line, &c, 1, pool);
+ svn_string_appendbytes (line, &c, 1);
}
}
}
@@ -135,8 +135,7 @@
svn_string_appendbytes (*substr, /* new substring */
searchstr->data + start,/* start copy */
- (i - start), /* number to copy */
- pool);
+ (i - start)); /* number to copy */
svn_string_strip_whitespace (*substr);
@@ -200,7 +199,7 @@
char *finalmsg; /* TODO: use apr's sprintf() thingie here */
svn_string_t *msg = svn_string_create
("svn_parse(): can't open for reading, file ", pool);
- svn_string_appendstr (msg, filename, pool);
+ svn_string_appendstr (msg, filename);
return svn_error_create (result, NULL, NULL, pool, msg->data);
}
Index: libsvn_subr/xml.c
===================================================================
RCS file: /cvs/subversion/subversion/libsvn_subr/xml.c,v
retrieving revision 1.26
diff -u -r1.26 xml.c
--- libsvn_subr/xml.c 2000/10/10 00:28:25 1.26
+++ libsvn_subr/xml.c 2000/10/11 20:09:08
@@ -81,7 +81,7 @@
while (q < end && *q != '&' && *q != '<' && *q != '>'
&& *q != '"' && *q != '\'')
q++;
- svn_string_appendbytes (*outstr, p, q - p, pool);
+ svn_string_appendbytes (*outstr, p, q - p);
/* We may already be a winner. */
if (q == end)
@@ -89,15 +89,15 @@
/* Append the entity reference for the character. */
if (*q == '&')
- svn_string_appendcstr (*outstr, "&", pool);
+ svn_string_appendcstr (*outstr, "&");
else if (*q == '<')
- svn_string_appendcstr (*outstr, "<", pool);
+ svn_string_appendcstr (*outstr, "<");
else if (*q == '>')
- svn_string_appendcstr (*outstr, ">", pool);
+ svn_string_appendcstr (*outstr, ">");
else if (*q == '"')
- svn_string_appendcstr (*outstr, """, pool);
+ svn_string_appendcstr (*outstr, """);
else if (*q == '\'')
- svn_string_appendcstr (*outstr, "'", pool);
+ svn_string_appendcstr (*outstr, "'");
p = q + 1;
}
@@ -238,8 +238,7 @@
{
if (*str == NULL)
*str = svn_string_create ("", pool);
- svn_string_appendcstr (*str, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
- pool);
+ svn_string_appendcstr (*str, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
}
@@ -336,8 +335,8 @@
if (*str == NULL)
*str = svn_string_create ("", pool);
- svn_string_appendcstr (*str, "<", pool);
- svn_string_appendcstr (*str, tagname, pool);
+ svn_string_appendcstr (*str, "<");
+ svn_string_appendcstr (*str, tagname);
for (hi = apr_hash_first (attributes); hi; hi = apr_hash_next (hi))
{
@@ -348,18 +347,18 @@
apr_hash_this (hi, &key, &keylen, &val);
assert (val != NULL);
- svn_string_appendcstr (*str, "\n ", pool);
- svn_string_appendcstr (*str, (char *) key, pool);
- svn_string_appendcstr (*str, "=\"", pool);
+ svn_string_appendcstr (*str, "\n ");
+ svn_string_appendcstr (*str, (char *) key);
+ svn_string_appendcstr (*str, "=\"");
svn_xml_escape_string (str, (svn_string_t *) val, pool);
- svn_string_appendcstr (*str, "\"", pool);
+ svn_string_appendcstr (*str, "\"");
}
if (style == svn_xml_self_closing)
- svn_string_appendcstr (*str, "/", pool);
- svn_string_appendcstr (*str, ">", pool);
+ svn_string_appendcstr (*str, "/");
+ svn_string_appendcstr (*str, ">");
if (style != svn_xml_protect_pcdata)
- svn_string_appendcstr (*str, "\n", pool);
+ svn_string_appendcstr (*str, "\n");
}
@@ -401,9 +400,9 @@
if (*str == NULL)
*str = svn_string_create ("", pool);
- svn_string_appendcstr (*str, "</", pool);
- svn_string_appendcstr (*str, tagname, pool);
- svn_string_appendcstr (*str, ">\n", pool);
+ svn_string_appendcstr (*str, "</");
+ svn_string_appendcstr (*str, tagname);
+ svn_string_appendcstr (*str, ">\n");
}
Index: libsvn_fs/tests/skel-test.c
===================================================================
RCS file: /cvs/subversion/subversion/libsvn_fs/tests/skel-test.c,v
retrieving revision 1.4
diff -u -r1.4 skel-test.c
--- libsvn_fs/tests/skel-test.c 2000/10/11 18:19:43 1.4
+++ libsvn_fs/tests/skel-test.c 2000/10/11 20:09:09
@@ -178,8 +178,8 @@
abort ();
if (! skel_is_space (space))
abort ();
- svn_string_appendbytes (str, &byte, 1, pool);
- svn_string_appendbytes (str, &space, 1, pool);
+ svn_string_appendbytes (str, &byte, 1);
+ svn_string_appendbytes (str, &space, 1);
}
@@ -229,8 +229,8 @@
if (! skel_is_space (space))
abort ();
- svn_string_appendbytes (str, name, len, pool);
- svn_string_appendbytes (str, &space, 1, pool);
+ svn_string_appendbytes (str, name, len);
+ svn_string_appendbytes (str, &space, 1);
}
@@ -313,7 +313,7 @@
/* Copy in the real data (which may contain nulls). */
memcpy (buf + length_len, data, len);
- svn_string_appendbytes (str, buf, length_len + len, pool);
+ svn_string_appendbytes (str, buf, length_len + len);
}
@@ -409,9 +409,9 @@
if (len > 0 && ! skel_is_space (space))
abort ();
- svn_string_appendcstr (str, "(", pool);
+ svn_string_appendcstr (str, "(");
for (i = 0; i < len; i++)
- svn_string_appendbytes (str, &space, 1, pool);
+ svn_string_appendbytes (str, &space, 1);
}
@@ -426,8 +426,8 @@
abort ();
for (i = 0; i < len; i++)
- svn_string_appendbytes (str, &space, 1, pool);
- svn_string_appendcstr (str, ")", pool);
+ svn_string_appendbytes (str, &space, 1);
+ svn_string_appendcstr (str, ")");
}
@@ -621,7 +621,7 @@
/* A list containing an invalid element. */
str = get_empty_string ();
put_list_start (str, sep, sep_count);
- svn_string_appendcstr (str, "100 ", pool);
+ svn_string_appendcstr (str, "100 ");
put_list_end (str, sep, sep_count);
if (parse_str (str))
return fail ();
Index: libsvn_string/tests/stringtest.c
===================================================================
RCS file: /cvs/subversion/subversion/libsvn_string/tests/stringtest.c,v
retrieving revision 1.27
diff -u -r1.27 stringtest.c
--- libsvn_string/tests/stringtest.c 2000/09/21 22:18:28 1.27
+++ libsvn_string/tests/stringtest.c 2000/10/11 20:09:10
@@ -114,7 +114,7 @@
strcpy (tmp, a->data);
strcat (tmp, b->data);
old_len = a->len;
- svn_string_appendstr (a, b, pool);
+ svn_string_appendstr (a, b);
/* Test that length, data, and null-termination are correct. */
if ((a->len == (old_len + b->len)) && ((strcmp (a->data, tmp)) == 0))
@@ -128,7 +128,7 @@
test4 (const char **msg)
{
a = svn_string_create (phrase_1, pool);
- svn_string_appendcstr (a, "new bytes to append", pool);
+ svn_string_appendcstr (a, "new bytes to append");
*msg = "append C string to svn_string_t";
@@ -145,7 +145,7 @@
test5 (const char **msg)
{
a = svn_string_create (phrase_1, pool);
- svn_string_appendbytes (a, "new bytes to append", 9, pool);
+ svn_string_appendbytes (a, "new bytes to append", 9);
*msg = "append bytes, then compare two strings";
@@ -289,7 +289,7 @@
block_len_1 = (s->blocksize);
t = svn_string_create (", plus a string more than twice as long", pool);
- svn_string_appendstr (s, t, pool);
+ svn_string_appendstr (s, t);
len_2 = (s->len);
block_len_2 = (s->blocksize);
Received on Sat Oct 21 14:36:10 2006