mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Fix a warning when using glibc's strcspn with clang.
With glibc 2.15 and clang 3.0, I get warnings from where we use the strcpsn implementation in the header as strcspn(string, "="). This is apparently because clang sees that part of the strcspn macro expands to "="[2], and doesn't realize that that part of the macro is only evaluated when "="[1] != 0.
This commit is contained in:
parent
9c8ec0aa20
commit
5fad3dc36b
3
changes/clang_strcspn
Normal file
3
changes/clang_strcspn
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
o Minor bugfixes:
|
||||||
|
- Avoid a warning caused by using strcspn from glibc with clang 3.0.
|
||||||
|
Bugfix on 0.2.3.13-alpha.
|
@ -3887,13 +3887,26 @@ tor_get_exit_code(const process_handle_t *process_handle,
|
|||||||
return PROCESS_EXIT_EXITED;
|
return PROCESS_EXIT_EXITED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Helper: return the number of characters in <b>s</b> preceding the first
|
||||||
|
* occurence of <b>ch</b>. If <b>ch</b> does not occur in <b>s</b>, return
|
||||||
|
* the length of <b>s</b>. Should be equivalent to strspn(s, "ch"). */
|
||||||
|
static INLINE size_t
|
||||||
|
str_num_before(const char *s, char ch)
|
||||||
|
{
|
||||||
|
const char *cp = strchr(s, ch);
|
||||||
|
if (cp)
|
||||||
|
return cp - s;
|
||||||
|
else
|
||||||
|
return strlen(s);
|
||||||
|
}
|
||||||
|
|
||||||
/** Return non-zero iff getenv would consider <b>s1</b> and <b>s2</b>
|
/** Return non-zero iff getenv would consider <b>s1</b> and <b>s2</b>
|
||||||
* to have the same name as strings in a process's environment. */
|
* to have the same name as strings in a process's environment. */
|
||||||
int
|
int
|
||||||
environment_variable_names_equal(const char *s1, const char *s2)
|
environment_variable_names_equal(const char *s1, const char *s2)
|
||||||
{
|
{
|
||||||
size_t s1_name_len = strcspn(s1, "=");
|
size_t s1_name_len = str_num_before(s1, '=');
|
||||||
size_t s2_name_len = strcspn(s2, "=");
|
size_t s2_name_len = str_num_before(s2, '=');
|
||||||
|
|
||||||
return (s1_name_len == s2_name_len &&
|
return (s1_name_len == s2_name_len &&
|
||||||
tor_memeq(s1, s2, s1_name_len));
|
tor_memeq(s1, s2, s1_name_len));
|
||||||
@ -3968,7 +3981,7 @@ process_environment_make(struct smartlist_t *env_vars)
|
|||||||
for (i = 0; i < n_env_vars; ++i) {
|
for (i = 0; i < n_env_vars; ++i) {
|
||||||
const char *s = smartlist_get(env_vars_sorted, i);
|
const char *s = smartlist_get(env_vars_sorted, i);
|
||||||
size_t slen = strlen(s);
|
size_t slen = strlen(s);
|
||||||
size_t s_name_len = strcspn(s, "=");
|
size_t s_name_len = str_num_before(s, '=');
|
||||||
|
|
||||||
if (s_name_len == slen) {
|
if (s_name_len == slen) {
|
||||||
log_warn(LD_GENERAL,
|
log_warn(LD_GENERAL,
|
||||||
|
Loading…
Reference in New Issue
Block a user