Prefer other types to int in misc.c
* src/misc.c (quote_copy_string, tar_savedir): Use bool for booleans. All uses changed. (quote_copy_string): Use char for chars. (unquote_string): Return void, since nobody uses return value. (unquote_string): Check for overflow in escapes like \777. (wdcache): Now array of idx_t not int, since in theory it might contain values greater than INT_MAX. All uses changed.
This commit is contained in:
@@ -644,13 +644,13 @@ void assign_string (char **dest, const char *src) ATTRIBUTE_NONNULL ((1, 2));
|
|||||||
void assign_null (char **dest) ATTRIBUTE_NONNULL ((1));
|
void assign_null (char **dest) ATTRIBUTE_NONNULL ((1));
|
||||||
void assign_string_n (char **string, const char *value, idx_t n);
|
void assign_string_n (char **string, const char *value, idx_t n);
|
||||||
#define ASSIGN_STRING_N(s,v) assign_string_n (s, v, sizeof (v))
|
#define ASSIGN_STRING_N(s,v) assign_string_n (s, v, sizeof (v))
|
||||||
int unquote_string (char *str);
|
void unquote_string (char *str);
|
||||||
char *zap_slashes (char *name);
|
char *zap_slashes (char *name);
|
||||||
char *normalize_filename (idx_t, char const *);
|
char *normalize_filename (idx_t, char const *);
|
||||||
void normalize_filename_x (char *name);
|
void normalize_filename_x (char *name);
|
||||||
void replace_prefix (char **pname, const char *samp, idx_t slen,
|
void replace_prefix (char **pname, const char *samp, idx_t slen,
|
||||||
const char *repl, idx_t rlen);
|
const char *repl, idx_t rlen);
|
||||||
char *tar_savedir (const char *name, int must_exist);
|
char *tar_savedir (const char *name, bool must_exist);
|
||||||
|
|
||||||
typedef struct namebuf *namebuf_t;
|
typedef struct namebuf *namebuf_t;
|
||||||
namebuf_t namebuf_create (const char *dir);
|
namebuf_t namebuf_create (const char *dir);
|
||||||
@@ -779,9 +779,9 @@ extern struct argp names_argp;
|
|||||||
extern struct name *gnu_list_name;
|
extern struct name *gnu_list_name;
|
||||||
|
|
||||||
void gid_to_gname (gid_t gid, char **gname);
|
void gid_to_gname (gid_t gid, char **gname);
|
||||||
int gname_to_gid (char const *gname, gid_t *pgid);
|
bool gname_to_gid (char const *gname, gid_t *pgid);
|
||||||
void uid_to_uname (uid_t uid, char **uname);
|
void uid_to_uname (uid_t uid, char **uname);
|
||||||
int uname_to_uid (char const *uname, uid_t *puid);
|
bool uname_to_uid (char const *uname, uid_t *puid);
|
||||||
|
|
||||||
void name_init (void);
|
void name_init (void);
|
||||||
void name_add_name (const char *name);
|
void name_add_name (const char *name);
|
||||||
|
|||||||
@@ -1645,7 +1645,7 @@ try_purge_directory (char const *directory_name)
|
|||||||
if (!is_dumpdir (¤t_stat_info))
|
if (!is_dumpdir (¤t_stat_info))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
current_dir = tar_savedir (directory_name, 0);
|
current_dir = tar_savedir (directory_name, false);
|
||||||
|
|
||||||
if (!current_dir)
|
if (!current_dir)
|
||||||
/* The directory doesn't exist now. It'll be created. In any
|
/* The directory doesn't exist now. It'll be created. In any
|
||||||
|
|||||||
37
src/misc.c
37
src/misc.c
@@ -104,11 +104,11 @@ quote_copy_string (const char *string)
|
|||||||
const char *source = string;
|
const char *source = string;
|
||||||
char *destination = 0;
|
char *destination = 0;
|
||||||
char *buffer = 0;
|
char *buffer = 0;
|
||||||
int copying = 0;
|
bool copying = false;
|
||||||
|
|
||||||
while (*source)
|
while (*source)
|
||||||
{
|
{
|
||||||
int character = *source++;
|
char character = *source++;
|
||||||
|
|
||||||
switch (character)
|
switch (character)
|
||||||
{
|
{
|
||||||
@@ -117,7 +117,7 @@ quote_copy_string (const char *string)
|
|||||||
{
|
{
|
||||||
idx_t length = (source - string) - 1;
|
idx_t length = (source - string) - 1;
|
||||||
|
|
||||||
copying = 1;
|
copying = true;
|
||||||
buffer = xmalloc (length + 2 + 2 * strlen (source) + 1);
|
buffer = xmalloc (length + 2 + 2 * strlen (source) + 1);
|
||||||
memcpy (buffer, string, length);
|
memcpy (buffer, string, length);
|
||||||
destination = buffer + length;
|
destination = buffer + length;
|
||||||
@@ -141,20 +141,18 @@ quote_copy_string (const char *string)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Takes a quoted C string (like those produced by quote_copy_string)
|
/* Take a quoted C string (like those produced by quote_copy_string)
|
||||||
and turns it back into the un-quoted original. This is done in
|
and turn it back into the un-quoted original, in place.
|
||||||
place. Returns 0 only if the string was not properly quoted, but
|
Complete the unquoting even if the string was not properly quoted.
|
||||||
completes the unquoting anyway.
|
|
||||||
|
|
||||||
This is used for reading the saved directory file in incremental
|
This is used for reading the saved directory file in incremental
|
||||||
dumps. It is used for decoding old 'N' records (demangling names).
|
dumps. It is used for decoding old 'N' records (demangling names).
|
||||||
But also, it is used for decoding file arguments, would they come
|
But also, it is used for decoding file arguments, would they come
|
||||||
from the shell or a -T file, and for decoding the --exclude
|
from the shell or a -T file, and for decoding the --exclude
|
||||||
argument. */
|
argument. */
|
||||||
int
|
void
|
||||||
unquote_string (char *string)
|
unquote_string (char *string)
|
||||||
{
|
{
|
||||||
int result = 1;
|
|
||||||
char *source = string;
|
char *source = string;
|
||||||
char *destination = string;
|
char *destination = string;
|
||||||
|
|
||||||
@@ -221,26 +219,24 @@ unquote_string (char *string)
|
|||||||
case '6':
|
case '6':
|
||||||
case '7':
|
case '7':
|
||||||
{
|
{
|
||||||
int value = *source++ - '0';
|
unsigned char value = *source++ - '0';
|
||||||
|
|
||||||
if (*source < '0' || *source > '7')
|
if (*source < '0' || *source > '7')
|
||||||
{
|
{
|
||||||
*destination++ = value;
|
*destination++ = value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
value = value * 8 + *source++ - '0';
|
unsigned char val1 = value * 8 + (*source++ - '0'), val2;
|
||||||
if (*source < '0' || *source > '7')
|
if (*source < '0' || *source > '7' || ckd_mul (&val2, val1, 8))
|
||||||
{
|
{
|
||||||
*destination++ = value;
|
*destination++ = value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
value = value * 8 + *source++ - '0';
|
*destination++ = val2 + (*source++ - '0');
|
||||||
*destination++ = value;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
result = 0;
|
|
||||||
*destination++ = '\\';
|
*destination++ = '\\';
|
||||||
if (*source)
|
if (*source)
|
||||||
*destination++ = *source++;
|
*destination++ = *source++;
|
||||||
@@ -253,7 +249,6 @@ unquote_string (char *string)
|
|||||||
|
|
||||||
if (source != destination)
|
if (source != destination)
|
||||||
*destination = '\0';
|
*destination = '\0';
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Zap trailing slashes. */
|
/* Zap trailing slashes. */
|
||||||
@@ -707,7 +702,7 @@ remove_any_file (const char *file_name, enum remove_option option)
|
|||||||
|
|
||||||
case RECURSIVE_REMOVE_OPTION:
|
case RECURSIVE_REMOVE_OPTION:
|
||||||
{
|
{
|
||||||
char *directory = tar_savedir (file_name, 0);
|
char *directory = tar_savedir (file_name, false);
|
||||||
char const *entry;
|
char const *entry;
|
||||||
idx_t entrylen;
|
idx_t entrylen;
|
||||||
|
|
||||||
@@ -937,7 +932,7 @@ enum { CHDIR_CACHE_SIZE = 16 };
|
|||||||
|
|
||||||
/* Indexes into WD of chdir targets with open file descriptors, sorted
|
/* Indexes into WD of chdir targets with open file descriptors, sorted
|
||||||
most-recently used first. Zero indexes are unused. */
|
most-recently used first. Zero indexes are unused. */
|
||||||
static int wdcache[CHDIR_CACHE_SIZE];
|
static idx_t wdcache[CHDIR_CACHE_SIZE];
|
||||||
|
|
||||||
/* Number of nonzero entries in WDCACHE. */
|
/* Number of nonzero entries in WDCACHE. */
|
||||||
static idx_t wdcache_count;
|
static idx_t wdcache_count;
|
||||||
@@ -1035,10 +1030,10 @@ chdir_do (idx_t i)
|
|||||||
/* Move the i value to the front of the cache. This is
|
/* Move the i value to the front of the cache. This is
|
||||||
O(CHDIR_CACHE_SIZE), but the cache is small. */
|
O(CHDIR_CACHE_SIZE), but the cache is small. */
|
||||||
idx_t ci;
|
idx_t ci;
|
||||||
int prev = wdcache[0];
|
idx_t prev = wdcache[0];
|
||||||
for (ci = 1; prev != i; ci++)
|
for (ci = 1; prev != i; ci++)
|
||||||
{
|
{
|
||||||
int cur = wdcache[ci];
|
idx_t cur = wdcache[ci];
|
||||||
wdcache[ci] = prev;
|
wdcache[ci] = prev;
|
||||||
if (cur == i)
|
if (cur == i)
|
||||||
break;
|
break;
|
||||||
@@ -1300,7 +1295,7 @@ namebuf_finish (namebuf_t buf)
|
|||||||
Return NULL on errors.
|
Return NULL on errors.
|
||||||
*/
|
*/
|
||||||
char *
|
char *
|
||||||
tar_savedir (const char *name, int must_exist)
|
tar_savedir (const char *name, bool must_exist)
|
||||||
{
|
{
|
||||||
char *ret = NULL;
|
char *ret = NULL;
|
||||||
DIR *dir = NULL;
|
DIR *dir = NULL;
|
||||||
|
|||||||
@@ -137,7 +137,9 @@ update_archive (void)
|
|||||||
{
|
{
|
||||||
if (S_ISDIR (s.st_mode))
|
if (S_ISDIR (s.st_mode))
|
||||||
{
|
{
|
||||||
char *p, *dirp = tar_savedir (current_stat_info.file_name, 1);
|
char *p;
|
||||||
|
char *dirp = tar_savedir (current_stat_info.file_name,
|
||||||
|
true);
|
||||||
if (dirp)
|
if (dirp)
|
||||||
{
|
{
|
||||||
namebuf_t nbuf = namebuf_create (current_stat_info.file_name);
|
namebuf_t nbuf = namebuf_create (current_stat_info.file_name);
|
||||||
|
|||||||
Reference in New Issue
Block a user