Module: xenomai-head
Branch: master
Commit: 6c30e48dd3857e7fe49a00eac9e044c659f511e5
URL:    
http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=6c30e48dd3857e7fe49a00eac9e044c659f511e5

Author: Philippe Gerum <r...@xenomai.org>
Date:   Sun May 30 15:04:28 2010 +0200

rtipc: encapsulate label option string

---

 examples/rtdm/profiles/ipc/bufp-label.c |   12 ++++++------
 examples/rtdm/profiles/ipc/iddp-label.c |   12 ++++++------
 examples/rtdm/profiles/ipc/xddp-label.c |   12 ++++++------
 include/rtdm/rtipc.h                    |    7 ++++---
 ksrc/drivers/ipc/bufp.c                 |   22 +++++++++++-----------
 ksrc/drivers/ipc/iddp.c                 |   22 +++++++++++-----------
 ksrc/drivers/ipc/xddp.c                 |   22 +++++++++++-----------
 7 files changed, 55 insertions(+), 54 deletions(-)

diff --git a/examples/rtdm/profiles/ipc/bufp-label.c 
b/examples/rtdm/profiles/ipc/bufp-label.c
index 5df0999..5fb9364 100644
--- a/examples/rtdm/profiles/ipc/bufp-label.c
+++ b/examples/rtdm/profiles/ipc/bufp-label.c
@@ -50,7 +50,7 @@ static void fail(const char *reason)
 
 void *server(void *arg)
 {
-       char label[BUFP_LABEL_LEN];
+       struct rtipc_port_label plabel;
        struct sockaddr_ipc saddr;
        char buf[128];
        size_t bufsz;
@@ -75,9 +75,9 @@ void *server(void *arg)
         * Set a port label. This name will be registered when
         * binding, in addition to the port number (if given).
         */
-       strcpy(label, BUFP_PORT_LABEL);
+       strcpy(plabel.label, BUFP_PORT_LABEL);
        ret = setsockopt(s, SOL_BUFP, BUFP_LABEL,
-                        label, sizeof(label));
+                        &plabel, sizeof(plabel));
        if (ret)
                fail("setsockopt");
 
@@ -112,8 +112,8 @@ void *server(void *arg)
 
 void *client(void *arg)
 {
+       struct rtipc_port_label plabel;
        struct sockaddr_ipc svsaddr;
-       char label[BUFP_LABEL_LEN];
        int ret, s, n = 0, len;
        struct timespec ts;
        char buf[128];
@@ -129,9 +129,9 @@ void *client(void *arg)
         * BUFP does not try to register this label for the client
         * port as well (like the server thread did).
         */
-       strcpy(label, BUFP_PORT_LABEL);
+       strcpy(plabel.label, BUFP_PORT_LABEL);
        ret = setsockopt(s, SOL_BUFP, BUFP_LABEL,
-                        label, sizeof(label));
+                        &plabel, sizeof(plabel));
        if (ret)
                fail("setsockopt");
 
diff --git a/examples/rtdm/profiles/ipc/iddp-label.c 
b/examples/rtdm/profiles/ipc/iddp-label.c
index 1ad324f..1a52328 100644
--- a/examples/rtdm/profiles/ipc/iddp-label.c
+++ b/examples/rtdm/profiles/ipc/iddp-label.c
@@ -60,7 +60,7 @@ static void fail(const char *reason)
 void *server(void *arg)
 {
        struct sockaddr_ipc saddr, claddr;
-       char label[IDDP_LABEL_LEN];
+       struct rtipc_port_label plabel;
        socklen_t addrlen;
        char buf[128];
        int ret, s;
@@ -78,9 +78,9 @@ void *server(void *arg)
         * Set a port label. This name will be registered when
         * binding, in addition to the port number (if given).
         */
-       strcpy(label, IDDP_PORT_LABEL);
+       strcpy(plabel.label, IDDP_PORT_LABEL);
        ret = setsockopt(s, SOL_IDDP, IDDP_LABEL,
-                        label, sizeof(label));
+                        &plabel, sizeof(plabel));
        if (ret)
                fail("setsockopt");
 
