From dee2231bf2aafa57bcae30f6de15bf028dbcf486 Mon Sep 17 00:00:00 2001 From: Iwan Timmer Date: Fri, 14 Aug 2015 15:23:40 +0200 Subject: [PATCH] Fix a few small memleaks --- libgamestream/client.c | 1 - libgamestream/xml.c | 11 ++++++++++- src/config.c | 14 +++++++++----- src/main.c | 13 ++++++++++--- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/libgamestream/client.c b/libgamestream/client.c index 54cae74..c84caef 100644 --- a/libgamestream/client.c +++ b/libgamestream/client.c @@ -350,7 +350,6 @@ int gs_pair(PSERVER_DATA server, char* pin) { if ((ret = http_request(url, data)) != GS_OK) goto cleanup; - printf("Paired\n"); server->paired = true; cleanup: diff --git a/libgamestream/xml.c b/libgamestream/xml.c index 374a324..9efa963 100644 --- a/libgamestream/xml.c +++ b/libgamestream/xml.c @@ -23,6 +23,8 @@ #include #include +static XML_Parser parser; + struct xml_query { char *memory; size_t size; @@ -103,11 +105,15 @@ int xml_search(char* data, size_t len, char* node, char** result) { if (! XML_Parse(parser, data, len, 1)) { int code = XML_GetErrorCode(parser); gs_error = XML_ErrorString(code); + XML_ParserFree(parser); free(search.memory); return GS_INVALID; - } else if (search.memory == NULL) + } else if (search.memory == NULL) { + XML_ParserFree(parser); return GS_OUT_OF_MEMORY; + } + XML_ParserFree(parser); *result = search.memory; return GS_OK; @@ -126,8 +132,11 @@ int xml_applist(char* data, size_t len, PAPP_LIST *app_list) { if (! XML_Parse(parser, data, len, 1)) { int code = XML_GetErrorCode(parser); gs_error = XML_ErrorString(code); + XML_ParserFree(parser); return GS_INVALID; } + + XML_ParserFree(parser); *app_list = (PAPP_LIST) query.data; return GS_OK; diff --git a/src/config.c b/src/config.c index 493f051..7b054d1 100644 --- a/src/config.c +++ b/src/config.c @@ -83,22 +83,26 @@ char* get_path(char* name, char* extra_data_dirs) { exit(-1); } + char* data_dir = data_dirs; char* end; do { - end = strstr(data_dirs, ":"); - int length = end != NULL?end - data_dirs:strlen(data_dirs); - memcpy(path, data_dirs, length); + end = strstr(data_dir, ":"); + int length = end != NULL?end - data_dir:strlen(data_dir); + memcpy(path, data_dir, length); if (path[0] == '/') sprintf(path+length, MOONLIGHT_PATH "/%s", name); else sprintf(path+length, "/%s", name); - if(access(path, R_OK) != -1) + if(access(path, R_OK) != -1) { + free(data_dirs); return path; + } - data_dirs = end + 1; + data_dir = end + 1; } while (end != NULL); + free(data_dirs); free(path); return NULL; } diff --git a/src/main.c b/src/main.c index 85afd31..47051e9 100644 --- a/src/main.c +++ b/src/main.c @@ -190,9 +190,16 @@ int main(int argc, char* argv[]) { SERVER_DATA server; server.address = config.address; - if (gs_init(&server, config.key_dir) != GS_OK) { - fprintf(stderr, "Can't connect to server %s\n", config.address); - exit(-1); + int ret; + if ((ret = gs_init(&server, config.key_dir)) == GS_OUT_OF_MEMORY) { + fprintf(stderr, "Not enough memory\n"); + exit(-1); + } else if (ret == GS_INVALID) { + fprintf(stderr, "Invalid data received from server: %s\n", config.address, gs_error); + exit(-1); + } else if (ret != GS_OK) { + fprintf(stderr, "Can't connect to server %s\n", config.address); + exit(-1); } if (strcmp("list", config.action) == 0) {