avoid unneeded calloc + memcpy.

git-svn: trunk@4911
0.95
Török Edvin 16 years ago
parent 5da3127b5e
commit eaf2aebdeb
  1. 5
      ChangeLog
  2. 25
      libclamav/mpool.c
  3. 28
      libclamav/str.c
  4. 1
      libclamav/str.h

@ -1,3 +1,8 @@
Fri Mar 6 16:15:19 EET 2009 (edwin)
------------------------------------
* libclamav/mpool.c, libclamav/str.c, libclamav/str.h: avoid
unneeded calloc + memcpy.
Sat Mar 7 19:15:14 CET 2009 (acab) Sat Mar 7 19:15:14 CET 2009 (acab)
----------------------------------- -----------------------------------
* clamscan: extend clamscan summary (bb#1206) * clamscan: extend clamscan summary (bb#1206)

@ -583,19 +583,23 @@ void *mpool_realloc2(struct MP *mp, void *ptr, size_t size) {
return new_ptr; return new_ptr;
} }
unsigned char *cli_mpool_hex2str(mpool_t *mp, const unsigned char *str) { unsigned char *cli_mpool_hex2str(mpool_t *mp, const unsigned char *hex) {
unsigned char *tmp = (unsigned char *)cli_hex2str((char *)str); unsigned char *str;
size_t len = strlen((const char*)hex);
if(tmp) { if (len&1) {
unsigned char *res; cli_errmsg("cli_hex2str(): Malformed hexstring: %s (length: %d)\n", str, len);
unsigned int tmpsz = strlen((char *)str) / 2 + 1; return NULL;
if((res = mpool_malloc(mp, tmpsz)))
memcpy(res, tmp, tmpsz);
free(tmp);
return res;
} }
str = mpool_malloc(mp, (len/2) + 1);
if (cli_hex2str_to(hex, str, len) == -1) {
mpool_free(mp, str);
return NULL; return NULL;
} }
str[len/2] = '\0';
return str;
}
char *cli_mpool_strdup(mpool_t *mp, const char *s) { char *cli_mpool_strdup(mpool_t *mp, const char *s) {
char *alloc; char *alloc;
@ -620,7 +624,8 @@ char *cli_mpool_virname(mpool_t *mp, const char *virname, unsigned int official)
if(!virname) if(!virname)
return NULL; return NULL;
if((pt = strstr(virname, " (Clam)"))) if((pt = strchr(virname, ' ')))
if((pt = strstr(pt, " (Clam)")))
*pt='\0'; *pt='\0';
if(!virname[0]) { if(!virname[0]) {

@ -137,9 +137,8 @@ uint16_t *cli_hex2ui(const char *hex)
char *cli_hex2str(const char *hex) char *cli_hex2str(const char *hex)
{ {
char *str, *ptr; unsigned char *str;
int i, len, val, c; size_t len;
len = strlen(hex); len = strlen(hex);
@ -152,7 +151,18 @@ char *cli_hex2str(const char *hex)
if(!str) if(!str)
return NULL; return NULL;
ptr = str; if (cli_hex2str_to(hex, str, len) == -1) {
free(str);
return NULL;
}
return str;
}
int cli_hex2str_to(const char *hex, unsigned char *ptr, size_t len)
{
size_t i;
int c;
unsigned char val;
for(i = 0; i < len; i += 2) { for(i = 0; i < len; i += 2) {
if((c = cli_hex2int(hex[i])) >= 0) { if((c = cli_hex2int(hex[i])) >= 0) {
@ -160,18 +170,16 @@ char *cli_hex2str(const char *hex)
if((c = cli_hex2int(hex[i+1])) >= 0) { if((c = cli_hex2int(hex[i+1])) >= 0) {
val = (val << 4) + c; val = (val << 4) + c;
} else { } else {
free(str); return -1;
return NULL;
} }
} else { } else {
free(str); return -1;
return NULL;
} }
*ptr++ = (char)val; *ptr++ = val;
} }
return str; return 0;
} }
int cli_hex2num(const char *hex) int cli_hex2num(const char *hex)

@ -36,6 +36,7 @@ int cli_chomp(char *string);
char *cli_strtok(const char *line, int field, const char *delim); char *cli_strtok(const char *line, int field, const char *delim);
int cli_realhex2ui(const char *hex, uint16_t *ptr, unsigned int len); int cli_realhex2ui(const char *hex, uint16_t *ptr, unsigned int len);
uint16_t *cli_hex2ui(const char *hex); uint16_t *cli_hex2ui(const char *hex);
int cli_hex2str_to(const char *hex, unsigned char *ptr, size_t len);
char *cli_hex2str(const char *hex); char *cli_hex2str(const char *hex);
int cli_hex2num(const char *hex); int cli_hex2num(const char *hex);
char *cli_str2hex(const char *string, unsigned int len); char *cli_str2hex(const char *string, unsigned int len);

Loading…
Cancel
Save