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. 33
      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)
-----------------------------------
* clamscan: extend clamscan summary (bb#1206)

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

@ -137,9 +137,8 @@ uint16_t *cli_hex2ui(const char *hex)
char *cli_hex2str(const char *hex)
{
char *str, *ptr;
int i, len, val, c;
unsigned char *str;
size_t len;
len = strlen(hex);
@ -152,7 +151,18 @@ char *cli_hex2str(const char *hex)
if(!str)
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) {
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) {
val = (val << 4) + c;
} else {
free(str);
return NULL;
return -1;
}
} else {
free(str);
return NULL;
return -1;
}
*ptr++ = (char)val;
*ptr++ = val;
}
return str;
return 0;
}
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);
int cli_realhex2ui(const char *hex, uint16_t *ptr, unsigned int len);
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);
int cli_hex2num(const char *hex);
char *cli_str2hex(const char *string, unsigned int len);

Loading…
Cancel
Save