From 5c0069f0bb5ab56c586b963fbe1a877134af2362 Mon Sep 17 00:00:00 2001 From: Tomas Mlcoch Date: Wed, 16 Jul 2014 14:15:52 +0200 Subject: [PATCH] misc: The struct cr_EVR type replaced by the cr_EVR * --- src/misc.c | 42 ++++++++++++++++++++++++++---------------- src/misc.h | 15 ++++++++++++--- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/src/misc.c b/src/misc.c index fbb70ad..d203d46 100644 --- a/src/misc.c +++ b/src/misc.c @@ -74,13 +74,13 @@ cr_flag_to_str(gint64 flags) * Returned structure had all string inserted in the passed chunk. * */ -struct cr_EVR +cr_EVR * cr_str_to_evr(const char *string, GStringChunk *chunk) { - struct cr_EVR evr; - evr.epoch = NULL; - evr.version = NULL; - evr.release = NULL; + cr_EVR *evr = g_new0(cr_EVR, 1); + evr->epoch = NULL; + evr->version = NULL; + evr->release = NULL; if (!string || !(strlen(string))) { return evr; @@ -101,9 +101,9 @@ cr_str_to_evr(const char *string, GStringChunk *chunk) size_t len = ptr - string; if (len) { if (chunk) { - evr.epoch = g_string_chunk_insert_len(chunk, string, len); + evr->epoch = g_string_chunk_insert_len(chunk, string, len); } else { - evr.epoch = g_strndup(string, len); + evr->epoch = g_strndup(string, len); } } } @@ -111,11 +111,11 @@ cr_str_to_evr(const char *string, GStringChunk *chunk) ptr = (char*) string-1; } - if (!evr.epoch) { + if (!evr->epoch) { if (chunk) { - evr.epoch = g_string_chunk_insert_const(chunk, "0"); + evr->epoch = g_string_chunk_insert_const(chunk, "0"); } else { - evr.epoch = g_strdup("0"); + evr->epoch = g_strdup("0"); } } @@ -127,32 +127,42 @@ cr_str_to_evr(const char *string, GStringChunk *chunk) // Version size_t version_len = ptr2 - (ptr+1); if (chunk) { - evr.version = g_string_chunk_insert_len(chunk, ptr+1, version_len); + evr->version = g_string_chunk_insert_len(chunk, ptr+1, version_len); } else { - evr.version = g_strndup(ptr+1, version_len); + evr->version = g_strndup(ptr+1, version_len); } // Release size_t release_len = strlen(ptr2+1); if (release_len) { if (chunk) { - evr.release = g_string_chunk_insert_len(chunk, ptr2+1, + evr->release = g_string_chunk_insert_len(chunk, ptr2+1, release_len); } else { - evr.release = g_strndup(ptr2+1, release_len); + evr->release = g_strndup(ptr2+1, release_len); } } } else { // Release is not here, just version if (chunk) { - evr.version = g_string_chunk_insert_const(chunk, ptr+1); + evr->version = g_string_chunk_insert_const(chunk, ptr+1); } else { - evr.version = g_strdup(ptr+1); + evr->version = g_strdup(ptr+1); } } return evr; } +void +cr_evr_free(cr_EVR *evr) +{ + if (!evr) + return; + g_free(evr->epoch); + g_free(evr->version); + g_free(evr->release); + g_free(evr); +} /* inline int diff --git a/src/misc.h b/src/misc.h index 91b2148..f074e11 100644 --- a/src/misc.h +++ b/src/misc.h @@ -55,11 +55,11 @@ const char *cr_flag_to_str(gint64 flags); /** Epoch-Version-Release representation. */ -struct cr_EVR { +typedef struct { char *epoch; /*!< epoch */ char *version; /*!< version */ char *release; /*!< release */ -}; +} cr_EVR; /** Name-Version-Release-Epoch-Arch representation. */ @@ -105,7 +105,16 @@ struct cr_Version { * @param chunk string chunk for strings (optional - could be NULL) * @return filled NVR */ -struct cr_EVR cr_str_to_evr(const char *string, GStringChunk *chunk); +cr_EVR *cr_str_to_evr(const char *string, GStringChunk *chunk); + +/** Free cr_EVR + * Warning: Do not use this function when a string chunk was + * used in the cr_str_to_evr! In that case use only g_free on + * the cr_EVR pointer. + * @param evr cr_EVR structure + */ +void +cr_evr_free(cr_EVR *evr); /** Check if the filename match pattern for primary files (files listed * in primary.xml). -- 2.7.4