diff --git a/src/dvb/dvb.h b/src/dvb/dvb.h index 7058c7b9..488620bc 100644 --- a/src/dvb/dvb.h +++ b/src/dvb/dvb.h @@ -391,7 +391,8 @@ tdt_add(th_dvb_mux_instance_t *tdmi, struct dmx_sct_filter_params *fparams, #define TDT_CRC 0x1 #define TDT_QUICKREQ 0x2 -#define TDT_CA 0x4 +#define TDT_CA 0x4 +#define TDT_TDT 0x8 /** * Satellite configuration diff --git a/src/dvb/dvb_tables.c b/src/dvb/dvb_tables.c index 89291f1d..ba406940 100644 --- a/src/dvb/dvb_tables.c +++ b/src/dvb/dvb_tables.c @@ -168,6 +168,8 @@ dvb_proc_table(th_dvb_mux_instance_t *tdmi, th_dvb_table_t *tdt, uint8_t *sec, if(tdt->tdt_flags & TDT_CA) ret = tdt->tdt_callback((th_dvb_mux_instance_t *)tdt, sec, len + 3, tableid, tdt->tdt_opaque); + else if(tdt->tdt_flags & TDT_TDT) + ret = tdt->tdt_callback(tdmi, ptr, len, tableid, tdt); else ret = tdt->tdt_callback(tdmi, ptr, len, tableid, tdt->tdt_opaque); diff --git a/src/settings.c b/src/settings.c index ca3c7270..e2c54779 100644 --- a/src/settings.c +++ b/src/settings.c @@ -206,14 +206,17 @@ hts_settings_load_one(const char *filename) static int hts_settings_buildpath(char *dst, size_t dstsize, const char *fmt, va_list ap) { + char tmp[256]; char *n = dst; if(settingspath == NULL) return -1; - - snprintf(dst, dstsize, "%s/", settingspath); - - vsnprintf(dst + strlen(dst), dstsize - strlen(dst), fmt, ap); + + vsnprintf(tmp, sizeof(tmp), fmt, ap); + if (*tmp != '/') + snprintf(dst, dstsize, "%s/%s", settingspath, tmp); + else + strncpy(dst, tmp, dstsize); while(*n) { if(*n == ':' || *n == '?' || *n == '*' || *n > 127 || *n < 32) diff --git a/support/dataroot/wd.c b/support/dataroot/wd.c index 9b653eb2..52da7f52 100644 --- a/support/dataroot/wd.c +++ b/support/dataroot/wd.c @@ -1,4 +1,13 @@ +#include +#include +#include + const char *tvheadend_dataroot(void) { - return "./"; + static char cwd[256] = { 0 }; + if (!*cwd) { + assert(getcwd(cwd, 254)); + strcat(cwd, "/"); + } + return cwd; }