summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTilman Sauerbeck <tilman@code-monkey.de>2007-05-13 00:16:36 +0200
committerTilman Sauerbeck <tilman@code-monkey.de>2007-05-13 00:16:36 +0200
commit2ded69bb857ae453d90534203e5857ac3a31a1c3 (patch)
treea4934368f8fd1816b5238cb1cbc3418548229fc1 /src
parent34b3d538061cd648d90eb2bc7284000d980c8d3e (diff)
Sanitized hex string conversion in SmsGenerateClientID().
This reduces the size of the DSO by almost 4K and gets rid of 255 relocations on load.
Diffstat (limited to 'src')
-rw-r--r--src/sm_genid.c61
1 files changed, 16 insertions, 45 deletions
diff --git a/src/sm_genid.c b/src/sm_genid.c
index bf06644..1d1e0a3 100644
--- a/src/sm_genid.c
+++ b/src/sm_genid.c
@@ -78,51 +78,15 @@ in this Software without prior written authorization from The Open Group.
#define TCPCONN
#endif
-
-static char *hex_table[] = { /* for generating client IDs */
- "00", "01", "02", "03", "04", "05", "06", "07",
- "08", "09", "0a", "0b", "0c", "0d", "0e", "0f",
- "10", "11", "12", "13", "14", "15", "16", "17",
- "18", "19", "1a", "1b", "1c", "1d", "1e", "1f",
- "20", "21", "22", "23", "24", "25", "26", "27",
- "28", "29", "2a", "2b", "2c", "2d", "2e", "2f",
- "30", "31", "32", "33", "34", "35", "36", "37",
- "38", "39", "3a", "3b", "3c", "3d", "3e", "3f",
- "40", "41", "42", "43", "44", "45", "46", "47",
- "48", "49", "4a", "4b", "4c", "4d", "4e", "4f",
- "50", "51", "52", "53", "54", "55", "56", "57",
- "58", "59", "5a", "5b", "5c", "5d", "5e", "5f",
- "60", "61", "62", "63", "64", "65", "66", "67",
- "68", "69", "6a", "6b", "6c", "6d", "6e", "6f",
- "70", "71", "72", "73", "74", "75", "76", "77",
- "78", "79", "7a", "7b", "7c", "7d", "7e", "7f",
- "80", "81", "82", "83", "84", "85", "86", "87",
- "88", "89", "8a", "8b", "8c", "8d", "8e", "8f",
- "90", "91", "92", "93", "94", "95", "96", "97",
- "98", "99", "9a", "9b", "9c", "9d", "9e", "9f",
- "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7",
- "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af",
- "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7",
- "b8", "b9", "ba", "bb", "bc", "bd", "be", "bf",
- "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7",
- "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf",
- "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
- "d8", "d9", "da", "db", "dc", "dd", "de", "df",
- "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7",
- "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef",
- "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
- "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff",
-};
-
-
char *
SmsGenerateClientID (smsConn)
SmsConn smsConn;
{
#if defined(TCPCONN) || defined(STREAMSCONN)
+ static const char hex[] = "0123456789abcdef";
char hostname[256];
- char address[64];
+ char address[64], *addr_ptr = address;
char temp[256];
char *id;
static int sequence = 0;
@@ -153,13 +117,15 @@ SmsGenerateClientID (smsConn)
if (ai->ai_family == AF_INET6) {
unsigned char *cp = (unsigned char *) &((struct sockaddr_in6 *)ai->ai_addr)->sin6_addr.s6_addr;
- address[0] = '6'; /* IPv6 address code */
- address[1] = '\0';
+ *addr_ptr++ = '6'; /* IPv6 address code */
for (i = 0 ; i < 16 ; i++) {
- strcat(address, hex_table[cp[i]]);
+ *addr_ptr++ = hex[cp[i] >> 4];
+ *addr_ptr++ = hex[cp[i] & 0x0f];
}
+ *addr_ptr++ = '\0';
+
} else { /* Fall through to IPv4 address handling */
haddr = &((struct sockaddr_in *)ai->ai_addr)->sin_addr;
#else
@@ -193,10 +159,15 @@ SmsGenerateClientID (smsConn)
decimal[3] = atoi (ptr1);
- address[0] = '1';
- address[1] = '\0';
- for (i = 0; i < 4; i++)
- strcat (address, hex_table[decimal[i]]);
+ *addr_ptr++ = '1';
+
+ for (i = 0; i < 4; i++) {
+ *addr_ptr++ = hex[decimal[i] >> 4];
+ *addr_ptr++ = hex[decimal[i] & 0x0f];
+ }
+
+ *addr_ptr++ = '\0';
+
#if defined(IPv6) && defined(AF_INET6)
}
freeaddrinfo(first_ai);