libpurple/plugins/tcl/tcl_ref.c

changeset 16477
2fe930b4dcb6
parent 16433
2c3aa45bcd7c
child 16877
b2a8fef0a200
equal deleted inserted replaced
16476:fbeaf271cc9e 16477:2fe930b4dcb6
112 { 112 {
113 char *bytes = Tcl_GetStringFromObj(obj, NULL); 113 char *bytes = Tcl_GetStringFromObj(obj, NULL);
114 char *ptr; 114 char *ptr;
115 PurpleStringref *type; 115 PurpleStringref *type;
116 void *value; 116 void *value;
117 int magicnumber = strlen("purple-"); 117 static const char const *prefix = "purple-";
118 static const int prefixlen = sizeof(prefix) - 1;
118 119
119 if (strlen(bytes) < magicnumber 120 if (strlen(bytes) < prefixlen
120 || strncmp(bytes, "purple-", magicnumber) 121 || strncmp(bytes, prefix, prefixlen)
121 || (ptr = strchr(bytes, ':')) == NULL 122 || (ptr = strchr(bytes, ':')) == NULL
122 || (ptr - bytes) == magicnumber) 123 || (ptr - bytes) == prefixlen)
123 goto badobject; 124 goto badobject;
124 125
125 /* Bad Ethan */ 126 /* Bad Ethan */
126 *ptr = '\0'; 127 *ptr = '\0';
127 type = purple_stringref_new(bytes + magicnumber); 128 type = purple_stringref_new(bytes + prefixlen);
128 *ptr = ':'; 129 *ptr = ':';
129 ptr++; 130 ptr++;
130 131
131 if (sscanf(ptr, "%p", &value) == 0) { 132 if (sscanf(ptr, "%p", &value) == 0) {
132 purple_stringref_unref(type); 133 purple_stringref_unref(type);

mercurial