[Xenomai-git] Philippe Gerum : boilerplate/ancillaries: introduce simple name generator

2013-11-05 Thread git repository hosting
Module: xenomai-forge
Branch: master
Commit: 905537d8e43a755987994c01061a2f67c0b24f93
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=905537d8e43a755987994c01061a2f67c0b24f93

Author: Philippe Gerum r...@xenomai.org
Date:   Wed Oct 23 15:37:19 2013 +0200

boilerplate/ancillaries: introduce simple name generator

---

 include/boilerplate/ancillaries.h |   16 
 lib/boilerplate/ancillaries.c |   18 ++
 2 files changed, 34 insertions(+)

diff --git a/include/boilerplate/ancillaries.h 
b/include/boilerplate/ancillaries.h
index 1330762..fc04f2f 100644
--- a/include/boilerplate/ancillaries.h
+++ b/include/boilerplate/ancillaries.h
@@ -29,6 +29,19 @@ extern pthread_mutex_t __printlock;
 struct error_frame;
 struct cleanup_block;
 
+struct name_generator {
+   const char *radix;
+   int length;
+   int serial;
+};
+
+#define DEFINE_NAME_GENERATOR(__name, __radix, __type, __member)   \
+   struct name_generator __name = {\
+   .radix = __radix,   \
+   .length = sizeof ((__type *)0)-__member,   \
+   .serial = 1,\
+   }
+
 #ifdef __cplusplus
 extern C {
 #endif
@@ -51,6 +64,9 @@ void warning(const char *fmt, ...);
 
 const char *symerror(int errnum);
 
+char *generate_name(char *buf, const char *radix,
+   struct name_generator *ngen);
+
 void error_hook(struct error_frame *ef);
 
 void boilerplate_init(void);
diff --git a/lib/boilerplate/ancillaries.c b/lib/boilerplate/ancillaries.c
index 51dd39b..9b5dc48 100644
--- a/lib/boilerplate/ancillaries.c
+++ b/lib/boilerplate/ancillaries.c
@@ -22,7 +22,9 @@
 #include stdarg.h
 #include pthread.h
 #include unistd.h
+#include string.h
 #include errno.h
+#include nocore/atomic.h
 #include boilerplate/lock.h
 #include boilerplate/time.h
 #include boilerplate/ancillaries.h
@@ -167,6 +169,22 @@ void warning(const char *fmt, ...)
va_end(ap);
 }
 
+char *generate_name(char *buf, const char *radix,
+   struct name_generator *ngen)
+{
+   int len = ngen-length - 1, tag;
+
+   if (radix  *radix) {
+   strncpy(buf, radix, len);
+   buf[len] = '\0';
+   } else {
+   tag = atomic_add_fetch(ngen-serial, 1);
+   snprintf(buf, len, %s@%d, ngen-radix, tag);
+   }
+
+   return buf;
+}
+
 #ifdef __XENO_DEBUG__
 
 int __check_cancel_type(const char *locktype)


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : boilerplate/ancillaries: introduce simple name generator

2013-10-23 Thread git repository hosting
Module: xenomai-forge
Branch: next
Commit: 905537d8e43a755987994c01061a2f67c0b24f93
URL:
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=905537d8e43a755987994c01061a2f67c0b24f93

Author: Philippe Gerum r...@xenomai.org
Date:   Wed Oct 23 15:37:19 2013 +0200

boilerplate/ancillaries: introduce simple name generator

---

 include/boilerplate/ancillaries.h |   16 
 lib/boilerplate/ancillaries.c |   18 ++
 2 files changed, 34 insertions(+)

diff --git a/include/boilerplate/ancillaries.h 
b/include/boilerplate/ancillaries.h
index 1330762..fc04f2f 100644
--- a/include/boilerplate/ancillaries.h
+++ b/include/boilerplate/ancillaries.h
@@ -29,6 +29,19 @@ extern pthread_mutex_t __printlock;
 struct error_frame;
 struct cleanup_block;
 
+struct name_generator {
+   const char *radix;
+   int length;
+   int serial;
+};
+
+#define DEFINE_NAME_GENERATOR(__name, __radix, __type, __member)   \
+   struct name_generator __name = {\
+   .radix = __radix,   \
+   .length = sizeof ((__type *)0)-__member,   \
+   .serial = 1,\
+   }
+
 #ifdef __cplusplus
 extern C {
 #endif
@@ -51,6 +64,9 @@ void warning(const char *fmt, ...);
 
 const char *symerror(int errnum);
 
+char *generate_name(char *buf, const char *radix,
+   struct name_generator *ngen);
+
 void error_hook(struct error_frame *ef);
 
 void boilerplate_init(void);
diff --git a/lib/boilerplate/ancillaries.c b/lib/boilerplate/ancillaries.c
index 51dd39b..9b5dc48 100644
--- a/lib/boilerplate/ancillaries.c
+++ b/lib/boilerplate/ancillaries.c
@@ -22,7 +22,9 @@
 #include stdarg.h
 #include pthread.h
 #include unistd.h
+#include string.h
 #include errno.h
+#include nocore/atomic.h
 #include boilerplate/lock.h
 #include boilerplate/time.h
 #include boilerplate/ancillaries.h
@@ -167,6 +169,22 @@ void warning(const char *fmt, ...)
va_end(ap);
 }
 
+char *generate_name(char *buf, const char *radix,
+   struct name_generator *ngen)
+{
+   int len = ngen-length - 1, tag;
+
+   if (radix  *radix) {
+   strncpy(buf, radix, len);
+   buf[len] = '\0';
+   } else {
+   tag = atomic_add_fetch(ngen-serial, 1);
+   snprintf(buf, len, %s@%d, ngen-radix, tag);
+   }
+
+   return buf;
+}
+
 #ifdef __XENO_DEBUG__
 
 int __check_cancel_type(const char *locktype)


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git