]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mdhelp: create nice macro helpers to reduce C code
authorJaroslav Kysela <perex@perex.cz>
Thu, 14 Apr 2016 08:22:05 +0000 (10:22 +0200)
committerJaroslav Kysela <perex@perex.cz>
Thu, 14 Apr 2016 08:22:05 +0000 (10:22 +0200)
12 files changed:
src/access.c
src/config.c
src/descrambler/caclient.c
src/dvr/dvr_autorec.c
src/dvr/dvr_config.c
src/dvr/dvr_db.c
src/dvr/dvr_timerec.c
src/idnode.h
src/imagecache.c
src/memoryinfo.c
src/prop.h
src/satip/server.c

index cbd9bb281ed4cb1a3b0998b4c7fe5c12bb1b2be2..0a6aa214ee642bb6245ffb646afa706681f205e1 100644 (file)
@@ -1309,7 +1309,7 @@ theme_get_ui_list ( void *p, const char *lang )
   return strtab2htsmsg_str(tab, 1, lang);
 }
 
-extern const char *tvh_doc_access_entry_class[];
+CLASS_DOC(access_entry)
 
 const idclass_t access_entry_class = {
   .ic_class      = "access",
@@ -1741,7 +1741,7 @@ passwd_entry_class_password2_set(void *o, const void *v)
   return 0;
 }
 
-extern const char *tvh_doc_passwd_class[];
+CLASS_DOC(passwd)
 
 const idclass_t passwd_entry_class = {
   .ic_class      = "passwd",
@@ -1893,7 +1893,7 @@ ipblock_entry_class_prefix_get(void *o)
   return &ret;
 }
 
-extern const char *tvh_doc_ipblocking_class[];
+CLASS_DOC(ipblocking)
 
 const idclass_t ipblock_entry_class = {
   .ic_class      = "ipblocking",
index af44f32c37928931acf107cd2cdd9b16fdbfbae5..975e33e0ebe8caa3abac42bf45c36d1f3dd6f4ff 100644 (file)
@@ -1968,35 +1968,12 @@ config_muxconfpath_notify ( void *o, const char *lang )
 #endif
 }
 
-static char *
-config_channelicon_path_doc(const struct property *p, const char *lang) 
-{
-     extern const char *tvh_doc_config_channelicon_path_property[];
-     return prop_md_doc(tvh_doc_config_channelicon_path_property, lang);
-}
-
-static char *
-config_channelname_scheme_doc(const struct property *p, const char *lang) 
-{
-     extern const char *tvh_doc_config_channelname_scheme_property[];
-     return prop_md_doc(tvh_doc_config_channelname_scheme_property, lang);
-}
-
-static char *
-config_picon_path_doc(const struct property *p, const char *lang) 
-{
-     extern const char *tvh_doc_config_picon_path_property[];
-     return prop_md_doc(tvh_doc_config_picon_path_property, lang);
-}
-
-static char *
-config_picon_servicetype_doc(const struct property *p, const char *lang) 
-{
-     extern const char *tvh_doc_config_picon_servicetype_property[];
-     return prop_md_doc(tvh_doc_config_picon_servicetype_property, lang);
-}
 
-extern const char *tvh_doc_config_class[];
+CLASS_DOC(config)
+PROP_DOC(config_channelicon_path)
+PROP_DOC(config_channelname_scheme)
+PROP_DOC(config_picon_path)
+PROP_DOC(config_picon_servicetype)
 
 const idclass_t config_class = {
   .ic_snode      = &config.idnode,
@@ -2293,7 +2270,7 @@ const idclass_t config_class = {
                    "(file://) or remote (http://) image. "
                    "See Help for more infomation."),
       .off    = offsetof(config_t, chicon_path),
-      .doc    = config_channelicon_path_doc,
+      .doc    = prop_doc_config_channelicon_path,
       .opts   = PO_ADVANCED,
       .group  = 6,
     },
