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; return 1;
} }
#define fixUtf8(str) { \ static inline char *fix_utf8(char *str) {
if(str && !validUtf8String(str)) { \ char *temp;
char * temp; \
DEBUG("not valid utf8 in tag: %s\n",str); \ if (str != NULL && validUtf8String(str))
temp = latin1StrToUtf8Dup(str); \ return str;
free(str); \
str = temp; \ 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, 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); memcpy(duplicated, value, len);
duplicated[len] = '\0'; duplicated[len] = '\0';
fixUtf8(duplicated); duplicated = fix_utf8(duplicated);
stripReturnChar(duplicated); stripReturnChar(duplicated);
tag->numOfItems++; tag->numOfItems++;