The code uses a local variable for program flow control in a silly way.
This patch simplifies the logic by using the common switch/case/default
pattern instead.

Signed-off-by: Richard Cochran <richardcoch...@gmail.com>
---
 clock.c | 38 +++++++++++++-------------------------
 1 file changed, 13 insertions(+), 25 deletions(-)

diff --git a/clock.c b/clock.c
index 4532664..069795a 100644
--- a/clock.c
+++ b/clock.c
@@ -335,13 +335,13 @@ static int clock_management_fill_response(struct clock 
*c, struct port *p,
                                          struct ptp_message *req,
                                          struct ptp_message *rsp, int id)
 {
-       int datalen = 0, respond = 0;
        struct management_tlv *tlv;
        struct management_tlv_datum *mtd;
        struct time_status_np *tsn;
        struct grandmaster_settings_np *gsn;
        struct subscribe_events_np *sen;
        struct PTPText *text;
+       int datalen = 0;
 
        tlv = (struct management_tlv *) rsp->management.suffix;
        tlv->type = TLV_MANAGEMENT;
@@ -353,69 +353,57 @@ static int clock_management_fill_response(struct clock 
*c, struct port *p,
                text->length = c->desc.userDescription.length;
                memcpy(text->text, c->desc.userDescription.text, text->length);
                datalen = 1 + text->length;
-               respond = 1;
                break;
        case TLV_DEFAULT_DATA_SET:
                memcpy(tlv->data, &c->dds, sizeof(c->dds));
                datalen = sizeof(c->dds);
-               respond = 1;
                break;
        case TLV_CURRENT_DATA_SET:
                memcpy(tlv->data, &c->cur, sizeof(c->cur));
                datalen = sizeof(c->cur);
-               respond = 1;
                break;
        case TLV_PARENT_DATA_SET:
                memcpy(tlv->data, &c->dad.pds, sizeof(c->dad.pds));
                datalen = sizeof(c->dad.pds);
-               respond = 1;
                break;
        case TLV_TIME_PROPERTIES_DATA_SET:
                memcpy(tlv->data, &c->tds, sizeof(c->tds));
                datalen = sizeof(c->tds);
-               respond = 1;
                break;
        case TLV_PRIORITY1:
                mtd = (struct management_tlv_datum *) tlv->data;
                mtd->val = c->dds.priority1;
                datalen = sizeof(*mtd);
-               respond = 1;
                break;
        case TLV_PRIORITY2:
                mtd = (struct management_tlv_datum *) tlv->data;
                mtd->val = c->dds.priority2;
                datalen = sizeof(*mtd);
-               respond = 1;
                break;
        case TLV_DOMAIN:
                mtd = (struct management_tlv_datum *) tlv->data;
                mtd->val = c->dds.domainNumber;
                datalen = sizeof(*mtd);
-               respond = 1;
                break;
        case TLV_SLAVE_ONLY:
                mtd = (struct management_tlv_datum *) tlv->data;
                mtd->val = c->dds.flags & DDS_SLAVE_ONLY;
                datalen = sizeof(*mtd);
-               respond = 1;
                break;
        case TLV_CLOCK_ACCURACY:
                mtd = (struct management_tlv_datum *) tlv->data;
                mtd->val = c->dds.clockQuality.clockAccuracy;
                datalen = sizeof(*mtd);
-               respond = 1;
                break;
        case TLV_TRACEABILITY_PROPERTIES:
                mtd = (struct management_tlv_datum *) tlv->data;
                mtd->val = c->tds.flags & (TIME_TRACEABLE|FREQ_TRACEABLE);
                datalen = sizeof(*mtd);
-               respond = 1;
                break;
        case TLV_TIMESCALE_PROPERTIES:
                mtd = (struct management_tlv_datum *) tlv->data;
                mtd->val = c->tds.flags & PTP_TIMESCALE;
                datalen = sizeof(*mtd);
-               respond = 1;
                break;
        case TLV_TIME_STATUS_NP:
                tsn = (struct time_status_np *) tlv->data;
@@ -433,7 +421,6 @@ static int clock_management_fill_response(struct clock *c, 
struct port *p,
                        tsn->gmPresent = 1;
                tsn->gmIdentity = c->dad.pds.grandmasterIdentity;
                datalen = sizeof(*tsn);
-               respond = 1;
                break;
        case TLV_GRANDMASTER_SETTINGS_NP:
                gsn = (struct grandmaster_settings_np *) tlv->data;
@@ -442,7 +429,6 @@ static int clock_management_fill_response(struct clock *c, 
struct port *p,
                gsn->time_flags = c->time_flags;
                gsn->time_source = c->time_source;
                datalen = sizeof(*gsn);
-               respond = 1;
                break;
        case TLV_SUBSCRIBE_EVENTS_NP:
                if (p != c->uds_port) {
@@ -451,19 +437,21 @@ static int clock_management_fill_response(struct clock 
*c, struct port *p,
                }
                sen = (struct subscribe_events_np *)tlv->data;
                clock_get_subscription(c, req, sen->bitmask, &sen->duration);
-               respond = 1;
                break;
+       default:
+               /* The caller should *not* respond to this message. */
+               return 0;
        }
-       if (respond) {
-               if (datalen % 2) {
-                       tlv->data[datalen] = 0;
-                       datalen++;
-               }
-               tlv->length = sizeof(tlv->id) + datalen;
-               rsp->header.messageLength += sizeof(*tlv) + datalen;
-               rsp->tlv_count = 1;
+       if (datalen % 2) {
+               tlv->data[datalen] = 0;
+               datalen++;
        }
-       return respond;
+       tlv->length = sizeof(tlv->id) + datalen;
+       rsp->header.messageLength += sizeof(*tlv) + datalen;
+       rsp->tlv_count = 1;
+
+       /* The caller can respond to this message. */
+       return 1;
 }
 
 static int clock_management_get_response(struct clock *c, struct port *p,
-- 
2.11.0


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to