From: Jaroslav Kysela Date: Mon, 9 Oct 2017 12:56:49 +0000 (+0200) Subject: introduce tvh_str_default() X-Git-Tag: v4.2.4~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7ec6694a8d50ca1635bb166ebb5c92289cf85c0b;p=thirdparty%2Ftvheadend.git introduce tvh_str_default() --- diff --git a/src/access.c b/src/access.c index d3ed8f70b..17d1a2987 100644 --- a/src/access.c +++ b/src/access.c @@ -300,10 +300,10 @@ access_get_theme(access_t *a) { if (a == NULL) return "blue"; - if (a->aa_theme == NULL || a->aa_theme[0] == '\0') { - if (config.theme_ui == NULL || config.theme_ui[0] == '\0') + if (tvh_str_default(a->aa_theme, NULL) == NULL) { + if (tvh_str_default(config.theme_ui, NULL) == NULL) return "blue"; - return config.theme_ui; + return config.theme_ui; } return a->aa_theme; } @@ -685,7 +685,7 @@ access_get(struct sockaddr_storage *src, const char *username, verify_callback_t { access_t *a = access_alloc(); access_entry_t *ae; - int nouser = username == NULL || username[0] == '\0'; + int nouser = tvh_str_default(username, NULL) == NULL; if (!access_noacl && access_ip_blocked(src)) return a; diff --git a/src/channels.c b/src/channels.c index bff30fed0..8dff4bda0 100644 --- a/src/channels.c +++ b/src/channels.c @@ -113,7 +113,7 @@ channel_class_autoname_set ( void *obj, const void *p ) const char *s; int b = *(int *)p; if (ch->ch_autoname != b) { - if (b == 0 && (!ch->ch_name || *ch->ch_name == '\0')) { + if (b == 0 && tvh_str_default(ch->ch_name, NULL) == NULL) { s = channel_get_name(ch); free(ch->ch_name); ch->ch_name = strdup(s); @@ -797,7 +797,7 @@ channel_get_icon ( channel_t *ch ) uint32_t id, i, pick, prefer = config.prefer_picon ? 1 : 0; char c; - if (icon && *icon == '\0') + if (tvh_str_default(icon, NULL) == NULL) icon = NULL; /* @@ -1533,7 +1533,7 @@ channel_tag_find_by_name(const char *name, int create) { channel_tag_t *ct; - if (name == NULL || *name == '\0') + if (tvh_str_default(name, NULL) == NULL) return NULL; TAILQ_FOREACH(ct, &channel_tags, ct_link) diff --git a/src/config.c b/src/config.c index f61b32418..eecbdb74a 100644 --- a/src/config.c +++ b/src/config.c @@ -1751,7 +1751,7 @@ config_boot ( const char *path, gid_t gid, uid_t uid ) #endif } htsmsg_destroy(config2); - if (config.server_name == NULL || config.server_name[0] == '\0') + if (tvh_str_default(config.server_name, NULL) == NULL) config.server_name = strdup("Tvheadend"); if (!config_scanfile_ok) config_muxconfpath_notify(&config.idnode, NULL); @@ -2406,21 +2406,15 @@ const idclass_t config_class = { const char *config_get_server_name ( void ) { - return config.server_name ?: "Tvheadend"; + return tvh_str_default(config.server_name, "Tvheadend"); } const char *config_get_language ( void ) { - const char *s = config.language; - if (s == NULL || *s == '\0') - return "eng"; - return s; + return tvh_str_default(config.language, "eng"); } const char *config_get_language_ui ( void ) { - const char *s = config.language_ui; - if (s == NULL || *s == '\0') - return NULL; - return s; + return tvh_str_default(config.language_ui, NULL); } diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index d4a9ca13e..b6d50c3e2 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -444,7 +444,7 @@ static inline int dvr_config_is_valid(dvr_config_t *cfg) { return cfg->dvr_valid; } static inline int dvr_config_is_default(dvr_config_t *cfg) - { return cfg->dvr_config_name == NULL || cfg->dvr_config_name[0] == '\0'; } + { return tvh_str_default(cfg->dvr_config_name, NULL) == NULL; } dvr_config_t *dvr_config_find_by_name(const char *name); diff --git a/src/dvr/dvr_autorec.c b/src/dvr/dvr_autorec.c index 152186d19..239d3b7a7 100644 --- a/src/dvr/dvr_autorec.c +++ b/src/dvr/dvr_autorec.c @@ -817,8 +817,7 @@ dvr_autorec_entry_class_brand_set(void *o, const void *v) int save; epg_brand_t *brand; - if (v && *(char *)v == '\0') - v = NULL; + v = tvh_str_default(v, NULL); brand = v ? epg_brand_find_by_uri(v, NULL, 1, &save, NULL) : NULL; if (brand && dae->dae_brand != brand) { if (dae->dae_brand) @@ -851,8 +850,7 @@ dvr_autorec_entry_class_season_set(void *o, const void *v) int save; epg_season_t *season; - if (v && *(char *)v == '\0') - v = NULL; + v = tvh_str_default(v, NULL); season = v ? epg_season_find_by_uri(v, NULL, 1, &save, NULL) : NULL; if (season && dae->dae_season != season) { if (dae->dae_season) @@ -885,8 +883,7 @@ dvr_autorec_entry_class_series_link_set(void *o, const void *v) int save; epg_serieslink_t *sl; - if (v && *(char *)v == '\0') - v = NULL; + v = tvh_str_default(v, NULL); sl = v ? epg_serieslink_find_by_uri(v, NULL, 1, &save, NULL) : NULL; if (sl && dae->dae_serieslink != sl) { if (dae->dae_serieslink) diff --git a/src/dvr/dvr_config.c b/src/dvr/dvr_config.c index 5c290791c..19bd0dad6 100644 --- a/src/dvr/dvr_config.c +++ b/src/dvr/dvr_config.c @@ -78,13 +78,13 @@ dvr_config_find_by_name_default(const char *name) dvrdefaultconfig = cfg; } - if (name == NULL || *name == '\0') + if (tvh_str_default(name, NULL) == NULL) return dvrdefaultconfig; cfg = dvr_config_find_by_name(name); if (cfg == NULL) { - if (name && *name) + if (tvh_str_default(name, NULL)) tvhwarn(LS_DVR, "Configuration '%s' not found, using default", name); cfg = dvrdefaultconfig; } else if (!cfg->dvr_enabled) { @@ -624,7 +624,7 @@ dvr_config_class_name_set(void *o, const void *v) if (dvr_config_is_default(cfg) && dvr_config_is_valid(cfg)) return 0; if (strcmp(cfg->dvr_config_name, v ?: "")) { - if (dvr_config_is_valid(cfg) && (v == NULL || *(char *)v == '\0')) + if (dvr_config_is_valid(cfg) && tvh_str_default(v, NULL) == NULL) return 0; free(cfg->dvr_config_name); cfg->dvr_config_name = strdup(v ?: ""); diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index d972212f9..e5e005841 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -2414,11 +2414,11 @@ dvr_entry_class_get_title (idnode_t *self, const char *lang) dvr_entry_t *de = (dvr_entry_t *)self; const char *s; s = lang_str_get(de->de_title, lang); - if (s == NULL || s[0] == '\0') { + if (tvh_str_default(s, NULL) == NULL) { s = lang ? lang_str_get(de->de_title, NULL) : NULL; - if (s == NULL || s[0] == '\0') { + if (tvh_str_default(s, NULL) == NULL) { s = lang ? lang_str_get(de->de_desc, lang) : NULL; - if (s == NULL || s[0] == '\0') + if (tvh_str_default(s, NULL) == NULL) s = lang_str_get(de->de_desc, NULL); } } @@ -2910,8 +2910,7 @@ dvr_entry_class_disp_title_set(void *o, const void *v) dvr_entry_t *de = (dvr_entry_t *)o; const char *lang = idnode_lang(&de->de_id); const char *s = ""; - if (v == NULL || *((char *)v) == '\0') - v = "UnknownTitle"; + v = tvh_str_default(v, "UnknownTitle"); if (de->de_title) s = lang_str_get(de->de_title, lang); if (strcmp(s, v)) { @@ -2940,8 +2939,7 @@ dvr_entry_class_disp_subtitle_set(void *o, const void *v) dvr_entry_t *de = (dvr_entry_t *)o; const char *lang = idnode_lang(o); const char *s = ""; - if (v == NULL || *((char *)v) == '\0') - v = "UnknownSubtitle"; + v = tvh_str_default(v, "UnknownSubtitle"); if (de->de_subtitle) s = lang_str_get(de->de_subtitle, lang); if (strcmp(s, v)) { diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index f3538bbd3..1a901585a 100644 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -688,7 +688,7 @@ pvr_generate_filename(dvr_entry_t *de, const streaming_start_t *ss) return -1; cfg = de->de_config; - if (cfg->dvr_storage == NULL || *(cfg->dvr_storage) == '\0') + if (tvh_str_default(cfg->dvr_storage, NULL) == NULL) return -1; dir_dosubs = de->de_directory == NULL || @@ -756,7 +756,7 @@ pvr_generate_filename(dvr_entry_t *de, const streaming_start_t *ss) filename[j = 0] = '\0'; while (1) { dirsep = dvr_find_next_path_component(x); - if (dirsep == NULL || *dirsep == '\0') + if (tvh_str_default(dirsep, NULL) == NULL) break; *(dirsep - 1) = '\0'; if (*x) { diff --git a/src/epggrab/module.c b/src/epggrab/module.c index 73d9a0c50..453fc6f84 100644 --- a/src/epggrab/module.c +++ b/src/epggrab/module.c @@ -77,9 +77,7 @@ static const char *epggrab_mod_class_title(idnode_t *self, const char *lang) { epggrab_module_t *mod = (epggrab_module_t *)self; const char *s1 = tvh_gettext_lang(lang, epggrab_module_type(mod)); - const char *s2 = mod->name; - if (s2 == NULL || s2[0] == '\0') - s2 = mod->id; + const char *s2 = tvh_str_default(mod->name, mod->id); snprintf(prop_sbuf, PROP_SBUF_LEN, "%s: %s", s1, s2); return prop_sbuf; } diff --git a/src/http.c b/src/http.c index f336ccebc..100cbe43d 100644 --- a/src/http.c +++ b/src/http.c @@ -367,9 +367,7 @@ http_send_header(http_connection_t *hc, int rc, const char *content, } if(rc == HTTP_STATUS_UNAUTHORIZED) { - const char *realm = config.realm; - if (realm == NULL || realm[0] == '\0') - realm = "tvheadend"; + const char *realm = tvh_str_default(config.realm, "tvheadend"); if (config.digest) { if (hc->hc_nonce == NULL) hc->hc_nonce = http_get_nonce(); @@ -927,7 +925,7 @@ http_verify_prepare(http_connection_t *hc, struct http_verify_structure *v) } m = md5sum(all, 1); - if (qop == NULL || *qop == '\0') { + if (tvh_str_default(qop, NULL) == NULL) { snprintf(all, sizeof(all), "%s:%s", hc->hc_nonce, m); goto set; } else { diff --git a/src/httpc.c b/src/httpc.c index 65d6ac79e..8427ceeb2 100644 --- a/src/httpc.c +++ b/src/httpc.c @@ -619,7 +619,7 @@ error: } htsbuf_append_str(&q, s); htsbuf_append(&q, " ", 1); - if (path == NULL || path[0] == '\0') + if (tvh_str_default(path, NULL) == NULL) path = "/"; htsbuf_append_str(&q, path); if (query && query[0] != '\0') { @@ -1284,8 +1284,8 @@ http_client_simple_reconnect ( http_client_t *hc, const url_t *u, lock_assert(&hc->hc_mutex); - if (u->scheme == NULL || u->scheme[0] == '\0' || - u->host == NULL || u->host[0] == '\0' || + if (tvh_str_default(u->scheme, NULL) == NULL || + tvh_str_default(u->host, NULL) == NULL || u->port < 0) { tvherror(LS_HTTPC, "Invalid url '%s'", u->raw); return -EINVAL; @@ -2019,7 +2019,7 @@ http_client_testsuite_run( void ) } else if (strncmp(s, "Command=", 8) == 0) { if (strcmp(s + 8, "EXIT") == 0) break; - if (u1.host == NULL || u1.host[0] == '\0') { + if (tvh_str_default(u1.host, NULL) == NULL) { fprintf(stderr, "HTTPCTS: Define URL\n"); goto fatal; } diff --git a/src/input/mpegts/mpegts_network.c b/src/input/mpegts/mpegts_network.c index d929ead28..da613d62b 100644 --- a/src/input/mpegts/mpegts_network.c +++ b/src/input/mpegts/mpegts_network.c @@ -317,7 +317,7 @@ static void mpegts_network_display_name ( mpegts_network_t *mn, char *buf, size_t len ) { - strncpy(buf, mn->mn_network_name ?: "unknown", len); + strncpy(buf, tvh_str_default(mn->mn_network_name, "unknown"), len); } static htsmsg_t * @@ -485,7 +485,7 @@ mpegts_network_set_network_name { char buf[256]; int save = 0; - if (mn->mn_network_name == NULL || mn->mn_network_name[0] == '\0') { + if (tvh_str_default(mn->mn_network_name, NULL) == NULL) { if (name && name[0] && strcmp(name, mn->mn_network_name ?: "")) { tvh_str_update(&mn->mn_network_name, name); mn->mn_display_name(mn, buf, sizeof(buf)); diff --git a/src/tvheadend.h b/src/tvheadend.h index d65cac47c..f5b6ddc01 100644 --- a/src/tvheadend.h +++ b/src/tvheadend.h @@ -648,6 +648,10 @@ static inline unsigned int tvh_strhash(const char *s, unsigned int mod) #define MINMAX(a,mi,ma) MAX(mi, MIN(ma, a)) #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) +static inline const char *tvh_str_default(const char *s, const char *dflt) +{ + return s && s[0] ? s : dflt; +} void tvh_str_set(char **strp, const char *src); int tvh_str_update(char **strp, const char *src); diff --git a/src/udp.c b/src/udp.c index 2db18e05d..74273ddae 100644 --- a/src/udp.c +++ b/src/udp.c @@ -110,7 +110,8 @@ static int udp_get_ifindex( const char *ifname ) { unsigned int r; - if (ifname == NULL || *ifname == '\0') + + if (tvh_str_default(ifname, NULL) == NULL) return 0; r = if_nametoindex(ifname); @@ -124,7 +125,7 @@ udp_get_ifaddr( int fd, const char *ifname, struct in_addr *addr ) { struct ifreq ifreq; - if (ifname == NULL || *ifname == '\0') + if (tvh_str_default(ifname, NULL) == NULL) return -1; memset(&ifreq, 0, sizeof(ifreq));