summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikola Pajkovsky <npajkovs@redhat.com>2010-05-17 15:10:24 +0200
committerNikola Pajkovsky <npajkovs@redhat.com>2010-05-17 15:13:48 +0200
commit85690ca08ca5e6d782343a91d08547c56257658e (patch)
tree1ae97b279cb8b660c8bf74f66eeedc42849d34d0
parentd564bc6ed770602c59c02cb23973fd8eae8ffa97 (diff)
downloadabrt-85690ca08ca5e6d782343a91d08547c56257658e.tar.gz
abrt-85690ca08ca5e6d782343a91d08547c56257658e.tar.xz
abrt-85690ca08ca5e6d782343a91d08547c56257658e.zip
remove std::string from parse_release()
Signed-off-by: Nikola Pajkovsky <npajkovs@redhat.com>
-rw-r--r--inc/abrtlib.h2
-rw-r--r--lib/Plugins/Bugzilla.cpp19
-rw-r--r--lib/Plugins/Catcut.cpp12
-rw-r--r--lib/Utils/parse_release.cpp52
4 files changed, 49 insertions, 36 deletions
diff --git a/inc/abrtlib.h b/inc/abrtlib.h
index 6303f759..4c4aa6b9 100644
--- a/inc/abrtlib.h
+++ b/inc/abrtlib.h
@@ -230,6 +230,6 @@ std::string to_string(T x)
}
void parse_args(const char *psArgs, vector_string_t& pArgs, int quote = -1);
-void parse_release(const char *pRelease, std::string& pProduct, std::string& pVersion);
+void parse_release(const char *pRelease, char **product, char **version);
#endif
diff --git a/lib/Plugins/Bugzilla.cpp b/lib/Plugins/Bugzilla.cpp
index b7c15de2..94fd3838 100644
--- a/lib/Plugins/Bugzilla.cpp
+++ b/lib/Plugins/Bugzilla.cpp
@@ -300,8 +300,10 @@ void ctx::get_bug_cc(xmlrpc_value* result_xml, struct bug_info* bz)
xmlrpc_value* ctx::call_quicksearch_duphash(const char* component, const char* duphash)
{
- std::string query = ssprintf("ALL component:\"%s\" statuswhiteboard:\"%s\"", component, duphash);
- return call("Bug.search", "({s:s})", "quicksearch", query.c_str());
+ char *query = xasprintf("ALL component:\"%s\" statuswhiteboard:\"%s\"", component, duphash);
+ xmlrpc_value *ret = call("Bug.search", "({s:s})", "quicksearch", query);
+ free(query);
+ return ret;
}
xmlrpc_int32 ctx::get_bug_id(xmlrpc_value* result_xml)
@@ -373,19 +375,22 @@ xmlrpc_int32 ctx::new_bug(const map_crash_data_t& pCrashData)
std::string description = "abrt version: "VERSION"\n";
description += make_description_bz(pCrashData);
- std::string product;
- std::string version;
- parse_release(release.c_str(), product, version);
+ char *product = NULL;
+ char *version = NULL;
+ parse_release(release.c_str(), &product, &version);
xmlrpc_value* result = call("Bug.create", "({s:s,s:s,s:s,s:s,s:s,s:s,s:s})",
- "product", product.c_str(),
+ "product", product,
"component", component.c_str(),
- "version", version.c_str(),
+ "version", version,
"summary", summary.c_str(),
"description", description.c_str(),
"status_whiteboard", status_whiteboard.c_str(),
"platform", arch.c_str()
);
+ free(product);
+ free(version);
+
if (!result)
return -1;
diff --git a/lib/Plugins/Catcut.cpp b/lib/Plugins/Catcut.cpp
index 6c655f2b..05a93bb8 100644
--- a/lib/Plugins/Catcut.cpp
+++ b/lib/Plugins/Catcut.cpp
@@ -290,20 +290,22 @@ ctx::new_bug(const char *auth_cookie, const map_crash_data_t& pCrashData)
string description = make_description_catcut(pCrashData);
- string product;
- string version;
- parse_release(release.c_str(), product, version);
+ char *product = NULL;
+ char *version = NULL;
+ parse_release(release.c_str(), &product, &version);
xmlrpc_value *param = xmlrpc_build_value(&env, "(s{s:s,s:s,s:s,s:s,s:s,s:s,s:s})",
auth_cookie,
- "product", product.c_str(),
+ "product", product,
"component", component.c_str(),
- "version", version.c_str(),
+ "version", version,
"summary", summary.c_str(),
"description", description.c_str(),
"status_whiteboard", status_whiteboard.c_str(),
"platform", arch.c_str()
);
+ free(product);
+ free(version);
throw_if_xml_fault_occurred(&env);
xmlrpc_value *result;
diff --git a/lib/Utils/parse_release.cpp b/lib/Utils/parse_release.cpp
index 4f7d76e1..3d6b572f 100644
--- a/lib/Utils/parse_release.cpp
+++ b/lib/Utils/parse_release.cpp
@@ -21,38 +21,44 @@
# include "config.h"
#endif
-using namespace std;
+#include "strbuf.h"
-void parse_release(const char *pRelease, string& pProduct, string& pVersion)
+// caller is reposible for freeing *product* and *version*
+void parse_release(const char *release, char** product, char** version)
{
- if (strstr(pRelease, "Rawhide"))
+ if (strstr(release, "Rawhide"))
{
- pProduct = "Fedora";
- pVersion = "rawhide";
- VERB3 log("%s: version:'%s' product:'%s'", __func__, pVersion.c_str(), pProduct.c_str());
+ *product = xstrdup("Fedora");
+ *version = xstrdup("rawhide");
+ VERB3 log("%s: version:'%s' product:'%s'", __func__, *version, *product);
return;
}
- if (strstr(pRelease, "Fedora"))
- {
- pProduct = "Fedora";
- }
- else if (strstr(pRelease, "Red Hat Enterprise Linux"))
- {
- pProduct = "Red Hat Enterprise Linux ";
- }
- const char *release = strstr(pRelease, "release");
- const char *space = release ? strchr(release, ' ') : NULL;
+ struct strbuf *buf_product = strbuf_new();
+ if (strstr(release, "Fedora"))
+ strbuf_append_str(buf_product, "Fedora");
+ else if (strstr(release, "Red Hat Enterprise Linux"))
+ strbuf_append_str(buf_product, "Red Hat Enterprise Linux ");
- if (space++) while (*space != '\0' && *space != ' ')
+ const char *r = strstr(release, "release");
+ const char *space = r ? strchr(r, ' ') : NULL;
+
+ struct strbuf *buf_version = strbuf_new();
+ if (space++)
{
- /* Eat string like "5.2" */
- pVersion += *space;
- if (pProduct == "Red Hat Enterprise Linux ")
+ while (*space != '\0' && *space != ' ')
{
- pProduct += *space;
+ /* Eat string like "5.2" */
+ strbuf_append_char(buf_version, *space);
+ if ((strcmp(buf_product->buf, "Red Hat Enterprise Linux ") == 0))
+ strbuf_append_char(buf_product, *space);
+
+ space++;
}
- space++;
}
- VERB3 log("%s: version:'%s' product:'%s'", __func__, pVersion.c_str(), pProduct.c_str());
+
+ *version = strbuf_free_nobuf(buf_version);
+ *product = strbuf_free_nobuf(buf_product);
+
+ VERB3 log("%s: version:'%s' product:'%s'", __func__, *version, *product);
}