Skip to contentSkip to conversation

problems with nucleus/types.h

PATCH Applied Jan Kiszka 2 participants 2 messages Oct 21, 2005

lore
Share & tools
lore

Jan Kiszka

author
#0 lore raw

PATCH 1/1 problems with nucleus/types.h

Hi,

after the latest changes in include/nucleus/types.h, I get some warnings during userspace lib compilation on my box:

In file included from /usr/src/xenomai/include/nucleus/queue.h:24,
from /usr/src/xenomai/include/nucleus/timer.h:24, from /usr/src/xenomai/include/nucleus/thread.h:24, from
/usr/src/xenomai/skins/native/lib/../../native/task.h:27,
from /usr/src/xenomai/skins/native/lib/timer.c:21:
/usr/src/xenomai/include/nucleus/types.h: In function 'xnobject_create_name':
/usr/src/xenomai/include/nucleus/types.h:99: warning: implicit declaration of function 'snprintf' /usr/src/xenomai/include/nucleus/types.h:99: warning: incompatible implicit declaration of built-in function 'snprintf'

This is due to the static inline definition of xnobject_create_name in the mentioned header and missing a snprintf prototype in userspace.

What about the attached patch? It also avoids duplicating code by using strncpy (or am I overseeing a specific reason for doing it the other way?).

Jan

nucleus/types.h +9 -19
Index: include/nucleus/types.h
===================================================================
@@ -76,26 +76,16 @@
 
 #define XNOBJECT_NAME_LEN 32
 
-static inline void xnobject_copy_name (char *dst,
-				       const char *src)
-{
-    if (src)
-	{
-	const char *rp = src;
-	char *wp = dst;
-	do
-	    *wp++ = *rp;
-	while (*rp && rp++ - src < XNOBJECT_NAME_LEN);
-	}
-    else
-	*dst = '\0';
-}
+#define xnobject_copy_name(dst, src) \
+do { \
+    if (src) \
+        strncpy(dst, src, XNOBJECT_NAME_LEN); \
+    else \
+        *dst = '\0'; \
+} while (0)
 
-static inline int xnobject_create_name(
-		    char *dst, size_t n, void *obj)
-{
-    return snprintf(dst, n, "%p", obj);
-}
+#define xnobject_create_name(dst, n, obj) \
+    snprintf(dst, n, "%p", obj)
 
 #define minval(a,b) ((a) < (b) ? (a) : (b))
 #define maxval(a,b) ((a) > (b) ? (a) : (b))
#1 lore raw
Quoted 18 lines · Jan Kiszka

Hi,

after the latest changes in include/nucleus/types.h, I get some warnings during userspace lib compilation on my box:

In file included from /usr/src/xenomai/include/nucleus/queue.h:24,
from /usr/src/xenomai/include/nucleus/timer.h:24, from /usr/src/xenomai/include/nucleus/thread.h:24, from
/usr/src/xenomai/skins/native/lib/../../native/task.h:27,
from /usr/src/xenomai/skins/native/lib/timer.c:21:
/usr/src/xenomai/include/nucleus/types.h: In function 'xnobject_create_name':
/usr/src/xenomai/include/nucleus/types.h:99: warning: implicit declaration of function 'snprintf' /usr/src/xenomai/include/nucleus/types.h:99: warning: incompatible implicit declaration of built-in function 'snprintf'

Quoted 6 lines

This is due to the static inline definition of xnobject_create_name in the mentioned header and missing a snprintf prototype in userspace.

What about the attached patch? It also avoids duplicating code by using strncpy (or am I overseeing a specific reason for doing it the other way?).

Applied, since types.h must be usable with as little deps as possible in order to grab types and definitions. Thanks.

Quoted 53 lines

Jan

------------------------------------------------------------------------

Index: include/nucleus/types.h
===================================================================

nucleus/types.h +9 -20
@@ -76,26 +76,16 @@
 
 #define XNOBJECT_NAME_LEN 32
 
-static inline void xnobject_copy_name (char *dst,
-				       const char *src)
-{
-    if (src)
-	{
-	const char *rp = src;
-	char *wp = dst;
-	do
-	    *wp++ = *rp;
-	while (*rp && rp++ - src < XNOBJECT_NAME_LEN);
-	}
-    else
-	*dst = '\0';
-}
+#define xnobject_copy_name(dst, src) \
+do { \
+    if (src) \
+        strncpy(dst, src, XNOBJECT_NAME_LEN); \
+    else \
+        *dst = '\0'; \
+} while (0)
 
-static inline int xnobject_create_name(
-		    char *dst, size_t n, void *obj)
-{
-    return snprintf(dst, n, "%p", obj);
-}
+#define xnobject_create_name(dst, n, obj) \
+    snprintf(dst, n, "%p", obj)
 
 #define minval(a,b) ((a) < (b) ? (a) : (b))
 #define maxval(a,b) ((a) > (b) ? (a) : (b))
 
 
------------------------------------------------------------------------

_______________________________________________
Xenomai-core mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-core

Signature · 1 line
Philippe.