tag: converted macro fixUtf8() to an inline function

Since the inline function cannot modify its caller's variables (which
is a good thing for code readability), the new string pointer is the
return value.  The resulting binary should be the same as with the
macro.
This commit is contained in:
Max Kellermann 2008-08-29 09:38:54 +02:00
parent c855415c73
commit f99fe80811

View File

@ -347,14 +347,16 @@ int tag_equal(struct tag *tag1, struct tag *tag2)
return 1;
}
#define fixUtf8(str) { \
if(str && !validUtf8String(str)) { \
char * temp; \
DEBUG("not valid utf8 in tag: %s\n",str); \
temp = latin1StrToUtf8Dup(str); \
free(str); \
str = temp; \
} \
static inline char *fix_utf8(char *str) {
char *temp;
if (str != NULL && validUtf8String(str))
return str;
DEBUG("not valid utf8 in tag: %s\n",str);
temp = latin1StrToUtf8Dup(str);
free(str);
return temp;
}
static void appendToTagItems(struct tag *tag, enum tag_type type,
@ -366,7 +368,7 @@ static void appendToTagItems(struct tag *tag, enum tag_type type,
memcpy(duplicated, value, len);
duplicated[len] = '\0';
fixUtf8(duplicated);
duplicated = fix_utf8(duplicated);
stripReturnChar(duplicated);
tag->numOfItems++;