static dbus_bool_t
is_valid_section_name (const char *name)
{
- /* 5. Group names may contain all ASCII characters except for control characters and '[' and ']'. */
+ /* 5. Group names may contain all ASCII characters except for control characters and '[' and ']'.
+ *
+ * We don't use isprint() here because it's locale-dependent. ASCII
+ * characters <= 0x1f and 0x7f are control characters, and bytes with
+ * values >= 0x80 aren't ASCII. 0x20 is a space, which we must allow,
+ * not least because DBUS_SERVICE_SECTION contains one. */
while (*name)
{
- if (!((*name >= 'A' && *name <= 'Z') || (*name >= 'a' || *name <= 'z') ||
- *name == '\n' || *name == '\t'))
+ if (*name <= 0x1f || *name >= 0x7f || *name == '[' || *name == ']')
return FALSE;
name++;
dbus_bool_t
_dbus_get_is_errno_eagain_or_ewouldblock (int e)
{
+ /* Avoid the -Wlogical-op GCC warning, which can be triggered when EAGAIN and
+ * EWOULDBLOCK are numerically equal, which is permitted as described by
+ * errno(3).
+ */
+#if EAGAIN == EWOULDBLOCK
+ return e == EAGAIN;
+#else
return e == EAGAIN || e == EWOULDBLOCK;
+#endif
}
/**
}
else if ((strstr (arg, "--bus=") == arg) || (strstr (arg, "--peer=") == arg) || (strstr (arg, "--address=") == arg))
{
- if (arg[2] == 'b') /* bus */
+ /* Check for peer first, to avoid the GCC -Wduplicated-branches
+ * warning.
+ */
+ if (arg[2] == 'p') /* peer */
{
- is_bus = TRUE;
+ is_bus = FALSE;
}
- else if (arg[2] == 'p') /* peer */
+ else if (arg[2] == 'b') /* bus */
{
- is_bus = FALSE;
+ is_bus = TRUE;
}
else /* address; keeping backwards compatibility */
{