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>
|
2012-10-03 Merinov Nikolay <kim.roader@gmail.com>
|
||||||
|
|
||||||
* ftp.c (ftp_loop_internal): Ignore --no-clobber option when
|
* ftp.c (ftp_loop_internal): Ignore --no-clobber option when
|
||||||
|
72
src/url.c
72
src/url.c
@ -1245,12 +1245,16 @@ mkalldirs (const char *path)
|
|||||||
The idea is to have a convenient and efficient way to construct a
|
The idea is to have a convenient and efficient way to construct a
|
||||||
string by having various functions append data to it. Instead of
|
string by having various functions append data to it. Instead of
|
||||||
passing the obligatory BASEVAR, SIZEVAR and TAILPOS to all the
|
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 {
|
struct growable {
|
||||||
char *base;
|
char *base;
|
||||||
int size;
|
int size; /* memory allocated */
|
||||||
int tail;
|
int tail; /* string length */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Ensure that the string can accept APPEND_COUNT more characters past
|
/* Ensure that the string can accept APPEND_COUNT more characters past
|
||||||
@ -1268,28 +1272,55 @@ struct growable {
|
|||||||
/* Move the tail position by APPEND_COUNT characters. */
|
/* Move the tail position by APPEND_COUNT characters. */
|
||||||
#define TAIL_INCR(r, append_count) ((r)->tail += append_count)
|
#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_null (struct growable *dest)
|
||||||
|
{
|
||||||
|
GROW (dest, 1);
|
||||||
|
*TAIL (dest) = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 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
|
static void
|
||||||
append_string (const char *str, struct growable *dest)
|
append_string (const char *str, struct growable *dest)
|
||||||
{
|
{
|
||||||
int l = strlen (str);
|
int l = strlen (str);
|
||||||
GROW (dest, l);
|
|
||||||
memcpy (TAIL (dest), str, l);
|
if (l)
|
||||||
TAIL_INCR (dest, l);
|
{
|
||||||
|
GROW (dest, l);
|
||||||
|
memcpy (TAIL (dest), str, l);
|
||||||
|
TAIL_INCR (dest, l);
|
||||||
|
}
|
||||||
|
|
||||||
|
append_null (dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Append CH to DEST. For example, append_char (0, DEST)
|
|
||||||
zero-terminates DEST. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
append_char (char ch, struct growable *dest)
|
|
||||||
{
|
|
||||||
GROW (dest, 1);
|
|
||||||
*TAIL (dest) = ch;
|
|
||||||
TAIL_INCR (dest, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
filechr_not_unix = 1, /* unusable on Unix, / and \0 */
|
filechr_not_unix = 1, /* unusable on Unix, / and \0 */
|
||||||
@ -1455,6 +1486,7 @@ append_uri_pathel (const char *b, const char *e, bool escaped,
|
|||||||
}
|
}
|
||||||
|
|
||||||
TAIL_INCR (dest, outlen);
|
TAIL_INCR (dest, outlen);
|
||||||
|
append_null (dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Append to DEST the directory structure that corresponds the
|
/* 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_char ('/', &fnres);
|
||||||
append_string (temp_fnres.base, &fnres);
|
append_string (temp_fnres.base, &fnres);
|
||||||
|
|
||||||
/* Zero-terminate the file name. */
|
|
||||||
append_char ('\0', &fnres);
|
|
||||||
|
|
||||||
fname = fnres.base;
|
fname = fnres.base;
|
||||||
|
|
||||||
/* Make a final check that the path length is acceptable? */
|
/* 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_string (test_array[i].original_url, &dest);
|
||||||
append_uri_pathel (p, p + strlen(p), test_array[i].escaped, &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",
|
mu_assert ("test_append_uri_pathel: wrong result",
|
||||||
strcmp (dest.base, test_array[i].expected_result) == 0);
|
strcmp (dest.base, test_array[i].expected_result) == 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user