use more 'const' in the Encode data structures.
Nicholas Clark [Sat, 22 Oct 2005 13:12:48 +0000 (13:12 +0000)]
p4raw-id: //depot/perl@25823

ext/Encode/Encode/encode.h
ext/Encode/bin/enc2xs

index 7a2fa26..a6880cf 100644 (file)
@@ -16,14 +16,14 @@ typedef struct encpage_s encpage_t;
 struct encpage_s
 {
        /* fields ordered to pack nicely on 32-bit machines */
-       const U8   *seq;       /* Packed output sequences we generate 
+       const U8 *const seq;   /* Packed output sequences we generate 
                                  if we match */
-       const encpage_t  *next;      /* Page to go to if we match */
-       U8         min;        /* Min value of octet to match this entry */
-       U8         max;        /* Max value of octet to match this entry */
-       U8         dlen;       /* destination length - 
+       const encpage_t *const next;      /* Page to go to if we match */
+       const U8   min;        /* Min value of octet to match this entry */
+       const U8   max;        /* Max value of octet to match this entry */
+       const U8   dlen;       /* destination length - 
                                  size of entries in seq */
-       U8         slen;       /* source length - 
+       const U8   slen;       /* source length - 
                                  number of source octets needed */
 };
 
@@ -60,16 +60,18 @@ struct encpage_s
 typedef struct encode_s encode_t;
 struct encode_s
 {
-       const encpage_t  *t_utf8;    /* Starting table for translation from 
-                                       the encoding to UTF-8 form */
-       const encpage_t  *f_utf8;    /* Starting table for translation 
-                                       from UTF-8 to the encoding */
-       const U8   *rep;       /* Replacement character in this encoding 
-                                 e.g. "?" */
-       int        replen;     /* Number of octets in rep */
-       U8         min_el;     /* Minimum octets to represent a character */
-       U8         max_el;     /* Maximum octets to represent a character */
-       const char *name[2];   /* name(s) of this encoding */
+       const encpage_t *const t_utf8;  /* Starting table for translation from 
+                                          the encoding to UTF-8 form */
+       const encpage_t *const f_utf8;  /* Starting table for translation 
+                                          from UTF-8 to the encoding */
+       const U8 *const rep;            /* Replacement character in this
+                                          encoding e.g. "?" */
+       int        replen;              /* Number of octets in rep */
+       U8         min_el;              /* Minimum octets to represent a
+                                          character */
+       U8         max_el;              /* Maximum octets to represent a
+                                          character */
+       const char *const name[2];      /* name(s) of this encoding */
 };
 
 #ifdef U8
index ae2a166..82ff01c 100644 (file)
@@ -276,16 +276,19 @@ if ($doC)
     #my @info = ($e2u->{Cname},$u2e->{Cname},$rsym,length($rep),$min_el,$max_el);
     my $replen = 0; 
     $replen++ while($rep =~ /\G\\x[0-9A-Fa-f]/g);
-    my @info = ($e2u->{Cname},$u2e->{Cname},qq((U8 *)"$rep"),$replen,$min_el,$max_el);
     my $sym = "${enc}_encoding";
     $sym =~ s/\W+/_/g;
+    my @info = ($e2u->{Cname},$u2e->{Cname},"${sym}_rep_character",$replen,
+               $min_el,$max_el);
+    print C "static const U8 ${sym}_rep_character[] = \"$rep\";\n";
+    print C "static const char ${sym}_enc_name[] = \"$enc\";\n\n";
     print C "const encode_t $sym = \n";
     # This is to make null encoding work -- dankogai
     for (my $i = (scalar @info) - 1;  $i >= 0; --$i){
        $info[$i] ||= 1;
     }
     # end of null tweak -- dankogai
-    print C " {",join(',',@info,"{\"$enc\",(const char *)0}"),"};\n\n";
+    print C " {",join(',',@info,"{${sym}_enc_name,(const char *)0}"),"};\n\n";
    }
 
   foreach my $enc (sort cmp_name keys %encoding)