Modified:
/trunk/src/common/crossepg_downloader.c
/trunk/src/common/providers/providers.c
/trunk/src/common/providers/providers.h
=======================================
--- /trunk/src/common/crossepg_downloader.c Tue Apr 26 12:24:45 2011
+++ /trunk/src/common/crossepg_downloader.c Sun May 15 12:53:45 2011
@@ -92,6 +92,22 @@
else
sprintf (string, "%d bytes", size);
}
+
+char *replace_str(char *str, char *orig, char *rep)
+{
+ static char buffer[4096];
+ char *p;
+
+ if(!(p = strstr(str, orig))) // Is 'orig' even in 'str'?
+ return str;
+
+ strncpy(buffer, str, p-str); // Copy characters from 'str' start
to 'orig' st$
+ buffer[p-str] = '\0';
+
+ sprintf(buffer+(p-str), "%s%s", rep, p+strlen(orig));
+
+ return buffer;
+}
bool opentv_titles_callback (int size, unsigned char* data)
{
@@ -390,11 +406,16 @@
}
else if (providers_get_protocol () == 4)
{
- char filename[256];
+ char filename[1024], tmp[1024], *tmp2;
interactive_send (ACTION_START);
interactive_send_text (ACTION_TYPE, "RUNNING SCRIPT");
interactive_send_text (ACTION_URL, providers_get_script_filename ());
- sprintf (filename, "LD_LIBRARY_PATH=%s %s/scripts/%s %s", homedir,
homedir, providers_get_script_filename (), db_root);
+
+ tmp2 = replace_str (providers_get_script_arguments (), "%%dbroot%%",
db_root);
+ strcpy (tmp, tmp2);
+ tmp2 = replace_str (tmp, "%%homedir%%", homedir);
+ sprintf (filename, "LD_LIBRARY_PATH=%s %s/scripts/%s %s", homedir,
homedir, providers_get_script_filename (), tmp2);
+
if (system (filename) != 0)
interactive_send_text (ACTION_ERROR, "script returned an error");
exec = false;
@@ -766,11 +787,14 @@
}
else if (providers_get_protocol () == 4)
{
- char filename[256];
+ char filename[1024], tmp[1024], *tmp2;
log_add ("Provider %s identified as script", provider);
log_add ("Script file name: %s", providers_get_script_filename ());
- sprintf (filename, "LD_LIBRARY_PATH=%s %s/scripts/%s %s", homedir,
homedir, providers_get_script_filename (), db_root);
+ tmp2 = replace_str (providers_get_script_arguments (), "%%dbroot%%",
db_root);
+ strcpy (tmp, tmp2);
+ tmp2 = replace_str (tmp, "%%homedir%%", homedir);
+ sprintf (filename, "LD_LIBRARY_PATH=%s %s/scripts/%s %s", homedir,
homedir, providers_get_script_filename (), tmp2);
log_add ("Executing script %s ...", filename);
system (filename);
=======================================
--- /trunk/src/common/providers/providers.c Sun Apr 24 11:52:39 2011
+++ /trunk/src/common/providers/providers.c Sun May 15 12:53:45 2011
@@ -46,6 +46,7 @@
static char xepgdb_descriptors_url[256];
static char preferred_language[4];
static char script_filename[256];
+static char script_arguments[1024];
int *providers_get_channels_pids () { return channels_pids; }
int *providers_get_titles_pids () { return titles_pids; }
@@ -135,6 +136,7 @@
char *providers_get_xepgdb_headers_url () { return xepgdb_headers_url; }
char *providers_get_xepgdb_descriptors_url () { return
xepgdb_descriptors_url;}
char *providers_get_script_filename () { return script_filename; }
+char *providers_get_script_arguments () { return script_arguments; }
static char *providers_trim_spaces (char *text)
{
@@ -184,6 +186,8 @@
strcpy (preferred_language, "eng");
strcpy (xepgdb_headers_url, "");
strcpy (xepgdb_descriptors_url, "");
+ strcpy (script_filename, "");
+ strcpy (script_arguments, "");
fd = fopen (read, "r");
if (!fd)
@@ -196,7 +200,7 @@
memset (key, 0, sizeof (key));
memset (value, 0, sizeof (value));
- if (sscanf (line, "%[^#=]=%s\n", key, value) != 2)
+ if (sscanf (line, "%[^#=]=%[^\t\n]\n", key, value) != 2)
continue;
tmp_key = providers_trim_spaces (key);
@@ -310,6 +314,8 @@
strcpy (xepgdb_descriptors_url, tmp_value);
else if (strcmp ("filename", tmp_key) == 0)
strcpy (script_filename, tmp_value);
+ else if (strcmp ("arguments", tmp_key) == 0)
+ strcpy (script_arguments, tmp_value);
}
fclose (fd);
=======================================
--- /trunk/src/common/providers/providers.h Sun Apr 24 11:52:39 2011
+++ /trunk/src/common/providers/providers.h Sun May 15 12:53:45 2011
@@ -20,5 +20,6 @@
char *providers_get_xepgdb_headers_url ();
char *providers_get_xepgdb_descriptors_url ();
char *providers_get_script_filename ();
+char *providers_get_script_arguments ();
#endif // _OPENTV_PROVIDERS_H_