]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
(struct sexp_output): Added coding attribute.
authorNiels Möller <nisse@lysator.liu.se>
Fri, 25 Oct 2002 15:17:04 +0000 (17:17 +0200)
committerNiels Möller <nisse@lysator.liu.se>
Fri, 25 Oct 2002 15:17:04 +0000 (17:17 +0200)
(sexp_put_char): Use output->coding.
(sexp_put_base64_start): Likewise.
(sexp_put_base64_end): Likewise.

Rev: src/nettle/examples/sexp-conv.c:1.7

examples/sexp-conv.c

index e1f89ad2f771b34394eb974f78a0a1c8d0b96356..21d120c25d806862094643e3387ab08261c70700 100644 (file)
@@ -92,6 +92,7 @@ struct sexp_output
 {
   FILE *f;
 
+  enum sexp_coding coding;
   enum sexp_mode mode;
   struct base64_encode_ctx base64;
 
@@ -102,6 +103,7 @@ static void
 sexp_output_init(struct sexp_output *output, FILE *f, enum sexp_mode mode)
 {
   output->f = f;
+  output->coding = SEXP_PLAIN;
   output->mode = mode;
   output->pos = 0;
 }
@@ -492,34 +494,41 @@ static void
 sexp_put_char(struct sexp_output *output, unsigned indent,
              uint8_t c)
 {
-  if (output->mode & SEXP_TRANSPORT)
+  switch (output->coding)
     {
-      uint8_t encoded[2];
-      unsigned done;
-      unsigned i;
+    case SEXP_BASE64:
+      {
+       uint8_t encoded[2];
+       unsigned done;
+       unsigned i;
       
-      done = base64_encode_single(&output->base64, encoded, c);
+       done = base64_encode_single(&output->base64, encoded, c);
 
-      assert(done <= sizeof(encoded));
+       assert(done <= sizeof(encoded));
 
-      for (i = 0; i<done; i++)
-       {
-         if (indent &&
-             output->pos > LINE_WIDTH
-             && output->pos > (indent + 10))
-           sexp_put_newline(output, indent);
+       for (i = 0; i<done; i++)
+         {
+           if (indent &&
+               output->pos > LINE_WIDTH
+               && output->pos > (indent + 10))
+             sexp_put_newline(output, indent);
          
-         if (putc(encoded[i], output->f) < 0)
-           die("Write failed: %s\n", strerror(errno));
+           if (putc(encoded[i], output->f) < 0)
+             die("Write failed: %s\n", strerror(errno));
 
-         output->pos++;
-       }
-    }
-  else
-    {
+           output->pos++;
+         }
+       break;
+      }
+    case SEXP_PLAIN:
       output->pos++;
       if (putc(c, output->f) < 0)
        die("Write failed: %s\n", strerror(errno));
+      break;
+
+    case SEXP_HEX:
+      /* Not implemented */
+      abort();
     }
 }
 
@@ -557,12 +566,12 @@ sexp_put_length(struct sexp_output *output, unsigned indent,
 static void
 sexp_put_base64_start(struct sexp_output *output, uint8_t c)
 {
-  assert(! (output->mode & SEXP_TRANSPORT));
+  assert(output->coding == SEXP_PLAIN);
   
   sexp_put_char(output, 0, c);
 
   base64_encode_init(&output->base64);
-  output->mode |= SEXP_TRANSPORT;
+  output->coding = SEXP_BASE64;
 }
 
 static void
@@ -571,13 +580,13 @@ sexp_put_base64_end(struct sexp_output *output, uint8_t c)
   uint8_t encoded[BASE64_ENCODE_FINAL_LENGTH];
   unsigned done;
 
-  assert(output->mode & SEXP_TRANSPORT);
+  assert(output->coding = SEXP_BASE64);
 
   done = base64_encode_final(&output->base64, encoded);
 
   assert(done <= sizeof(encoded));
   
-  output->mode &= ~ SEXP_TRANSPORT;
+  output->coding = SEXP_PLAIN;
 
   sexp_put_data(output, 0, done, encoded);
   sexp_put_char(output, 0, c);
@@ -702,7 +711,7 @@ sexp_convert_item(struct sexp_input *input, enum sexp_mode mode,
 
 static void
 sexp_convert_list(struct sexp_input *input, enum sexp_mode mode,
-                 struct sexp_output *output,
+                 struct sexp_output *output, 
                  unsigned indent)
 {
   unsigned item;