Re: simplify rpki-client entity marshal

2021-12-28 Thread Sebastian Benoit
Claudio Jeker(cje...@diehard.n-r-g.com) on 2021.12.28 16:57:48 +0100:
> This re-shuffles struct entity a bit and removes the unneeded has_data
> indicator. Both data and datasz are not null when data is present and null
> when there is no data. With this in mind the code becomes simpler.
> 

ok benno@

> -- 
> :wq Claudio
> 
> Index: extern.h
> ===
> RCS file: /cvs/src/usr.sbin/rpki-client/extern.h,v
> retrieving revision 1.99
> diff -u -p -r1.99 extern.h
> --- extern.h  22 Dec 2021 09:35:14 -  1.99
> +++ extern.h  28 Dec 2021 15:40:55 -
> @@ -336,13 +336,12 @@ enum publish_type {
>   * and parsed.
>   */
>  struct entity {
> - enum rtype   type;  /* type of entity (not RTYPE_EOF) */
> + TAILQ_ENTRY(entity) entries;
>   char*file;  /* local path to file */
> - int  has_data;  /* whether data blob is specified */
>   unsigned char   *data;  /* optional data blob */
>   size_t   datasz;/* length of optional data blob */
>   int  talid; /* tal identifier */
> - TAILQ_ENTRY(entity) entries;
> + enum rtype   type;  /* type of entity (not RTYPE_EOF) */
>  };
>  TAILQ_HEAD(entityq, entity);
>  
> Index: main.c
> ===
> RCS file: /cvs/src/usr.sbin/rpki-client/main.c,v
> retrieving revision 1.169
> diff -u -p -r1.169 main.c
> --- main.c22 Dec 2021 09:35:14 -  1.169
> +++ main.c28 Dec 2021 15:39:11 -
> @@ -120,9 +120,7 @@ entity_read_req(struct ibuf *b, struct e
>   io_read_buf(b, >type, sizeof(ent->type));
>   io_read_buf(b, >talid, sizeof(ent->talid));
>   io_read_str(b, >file);
> - io_read_buf(b, >has_data, sizeof(ent->has_data));
> - if (ent->has_data)
> - io_read_buf_alloc(b, (void **)>data, >datasz);
> + io_read_buf_alloc(b, (void **)>data, >datasz);
>  }
>  
>  /*
> @@ -144,9 +142,7 @@ entity_write_req(const struct entity *en
>   io_simple_buffer(b, >type, sizeof(ent->type));
>   io_simple_buffer(b, >talid, sizeof(ent->talid));
>   io_str_buffer(b, ent->file);
> - io_simple_buffer(b, >has_data, sizeof(int));
> - if (ent->has_data)
> - io_buf_buffer(b, ent->data, ent->datasz);
> + io_buf_buffer(b, ent->data, ent->datasz);
>   io_close_buffer(, b);
>  }
>  
> @@ -194,11 +190,8 @@ entityq_add(char *file, enum rtype type,
>   p->type = type;
>   p->talid = talid;
>   p->file = file;
> - p->has_data = data != NULL;
> - if (p->has_data) {
> - p->data = data;
> - p->datasz = datasz;
> - }
> + p->data = data;
> + p->datasz = (data != NULL) ? datasz : 0;
>  
>   entity_queue++;
>  
> Index: parser.c
> ===
> RCS file: /cvs/src/usr.sbin/rpki-client/parser.c,v
> retrieving revision 1.28
> diff -u -p -r1.28 parser.c
> --- parser.c  4 Nov 2021 18:26:48 -   1.28
> +++ parser.c  28 Dec 2021 15:40:04 -
> @@ -195,7 +195,7 @@ proc_parser_cert(const struct entity *en
>   STACK_OF(X509)  *chain;
>   STACK_OF(X509_CRL)  *crls;
>  
> - assert(!entp->has_data);
> + assert(entp->data == NULL);
>  
>   /* Extract certificate data and X509. */
>  
> @@ -274,7 +274,7 @@ proc_parser_root_cert(const struct entit
>   struct cert *cert;
>   X509*x509;
>  
> - assert(entp->has_data);
> + assert(entp->data != NULL);
>  
>   /* Extract certificate data and X509. */
>  
> @@ -525,7 +525,7 @@ parse_entity(struct entityq *q, struct m
>   tal_free(tal);
>   break;
>   case RTYPE_CER:
> - if (entp->has_data)
> + if (entp->data != NULL)
>   cert = proc_parser_root_cert(entp, f, flen);
>   else
>   cert = proc_parser_cert(entp, f, flen);
> 



simplify rpki-client entity marshal

2021-12-28 Thread Claudio Jeker
This re-shuffles struct entity a bit and removes the unneeded has_data
indicator. Both data and datasz are not null when data is present and null
when there is no data. With this in mind the code becomes simpler.

-- 
:wq Claudio

Index: extern.h
===
RCS file: /cvs/src/usr.sbin/rpki-client/extern.h,v
retrieving revision 1.99
diff -u -p -r1.99 extern.h
--- extern.h22 Dec 2021 09:35:14 -  1.99
+++ extern.h28 Dec 2021 15:40:55 -
@@ -336,13 +336,12 @@ enum publish_type {
  * and parsed.
  */
 struct entity {
-   enum rtype   type;  /* type of entity (not RTYPE_EOF) */
+   TAILQ_ENTRY(entity) entries;
char*file;  /* local path to file */
-   int  has_data;  /* whether data blob is specified */
unsigned char   *data;  /* optional data blob */
size_t   datasz;/* length of optional data blob */
int  talid; /* tal identifier */
-   TAILQ_ENTRY(entity) entries;
+   enum rtype   type;  /* type of entity (not RTYPE_EOF) */
 };
 TAILQ_HEAD(entityq, entity);
 
Index: main.c
===
RCS file: /cvs/src/usr.sbin/rpki-client/main.c,v
retrieving revision 1.169
diff -u -p -r1.169 main.c
--- main.c  22 Dec 2021 09:35:14 -  1.169
+++ main.c  28 Dec 2021 15:39:11 -
@@ -120,9 +120,7 @@ entity_read_req(struct ibuf *b, struct e
io_read_buf(b, >type, sizeof(ent->type));
io_read_buf(b, >talid, sizeof(ent->talid));
io_read_str(b, >file);
-   io_read_buf(b, >has_data, sizeof(ent->has_data));
-   if (ent->has_data)
-   io_read_buf_alloc(b, (void **)>data, >datasz);
+   io_read_buf_alloc(b, (void **)>data, >datasz);
 }
 
 /*
@@ -144,9 +142,7 @@ entity_write_req(const struct entity *en
io_simple_buffer(b, >type, sizeof(ent->type));
io_simple_buffer(b, >talid, sizeof(ent->talid));
io_str_buffer(b, ent->file);
-   io_simple_buffer(b, >has_data, sizeof(int));
-   if (ent->has_data)
-   io_buf_buffer(b, ent->data, ent->datasz);
+   io_buf_buffer(b, ent->data, ent->datasz);
io_close_buffer(, b);
 }
 
@@ -194,11 +190,8 @@ entityq_add(char *file, enum rtype type,
p->type = type;
p->talid = talid;
p->file = file;
-   p->has_data = data != NULL;
-   if (p->has_data) {
-   p->data = data;
-   p->datasz = datasz;
-   }
+   p->data = data;
+   p->datasz = (data != NULL) ? datasz : 0;
 
entity_queue++;
 
Index: parser.c
===
RCS file: /cvs/src/usr.sbin/rpki-client/parser.c,v
retrieving revision 1.28
diff -u -p -r1.28 parser.c
--- parser.c4 Nov 2021 18:26:48 -   1.28
+++ parser.c28 Dec 2021 15:40:04 -
@@ -195,7 +195,7 @@ proc_parser_cert(const struct entity *en
STACK_OF(X509)  *chain;
STACK_OF(X509_CRL)  *crls;
 
-   assert(!entp->has_data);
+   assert(entp->data == NULL);
 
/* Extract certificate data and X509. */
 
@@ -274,7 +274,7 @@ proc_parser_root_cert(const struct entit
struct cert *cert;
X509*x509;
 
-   assert(entp->has_data);
+   assert(entp->data != NULL);
 
/* Extract certificate data and X509. */
 
@@ -525,7 +525,7 @@ parse_entity(struct entityq *q, struct m
tal_free(tal);
break;
case RTYPE_CER:
-   if (entp->has_data)
+   if (entp->data != NULL)
cert = proc_parser_root_cert(entp, f, flen);
else
cert = proc_parser_cert(entp, f, flen);