/* Foreach */
f = htsmsg_field_find(msg, "uuid");
- if (!(conf = htsmsg_field_get_list(f)))
+ if (!f || !(conf = htsmsg_field_get_list(f)))
goto exit;
HTSMSG_FOREACH(f, conf) {
if (!(uuid = htsmsg_field_get_str(f)))
service_t *s = mpegts_service_find_e2(stype, sid, tsid, onid, hash);
if (s)
bouquet_add_service(bq, s, ((int64_t)++seen) * CHANNEL_SPLIT, tagname);
- } else if (lv == 64) {
+ } else if (lv == 0x64) {
tagname = name;
}
}
const char *channel_get_name ( channel_t *ch );
int channel_set_name ( channel_t *ch, const char *name );
-#define CHANNEL_SPLIT 1000000
+#define CHANNEL_SPLIT ((int64_t)1000000)
static inline uint32_t channel_get_major ( int64_t chnum ) { return chnum / CHANNEL_SPLIT; }
static inline uint32_t channel_get_minor ( int64_t chnum ) { return chnum % CHANNEL_SPLIT; }
if ((c = hts_settings_load_r(1, "epggrab/%s/channels", modname)) != NULL) {
HTSMSG_FOREACH(f, c) {
m = htsmsg_field_get_map(f);
+ if (m == NULL) continue;
n = htsmsg_copy(m);
htsmsg_add_str(n, "id", f->hmf_name);
maj = htsmsg_get_u32_or_default(m, "major", 0);
prop_sbuf[1] = '\0';
} else {
urlinit(&u);
- urlparse(s, &u);
+ if (urlparse(s, &u))
+ goto wrong;
if (u.scheme && (!strcmp(u.scheme, "http") || !strcmp(u.scheme, "https")) && u.host) {
if (u.port)
snprintf(prop_sbuf, PROP_SBUF_LEN, "%s://%s:%d", u.scheme, u.host, u.port);
else
snprintf(prop_sbuf, PROP_SBUF_LEN, "%s://%s", u.scheme, u.host);
} else {
+wrong:
prop_sbuf[0] = '\0';
}
urlreset(&u);
int fd, res;
struct stat st;
char *data, *last_url;
- size_t r;
+ ssize_t r;
off_t off;
fd = tvh_open(filename, O_RDONLY, 0);
}
}
} else {
- if (cfg->dvr_enabled)
+ if (cfg && cfg->dvr_enabled)
res = cfg;
}
if (!res)
"(limit %u, dvr limit %u, active DVR %u, streaming %u)",
aa->aa_username ?: "", aa->aa_representative ?: "",
aa->aa_conn_limit, aa->aa_conn_limit_dvr, rec_count, net_count);
+ access_destroy(aa);
return -EOVERFLOW;
}
}
e = htsmsg_create_map();
htsmsg_add_str(e, "type", streaming_component_type2txt(ssc->ssc_type));
- if (ssc->ssc_lang && ssc->ssc_lang[0])
+ if (ssc->ssc_lang[0])
htsmsg_add_str(e, "language", ssc->ssc_lang);
if(SCT_ISAUDIO(ssc->ssc_type)) {
/* Map file to memory */
if ( fstat(fd, &st) != 0 ) {
tvhlog(LOG_ERR, "epgdb", "failed to detect database size");
- return;
+ goto end;
}
if ( !st.st_size ) {
tvhlog(LOG_DEBUG, "epgdb", "database is empty");
- return;
+ goto end;
}
remain = st.st_size;
rp = mem = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
if ( mem == MAP_FAILED ) {
tvhlog(LOG_ERR, "epgdb", "failed to mmap database");
- return;
+ goto end;
}
/* Process */
/* Close file */
munmap(mem, st.st_size);
+end:
close(fd);
}
{
idnode_list_mapping_t *ilm;
LIST_FOREACH(ilm, &ec->channels, ilm_in2_link)
- if (ilm->ilm_in1 == &ec->idnode && ilm->ilm_in2 == &ch->ch_id)
+ if (ilm->ilm_in1 == &ec->idnode && ilm->ilm_in2 == &ch->ch_id) {
idnode_list_unlink(ilm, NULL);
+ return;
+ }
}
/* Destroy all links */
ilm2 = LIST_NEXT(ilm1, ilm_in2_link);
ch = (channel_t *)ilm1->ilm_in2;
if (!first)
- ch = first;
+ first = ch;
else if (ch->ch_epgauto && first)
idnode_list_unlink(ilm1, ec);
}
min_duration = 0; // 0 = any
if(htsmsg_get_u32(in, "retention", &retention))
retention = 0; // 0 = dvr config
- if(htsmsg_get_u32(in, "removal", &retention))
+ if(htsmsg_get_u32(in, "removal", &removal))
removal = 0; // 0 = dvr config
if(htsmsg_get_u32(in, "daysOfWeek", &days_of_week))
days_of_week = 0x7f; // all days
if (dstlen < 2)
break;
*dst = '\\'; src++; dst++; dstlen--;
- if (*src)
+ if (*src) {
*dst = *src; src++; dst++; dstlen--;
+ }
continue;
}
if (first >= 0) {
time_t t;
if (dvb_last_update + 1800 < dispatch_clock) {
t = dvb_convert_date(ptr, 0);
- tvhtime_update(t, srcname);
- dvb_last_update = dispatch_clock;
+ if (t > 0) {
+ tvhtime_update(t, srcname);
+ dvb_last_update = dispatch_clock;
+ }
}
}
buf += l;
}
+ if (ol <= 0) {
+ free(obuf);
+ return 0;
+ }
*out = obuf;
return ol;
}
ld->ld_tune = linuxdvb_rotor_tune;
ld->ld_grace = linuxdvb_rotor_grace;
ld->ld_post = linuxdvb_rotor_post;
+ lr = (linuxdvb_rotor_t *)ld;
+ if (lr->lr_powerup_time == 0)
+ lr->lr_powerup_time = 100;
+ if (lr->lr_cmd_time == 0)
+ lr->lr_cmd_time = 25;
}
- lr = (linuxdvb_rotor_t *)ld;
- if (lr->lr_powerup_time == 0)
- lr->lr_powerup_time = 100;
- if (lr->lr_cmd_time == 0)
- lr->lr_cmd_time = 25;
}
}
linuxdvb_satconf_start_mux
( linuxdvb_satconf_t *ls, mpegts_mux_instance_t *mmi, int skip_diseqc )
{
- int r;
- uint32_t f;
+ int r, f;
linuxdvb_satconf_ele_t *lse = linuxdvb_satconf_find_ele(ls, mmi->mmi_mux);
linuxdvb_frontend_t *lfe = (linuxdvb_frontend_t*)ls->ls_frontend;
if (!codes)
return ucode ? strdup(ucode) : NULL;
if (!ucode)
- return codes ? strdup(codes) : NULL;
- ret = malloc(strlen(codes) + strlen(ucode ?: "") + 2);
+ return strdup(codes);
+ ret = malloc(strlen(codes) + strlen(ucode) + 2);
strcpy(ret, ucode);
while (codes && *codes) {
s = codes;
while (*s && *s != ',')
s++;
- if (strncmp(codes, ucode ?: "", s - codes)) {
+ if (strncmp(codes, ucode, s - codes)) {
strcat(ret, ",");
strncat(ret, codes, s - codes);
}
/* Find option */
cmdline_opt_t *opt
= cmdline_opt_find(cmdline_opts, ARRAY_SIZE(cmdline_opts), argv[i]);
- if (!opt)
+ if (!opt) {
show_usage(argv[0], cmdline_opts, ARRAY_SIZE(cmdline_opts),
_("invalid option specified [%s]"), argv[i]);
+ continue;
+ }
/* Process */
if (opt->type == OPT_BOOL)
{ 2, 1 },
};
-static uint32_t ilog2(uint32_t v)
+static uint_fast32_t ilog2(uint32_t v)
{
- uint32_t r;
+ uint_fast32_t r = 0;
while (v) {
v >>= 1;
r++;
}
- return v;
+ return r;
}
static inline int check_width(uint32_t w)
if (log2_min_tb_size >= log2_min_cb_size || log2_min_tb_size < 2)
return;
log2_diff_max_min_transform_block_size = read_golomb_ue(bs);
- if (log2_diff_max_min_transform_block_size < 0 || log2_diff_max_min_transform_block_size > 30)
+ if (log2_diff_max_min_transform_block_size > 30)
return;
read_golomb_ue(bs); /* max_transform_hierarchy_depth_inter */
u = read_golomb_ue(bs); /* num_long_term_ref_pics_sps */
if (u > 31)
return;
- for (i = 0; i < u; u++) {
+ for (i = 0; i < u; i++) {
skip_bits(bs, log2_max_poc_lsb);
skip_bits1(bs);
}
log2_ctb_size = log2_min_cb_size +
log2_diff_max_min_coding_block_size;
+ if (log2_ctb_size > 18)
+ return;
sps->ctb_width = (width + (1 << log2_ctb_size) - 1) >> log2_ctb_size;
sps->ctb_height = (height + (1 << log2_ctb_size) - 1) >> log2_ctb_size;
if(j < hlen + 5)
break;
- r = parse_pes_header(t, st, st->es_buf.sb_data + off + 2, hlen + 3);
+ parse_pes_header(t, st, st->es_buf.sb_data + off + 2, hlen + 3);
st->es_header_mode = 0;
st->es_buf.sb_ptr = off;
tbl = calloc(1, sizeof(*tbl));
dvb_table_parse_init(&tbl->tbl, "satip-pmt", pid, rtp);
tbl->pid = pid;
+ TAILQ_INSERT_TAIL(&rtp->pmt_tables, tbl, link);
}
}
for (tbl = TAILQ_FIRST(&rtp->pmt_tables); tbl; tbl = tbl_next){
tbl_next = TAILQ_NEXT(tbl, link);
- if (tbl->remove_mark)
+ if (tbl->remove_mark) {
TAILQ_REMOVE(&rtp->pmt_tables, tbl, link);
+ free(tbl);
+ }
}
pthread_mutex_unlock(&rtp->lock);
}
while ((tbl = TAILQ_FIRST(&rtp->pmt_tables)) != NULL) {
dvb_table_parse_done(&tbl->tbl);
TAILQ_REMOVE(&rtp->pmt_tables, tbl, link);
+ free(tbl);
}
pthread_mutex_destroy(&rtp->lock);
free(rtp);
tvhtrace("satips", "sending announce");
- for (attempt = 1; attempt < 3; attempt++) {
+ for (attempt = 1; attempt <= 3; attempt++) {
switch (attempt) {
case 1:
nt = "upnp:rootdevice";
}
fd = tvh_socket(ai->ai_family, SOCK_STREAM, 0);
- if(fd == -1) {
+ if(fd < 0) {
snprintf(errbuf, errbufsize, "Unable to create socket: %s",
strerror(errno));
freeaddrinfo(ai);
ai->ai_family == AF_INET6 ? "6" : "4",
bindaddr);
freeaddrinfo(ai);
+ close(fd);
return -1;
}
}
r = connect(fd, ai->ai_addr, ai->ai_addrlen);
freeaddrinfo(ai);
- if(r == -1) {
+ if(r < 0) {
/* timeout < 0 - do not wait at all */
if(errno == EINPROGRESS && timeout < 0) {
err = 0;
char buf[255];
dvr_entry_t *de;
const char *uuid;
- char *hostpath = http_get_hostpath(hc);
+ char *hostpath;
off_t fsize;
time_t durration;
struct tm tm;
return HTTP_STATUS_BAD_REQUEST;
hq = &hc->hc_reply;
+ hostpath = http_get_hostpath(hc);
htsbuf_qprintf(hq, "#EXTM3U\n");
LIST_FOREACH(de, &dvrentries, de_global_link) {
return HTTP_STATUS_UNAUTHORIZED;
if ((str = http_arg_get(&hc->hc_req_args, "descramble")))
- if (strcmp(str ?: "", "0") == 0)
+ if (strcmp(str, "0") == 0)
eflags |= SUBSCRIPTION_NODESCR;
if ((str = http_arg_get(&hc->hc_req_args, "emm")))
- if (strcmp(str ?: "", "1") == 0)
+ if (strcmp(str, "1") == 0)
eflags |= SUBSCRIPTION_EMM;
flags = SUBSCRIPTION_MPEGTS | eflags;
basename++; /* Skip '/' */
str0 = intlconv_utf8safestr(intlconv_charset_id("ASCII", 1, 1),
basename, strlen(basename) * 3);
+ if (str0 == NULL)
+ return HTTP_STATUS_INTERNAL;
htsbuf_queue_init(&q, 0);
htsbuf_append_and_escape_url(&q, basename);
str = htsbuf_to_string(&q);