summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--inc/abrtlib.h3
-rw-r--r--lib/Plugins/RunApp.cpp33
-rw-r--r--lib/Plugins/SOSreport.cpp32
-rw-r--r--lib/Utils/Makefile.am1
-rw-r--r--lib/Utils/stringops.cpp32
5 files changed, 39 insertions, 62 deletions
diff --git a/inc/abrtlib.h b/inc/abrtlib.h
index 01dfc08a..b6fb1721 100644
--- a/inc/abrtlib.h
+++ b/inc/abrtlib.h
@@ -42,6 +42,8 @@
#include <sstream>
#include <iostream>
+#include "abrt_types.h"
+
/* Some libc's forget to declare these, do it ourself */
extern char **environ;
#if defined(__GLIBC__) && __GLIBC__ < 2
@@ -201,6 +203,7 @@ bool dot_or_dotdot(const char *filename);
char *last_char_is(const char *s, int c);
bool string_to_bool(const char *s);
+void parse_args(const char *psArgs, vector_string_t& pArgs, const char quote = -1);
/* C++ style stuff */
diff --git a/lib/Plugins/RunApp.cpp b/lib/Plugins/RunApp.cpp
index f816dc23..e525d89c 100644
--- a/lib/Plugins/RunApp.cpp
+++ b/lib/Plugins/RunApp.cpp
@@ -25,40 +25,11 @@
#include "DebugDump.h"
#include "ABRTException.h"
#include "CommLayerInner.h"
+#include "abrtlib.h"
#define COMMAND 0
#define FILENAME 1
-/* TODO: do not duplicate: SOSreport.cpp has same function too */
-static void ParseArgs(const char *psArgs, vector_string_t& pArgs)
-{
- unsigned ii;
- bool is_quote = false;
- std::string item;
-
- for (ii = 0; psArgs[ii]; ii++)
- {
- if (psArgs[ii] == '"')
- {
- is_quote = !is_quote;
- }
- else if (psArgs[ii] == ',' && !is_quote)
- {
- pArgs.push_back(item);
- item.clear();
- }
- else
- {
- item += psArgs[ii];
- }
- }
-
- if (item.size() != 0)
- {
- pArgs.push_back(item);
- }
-}
-
void CActionRunApp::Run(const char *pActionDir, const char *pArgs)
{
update_client(_("Executing RunApp plugin..."));
@@ -66,7 +37,7 @@ void CActionRunApp::Run(const char *pActionDir, const char *pArgs)
std::string output;
vector_string_t args;
- ParseArgs(pArgs, args);
+ parse_args(pArgs, args, '"');
FILE *fp = popen(args[COMMAND].c_str(), "r");
if (fp == NULL)
diff --git a/lib/Plugins/SOSreport.cpp b/lib/Plugins/SOSreport.cpp
index fedc51ab..b949339f 100644
--- a/lib/Plugins/SOSreport.cpp
+++ b/lib/Plugins/SOSreport.cpp
@@ -65,36 +65,6 @@ static std::string ParseFilename(const std::string& pOutput)
return pOutput.substr(filename_start, filename_end - filename_start + 1);
}
-/* TODO: do not duplicate: RunApp.cpp has same function too */
-static void ParseArgs(const char *psArgs, vector_string_t& pArgs)
-{
- unsigned ii;
- bool is_quote = false;
- std::string item;
-
- for (ii = 0; psArgs[ii]; ii++)
- {
- if (psArgs[ii] == '"')
- {
- is_quote = !is_quote;
- }
- else if (psArgs[ii] == ',' && !is_quote)
- {
- pArgs.push_back(item);
- item.clear();
- }
- else
- {
- item += psArgs[ii];
- }
- }
-
- if (item.size() != 0)
- {
- pArgs.push_back(item);
- }
-}
-
void CActionSOSreport::Run(const char *pActionDir, const char *pArgs)
{
update_client(_("Executing SOSreport plugin..."));
@@ -108,7 +78,7 @@ void CActionSOSreport::Run(const char *pActionDir, const char *pArgs)
std::string command;
vector_string_t args;
- ParseArgs(pArgs, args);
+ parse_args(pArgs, args, '"');
if (args.size() == 0 || args[0] == "")
{
diff --git a/lib/Utils/Makefile.am b/lib/Utils/Makefile.am
index 1b141bd7..0ca7a2b1 100644
--- a/lib/Utils/Makefile.am
+++ b/lib/Utils/Makefile.am
@@ -5,6 +5,7 @@ lib_LTLIBRARIES = libABRTUtils.la
# xconnect.cpp
libABRTUtils_la_SOURCES = \
+ stringops.cpp \
xfuncs.cpp \
encbase64.cpp \
read_write.cpp \
diff --git a/lib/Utils/stringops.cpp b/lib/Utils/stringops.cpp
new file mode 100644
index 00000000..2304accc
--- /dev/null
+++ b/lib/Utils/stringops.cpp
@@ -0,0 +1,32 @@
+#include "abrtlib.h"
+
+void parse_args(const char *psArgs, vector_string_t& pArgs, const char quote)
+{
+ unsigned ii;
+ bool is_quote = false;
+ std::string item;
+
+ for (ii = 0; psArgs[ii]; ii++)
+ {
+ if (quote != -1 && psArgs[ii] == quote)
+ {
+ is_quote = !is_quote;
+ }
+ else if (psArgs[ii] == ',' && !is_quote)
+ {
+ printf("%s\n", item.c_str());
+ pArgs.push_back(item);
+ item.clear();
+ }
+ else
+ {
+ item += psArgs[ii];
+ }
+ }
+
+ if (item.size() != 0)
+ {
+ printf("%s\n", item.c_str());
+ pArgs.push_back(item);
+ }
+}