mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-neutrino.git
synced 2025-08-28 16:01:10 +02:00
plugins.cpp: start plugin script with posix spawn
Origin commit data
------------------
Branch: ni/coolstream
Commit: 854e222603
Author: Jacek Jendrzej <overx300@gmail.com>
Date: 2012-06-20 (Wed, 20 Jun 2012)
------------------
No further description and justification available within origin commit message!
------------------
This commit was generated by Migit
This commit is contained in:
@@ -40,6 +40,7 @@
|
||||
|
||||
#include <dirent.h>
|
||||
#include <dlfcn.h>
|
||||
#include <spawn.h>
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
@@ -91,10 +92,9 @@ int CPlugins::find_plugin(const std::string & filename)
|
||||
|
||||
bool CPlugins::pluginfile_exists(const std::string & filename)
|
||||
{
|
||||
FILE *file = fopen(filename.c_str(),"r");
|
||||
if (file != NULL)
|
||||
struct stat stat_buf;
|
||||
if(stat(filename.c_str(), &stat_buf) == 0)
|
||||
{
|
||||
fclose(file);
|
||||
return true;
|
||||
} else
|
||||
{
|
||||
@@ -324,7 +324,7 @@ void CPlugins::startScriptPlugin(int number)
|
||||
script, plugin_list[number].cfgfile.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
#if 0
|
||||
FILE *f = popen(script,"r");
|
||||
if (f != NULL)
|
||||
{
|
||||
@@ -343,6 +343,39 @@ void CPlugins::startScriptPlugin(int number)
|
||||
{
|
||||
printf("[CPlugins] can't execute %s\n",script);
|
||||
}
|
||||
#else
|
||||
int out[2], in[2];
|
||||
int pid,i;
|
||||
const int buf_size=1024;
|
||||
char* spawnedArgs[] = { (char *)"/bin/sh", (char *)0 };
|
||||
char buf[buf_size];
|
||||
memset(buf,0, buf_size);
|
||||
posix_spawn_file_actions_t action;
|
||||
|
||||
pipe(out);
|
||||
pipe(in);
|
||||
|
||||
posix_spawn_file_actions_init(&action);
|
||||
posix_spawn_file_actions_adddup2(&action, out[0], 0);
|
||||
posix_spawn_file_actions_addclose(&action, out[1]);
|
||||
|
||||
posix_spawn_file_actions_adddup2(&action, in[1], 1);
|
||||
posix_spawn_file_actions_addclose(&action, in[0]);
|
||||
|
||||
posix_spawnp(&pid, spawnedArgs[0], &action, NULL, spawnedArgs, NULL);
|
||||
|
||||
close(out[0]);
|
||||
close(in[1]);
|
||||
|
||||
write(out[1], plugin_list[number].pluginfile.c_str(), plugin_list[number].pluginfile.size());
|
||||
close(out[1]);
|
||||
|
||||
|
||||
while ( (i = read(in[0], buf, buf_size)) != 0 ) {
|
||||
scriptOutput += buf;
|
||||
memset(buf,0, buf_size);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
int mysystem(char * cmd, char * arg1, char * arg2);
|
||||
|
Reference in New Issue
Block a user