summaryrefslogtreecommitdiffstats
path: root/lib/Plugins/RunApp.cpp
diff options
context:
space:
mode:
authorKarel Klic <kklic@redhat.com>2010-01-18 13:19:54 +0100
committerKarel Klic <kklic@redhat.com>2010-01-18 13:19:54 +0100
commit4267cbcc29781ddcac00e259dfe05f3a26fbc2ec (patch)
tree213e47138967f1e7af4ee9ff9a3f2ed861cb5815 /lib/Plugins/RunApp.cpp
parentb2d1bd9e4f387c5a014d3002d741f25421c37aac (diff)
parentb41833ed61f7b579d2a46b26d261616c21a6ae32 (diff)
downloadabrt-4267cbcc29781ddcac00e259dfe05f3a26fbc2ec.tar.gz
abrt-4267cbcc29781ddcac00e259dfe05f3a26fbc2ec.tar.xz
abrt-4267cbcc29781ddcac00e259dfe05f3a26fbc2ec.zip
Merge branch 'master' of git://git.fedorahosted.org/git/abrt
Diffstat (limited to 'lib/Plugins/RunApp.cpp')
-rw-r--r--lib/Plugins/RunApp.cpp36
1 files changed, 12 insertions, 24 deletions
diff --git a/lib/Plugins/RunApp.cpp b/lib/Plugins/RunApp.cpp
index f7cbc01..e2147e2 100644
--- a/lib/Plugins/RunApp.cpp
+++ b/lib/Plugins/RunApp.cpp
@@ -33,50 +33,38 @@ using namespace std;
void CActionRunApp::Run(const char *pActionDir, const char *pArgs)
{
- /* Don't update_client() - actions run at crash time */
+ /* Don't update_client() - actions run at crash time, there is no client
+ * to talk to at that point */
log("RunApp('%s','%s')", pActionDir, pArgs);
vector_string_t args;
parse_args(pArgs, args, '"');
+ if (args.size() <= COMMAND)
+ {
+ return;
+ }
const char *cmd = args[COMMAND].c_str();
if (!cmd[0])
{
return;
}
-//FIXME: need to be able to escape " in .conf
- /* Chdir to the dump dir. Command can analyze component and such.
+ /* NB: we chdir to the dump dir. Command can analyze component and such.
* Example:
* test x"`cat component`" = x"xorg-x11-apps" && cp /var/log/Xorg.0.log .
*/
-//Can do it using chdir() in child if we'd open-code popen
- string cd_and_cmd = ssprintf("cd '%s'; %s", pActionDir, cmd);
- VERB1 log("RunApp: executing '%s'", cd_and_cmd.c_str());
- FILE *fp = popen(cd_and_cmd.c_str(), "r");
- if (fp == NULL)
- {
- /* Happens only on resource starvation (fork fails or out-of-mem) */
- return;
- }
-
-//FIXME: RunApp("gzip -9 </var/log/Xorg.0.log", "Xorg.0.log.gz") fails
-//since we mangle NULs.
- string output;
- char line[1024];
- while (fgets(line, 1024, fp) != NULL)
- {
- if (args.size() > FILENAME)
- output += line;
- }
- pclose(fp);
+ size_t cmd_out_size;
+ char *cmd_out = run_in_shell_and_save_output(/*flags:*/ 0, cmd, pActionDir, &cmd_out_size);
if (args.size() > FILENAME)
{
CDebugDump dd;
dd.Open(pActionDir);
- dd.SaveText(args[FILENAME].c_str(), output.c_str());
+ dd.SaveBinary(args[FILENAME].c_str(), cmd_out, cmd_out_size);
}
+
+ free(cmd_out);
}
PLUGIN_INFO(ACTION,