@@ -118,7 +118,7 @@ void *server(void *arg)
 void *client(void *arg)
 {
        struct sockaddr_ipc svsaddr, clsaddr;
-       char label[IDDP_LABEL_LEN];
+       struct rtipc_port_label plabel;
        int ret, s, n = 0, len;
        struct timespec ts;
        char buf[128];
@@ -145,9 +145,9 @@ void *client(void *arg)
         * IDDP does not try to register this label for the client
         * port as well (like the server thread did).
         */
-       strcpy(label, IDDP_PORT_LABEL);
+       strcpy(plabel.label, IDDP_PORT_LABEL);
        ret = setsockopt(s, SOL_IDDP, IDDP_LABEL,
-                        label, sizeof(label));
+                        &plabel, sizeof(plabel));
        if (ret)
                fail("setsockopt");
 
diff --git a/examples/rtdm/profiles/ipc/xddp-label.c 
b/examples/rtdm/profiles/ipc/xddp-label.c
index afd6ad9..0bc040f 100644
--- a/examples/rtdm/profiles/ipc/xddp-label.c
+++ b/examples/rtdm/profiles/ipc/xddp-label.c
@@ -95,7 +95,7 @@ static void fail(const char *reason)
 
 void *realtime_thread1(void *arg)
 {
-       char label[XDDP_LABEL_LEN];
+       struct rtipc_port_label plabel;
        struct sockaddr_ipc saddr;
        int ret, s, len;
        char buf[128];
@@ -115,9 +115,9 @@ void *realtime_thread1(void *arg)
         * Set a port label. This name will be registered when
         * binding, in addition to the port number (if given).
         */
-       strcpy(label, XDDP_PORT_LABEL);
+       strcpy(plabel.label, XDDP_PORT_LABEL);
        ret = setsockopt(s, SOL_XDDP, XDDP_LABEL,
-                        label, sizeof(label));
+                        &plabel, sizeof(plabel));
        if (ret)
                fail("setsockopt");
        /*
@@ -153,7 +153,7 @@ void *realtime_thread1(void *arg)
 
 void *realtime_thread2(void *arg)
 {
-       char label[XDDP_LABEL_LEN];
+       struct rtipc_port_label plabel;
        struct sockaddr_ipc saddr;
        int ret, s, n = 0, len;
        struct timespec ts;
@@ -185,9 +185,9 @@ void *realtime_thread2(void *arg)
         * Set a port label. This name will be used to find the peer
         * when connecting, instead of the port number.
         */
-       strcpy(label, XDDP_PORT_LABEL);
+       strcpy(plabel.label, XDDP_PORT_LABEL);
        ret = setsockopt(s, SOL_XDDP, XDDP_LABEL,
-                        label, sizeof(label));
+                        &plabel, sizeof(plabel));
        if (ret)
                fail("setsockopt");
 
