mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
Change growable string object to null terminate
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.
This commit is contained in:
parent
13c6e7832a
commit
242ddfc74e
@ -1,3 +1,12 @@
|
||||
2012-10-07 Ray Satiro <raysatiro@yahoo.com>
|
||||
|
||||
* 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 <kim.roader@gmail.com>
|
||||
|
||||
* ftp.c (ftp_loop_internal): Ignore --no-clobber option when
|
||||
|
60
src/url.c
60
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)
|
||||
{
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user