2 * libdpkg - Debian packaging suite library routines
3 * string.c - string handling routines
5 * Copyright © 1995 Ian Jackson <ijackson@chiark.greenend.org.uk>
6 * Copyright © 2008-2015 Guillem Jover <guillem@debian.org>
8 * This is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
27 #include <dpkg/c-ctype.h>
28 #include <dpkg/string.h>
29 #include <dpkg/dpkg.h>
32 * Match the end of a string.
34 * @param str The string.
35 * @param end The end to match in str.
37 * @return Whether the string was matched at the end.
40 str_match_end(const char *str
, const char *end
)
42 size_t str_len
= strlen(str
);
43 size_t end_len
= strlen(end
);
44 const char *str_end
= str
+ str_len
- end_len
;
46 if (str_len
>= end_len
&& strcmp(str_end
, end
) == 0)
53 * Print formatted output to an allocated string.
55 * @param fmt The format string.
56 * @param ... The format arguments.
58 * @return The new allocated formatted output string (never NULL).
61 str_fmt(const char *fmt
, ...)
67 m_vasprintf(&str
, fmt
, args
);
74 * Escape format characters from a string.
76 * @param dst The destination string.
77 * @param src The source string.
78 * @param n The size of the destination buffer.
80 * @return The end of the destination string.
83 str_escape_fmt(char *dst
, const char *src
, size_t n
)
108 * Quote shell metacharacters in a string.
110 * This function allows passing strings to commands without splitting the
111 * arguments, like in system(3)
113 * @param src The source string to escape.
115 * @return The new allocated string (never NULL).
118 str_quote_meta(const char *src
)
122 new_dst
= dst
= m_malloc(strlen(src
) * 2);
125 if (!c_isdigit(*src
) && !c_isalpha(*src
))
137 * Check and strip possible surrounding quotes in string.
139 * @param str The string to act on.
141 * @return A pointer to str or NULL if the quotes were unbalanced.
144 str_strip_quotes(char *str
)
146 if (str
[0] == '"' || str
[0] == '\'') {
147 size_t str_len
= strlen(str
);
149 if (str
[0] != str
[str_len
- 1])
152 /* Remove surrounding quotes. */
153 str
[str_len
- 1] = '\0';