diff --git a/include/rtdm/rtipc.h b/include/rtdm/rtipc.h
index 0e7f2cd..3d2e376 100644
--- a/include/rtdm/rtipc.h
+++ b/include/rtdm/rtipc.h
@@ -80,6 +80,10 @@ enum {
   */
 typedef int16_t rtipc_port_t;
 
+struct rtipc_port_label {
+       char label[XNOBJECT_NAME_LEN];
+};
+
 struct sockaddr_ipc {
        sa_family_t sipc_family; /* AF_RTIPC */
        rtipc_port_t sipc_port;
@@ -91,17 +95,14 @@ struct sockaddr_ipc {
 #define XDDP_POOLSZ            2
 #define XDDP_BUFSZ             3
 #define XDDP_MONITOR           4
-#define XDDP_LABEL_LEN         XNOBJECT_NAME_LEN
 
 #define SOL_IDDP               312
 #define IDDP_LABEL             1
 #define IDDP_POOLSZ            2
-#define IDDP_LABEL_LEN         XNOBJECT_NAME_LEN
 
 #define SOL_BUFP               313
 #define BUFP_LABEL             1
 #define BUFP_BUFSZ             2
-#define BUFP_LABEL_LEN         XNOBJECT_NAME_LEN
 
 /* XDDP in-kernel monitored events */
 #define XDDP_EVTIN     1
diff --git a/ksrc/drivers/ipc/bufp.c b/ksrc/drivers/ipc/bufp.c
index d3e91b8..a6a8e82 100644
--- a/ksrc/drivers/ipc/bufp.c
+++ b/ksrc/drivers/ipc/bufp.c
@@ -41,7 +41,7 @@ struct bufp_socket {
        size_t bufsz;
        u_long status;
        xnhandle_t handle;
-       char label[BUFP_LABEL_LEN];
+       char label[XNOBJECT_NAME_LEN];
 
        off_t rdoff;
        off_t wroff;
@@ -821,7 +821,7 @@ static int __bufp_setsockopt(struct bufp_socket *sk,
                             void *arg)
 {
        struct _rtdm_setsockopt_args sopt;
-       char label[BUFP_LABEL_LEN];
+       struct rtipc_port_label plabel;
        struct timeval tv;
        int ret = 0;
        size_t len;
@@ -884,10 +884,10 @@ static int __bufp_setsockopt(struct bufp_socket *sk,
                break;
 
        case BUFP_LABEL:
-               if (sopt.optlen < sizeof(label))
+               if (sopt.optlen < sizeof(plabel))
                        return -EINVAL;
-               if (rtipc_get_arg(user_info, label,
-                                 sopt.optval, sizeof(label) - 1))
+               if (rtipc_get_arg(user_info, &plabel,
+                                 sopt.optval, sizeof(plabel)))
                        return -EFAULT;
                RTDM_EXECUTE_ATOMICALLY(
                        /*
@@ -897,8 +897,8 @@ static int __bufp_setsockopt(struct bufp_socket *sk,
                        if (test_bit(_BUFP_BINDING, &sk->status))
                                ret = -EALREADY;
                        else {
-                               strcpy(sk->label, label);
-                               sk->label[BUFP_LABEL_LEN-1] = 0;
+                               strcpy(sk->label, plabel.label);
+                               sk->label[XNOBJECT_NAME_LEN-1] = 0;
                        }
                );
                break;
@@ -915,7 +915,7 @@ static int __bufp_getsockopt(struct bufp_socket *sk,
                             void *arg)
 {
        struct _rtdm_getsockopt_args sopt;
-       char label[BUFP_LABEL_LEN];
+       struct rtipc_port_label plabel;
        struct timeval tv;
        socklen_t len;
        int ret = 0;
@@ -960,13 +960,13 @@ static int __bufp_getsockopt(struct bufp_socket *sk,
        switch (sopt.optname) {
 
        case BUFP_LABEL:
-               if (len < sizeof(label))
+               if (len < sizeof(plabel))
                        return -EINVAL;
                RTDM_EXECUTE_ATOMICALLY(
-                       strcpy(label, sk->label);
+                       strcpy(plabel.label, sk->label);
                );
                if (rtipc_put_arg(user_info, sopt.optval,
-                                 label, sizeof(label)))
+                                 &plabel, sizeof(plabel)))
                        return -EFAULT;
                break;
 
diff --git a/ksrc/drivers/ipc/iddp.c b/ksrc/drivers/ipc/iddp.c
index 8525788..5052cfb 100644
--- a/ksrc/drivers/ipc/iddp.c
+++ b/ksrc/drivers/ipc/iddp.c
@@ -56,7 +56,7 @@ struct iddp_socket {
        struct list_head inq;
        u_long status;
        xnhandle_t handle;
-       char label[IDDP_LABEL_LEN];
+       char label[XNOBJECT_NAME_LEN];
 
        nanosecs_rel_t rx_timeout;
        nanosecs_rel_t tx_timeout;
@@ -684,7 +684,7 @@ static int __iddp_setsockopt(struct iddp_socket *sk,
                             void *arg)
 {
        struct _rtdm_setsockopt_args sopt;
-       char label[IDDP_LABEL_LEN];
+       struct rtipc_port_label plabel;
        struct timeval tv;
        int ret = 0;
        size_t len;
@@ -747,10 +747,10 @@ static int __iddp_setsockopt(struct iddp_socket *sk,
                break;
 
        case IDDP_LABEL:
-               if (sopt.optlen < sizeof(label))
+               if (sopt.optlen < sizeof(plabel))
                        return -EINVAL;
-               if (rtipc_get_arg(user_info, label,
-                                 sopt.optval, sizeof(label) - 1))
+               if (rtipc_get_arg(user_info, &plabel,
+                                 sopt.optval, sizeof(plabel)))
                        return -EFAULT;
                RTDM_EXECUTE_ATOMICALLY(
                        /*
@@ -760,8 +760,8 @@ static int __iddp_setsockopt(struct iddp_socket *sk,
                        if (test_bit(_IDDP_BINDING, &sk->status))
                                ret = -EALREADY;
                        else {
-                               strcpy(sk->label, label);
-                               sk->label[IDDP_LABEL_LEN-1] = 0;
+                               strcpy(sk->label, plabel.label);
+                               sk->label[XNOBJECT_NAME_LEN-1] = 0;
                        }
                );
                break;
@@ -778,7 +778,7 @@ static int __iddp_getsockopt(struct iddp_socket *sk,
                             void *arg)
 {
        struct _rtdm_getsockopt_args sopt;
-       char label[IDDP_LABEL_LEN];
+       struct rtipc_port_label plabel;
        struct timeval tv;
        socklen_t len;
        int ret = 0;
@@ -823,13 +823,13 @@ static int __iddp_getsockopt(struct iddp_socket *sk,
        switch (sopt.optname) {
 
        case IDDP_LABEL:
-               if (len < sizeof(label))
+               if (len < sizeof(plabel))
                        return -EINVAL;
                RTDM_EXECUTE_ATOMICALLY(
-                       strcpy(label, sk->label);
+                       strcpy(plabel.label, sk->label);
                );
                if (rtipc_put_arg(user_info, sopt.optval,
-                                 label, sizeof(label)))
+                                 &plabel, sizeof(plabel)))
                        return -EFAULT;
                break;
 
diff --git a/ksrc/drivers/ipc/xddp.c b/ksrc/drivers/ipc/xddp.c
index b779d68..698c785 100644
--- a/ksrc/drivers/ipc/xddp.c
+++ b/ksrc/drivers/ipc/xddp.c
@@ -41,7 +41,7 @@ struct xddp_socket {
        int minor;
        size_t poolsz;
        xnhandle_t handle;
-       char label[XDDP_LABEL_LEN];
+       char label[XNOBJECT_NAME_LEN];
 
        struct xddp_message *buffer;
        int buffer_port;
@@ -857,7 +857,7 @@ static int __xddp_setsockopt(struct xddp_socket *sk,
 {
        int (*monitor)(int s, int event, long arg);
        struct _rtdm_setsockopt_args sopt;
-       char label[XDDP_LABEL_LEN];
+       struct rtipc_port_label plabel;
        rtdm_lockctx_t lockctx;
        struct timeval tv;
        int ret = 0;
@@ -942,18 +942,18 @@ static int __xddp_setsockopt(struct xddp_socket *sk,
                break;
 
        case XDDP_LABEL:
-               if (sopt.optlen < sizeof(label))
+               if (sopt.optlen < sizeof(plabel))
                        return -EINVAL;
-               if (rtipc_get_arg(user_info, label,
-                                 sopt.optval, sizeof(label) - 1))
+               if (rtipc_get_arg(user_info, &plabel,
+                                 sopt.optval, sizeof(plabel)))
                        return -EFAULT;
                RTDM_EXECUTE_ATOMICALLY(
                        if (test_bit(_XDDP_BOUND, &sk->status) ||
                            test_bit(_XDDP_BINDING, &sk->status))
                                ret = -EALREADY;
                        else {
-                               strcpy(sk->label, label);
-                               sk->label[XDDP_LABEL_LEN-1] = 0;
+                               strcpy(sk->label, plabel.label);
+                               sk->label[XNOBJECT_NAME_LEN-1] = 0;
                        }
                );
                break;
@@ -970,7 +970,7 @@ static int __xddp_getsockopt(struct xddp_socket *sk,
                             void *arg)
 {
        struct _rtdm_getsockopt_args sopt;
-       char label[XDDP_LABEL_LEN];
+       struct rtipc_port_label plabel;
        struct timeval tv;
        socklen_t len;
        int ret = 0;
@@ -1006,13 +1006,13 @@ static int __xddp_getsockopt(struct xddp_socket *sk,
        switch (sopt.optname) {
 
        case XDDP_LABEL:
-               if (len < sizeof(label))
+               if (len < sizeof(plabel))
                        return -EINVAL;
                RTDM_EXECUTE_ATOMICALLY(
-                       strcpy(label, sk->label);
+                       strcpy(plabel.label, sk->label);
                );
                if (rtipc_put_arg(user_info, sopt.optval,
-                                 label, sizeof(label)))
+                                 &plabel, sizeof(plabel)))
                        return -EFAULT;
                break;
 


_______________________________________________
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git

Reply via email to