Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 1997 - 2006 Pekka Riikonen
+ Copyright (C) 1997 - 2007 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
return FALSE;
for (i = 0; i < strlen(string); i++)
- dest[i] = toupper(string[i]);
+ dest[i] = (char)toupper((int)string[i]);
return TRUE;
}
return FALSE;
for (i = 0; i < strlen(string); i++)
- dest[i] = tolower(string[i]);
+ dest[i] = (char)tolower((int)string[i]);
return TRUE;
}
{
SilcUInt32 tlen;
- if (!user && !fqdn)
+ if (!user || !fqdn)
return 0;
memset(user, 0, user_size);
memset(buf, 0, sizeof(buf));
va_start(args, fmt);
- vsnprintf(buf, sizeof(buf) - 1, fmt, args);
+ silc_vsnprintf(buf, sizeof(buf) - 1, fmt, args);
va_end(args);
return strdup(buf);
SilcUInt32 h = 0, g;
while (*s != '\0') {
- h = (h << 4) + tolower(*s);
+ h = (h << 4) + tolower((int)*s);
if ((g = h & 0xf0000000)) {
h = h ^ (g >> 24);
h = h ^ g;
char *silc_fingerprint(const unsigned char *data, SilcUInt32 data_len)
{
- char fingerprint[64], *cp;
- int i;
+ unsigned char *fingerprint, *cp;
+ unsigned int len, blocks, i;
+
+ if (!data || !data_len)
+ return NULL;
+
+ if (data_len >= 256)
+ data_len = 255;
+
+ /* Align and calculate total length */
+ len = ((data_len + 19) / 20) * 20;
+ blocks = (len / 10);
+ len = (len * 2) + ((blocks - 1) * 2) + (4 * blocks) + 2 + 1;
+
+ cp = fingerprint = silc_calloc(len, sizeof(*fingerprint));
+ if (!cp)
+ return NULL;
- memset(fingerprint, 0, sizeof(fingerprint));
- cp = fingerprint;
for (i = 0; i < data_len; i++) {
- snprintf(cp, sizeof(fingerprint), "%02X", data[i]);
+ silc_snprintf(cp, len, "%02X", data[i]);
cp += 2;
+ len -= 2;
if ((i + 1) % 2 == 0)
- snprintf(cp++, sizeof(fingerprint), " ");
-
+ silc_snprintf(cp++, len--, " ");
if ((i + 1) % 10 == 0)
- snprintf(cp++, sizeof(fingerprint), " ");
+ silc_snprintf(cp++, len--, " ");
}
i--;
- if ((i + 1) % 2 == 0)
- cp[-2] = 0;
if ((i + 1) % 10 == 0)
- cp[-1] = 0;
+ *(--cp) = '\0';
+ if ((i + 1) % 2 == 0)
+ *(--cp) = '\0';
- return strdup(fingerprint);
+ return fingerprint;
}
/* Return TRUE if the `data' is ASCII string. */