Signed-off-by: Nikola Pajkovsky <npajkovs(a)redhat.com>
---
src/plugins/reporter-bugzilla.c | 6 ++----
src/plugins/rhbz.c | 27 ++++++++++++++++++++++-----
src/plugins/rhbz.h | 6 ++++--
3 files changed, 28 insertions(+), 11 deletions(-)
diff --git a/src/plugins/reporter-bugzilla.c b/src/plugins/reporter-bugzilla.c
index 3b6d168..9746301 100644
--- a/src/plugins/reporter-bugzilla.c
+++ b/src/plugins/reporter-bugzilla.c
@@ -168,10 +168,9 @@ int main(int argc, char **argv)
int all_bugs_size = rhbz_array_size(all_bugs);
if (all_bugs_size > 0)
{
- char *rhbz_ver = rhbz_version(client);
+ size_t rhbz_ver = rhbz_version(client);
int bug_id = rhbz_bug_id(all_bugs, rhbz_ver);
printf("%i", bug_id);
- free(rhbz_ver);
}
exit(EXIT_SUCCESS);
@@ -359,11 +358,10 @@ int main(int argc, char **argv)
}
else
{
- char *rhbz_ver = rhbz_version(client);
+ size_t rhbz_ver = rhbz_version(client);
int bug_id = rhbz_bug_id(all_bugs, rhbz_ver);
xmlrpc_DECREF(all_bugs);
bz = rhbz_bug_info(client, bug_id);
- free(rhbz_ver);
}
}
else
diff --git a/src/plugins/rhbz.c b/src/plugins/rhbz.c
index df2838f..6888c30 100644
--- a/src/plugins/rhbz.c
+++ b/src/plugins/rhbz.c
@@ -244,7 +244,7 @@ int rhbz_array_size(xmlrpc_value *xml)
}
-char *rhbz_version(struct abrt_xmlrpc *ax)
+size_t rhbz_version(struct abrt_xmlrpc *ax)
{
func_entry();
@@ -258,11 +258,28 @@ char *rhbz_version(struct abrt_xmlrpc *ax)
xmlrpc_DECREF(result);
}
- return version;
+ strchrnul(version, '-')[0] = '\0';
+
+ /* format must be x.y.z */
+ char *vp;
+ int i = 0, v[3] = {0, 0, 0};
+
+ for (vp = version; i < 3; vp = NULL, ++i)
+ {
+ char *tok = strtok(vp, ".");
+ if (!tok)
+ break;
+
+ v[i] = strtoul(tok, NULL, 10);
+ }
+
+ free(version);
+
+ return BUGZILLA_VERSION(v[0], v[1], v[2]);
}
/* die or return bug id; each bug must have bug id otherwise xml is corrupted */
-int rhbz_bug_id(xmlrpc_value* xml, const char *ver)
+int rhbz_bug_id(xmlrpc_value* xml, size_t ver)
{
func_entry();
@@ -277,8 +294,8 @@ int rhbz_bug_id(xmlrpc_value* xml, const char *ver)
if (env.fault_occurred)
abrt_xmlrpc_die(&env);
- char *id;
- if (!prefixcmp(ver, "4.2"))
+ const char *id;
+ if (ver >= BUGZILLA_VERSION(4,2,0))
id = "id";
else
id = "bug_id";
diff --git a/src/plugins/rhbz.h b/src/plugins/rhbz.h
index 85bcca1..84e0ba0 100644
--- a/src/plugins/rhbz.h
+++ b/src/plugins/rhbz.h
@@ -30,6 +30,8 @@
extern "C" {
#endif
+#define BUGZILLA_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+
enum {
RHBZ_MANDATORY_MEMB = (1 << 0),
RHBZ_READ_STR = (1 << 1),
@@ -97,7 +99,7 @@ xmlrpc_value *rhbz_get_member(const char *member, xmlrpc_value *xml);
int rhbz_array_size(xmlrpc_value *xml);
-int rhbz_bug_id(xmlrpc_value *xml, const char *ver);
+int rhbz_bug_id(xmlrpc_value *xml, size_t ver);
int rhbz_new_bug(struct abrt_xmlrpc *ax, problem_data_t *problem_data,
const char *release);
@@ -120,7 +122,7 @@ struct bug_info *rhbz_bug_info(struct abrt_xmlrpc *ax, int bug_id);
struct bug_info *rhbz_find_origin_bug_closed_duplicate(struct abrt_xmlrpc *ax,
struct bug_info *bi);
-char *rhbz_version(struct abrt_xmlrpc *ax);
+size_t rhbz_version(struct abrt_xmlrpc *ax);
#ifdef __cplusplus
}
--
1.7.10.1