--- a/ChangeLog.API Sun Nov 03 23:51:59 2019 -0500
+++ b/ChangeLog.API Mon Nov 04 11:01:03 2019 +0000
@@ -393,6 +393,7 @@
* purple_buddy_icons_has_custom_icon
* purple_buddy_icons_find_custom_icon
* purple_buddy_icons_set_custom_icon
+ * purple_build_dir. Use g_mkdir_with_parents instead * purple_certificate_check_signature_chain_with_failing. Use
purple_certificate_check_signature_chain, instead
* purple_certificate_display_x509. Use purple_request_certificate,
@@ -416,10 +417,12 @@
event loop yourself. See GLib Main Event Loop docs.
* PurpleEventLoopUiOps. Manually drive the GLib event loop
yourself. See GLib Main Event Loop docs.
+ * purple_get_host_name. Use g_get_host_name, instead. * purple_get_tzoff_str(). Use g_date_time_format, instead.
* purple_ip_address_is_valid, purple_ipv4_address_is_valid, and
purple_ipv6_address_is_valid. Use g_hostname_is_ip_address()
or #GInetAddress instead.
+ * purple_markup_extract_info_field * PurpleMimeDocument, PurpleMimePart,
purple_mime_document_new, purple_mime_document_free,
purple_mime_document_parse, purple_mime_document_parsen,
@@ -496,6 +499,9 @@
* purple_status_type_set_primary_attr
+ * purple_str_binary_to_ascii + * purple_str_has_prefix. Use g_str_has_prefix instead + * purple_str_has_suffix. Use g_str_has_suffix instead * purple_str_size_to_units. Use g_format_size() instead.
* purple_timeout_*. Use g_timeout_* or g_idle_* instead.
@@ -508,6 +514,7 @@
purple_util_fetch_url_request, instead.
* purple_util_get_image_checksum. Use
g_compute_checksum_for_data(G_CHECKSUM_SHA1, ...), instead.
* PurpleCertificateVerificationStatus.PURPLE_CERTIFICATE_INVALID
* PurpleConnectionUiOps.report_disconnect_reason
* PurplePluginProtocolInfo.add_buddy_with_invite
--- a/libpurple/plugins/log_reader.c Sun Nov 03 23:51:59 2019 -0500
+++ b/libpurple/plugins/log_reader.c Mon Nov 04 11:01:03 2019 +0000
@@ -100,9 +100,11 @@
while ((file = g_dir_read_name(dir))) {
- if (!purple_str_has_prefix(file, sn))
+ if (!g_str_has_prefix(file, sn)) { - if (purple_str_has_suffix(file, ".html") || purple_str_has_suffix(file, ".AdiumHTMLLog")) {
+ if (g_str_has_suffix(file, ".html") || + g_str_has_suffix(file, ".AdiumHTMLLog")) { gint year, month, day, hour, minute, second;
@@ -165,7 +167,7 @@
list = g_list_prepend(list, log);
- } else if (purple_str_has_suffix(file, ".adiumLog")) {
+ } else if (g_str_has_suffix(file, ".adiumLog")) { gint year, month, day, hour, minute, second;
@@ -269,8 +271,7 @@
/* This problem only seems to show up on Windows.
* The BOM is displaying as a space at the beginning of the log.
- if (purple_str_has_prefix(read, "\xef\xbb\xbf"))
+ if (g_str_has_prefix(read, "\xef\xbb\xbf")) { /* FIXME: This feels so wrong... */
char *temp = g_strdup(&(read[3]));
@@ -578,8 +579,9 @@
while ((name = g_dir_read_name(dir))) {
- if (!purple_str_has_prefix(c, username))
+ if (!g_str_has_prefix(c, username)) { @@ -631,8 +633,9 @@
- if (!purple_str_has_prefix(c, username))
+ if (!g_str_has_prefix(c, username)) { @@ -862,16 +865,18 @@
* friendly name or alias. For this test, "match" is defined as:
* ^(friendly_name|alias)([^a-zA-Z0-9].*)?$
- from_name_matches = (purple_str_has_prefix(from_name, friendly_name) &&
- !isalnum(*(from_name + friendly_name_length))) ||
- (purple_str_has_prefix(from_name, alias) &&
- !isalnum(*(from_name + alias_length)));
- to_name_matches = to_name != NULL && (
- (purple_str_has_prefix(to_name, friendly_name) &&
- !isalnum(*(to_name + friendly_name_length))) ||
- (purple_str_has_prefix(to_name, alias) &&
- !isalnum(*(to_name + alias_length))));
+ (g_str_has_prefix(from_name, friendly_name) && + !isalnum(*(from_name + friendly_name_length))) || + (g_str_has_prefix(from_name, alias) && + !isalnum(*(from_name + alias_length))); + ((g_str_has_prefix(to_name, friendly_name) && + !isalnum(*(to_name + friendly_name_length))) || + (g_str_has_prefix(to_name, alias) && + !isalnum(*(to_name + alias_length)))); @@ -901,15 +906,13 @@
* matches their alias. For this test, "match" is
* defined as: ^alias([^a-zA-Z0-9].*)?$
- from_name_matches = (purple_str_has_prefix(
- to_name_matches = to_name && (purple_str_has_prefix(
+ (g_str_has_prefix(from_name, alias) && + !isalnum(*(from_name + alias_length))); + to_name_matches = to_name && + (g_str_has_prefix(to_name, alias) && + !isalnum(*(to_name + alias_length))); @@ -929,17 +932,17 @@
* this test, "match" is defined as:
* ^friendly_name([^a-zA-Z0-9].*)?$
- from_name_matches = (purple_str_has_prefix(
- friendly_name_length)));
- to_name_matches = to_name && (
- (purple_str_has_prefix(
- to_name, server_alias) &&
- friendly_name_length))));
+ (g_str_has_prefix(from_name, + friendly_name_length))); + ((g_str_has_prefix(to_name, server_alias) && + friendly_name_length)))); @@ -1142,7 +1145,7 @@
- if (purple_str_has_prefix(line, "Session Close ")) {
+ if (g_str_has_prefix(line, "Session Close ")) { if (data && !data->length) {
if (!(data->length = last_line_offset - data->offset)) {
/* This log had no data, so we remove it. */
@@ -1156,7 +1159,7 @@
} else if (line[0] && line[1] && line[2] &&
- purple_str_has_prefix(&line[3], "sion Start ")) {
+ g_str_has_prefix(&line[3], "sion Start ")) { /* The conditional is to make sure we're not reading off
* the end of the string. We don't want strlen(), as that'd
* have to count the whole string needlessly.
@@ -1418,17 +1421,18 @@
- if (purple_str_has_prefix(line, "*** ")) {
+ if (g_str_has_prefix(line, "*** ")) { line += (sizeof("*** ") - 1);
g_string_append(formatted, "<b>");
- if (purple_str_has_prefix(line, "NOTE: This user is offline.")) {
+ if (g_str_has_prefix(line, "NOTE: This user is offline.")) { line = _("User is offline.");
- } else if (purple_str_has_prefix(line,
- "NOTE: Your status is currently set to ")) {
+ } else if (g_str_has_prefix( + "NOTE: Your status is currently set to ")) { line += (sizeof("NOTE: ") - 1);
- } else if (purple_str_has_prefix(line, "Auto-response sent to ")) {
+ } else if (g_str_has_prefix(line, "Auto-response sent to ")) { g_string_append(formatted, _("Auto-response sent:"));
while (*line && *line != ':')
@@ -1462,8 +1466,8 @@
g_string_append(formatted, log->name);
- } else if (purple_str_has_prefix(line,
- "One or more messages may have been undeliverable.")) {
+ } else if (g_str_has_prefix(line, "One or more messages may " + "have been undeliverable.")) { g_string_append(formatted,
"<span style=\"color: #ff0000;\">");
@@ -1472,8 +1476,8 @@
- } else if (purple_str_has_prefix(line,
- "You have been disconnected.")) {
+ } else if (g_str_has_prefix(line, + "You have been disconnected.")) { g_string_append(formatted,
"<span style=\"color: #ff0000;\">");
@@ -1481,8 +1485,8 @@
_("You were disconnected from the server."));
- } else if (purple_str_has_prefix(line,
- "You are currently disconnected.")) {
+ } else if (g_str_has_prefix( + line, "You are currently disconnected.")) { g_string_append(formatted,
"<span style=\"color: #ff0000;\">");
@@ -1490,15 +1494,16 @@
"will not be received unless you are "
- } else if (purple_str_has_prefix(line,
- "Your previous message has not been sent.")) {
+ } else if (g_str_has_prefix(line, "Your previous message has " g_string_append(formatted,
"<span style=\"color: #ff0000;\">");
- if (purple_str_has_prefix(line,
- "Your previous message has not been sent. "
- "Reason: Maximum length exceeded.")) {
+ "Your previous message has not been sent. " + "Reason: Maximum length exceeded.")) { g_string_append(formatted,
_("Message could not be sent because "
@@ -1514,7 +1519,7 @@
- } else if (purple_str_has_prefix(line, data->their_nickname)) {
+ } else if (g_str_has_prefix(line, data->their_nickname)) { const char *alias = purple_buddy_get_alias(buddy);
@@ -1684,8 +1689,8 @@
gboolean add_new_log = FALSE;
- if (purple_str_has_prefix(c, QIP_LOG_IN_MESSAGE) ||
- purple_str_has_prefix(c, QIP_LOG_OUT_MESSAGE)) {
+ if (g_str_has_prefix(c, QIP_LOG_IN_MESSAGE) || + g_str_has_prefix(c, QIP_LOG_OUT_MESSAGE)) { @@ -1841,12 +1846,12 @@
gboolean is_in_message = FALSE;
- if (purple_str_has_prefix(line, QIP_LOG_IN_MESSAGE_ESC) ||
- purple_str_has_prefix(line, QIP_LOG_OUT_MESSAGE_ESC)) {
+ if (g_str_has_prefix(line, QIP_LOG_IN_MESSAGE_ESC) || + g_str_has_prefix(line, QIP_LOG_OUT_MESSAGE_ESC)) { - is_in_message = purple_str_has_prefix(line, QIP_LOG_IN_MESSAGE_ESC);
+ is_in_message = g_str_has_prefix(line, QIP_LOG_IN_MESSAGE_ESC); @@ -2010,7 +2015,7 @@
gint year, month, day, hour, minute, second;
- if (purple_str_has_prefix(c, AMSN_LOG_CONV_START)) {
+ if (g_str_has_prefix(c, AMSN_LOG_CONV_START)) { if (sscanf(c + strlen(AMSN_LOG_CONV_START),
@@ -2027,7 +2032,7 @@
- } else if (purple_str_has_prefix(c, AMSN_LOG_CONV_END) && found_start) {
+ } else if (g_str_has_prefix(c, AMSN_LOG_CONV_END) && found_start) { data = g_new0(struct amsn_logger_data, 1);
data->path = g_strdup(filename);
@@ -2215,7 +2220,7 @@
- if (purple_str_has_prefix(start, AMSN_LOG_FORMAT_TAG) && in_span) {
+ if (g_str_has_prefix(start, AMSN_LOG_FORMAT_TAG) && in_span) { /* New format for this line */
g_string_append(formatted, "</span><br>");
@@ -2244,19 +2249,19 @@
old_tag = tag + 7; /* C + xxxxxx */
/* |"Lxxx is a 3-digit colour code */
- if (purple_str_has_prefix(tag, "RED")) {
+ if (g_str_has_prefix(tag, "RED")) { g_string_append(formatted, "<span style=\"color: red;\">");
- } else if (purple_str_has_prefix(tag, "GRA")) {
+ } else if (g_str_has_prefix(tag, "GRA")) { g_string_append(formatted, "<span style=\"color: gray;\">");
- } else if (purple_str_has_prefix(tag, "NOR")) {
+ } else if (g_str_has_prefix(tag, "NOR")) { g_string_append(formatted, "<span style=\"color: black;\">");
- } else if (purple_str_has_prefix(tag, "ITA")) {
+ } else if (g_str_has_prefix(tag, "ITA")) { g_string_append(formatted, "<span style=\"color: blue;\">");
- } else if (purple_str_has_prefix(tag, "GRE")) {
+ } else if (g_str_has_prefix(tag, "GRE")) { g_string_append(formatted, "<span style=\"color: darkgreen;\">");
@@ -2429,7 +2434,7 @@
- if (purple_str_has_suffix(value, "trillian.exe")) {
+ if (g_str_has_suffix(value, "trillian.exe")) { value[strlen(value) - (sizeof("trillian.exe") - 1)] = '\0';
path = g_build_filename(value, "users", "default", "talk.ini", NULL);
@@ -2472,7 +2477,7 @@
/* XXX: This assumes the first Directory key is under [Logging]. */
- if (purple_str_has_prefix(line, "Directory=")) {
+ if (g_str_has_prefix(line, "Directory=")) { line += (sizeof("Directory=") - 1);
--- a/libpurple/util.c Sun Nov 03 23:51:59 2019 -0500
+++ b/libpurple/util.c Mon Nov 04 11:01:03 2019 +0000
@@ -35,15 +35,9 @@
static gchar *config_dir = NULL;
static gchar *data_dir = NULL;
-static JsonNode *escape_js_node = NULL;
-static JsonGenerator *escape_js_gen = NULL;
- escape_js_node = json_node_new(JSON_NODE_VALUE);
- escape_js_gen = json_generator_new();
- json_node_set_boolean(escape_js_node, FALSE);
@@ -65,12 +59,6 @@
- json_node_free(escape_js_node);
- g_object_unref(escape_js_gen);
/**************************************************************************
@@ -573,333 +561,6 @@
-purple_uts35_to_str(const char *format, size_t len, struct tm *tm)
- time_t now = time(NULL);
- string = g_string_sized_new(len);
- while ((i + count) < len && format[i] == format[i+count])
- } else if (count == 4) {
- } else if (count >= 5) {
- g_string_append(string, purple_utf8_strftime("%y", tm));
- g_string_append_printf(string, "%0*d",
- /* Year (in "Week of Year" based calendars) */
- } else if (count == 4) {
- } else if (count >= 5) {
- /* Stand-alone Quarter */
- } else if (count == 3) {
- } else if (count >= 4) {
- /* Stand-alone Month */
- g_string_append(string, purple_utf8_strftime("%m", tm));
- } else if (count == 3) {
- g_string_append(string, purple_utf8_strftime("%b", tm));
- } else if (count == 4) {
- g_string_append(string, purple_utf8_strftime("%B", tm));
- } else if (count >= 5) {
- g_string_append_len(string, purple_utf8_strftime("%b", tm), 1);
- g_string_append(string, purple_utf8_strftime("%W", tm));
- g_string_append(string, purple_utf8_strftime("%d", tm));
- g_string_append(string, purple_utf8_strftime("%j", tm));
- /* Day of Year in Month */
- /* Modified Julian Day */
- g_string_append(string, purple_utf8_strftime("%a", tm));
- } else if (count == 4) {
- g_string_append(string, purple_utf8_strftime("%A", tm));
- } else if (count >= 5) {
- g_string_append_len(string, purple_utf8_strftime("%a", tm), 1);
- /* Local Day of Week */
- g_string_append(string, purple_utf8_strftime("%u", tm));
- } else if (count == 3) {
- g_string_append(string, purple_utf8_strftime("%a", tm));
- } else if (count == 4) {
- g_string_append(string, purple_utf8_strftime("%A", tm));
- } else if (count >= 5) {
- g_string_append_len(string, purple_utf8_strftime("%a", tm), 1);
- /* Stand-alone Local Day of Week */
- g_string_append(string, purple_utf8_strftime("%u", tm));
- } else if (count == 3) {
- g_string_append(string, purple_utf8_strftime("%a", tm));
- } else if (count == 4) {
- g_string_append(string, purple_utf8_strftime("%A", tm));
- } else if (count >= 5) {
- g_string_append_len(string, purple_utf8_strftime("%a", tm), 1);
- g_string_append(string, purple_utf8_strftime("%p", tm));
- g_string_append(string, purple_utf8_strftime("%I", tm));
- } else if (count >= 2) {
- g_string_append(string, purple_utf8_strftime("%I", tm));
- g_string_append(string, purple_utf8_strftime("%H", tm));
- } else if (count >= 2) {
- g_string_append(string, purple_utf8_strftime("%H", tm));
- } else if (count >= 2) {
- /* Hour (hHkK by locale) */
- g_string_append(string, purple_utf8_strftime("%M", tm));
- g_string_append(string, purple_utf8_strftime("%S", tm));
- /* Fractional Sub-second */
- /* Time Zone (specific non-location format) */
- } else if (count >= 4) {
- g_string_append(string, purple_utf8_strftime("%z", tm));
- } else if (count == 4) {
- } else if (count >= 5) {
- g_string_append(string, purple_utf8_strftime("%z", tm));
- /* Time Zone (generic non-location format) */
- g_string_append(string, purple_utf8_strftime("%Z", tm));
- } else if (count >= 4) {
- g_string_append(string, purple_utf8_strftime("%Z", tm));
- } else if (count >= 4) {
- /* Generic Location Format) */
- g_string_append(string, purple_utf8_strftime("%Z", tm));
- g_string_append_len(string, format + i, count);
- return g_string_free(string, FALSE);
/**************************************************************************
**************************************************************************/
@@ -1282,100 +943,6 @@
-purple_markup_extract_info_field(const char *str, int len, PurpleNotifyUserInfo *user_info,
- const char *start_token, int skip,
- const char *end_token, char check_value,
- const char *no_value_token,
- const char *display_name, gboolean is_link,
- const char *link_prefix,
- PurpleInfoFieldFormatCallback format_cb)
- g_return_val_if_fail(str != NULL, FALSE);
- g_return_val_if_fail(user_info != NULL, FALSE);
- g_return_val_if_fail(start_token != NULL, FALSE);
- g_return_val_if_fail(end_token != NULL, FALSE);
- g_return_val_if_fail(display_name != NULL, FALSE);
- p = strstr(str, start_token);
- p += strlen(start_token) + skip;
- if (check_value != '\0' && *p == check_value)
- q = strstr(p, end_token);
- /* Trim leading blanks */
- while (*p != '\n' && g_ascii_isspace(*p)) {
- /* Trim trailing blanks */
- while (q > p && g_ascii_isspace(*(q - 1))) {
- /* Don't bother with null strings */
- if (q != NULL && (!no_value_token ||
- strncmp(p, no_value_token, strlen(no_value_token)))) {
- GString *dest = g_string_new("");
- g_string_append(dest, "<a href=\"");
- g_string_append(dest, link_prefix);
- char *reformatted = format_cb(p, q - p);
- g_string_append(dest, reformatted);
- g_string_append_len(dest, p, q - p);
- g_string_append(dest, "\">");
- g_string_append(dest, link_prefix);
- g_string_append_len(dest, p, q - p);
- g_string_append(dest, "</a>");
- char *reformatted = format_cb(p, q - p);
- g_string_append(dest, reformatted);
- g_string_append_len(dest, p, q - p);
- purple_notify_user_info_add_pair_html(user_info, display_name, dest->str);
- g_string_free(dest, TRUE);
struct purple_parse_tag {
@@ -2599,7 +2166,7 @@
gboolean xdg_path_exists;
/* Create destination directory */
- mkdir_res = purple_build_dir(purple_xdg_dir, S_IRWXU);
+ mkdir_res = g_mkdir_with_parents(purple_xdg_dir, S_IRWXU); purple_debug_error("util", "Error creating xdg directory %s: %s; failed migration\n",
purple_xdg_dir, g_strerror(errno));
@@ -2648,11 +2215,6 @@
-int purple_build_dir(const char *path, int mode)
- return g_mkdir_with_parents(path, mode);
purple_util_write_data_to_file_common(const char *dir, const char *filename, const char *data, gssize size)
@@ -3112,12 +2674,6 @@
-purple_str_has_prefix(const char *s, const char *p)
- return g_str_has_prefix(s, p);
purple_str_has_caseprefix(const gchar *s, const gchar *p)
g_return_val_if_fail(s, FALSE);
@@ -3126,12 +2682,6 @@
return (g_ascii_strncasecmp(s, p, strlen(p)) == 0);
-purple_str_has_suffix(const char *s, const char *x)
- return g_str_has_suffix(s, x);
purple_str_add_cr(const char *text)
@@ -3351,27 +2901,6 @@
-purple_str_binary_to_ascii(const unsigned char *binary, guint len)
- g_return_val_if_fail(len > 0, NULL);
- ret = g_string_sized_new(len);
- for (i = 0; i < len; i++)
- if (binary[i] < 32 || binary[i] > 126)
- g_string_append_printf(ret, "\\x%02x", binary[i] & 0xFF);
- else if (binary[i] == '\\')
- g_string_append(ret, "\\\\");
- g_string_append_c(ret, binary[i]);
- return g_string_free(ret, FALSE);
purple_utf16_size(const gunichar2 *str)
@@ -4146,18 +3675,6 @@
-gchar * purple_escape_js(const gchar *str)
- json_node_set_string(escape_js_node, str);
- json_generator_set_root(escape_js_gen, escape_js_node);
- escaped = json_generator_to_data(escape_js_gen, NULL);
- json_node_set_boolean(escape_js_node, FALSE);
void purple_restore_default_signal_handlers(void)
@@ -4252,12 +3769,6 @@
return g_string_free(string, FALSE);
-purple_get_host_name(void)
- return g_get_host_name();
--- a/libpurple/util.h Sun Nov 03 23:51:59 2019 -0500
+++ b/libpurple/util.h Mon Nov 04 11:01:03 2019 +0000
@@ -306,21 +306,6 @@
GDateTime *purple_str_to_date_time(const char *timestamp, gboolean utc);
- * @format: The formatting string, according to UTS \#35
- * See http://unicode.org/reports/tr35/
- * (NOTE: not all formats are supported)
- * @len: The length of the formatting string
- * @tm: The time to format, or %NULL to use the current local time
- * Formats a datetime according to a UTS-35 Date Format Pattern.
- * Returns: The time, formatted as per the user's settings.
-char *purple_uts35_to_str(const char *format, size_t len, struct tm *tm);
/**************************************************************************/
/**************************************************************************/
@@ -362,38 +347,6 @@
- * purple_markup_extract_info_field:
- * @str: The string to parse.
- * @len: The size of str.
- * @user_info: The destination PurpleNotifyUserInfo to which the new
- * field info should be added.
- * @start_token: The beginning token.
- * @skip: The number of characters to skip after the
- * @end_token: The ending token.
- * @check_value: The value that the last character must meet.
- * @no_value_token: The token indicating no value is given.
- * @display_name: The short descriptive name to display for this token.
- * @is_link: TRUE if this should be a link, or FALSE otherwise.
- * @link_prefix: The prefix for the link.
- * @format_cb: (scope call): A callback to format the value before adding it.
- * Extracts a field of data from HTML.
- * This is a scary function. It used to be used for MSN and Yahoo prpls,
- * but since those prpls have been removed, this is now deprecated.
- * Returns: TRUE if successful, or FALSE otherwise.
-gboolean purple_markup_extract_info_field(const char *str, int len, PurpleNotifyUserInfo *user_info,
- const char *start_token, int skip,
- const char *end_token, char check_value,
- const char *no_value_token,
- const char *display_name, gboolean is_link,
- const char *link_prefix,
- PurpleInfoFieldFormatCallback format_cb);
* purple_markup_html_to_xhtml:
* @html: The HTML markup.
* @dest_xhtml: The destination XHTML output.
@@ -638,19 +591,6 @@
void purple_util_set_user_dir(const char *dir);
- * @path: The path you wish to create. Note that it must start
- * from the root or this function will fail.
- * @mode: Unix-style permissions for this directory.
- * Builds a complete path from the root, making any directories along
- * the path which do not already exist.
- * Returns: 0 for success, nonzero on any error.
-int purple_build_dir(const char *path, int mode);
* purple_util_write_data_to_file:
* @filename: The basename of the file to write in the purple_user_dir.
* @data: A string of data to write.
@@ -987,18 +927,6 @@
gboolean purple_validate(const PurpleProtocol *protocol, const char *str);
- * purple_str_has_prefix:
- * @s: The string to check.
- * @p: The prefix in question.
- * Compares two strings to see if the first contains the second as
- * Returns: TRUE if p is a prefix of s, otherwise FALSE.
-gboolean purple_str_has_prefix(const char *s, const char *p);
* purple_str_has_caseprefix:
* @s: The string to check.
* @p: The prefix in question.
@@ -1012,18 +940,6 @@
purple_str_has_caseprefix(const gchar *s, const gchar *p);
- * purple_str_has_suffix:
- * @s: The string to check.
- * @x: The suffix in question.
- * Compares two strings to see if the second is a proper suffix
- * Returns: TRUE if x is a a suffix of s, otherwise FALSE.
-gboolean purple_str_has_suffix(const char *s, const char *x);
* purple_strdup_withhtml:
* @src: The source string.
@@ -1157,22 +1073,6 @@
char *purple_str_seconds_to_string(guint sec);
- * purple_str_binary_to_ascii:
- * @binary: A string of random data, possibly with embedded NULs
- * @len: The length in bytes of the input string. Must not be 0.
- * Converts a binary string into a NUL terminated ascii string,
- * replacing nonascii characters and characters below SPACE (including
- * NUL) into \\xyy, where yy are two hex digits. Also backslashes are
- * changed into two backslashes (\\\\). The returned, newly allocated
- * string can be outputted to the console, and must be g_free()d.
- * Returns: A newly allocated ASCIIZ string.
-char *purple_str_binary_to_ascii(const unsigned char *binary, guint len);
@@ -1244,16 +1144,6 @@
gboolean purple_email_is_valid(const char *address);
- * purple_ipv6_address_is_valid:
- * @ip: The IP address to validate.
- * Checks if the given IP address is a syntactically valid IPv6 address.
- * Returns: True if the IP address is syntactically correct.
-gboolean purple_ipv6_address_is_valid(const char *ip);
* purple_uri_list_extract_uris:
* @uri_list: An uri-list in the standard format.
@@ -1421,16 +1311,6 @@
const char *purple_escape_filename(const char *str);
- * @str: The string to escape.
- * Escapes javascript-unfriendly substrings from a string.
- * Returns: The javascript-safe string (must be g_free'd after use).
-gchar * purple_escape_js(const gchar *str);
* purple_restore_default_signal_handlers:
* Restore default signal handlers for signals which might reasonably have
@@ -1440,16 +1320,6 @@
void purple_restore_default_signal_handlers(void);
- * purple_get_host_name:
- * Gets the host name of the machine. If it not possible to determine the
- * host name, "localhost" is returned
- * Returns: The hostname
-const gchar *purple_get_host_name(void);
* Returns a type 4 (random) UUID
--- a/pidgin/gtkprefs.c Sun Nov 03 23:51:59 2019 -0500
+++ b/pidgin/gtkprefs.c Mon Nov 04 11:01:03 2019 +0000
@@ -1259,8 +1259,9 @@
gchar *destdir_escaped = g_shell_quote(destdir);
- if (!g_file_test(destdir, G_FILE_TEST_IS_DIR))
- purple_build_dir(destdir, S_IRUSR | S_IWUSR | S_IXUSR);
+ if (!g_file_test(destdir, G_FILE_TEST_IS_DIR)) { + g_mkdir_with_parents(destdir, S_IRUSR | S_IWUSR | S_IXUSR); command = g_strdup_printf("tar > /dev/null xzf %s -C %s", path_escaped, destdir_escaped);
@@ -1298,8 +1299,9 @@
purple_theme_get_name(theme),
"purple", info->type, NULL);
- if (!g_file_test(theme_dest, G_FILE_TEST_IS_DIR))
- purple_build_dir(theme_dest, S_IRUSR | S_IWUSR | S_IXUSR);
+ if (!g_file_test(theme_dest, G_FILE_TEST_IS_DIR)) { + g_mkdir_with_parents(theme_dest, S_IRUSR | S_IWUSR | S_IXUSR); theme_dest = g_build_filename(purple_data_dir(), "themes",
@@ -1344,8 +1346,9 @@
- if (!g_file_test(temp_path, G_FILE_TEST_IS_DIR))
- purple_build_dir(temp_path, S_IRUSR | S_IWUSR | S_IXUSR);
+ if (!g_file_test(temp_path, G_FILE_TEST_IS_DIR)) { + g_mkdir_with_parents(temp_path, S_IRUSR | S_IWUSR | S_IXUSR); if (purple_theme_file_copy(path, temp_file)) {
/* find the theme, could be in subfolder */
@@ -1357,8 +1360,9 @@
purple_theme_get_name(theme), "purple",
- if(!g_file_test(theme_dest, G_FILE_TEST_IS_DIR))
- purple_build_dir(theme_dest, S_IRUSR | S_IWUSR | S_IXUSR);
+ if(!g_file_test(theme_dest, G_FILE_TEST_IS_DIR)) { + g_mkdir_with_parents(theme_dest, S_IRUSR | S_IWUSR | S_IXUSR); if (g_rename(purple_theme_get_dir(theme), theme_dest)) {
purple_debug_error("gtkprefs", "Error renaming %s to %s: "
--- a/pidgin/gtkutils.c Sun Nov 03 23:51:59 2019 -0500
+++ b/pidgin/gtkutils.c Mon Nov 04 11:01:03 2019 +0000
@@ -1374,7 +1374,7 @@
/* Are we trying to send a .desktop file? */
- else if (purple_str_has_suffix(basename, ".desktop")) {
+ else if (g_str_has_suffix(basename, ".desktop")) { pidgin_dnd_file_send_desktop(account, who, filename);
@@ -1579,8 +1579,7 @@
gtk_tree_model_get_value(model, iter, COMPLETION_NORMALIZED_COLUMN, &val1);
tmp = g_value_get_string(&val1);
- if (tmp != NULL && purple_str_has_prefix(tmp, key))
+ if (tmp != NULL && g_str_has_prefix(tmp, key)) { @@ -1589,8 +1588,7 @@
gtk_tree_model_get_value(model, iter, COMPLETION_COMPARISON_COLUMN, &val2);
tmp = g_value_get_string(&val2);
- if (tmp != NULL && purple_str_has_prefix(tmp, key))
+ if (tmp != NULL && g_str_has_prefix(tmp, key)) { @@ -2351,15 +2349,13 @@
normalized = g_utf8_casefold(tmp, -1);
- if (purple_str_has_prefix(normalized, enteredstring))
+ if (g_str_has_prefix(normalized, enteredstring)) {
/* Use Pango to separate by words. */
len = g_utf8_strlen(normalized, -1);
log_attrs = g_new(PangoLogAttr, len + 1);
@@ -2371,8 +2367,7 @@
for (i = 0; i < (len - 1) ; i++)
if (log_attrs[i].is_word_start &&
- purple_str_has_prefix(word, enteredstring))
+ g_str_has_prefix(word, enteredstring)) { @@ -2390,7 +2385,7 @@
if (!g_unichar_isalnum(c))
word = g_utf8_find_next_char(word, NULL);
- if (purple_str_has_prefix(word, enteredstring))
+ if (g_str_has_prefix(word, enteredstring))