[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug-wget] [PATCH] Change growable string object to null terminate
From: |
Ray Satiro |
Subject: |
[Bug-wget] [PATCH] Change growable string object to null terminate |
Date: |
Mon, 08 Oct 2012 01:08:49 -0400 |
src/ChangeLog
src/url.c
@ src/url.c:
Any function directly writing to the members of a growable string
object must call append_null(). Functions that already do this I've
changed to call append_null(): shorten_length(), append_char(),
append_string(), append_uri_pathel().
- (append_null)
New function to null terminate a growable string object.
- (shorten_length)
New function to shorten the length of a growable string object.
---
src/ChangeLog | 9 ++++++++
src/url.c | 66 ++++++++++++++++++++++++++++++++++++++++++-----------------
2 files changed, 56 insertions(+), 19 deletions(-)
diff --git a/src/ChangeLog b/src/ChangeLog
index b1bcff4..2ccfe6f 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,12 @@
+2012-10-07 Ray Satiro <address@hidden>
+
+ * url.c: Change the functions of a growable string object to null
+ terminate the string.
+ * url.c (append_null): New function to null terminate a growable
+ string object.
+ * url.c (shorten_length): New function to shorten the length of a
+ growable string object.
+
2012-10-03 Merinov Nikolay <address@hidden>
* ftp.c (ftp_loop_internal): Ignore --no-clobber option when
diff --git a/src/url.c b/src/url.c
index 4a1c9f1..87d6290 100644
--- a/src/url.c
+++ b/src/url.c
@@ -1245,12 +1245,16 @@ mkalldirs (const char *path)
The idea is to have a convenient and efficient way to construct a
string by having various functions append data to it. Instead of
passing the obligatory BASEVAR, SIZEVAR and TAILPOS to all the
- functions in questions, we pass the pointer to this struct. */
+ functions in questions, we pass the pointer to this struct.
+
+ Functions that write to the members in this struct must make sure
+ that base remains null terminated by calling append_null().
+ */
struct growable {
char *base;
- int size;
- int tail;
+ int size; /* memory allocated */
+ int tail; /* string length */
};
/* Ensure that the string can accept APPEND_COUNT more characters past
@@ -1268,29 +1272,56 @@ struct growable {
/* Move the tail position by APPEND_COUNT characters. */
#define TAIL_INCR(r, append_count) ((r)->tail += append_count)
-/* Append the string STR to DEST. NOTICE: the string in DEST is not
- terminated. */
+/* Append NULL to DEST. */
static void
-append_string (const char *str, struct growable *dest)
+append_null (struct growable *dest)
{
- int l = strlen (str);
- GROW (dest, l);
- memcpy (TAIL (dest), str, l);
- TAIL_INCR (dest, l);
+ GROW (dest, 1);
+ *TAIL (dest) = 0;
}
-/* Append CH to DEST. For example, append_char (0, DEST)
- zero-terminates DEST. */
+/* Shorten DEST to LENGTH. */
+static void
+shorten_length (size_t length, struct growable *dest)
+{
+ if (length < dest->tail)
+ dest->tail = length;
+ append_null (dest);
+}
+
+/* Append CH to DEST. */
static void
append_char (char ch, struct growable *dest)
{
- GROW (dest, 1);
- *TAIL (dest) = ch;
- TAIL_INCR (dest, 1);
+ if (ch)
+ {
+ GROW (dest, 1);
+ *TAIL (dest) = ch;
+ TAIL_INCR (dest, 1);
+ }
+
+ append_null (dest);
}
+/* Append the string STR to DEST. */
+static void
+append_string (const char *str, struct growable *dest)
+{
+ int l = strlen (str);
+
+ if (l)
+ {
+ GROW (dest, l);
+ memcpy (TAIL (dest), str, l);
+ TAIL_INCR (dest, l);
+ }
+
+ append_null (dest);
+}
+
+
enum {
filechr_not_unix = 1, /* unusable on Unix, / and \0 */
filechr_not_windows = 2, /* unusable on Windows, one of \|/<>?:*" */
@@ -1455,6 +1486,7 @@ append_uri_pathel (const char *b, const char *e, bool
escaped,
}
TAIL_INCR (dest, outlen);
+ append_null (dest);
}
/* Append to DEST the directory structure that corresponds the
@@ -1606,9 +1638,6 @@ url_file_name (const struct url *u, char
*replaced_filename)
append_char ('/', &fnres);
append_string (temp_fnres.base, &fnres);
- /* Zero-terminate the file name. */
- append_char ('\0', &fnres);
-
fname = fnres.base;
/* Make a final check that the path length is acceptable? */
@@ -2262,7 +2291,6 @@ test_append_uri_pathel()
append_string (test_array[i].original_url, &dest);
append_uri_pathel (p, p + strlen(p), test_array[i].escaped, &dest);
- append_char ('\0', &dest);
mu_assert ("test_append_uri_pathel: wrong result",
strcmp (dest.base, test_array[i].expected_result) == 0);
--
1.7.11.msysgit.1
- [Bug-wget] [PATCH] Change growable string object to null terminate,
Ray Satiro <=