Fri, 01 May 2020 12:13:35 -0500
Make sure that internal.h can only be included by libpurple and split out some pieces to purpleprivate.h
/* purple * * Purple is the legal property of its developers, whose names are too numerous * to list here. Please refer to the COPYRIGHT file distributed with this * source distribution. * * Code adapted from libgadu (C) 2008 Wojtek Kaniewski <wojtekka@irc.pl> * (http://toxygen.net/libgadu/) during Google Summer of Code 2012 * by Tomek Wasilczyk (http://www.wasilczyk.pl). * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ #include "oauth-parameter.h" #include <glib.h> struct gg_oauth_parameter { char *key; char *value; struct gg_oauth_parameter *next; }; int gg_oauth_parameter_set(gg_oauth_parameter_t **list, const char *key, const char *value) { gg_oauth_parameter_t *p, *new_p; char *new_key; char *new_value; if (value == NULL) return 0; if (list == NULL) return -1; new_key = g_strdup(key); if (new_key == NULL) return -1; new_value = g_strdup(value); if (new_value == NULL) { g_free(new_key); return -1; } new_p = g_new0(gg_oauth_parameter_t, 1); if (new_p == NULL) { g_free(new_key); g_free(new_value); return -1; } memset(new_p, 0, sizeof(gg_oauth_parameter_t)); new_p->key = new_key; new_p->value = new_value; if (*list != NULL) { p = *list; while (p != NULL && p->next != NULL) p = p->next; p->next = new_p; } else { *list = new_p; } return 0; } char *gg_oauth_parameter_join(gg_oauth_parameter_t *list, int header) { gg_oauth_parameter_t *p; int len = 0; char *res, *out; if (header) len += strlen("OAuth "); for (p = list; p; p = p->next) { gchar *escaped; len += strlen(p->key); len += (header) ? 3 : 1; escaped = g_uri_escape_string(p->value, NULL, FALSE); len += strlen(escaped); g_free(escaped); if (p->next) len += 1; } res = g_malloc(len + 1); if (res == NULL) return NULL; out = res; *out = 0; if (header) { strcpy(out, "OAuth "); out += strlen(out); } for (p = list; p; p = p->next) { gchar *escaped; strcpy(out, p->key); out += strlen(p->key); strcpy(out++, "="); if (header) strcpy(out++, "\""); escaped = g_uri_escape_string(p->value, NULL, FALSE); strcpy(out, escaped); out += strlen(escaped); g_free(escaped); if (header) strcpy(out++, "\""); if (p->next != NULL) strcpy(out++, (header) ? "," : "&"); } return res; } void gg_oauth_parameter_free(gg_oauth_parameter_t *list) { while (list != NULL) { gg_oauth_parameter_t *next; next = list->next; g_free(list->key); g_free(list->value); g_free(list); list = next; } }