summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gsupplicant/supplicant.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c
index 829ceb79..0ae55404 100644
--- a/gsupplicant/supplicant.c
+++ b/gsupplicant/supplicant.c
@@ -2964,23 +2964,22 @@ static dbus_bool_t is_psk_raw_key(const char *psk)
static unsigned char hexchar2bin(char c)
{
if ((c >= '0') && (c <= '9'))
- return (c - '0');
+ return c - '0';
else if ((c >= 'A') && (c <= 'F'))
- return (c - 'A' + 10);
+ return c - 'A' + 10;
else if ((c >= 'a') && (c <= 'f'))
- return (c - 'a' + 10);
+ return c - 'a' + 10;
else
- return (c);
+ return c;
}
static void hexstring2bin(const char *string, unsigned char *data, size_t data_len)
{
size_t i;
- if ((data != NULL) && (string != NULL))
- for (i = 0; i < data_len; i++)
- data[i] = (hexchar2bin(string[i * 2 + 0]) << 4 |
- hexchar2bin(string[i * 2 + 1]) << 0);
+ for (i = 0; i < data_len; i++)
+ data[i] = (hexchar2bin(string[i * 2 + 0]) << 4 |
+ hexchar2bin(string[i * 2 + 1]) << 0);
}
static void add_network_security_psk(DBusMessageIter *dict,
@@ -2990,15 +2989,18 @@ static void add_network_security_psk(DBusMessageIter *dict,
const char *key = "psk";
if (is_psk_raw_key(ssid->passphrase) == TRUE) {
- const size_t size = 32;
- unsigned char data[size];
+ unsigned char data[32];
unsigned char *datap = data;
- hexstring2bin(ssid->passphrase, datap, size);
+ /* The above pointer alias is required by D-Bus because
+ * with D-Bus and GCC, non-heap-allocated arrays cannot
+ * be passed directly by their base pointer. */
+
+ hexstring2bin(ssid->passphrase, datap, sizeof(data));
supplicant_dbus_dict_append_fixed_array(dict,
key, DBUS_TYPE_BYTE,
- &datap, size);
+ &datap, sizeof(data));
} else
supplicant_dbus_dict_append_basic(dict,
key, DBUS_TYPE_STRING,