Avoid allocations by performing stripping in-place
Introduce a helper function (string_strip_delimited).
This commit is contained in:
parent
bed4877d7b
commit
4b53e44d92
@ -185,23 +185,12 @@ void notification_free(notification * n)
|
|||||||
*/
|
*/
|
||||||
char *notification_strip_markup(char *str)
|
char *notification_strip_markup(char *str)
|
||||||
{
|
{
|
||||||
char *replace_buf, *start, *end;
|
|
||||||
|
|
||||||
if (str == NULL) {
|
if (str == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* strip all tags */
|
/* strip all tags */
|
||||||
while ((start = strstr(str, "<")) != NULL) {
|
string_strip_delimited(str, '<', '>');
|
||||||
end = strstr(start, ">");
|
|
||||||
if (end != NULL) {
|
|
||||||
replace_buf = strndup(start, end - start + 1);
|
|
||||||
str = string_replace(replace_buf, "", str);
|
|
||||||
free(replace_buf);
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* unquote the remainder */
|
/* unquote the remainder */
|
||||||
str = string_replace_all(""", "\"", str);
|
str = string_replace_all(""", "\"", str);
|
||||||
|
15
utils.c
15
utils.c
@ -105,6 +105,21 @@ char **string_to_argv(const char *s)
|
|||||||
return argv;
|
return argv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void string_strip_delimited(char *str, char a, char b)
|
||||||
|
{
|
||||||
|
int iread=-1, iwrite=0, copen=0;
|
||||||
|
while (str[++iread] != 0) {
|
||||||
|
if (str[iread] == a) {
|
||||||
|
++copen;
|
||||||
|
} else if (str[iread] == b && copen > 0) {
|
||||||
|
--copen;
|
||||||
|
} else if (copen == 0) {
|
||||||
|
str[iwrite++] = str[iread];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
str[iwrite] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
int digit_count(int i)
|
int digit_count(int i)
|
||||||
{
|
{
|
||||||
i = ABS(i);
|
i = ABS(i);
|
||||||
|
3
utils.h
3
utils.h
@ -17,6 +17,9 @@ char *string_append(char *a, const char *b, const char *sep);
|
|||||||
|
|
||||||
char **string_to_argv(const char *s);
|
char **string_to_argv(const char *s);
|
||||||
|
|
||||||
|
/* strip content between two delimiter characters (inplace) */
|
||||||
|
void string_strip_delimited(char *str, char a, char b);
|
||||||
|
|
||||||
/* exit with an error message */
|
/* exit with an error message */
|
||||||
void die(char *msg, int exit_value);
|
void die(char *msg, int exit_value);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user