@@ -2304,7 +2281,7 @@ const idclass_t config_class = {
       .desc   = N_("Scheme to generate the the channel icon names "
                    "(all lower-case, service name picons etc.)."),
       .list   = config_class_chiconscheme_list,
-      .doc    = config_channelname_scheme_doc,
+      .doc    = prop_doc_config_channelname_scheme,
       .off    = offsetof(config_t, chicon_scheme),
       .opts   = PO_ADVANCED,
       .group  = 6,
@@ -2316,7 +2293,7 @@ const idclass_t config_class = {
       .desc   = N_("Path to a directory (folder) containing your picon "
                    "collection. See Help for more detailed "
                    "information."),
-      .doc    = config_picon_path_doc,
+      .doc    = prop_doc_config_picon_path,
       .off    = offsetof(config_t, picon_path),
       .opts   = PO_ADVANCED,
       .group  = 6,
@@ -2328,7 +2305,7 @@ const idclass_t config_class = {
       .desc   = N_("Select scheme to generate the picon names "
                    "(standard, force service type to 1)"),
       .list   = config_class_piconscheme_list,
-      .doc    = config_picon_servicetype_doc,
+      .doc    = prop_doc_config_picon_servicetype,
       .off    = offsetof(config_t, picon_scheme),
       .opts   = PO_ADVANCED,
       .group  = 6,
index 7df2b88e1e5e12d816595e888ea266a7b9f92742..574eacd662a4de392e660621dba366b9e4f258ed 100644 (file)
@@ -237,7 +237,7 @@ caclient_class_status_get(void *o)
   return &ret;
 }
 
-extern const char *tvh_doc_caclient_class[];
+CLASS_DOC(caclient)
 
 const idclass_t caclient_class =
 {
index 1633030f06f167523ff6bb591f834148be10344e..dc592fad6e0149cbadf65e88cecebb191fcd672c 100644 (file)
@@ -981,7 +981,7 @@ dvr_autorec_entry_class_owner_opts(void *o)
   return PO_RDONLY | PO_ADVANCED;
 }
 
-extern const char *tvh_doc_dvrautorec_class[];
+CLASS_DOC(dvrautorec)
 
 const idclass_t dvr_autorec_entry_class = {
   .ic_class      = "dvrautorec",
index 4d53e3c65158ae5b8291c16685edff7f584d1824..ed8c7384571c2cb916f3da07731c6789ddb59d6e 100644 (file)
@@ -791,14 +791,8 @@ dvr_config_class_pathname_set(void *o, const void *v)
   return 0;
 }
 
-static char *
-dvr_config_prop_pathname_doc(const struct property *p, const char *lang)
-{
-  extern const char *tvh_doc_postprocessor_property[];
-  return prop_md_doc(tvh_doc_postprocessor_property, lang);
-}
-
-extern const char *tvh_doc_dvrconfig_class[];
+CLASS_DOC(dvrconfig)
+PROP_DOC(postprocessor)
 
 const idclass_t dvr_config_class = {
   .ic_class      = "dvrconfig",
@@ -1133,7 +1127,7 @@ const idclass_t dvr_config_class = {
       .desc     = N_("The string allows you to manually specify the "
                      "full path generation using predefined "
                      "modifiers. See Help for full details."),
-      .doc      = dvr_config_prop_pathname_doc,
+      .doc      = prop_doc_postprocessor,
       .set      = dvr_config_class_pathname_set,
       .off      = offsetof(dvr_config_t, dvr_pathname),
       .opts     = PO_EXPERT,
index 77ab6e1ef6ca10065dfc031b98e45b8bf2268ddc..a30ef82e82c6a5bcaabbd10a182cdbd48b3900b1 100644 (file)
@@ -2812,34 +2812,15 @@ dvr_entry_class_content_type_list(void *o, const char *lang)
   return m;
 }
 
-static char *
-dvr_entry_prop_status_doc(const struct property *p, const char *lang)
-{    
-    extern const char *tvh_doc_dvr_status_property[];
-    return prop_md_doc(tvh_doc_dvr_status_property, lang);
-}
-
-static char *
-dvr_entry_prop_start_extra_doc(const struct property *p, const char *lang)
-{
-    extern const char *tvh_doc_dvr_start_extra_property[];
-    return prop_md_doc(tvh_doc_dvr_start_extra_property, lang);
-}
-
-static char *
-dvr_entry_prop_dvr_stop_extra_doc(const struct property *p, const char *lang)
-{
-    extern const char *tvh_doc_dvr_stop_extra_property[];
-    return prop_md_doc(tvh_doc_dvr_stop_extra_property, lang);
-}
-
-extern const char *tvh_doc_dvrentry_class[];
+CLASS_DOC(dvrentry)
+PROP_DOC(dvr_status)
+PROP_DOC(dvr_start_extra)
+PROP_DOC(dvr_stop_extra)
 
 const idclass_t dvr_entry_class = {
   .ic_class     = "dvrentry",
   .ic_caption   = N_("DVR Entries"),
   .ic_event     = "dvrentry",
-  /*.ic_doc       = tvh_doc_dvrentry_class,*/
   .ic_doc       = tvh_doc_dvrentry_class,
   .ic_changed   = dvr_entry_class_changed,
   .ic_save      = dvr_entry_class_save,
@@ -2870,7 +2851,7 @@ const idclass_t dvr_entry_class = {
       .name     = N_("Pre-recording padding"),
       .desc     = N_("Start recording earlier than the "
                      "EPG/timer-defined start time by x minutes."),
-      .doc      = dvr_entry_prop_start_extra_doc,
+      .doc      = prop_doc_dvr_start_extra,
       .off      = offsetof(dvr_entry_t, de_start_extra),
       .set      = dvr_entry_class_start_extra_set,
       .list     = dvr_entry_class_extra_list,
@@ -2898,7 +2879,7 @@ const idclass_t dvr_entry_class = {
       .name     = N_("Post-recording padding"),
       .desc     = N_("Continue recording for x minutes after scheduled "
                      "stop time."),
-      .doc      = dvr_entry_prop_dvr_stop_extra_doc,
+      .doc      = prop_doc_dvr_stop_extra,
       .off      = offsetof(dvr_entry_t, de_stop_extra),
       .list     = dvr_entry_class_extra_list,
       .opts     = PO_SORTKEY | PO_ADVANCED | PO_DOC_NLIST,
@@ -3222,7 +3203,7 @@ const idclass_t dvr_entry_class = {
       .type     = PT_STR,
       .id       = "status",
       .name     = N_("Status"),
-      .doc      = dvr_entry_prop_status_doc,
+      .doc      = prop_doc_dvr_status,
       .desc     = N_("The recording/entry status."),
       .get      = dvr_entry_class_status_get,
       .opts     = PO_RDONLY | PO_NOSAVE | PO_LOCALE,
index 8af4b722e58b4682f2eccefe04c5381f27e70eaa..a45d3cfba0c1dc7f3bd0178a3eefb4f5fdb3cbb5 100644 (file)
@@ -517,15 +517,8 @@ dvr_timerec_entry_class_owner_opts(void *o)
   return PO_RDONLY | PO_ADVANCED;
 }
 
-static char *
-dvr_timerec_prop_titleformat_doc(const struct property *p, const char *lang)
-{
-  extern const char *tvh_doc_dvr_timerec_title_format_property[];
-  return prop_md_doc(tvh_doc_dvr_timerec_title_format_property, lang);
-}
-
-
-extern const char *tvh_doc_dvrtimerec_class[];
+CLASS_DOC(dvrtimerec)
+PROP_DOC(dvr_timerec_title_format)
 
 const idclass_t dvr_timerec_entry_class = {
   .ic_class      = "dvrtimerec",
@@ -557,7 +550,7 @@ const idclass_t dvr_timerec_entry_class = {
       .id       = "title",
       .name     = N_("Title"),
       .desc     = N_("Title of the recording."),
-      .doc      = dvr_timerec_prop_titleformat_doc,
+      .doc      = prop_doc_dvr_timerec_title_format,
       .off      = offsetof(dvr_timerec_entry_t, dte_title),
       .def.s    = "Time-%F_%R",
     },
index 38e85cea187a2747feef7b2df790a221c57d49c6..f30ba6a1706ba979be4ef5d780cdfdda37124aeb 100644 (file)
@@ -61,6 +61,8 @@ typedef struct property_group
  */
 #define IDCLASS_ALWAYS_SAVE    (1<<0)      ///< Always call the save callback
 
+#define CLASS_DOC(name) extern const char *tvh_doc_##name##_class[];
+
 typedef struct idclass idclass_t;
 struct idclass {
   const struct idclass   *ic_super;        ///< Parent class
index 48b7af41806b0124e102389e61d509d35b1fa7ac..761e3c5b97031855511cbea7da9020bcd12d49a4 100644 (file)
@@ -71,7 +71,7 @@ struct imagecache_config imagecache_conf = {
 
 static htsmsg_t *imagecache_save(idnode_t *self, char *filename, size_t fsize);
 
-extern const char *tvh_doc_imagecache_class[];
+CLASS_DOC(imagecache)
 
 const idclass_t imagecache_class = {
   .ic_snode      = (idnode_t *)&imagecache_conf,
index bdd5dda41bc19a72d2c08df6744c4d3bf183dbd1..c23b5677f541087b7022db0b3b1ae735c90c07d3 100644 (file)
@@ -29,7 +29,7 @@ service_class_get_title ( idnode_t *self, const char *lang )
   return ((memoryinfo_t *)self)->my_name;
 }
 
-extern const char *tvh_doc_memoryinfo_class[];
+CLASS_DOC(memoryinfo)
 
 const idclass_t memoryinfo_class = {
   .ic_class      = "memoryinfo",
index 1bed0fc4b0ccee2f061154afa48ab4c9f63c29b5..392f3e6a9364a4f0a8b05f8ba1c1304679384b47 100644 (file)
@@ -152,6 +152,13 @@ static inline int64_t prop_intsplit_from_str(const char *s, int64_t intsplit)
 char *
 prop_md_doc(const char **md, const char *lang);
 
+#define PROP_DOC(name) \
+extern const char *tvh_doc_##name##_property[]; \
+static char * \
+prop_doc_##name(const struct property *p, const char *lang) \
+{ return prop_md_doc(tvh_doc_##name##_property, lang); }
+
+
 #endif /* __TVH_PROP_H__ */
 
 /******************************************************************************
index c887179c86dfaa46963203c20de6f8b29189e331..d49a013e37ddbe9568cfed4c99b89239c15405f0 100644 (file)
@@ -566,7 +566,7 @@ static htsmsg_t *satip_server_class_muxcfg_list ( void *o, const char *lang )
   return strtab2htsmsg(tab, 1, lang);
 }
 
-extern const char *tvh_doc_satip_server_class[];
+CLASS_DOC(satip_server)
 
 const idclass_t satip_server_class = {
   .ic_snode      = (idnode_t *)&satip_server_conf,