[rtems-libbsd commit] Add rtems_mdns_gethostname()

Sebastian Huber sebh at rtems.org
Thu Nov 20 14:24:00 UTC 2014


Module:    rtems-libbsd
Branch:    master
Commit:    026abfb7ae8475987626dab4c600821c66e628c0
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=026abfb7ae8475987626dab4c600821c66e628c0

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Mon Nov 10 08:27:32 2014 +0100

Add rtems_mdns_gethostname()

---

 Makefile                                           |  2 +-
 freebsd-to-rtems.py                                |  2 +-
 rtemsbsd/include/rtems/mdns.h                      | 27 +++++++++++++++++++---
 ...thostname-default.c => mdns-hostname-default.c} | 26 ++++++++++++++++++---
 rtemsbsd/mdns/mdns.c                               | 25 +++++++++++++++++++-
 5 files changed, 73 insertions(+), 9 deletions(-)

diff --git a/Makefile b/Makefile
index 63a3178..db8bd24 100644
--- a/Makefile
+++ b/Makefile
@@ -102,7 +102,7 @@ LIB_C_FILES += rtemsbsd/rtems/rtems-syslog-initialize.c
 LIB_C_FILES += rtemsbsd/rtems/syslog.c
 LIB_C_FILES += rtemsbsd/ftpd/ftpd.c
 LIB_C_FILES += rtemsbsd/mdns/mdns.c
-LIB_C_FILES += rtemsbsd/mdns/mdns-sethostname-default.c
+LIB_C_FILES += rtemsbsd/mdns/mdns-hostname-default.c
 LIB_C_FILES += rtemsbsd/pppd/auth.c
 LIB_C_FILES += rtemsbsd/pppd/ccp.c
 LIB_C_FILES += rtemsbsd/pppd/chap.c
diff --git a/freebsd-to-rtems.py b/freebsd-to-rtems.py
index 6c3450e..31039b6 100755
--- a/freebsd-to-rtems.py
+++ b/freebsd-to-rtems.py
@@ -700,7 +700,7 @@ rtems.addRTEMSSourceFiles(
 		'rtems/syslog.c',
 		'ftpd/ftpd.c',
 		'mdns/mdns.c',
-		'mdns/mdns-sethostname-default.c',
+		'mdns/mdns-hostname-default.c',
 		'pppd/auth.c',
 		'pppd/ccp.c',
 		'pppd/chap.c',
diff --git a/rtemsbsd/include/rtems/mdns.h b/rtemsbsd/include/rtems/mdns.h
index d95978f..b9c48dc 100644
--- a/rtemsbsd/include/rtems/mdns.h
+++ b/rtemsbsd/include/rtems/mdns.h
@@ -41,7 +41,10 @@ extern "C" {
 #endif /* __cplusplus */
 
 /* Private variable, do not touch.  Use rtems_mdns_sethostname() instead. */
-extern void (*rtems_mdns_sethostname_handler)(const char *hostname);
+extern int (*rtems_mdns_sethostname_handler)(const char *hostname);
+
+/* Private variable, do not touch.  Use rtems_mdns_gethostname() instead. */
+extern int (*rtems_mdns_gethostname_handler)(char *hostname, size_t size);
 
 /**
  * @brief Initializes an mDNS resolver instance.
@@ -77,11 +80,29 @@ mDNS *rtems_mdns_get_instance(void);
  * has no effect.
  *
  * @param[in] hostname The new multicast hostname.
+ *
+ * @retval 0 Successful operation.
+ * @retval -1 An error occurred.  The errno is set to indicate the error.
  */
-static inline void
+static inline int
 rtems_mdns_sethostname(const char *hostname)
 {
-  (*rtems_mdns_sethostname_handler)(hostname);
+  return (*rtems_mdns_sethostname_handler)(hostname);
+}
+
+/**
+ * @brief Gets the multicast hostname of the mDNS resolver instance.
+ *
+ * @param[in] hostname The multicast hostname buffer.
+ * @param[in] size The size of the multicast hostname buffer.
+ *
+ * @retval 0 Successful operation.
+ * @retval -1 An error occurred.  The errno is set to indicate the error.
+ */
+static inline int
+rtems_mdns_gethostname(char *hostname, size_t size)
+{
+  return (*rtems_mdns_gethostname_handler)(hostname, size);
 }
 
 #ifdef __cplusplus
diff --git a/rtemsbsd/mdns/mdns-sethostname-default.c b/rtemsbsd/mdns/mdns-hostname-default.c
similarity index 80%
rename from rtemsbsd/mdns/mdns-sethostname-default.c
rename to rtemsbsd/mdns/mdns-hostname-default.c
index 4db2c96..a1d1f5f 100644
--- a/rtemsbsd/mdns/mdns-sethostname-default.c
+++ b/rtemsbsd/mdns/mdns-hostname-default.c
@@ -31,11 +31,31 @@
 
 #include <rtems/mdns.h>
 
-static void
+#include <errno.h>
+
+static int
 mdns_sethostname_default(const char *hostname)
 {
-	/* Do nothing */
+  (void)hostname;
+
+  errno = ENXIO;
+
+  return (-1);
 }
 
-void (*rtems_mdns_sethostname_handler)(const char *hostname) =
+static int
+mdns_gethostname_default(char *hostname, size_t size)
+{
+  (void)hostname;
+  (void)size;
+
+  errno = ENXIO;
+
+  return (-1);
+}
+
+int (*rtems_mdns_sethostname_handler)(const char *hostname) =
     mdns_sethostname_default;
+
+int (*rtems_mdns_gethostname_handler)(char *hostname, size_t size) =
+    mdns_gethostname_default;
diff --git a/rtemsbsd/mdns/mdns.c b/rtemsbsd/mdns/mdns.c
index 425c127..2248e5b 100644
--- a/rtemsbsd/mdns/mdns.c
+++ b/rtemsbsd/mdns/mdns.c
@@ -275,7 +275,7 @@ truncate_at_first_dot(domainlabel *name)
 	name->c[0] = n;
 }
 
-static void
+static int
 mdns_sethostname(const char *hostname)
 {
 	mDNS *m = &mDNSStorage;
@@ -290,6 +290,28 @@ mdns_sethostname(const char *hostname)
 	mDNS_SetFQDN(m);
 
 	rtems_bsd_force_select_timeout(mdns_daemon_id);
+
+	return (0);
+}
+
+static int
+mdns_gethostname(char *hostname, size_t size)
+{
+	mDNS *m = &mDNSStorage;
+
+	if (size < MAX_ESCAPED_DOMAIN_LABEL) {
+		errno = ERANGE;
+
+		return (-1);
+	}
+
+	mDNS_Lock(m);
+
+	ConvertDomainLabelToCString(&m->hostlabel, hostname);
+
+	mDNS_Unlock(m);
+
+	return (0);
 }
 
 rtems_status_code
@@ -343,6 +365,7 @@ rtems_mdns_initialize(rtems_task_priority daemon_priority,
 	}
 
 	rtems_mdns_sethostname_handler = mdns_sethostname;
+	rtems_mdns_gethostname_handler = mdns_gethostname;
 
 	return (RTEMS_SUCCESSFUL);
 }



More information about the vc mailing list