Make fixed_count option work when combined with FT_POINTER.

Also added to AllTypes testcase.
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index 9b37cd5..a4c48c2 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -475,7 +475,7 @@
             if self.pbtype in ['MESSAGE', 'MSG_W_CB']:
                 # Use struct definition, so recursive submessages are possible
                 result += '    struct _%s *%s;' % (self.ctype, self.name)
-            elif self.pbtype == 'FIXED_LENGTH_BYTES':
+            elif self.pbtype == 'FIXED_LENGTH_BYTES' or self.rules == 'FIXARRAY':
                 # Pointer to fixed size array
                 result += '    %s (*%s)%s;' % (self.ctype, self.name, self.array_decl)
             elif self.rules in ['REPEATED', 'FIXARRAY'] and self.pbtype in ['STRING', 'BYTES']:
diff --git a/pb.h b/pb.h
index b0f895d..de0dd50 100644
--- a/pb.h
+++ b/pb.h
@@ -570,7 +570,7 @@
 #define PB_SIZE_OFFSET_CB_FIXARRAY(structname, fieldname) 0
 
 #define PB_ARRAY_SIZE_STATIC(htype, structname, fieldname) PB_ARRAY_SIZE_ ## htype(structname, fieldname)
-#define PB_ARRAY_SIZE_POINTER(htype, structname, fieldname) 1
+#define PB_ARRAY_SIZE_POINTER(htype, structname, fieldname) PB_ARRAY_SIZE_PTR_ ## htype(structname, fieldname)
 #define PB_ARRAY_SIZE_CALLBACK(htype, structname, fieldname) 1
 #define PB_ARRAY_SIZE_REQUIRED(structname, fieldname) 1
 #define PB_ARRAY_SIZE_SINGULAR(structname, fieldname) 1
@@ -578,6 +578,12 @@
 #define PB_ARRAY_SIZE_ONEOF(structname, fieldname) 1
 #define PB_ARRAY_SIZE_REPEATED(structname, fieldname) pb_arraysize(structname, fieldname)
 #define PB_ARRAY_SIZE_FIXARRAY(structname, fieldname) pb_arraysize(structname, fieldname)
+#define PB_ARRAY_SIZE_PTR_REQUIRED(structname, fieldname) 1
+#define PB_ARRAY_SIZE_PTR_SINGULAR(structname, fieldname) 1
+#define PB_ARRAY_SIZE_PTR_OPTIONAL(structname, fieldname) 1
+#define PB_ARRAY_SIZE_PTR_ONEOF(structname, fieldname) 1
+#define PB_ARRAY_SIZE_PTR_REPEATED(structname, fieldname) 1
+#define PB_ARRAY_SIZE_PTR_FIXARRAY(structname, fieldname) pb_arraysize(structname, fieldname[0])
 
 #define PB_DATA_SIZE_STATIC(htype, structname, fieldname) PB_DATA_SIZE_ ## htype(structname, fieldname)
 #define PB_DATA_SIZE_POINTER(htype, structname, fieldname) PB_DATA_SIZE_PTR_ ## htype(structname, fieldname)
@@ -593,7 +599,7 @@
 #define PB_DATA_SIZE_PTR_OPTIONAL(structname, fieldname) pb_membersize(structname, fieldname[0])
 #define PB_DATA_SIZE_PTR_ONEOF(structname, fieldname) pb_membersize(structname, PB_ONEOF_NAME(FULL, fieldname)[0])
 #define PB_DATA_SIZE_PTR_REPEATED(structname, fieldname) pb_membersize(structname, fieldname[0])
-#define PB_DATA_SIZE_PTR_FIXARRAY(structname, fieldname) pb_membersize(structname, fieldname[0])
+#define PB_DATA_SIZE_PTR_FIXARRAY(structname, fieldname) pb_membersize(structname, fieldname[0][0])
 #define PB_DATA_SIZE_CB_REQUIRED(structname, fieldname) pb_membersize(structname, fieldname)
 #define PB_DATA_SIZE_CB_SINGULAR(structname, fieldname) pb_membersize(structname, fieldname)
 #define PB_DATA_SIZE_CB_OPTIONAL(structname, fieldname) pb_membersize(structname, fieldname)
diff --git a/tests/alltypes/alltypes.options b/tests/alltypes/alltypes.options
index 0d5ab12..f8c805a 100644
--- a/tests/alltypes/alltypes.options
+++ b/tests/alltypes/alltypes.options
@@ -1,3 +1,4 @@
 * max_size:16
 * max_count:5
 *.*fbytes fixed_length:true max_size:4
+*.*farray fixed_count:true max_count:5
diff --git a/tests/alltypes/alltypes.proto b/tests/alltypes/alltypes.proto
index 303ec63..c08af89 100644
--- a/tests/alltypes/alltypes.proto
+++ b/tests/alltypes/alltypes.proto
@@ -82,6 +82,7 @@
     repeated MyEnum     rep_enum    = 37 [packed = true];
     repeated EmptyMessage rep_emptymsg = 38;
     repeated bytes      rep_fbytes  = 39;
+    repeated int32      rep_farray  = 40 [packed = true];
     
     optional int32      opt_int32   = 41 [default = 4041];
     optional int64      opt_int64   = 42 [default = 4042];
diff --git a/tests/alltypes/decode_alltypes.c b/tests/alltypes/decode_alltypes.c
index 532694e..2d61c50 100644
--- a/tests/alltypes/decode_alltypes.c
+++ b/tests/alltypes/decode_alltypes.c
@@ -85,6 +85,8 @@
         TEST(alltypes.rep_fbytes[0][0] == 0 && alltypes.rep_fbytes[0][3] == 0);
         TEST(memcmp(alltypes.rep_fbytes[4], "2019", 4) == 0);
 
+        TEST(alltypes.rep_farray[0] == 0 && alltypes.rep_farray[4] == 2040);
+
         TEST(alltypes.req_limits.int32_min  == INT32_MIN);
         TEST(alltypes.req_limits.int32_max  == INT32_MAX);
         TEST(alltypes.req_limits.uint32_min == 0);
@@ -246,6 +248,7 @@
         TEST(alltypes.rep_enum_count == 0);
         TEST(alltypes.rep_emptymsg_count == 0);
         TEST(alltypes.rep_fbytes_count == 0);
+        TEST(alltypes.rep_farray[0] == 0 && alltypes.rep_farray[4] == 0);
     
         TEST(alltypes.has_opt_int32     == false);
         TEST(alltypes.has_opt_int64     == false);
diff --git a/tests/alltypes/encode_alltypes.c b/tests/alltypes/encode_alltypes.c
index c1c2aa3..fdf7edd 100644
--- a/tests/alltypes/encode_alltypes.c
+++ b/tests/alltypes/encode_alltypes.c
@@ -76,6 +76,8 @@
         alltypes.rep_fbytes_count = 5;
         memcpy(alltypes.rep_fbytes[4], "2019", 4);
         
+        alltypes.rep_farray[4] = 2040;
+
         alltypes.req_limits.int32_min  = INT32_MIN;
         alltypes.req_limits.int32_max  = INT32_MAX;
         alltypes.req_limits.uint32_min = 0;
diff --git a/tests/alltypes_callback/alltypes.options b/tests/alltypes_callback/alltypes.options
index 74d7a9c..30accfe 100644
--- a/tests/alltypes_callback/alltypes.options
+++ b/tests/alltypes_callback/alltypes.options
@@ -5,4 +5,5 @@
 
 # With FT_CALLBACK, these options should get ignored
 *.*fbytes fixed_length:true max_size:4
+*.*farray fixed_count:true max_count:5
 
diff --git a/tests/alltypes_callback/encode_alltypes_callback.c b/tests/alltypes_callback/encode_alltypes_callback.c
index 5f75256..34e3cc6 100644
--- a/tests/alltypes_callback/encode_alltypes_callback.c
+++ b/tests/alltypes_callback/encode_alltypes_callback.c
@@ -360,6 +360,9 @@
     alltypes.rep_fbytes.funcs.encode = &write_repeated_string;
     alltypes.rep_fbytes.arg = "2019";
     
+    alltypes.rep_farray.funcs.encode = &write_repeated_varint;
+    alltypes.rep_farray.arg = (void*)2040;
+
     alltypes.req_limits.funcs.encode = &write_limits;
     
     /* Bind callbacks for optional fields */
diff --git a/tests/alltypes_pointer/alltypes.options b/tests/alltypes_pointer/alltypes.options
index 8699fe2..0c4f0d6 100644
--- a/tests/alltypes_pointer/alltypes.options
+++ b/tests/alltypes_pointer/alltypes.options
@@ -1,4 +1,5 @@
 # Generate all fields as pointers.
 * type:FT_POINTER
 *.*fbytes fixed_length:true max_size:4
+*.*farray fixed_count:true max_count:5
 
diff --git a/tests/alltypes_pointer/decode_alltypes_pointer.c b/tests/alltypes_pointer/decode_alltypes_pointer.c
index 4ee6f8b..ad5b658 100644
--- a/tests/alltypes_pointer/decode_alltypes_pointer.c
+++ b/tests/alltypes_pointer/decode_alltypes_pointer.c
@@ -80,6 +80,7 @@
     TEST(alltypes.rep_fbytes_count == 5);
     TEST(alltypes.rep_fbytes[0][0] == 0 && alltypes.rep_fbytes[0][3] == 0);
     TEST(memcmp(alltypes.rep_fbytes[4], "2019", 4) == 0);
+    TEST(alltypes.rep_farray && (*alltypes.rep_farray)[0] == 0 && (*alltypes.rep_farray)[4] == 2040);
 
     if (mode == 0)
     {
diff --git a/tests/alltypes_pointer/encode_alltypes_pointer.c b/tests/alltypes_pointer/encode_alltypes_pointer.c
index a39af6f..ca036d1 100644
--- a/tests/alltypes_pointer/encode_alltypes_pointer.c
+++ b/tests/alltypes_pointer/encode_alltypes_pointer.c
@@ -64,6 +64,7 @@
     MyEnum      rep_enum[5]       = {0, 0, 0, 0, MyEnum_Truth};
     EmptyMessage rep_emptymsg[5]  = {{0}, {0}, {0}, {0}, {0}};
     pb_byte_t   rep_fbytes[5][4]  = {{0}, {0}, {0}, {0}, {'2', '0', '1', '9'}};
+    int32_t     rep_farray[5]     = {0, 0, 0, 0, 2040};
 
     /* Values for optional fields */
     int32_t     opt_int32         = 3041;
@@ -150,6 +151,7 @@
     alltypes.rep_enum_count     = 5; alltypes.rep_enum      = rep_enum;
     alltypes.rep_emptymsg_count = 5; alltypes.rep_emptymsg  = rep_emptymsg;
     alltypes.rep_fbytes_count   = 5; alltypes.rep_fbytes    = rep_fbytes;
+    alltypes.rep_farray = &rep_farray;
     
     if (mode != 0)
     {
diff --git a/tests/common_unittests/common_unittests.c b/tests/common_unittests/common_unittests.c
index 861cf9a..60c8a6b 100644
--- a/tests/common_unittests/common_unittests.c
+++ b/tests/common_unittests/common_unittests.c
@@ -60,6 +60,7 @@
         TEST(pb_field_iter_next(&iter) && iter.tag == 37 && iter.pData == &msg.rep_enum     && iter.pSize == &msg.rep_enum_count)
         TEST(pb_field_iter_next(&iter) && iter.tag == 38 && iter.pData == &msg.rep_emptymsg && iter.pSize == &msg.rep_emptymsg_count)
         TEST(pb_field_iter_next(&iter) && iter.tag == 39 && iter.pData == &msg.rep_fbytes   && iter.pSize == &msg.rep_fbytes_count)
+        TEST(pb_field_iter_next(&iter) && iter.tag == 40 && iter.pData == &msg.rep_farray   && iter.pSize == &iter.array_size && iter.array_size == 5)
         TEST(iter.required_field_index == 19)
         TEST(iter.submessage_index == 4)
 
diff --git a/tests/field_size_16/alltypes.options b/tests/field_size_16/alltypes.options
index 78dd08d..925475e 100644
--- a/tests/field_size_16/alltypes.options
+++ b/tests/field_size_16/alltypes.options
@@ -1,4 +1,5 @@
 * max_size:16
 * max_count:5
 *.*fbytes fixed_length:true max_size:4
+*.*farray fixed_count:true max_count:5
 
diff --git a/tests/field_size_16/alltypes.proto b/tests/field_size_16/alltypes.proto
index 4e27059..0089b7c 100644
--- a/tests/field_size_16/alltypes.proto
+++ b/tests/field_size_16/alltypes.proto
@@ -81,6 +81,7 @@
     repeated MyEnum     rep_enum    = 10037;
     repeated EmptyMessage rep_emptymsg = 10038;
     repeated bytes      rep_fbytes  = 10039;
+    repeated int32      rep_farray  = 10040;
     
     optional int32      opt_int32   = 10041 [default = 4041];
     optional int64      opt_int64   = 10042 [default = 4042];
diff --git a/tests/field_size_32/alltypes.options b/tests/field_size_32/alltypes.options
index 0d5ab12..f8c805a 100644
--- a/tests/field_size_32/alltypes.options
+++ b/tests/field_size_32/alltypes.options
@@ -1,3 +1,4 @@
 * max_size:16
 * max_count:5
 *.*fbytes fixed_length:true max_size:4
+*.*farray fixed_count:true max_count:5
diff --git a/tests/field_size_32/alltypes.proto b/tests/field_size_32/alltypes.proto
index a05e3b9..e2fd56a 100644
--- a/tests/field_size_32/alltypes.proto
+++ b/tests/field_size_32/alltypes.proto
@@ -81,6 +81,7 @@
     repeated MyEnum     rep_enum    = 10037;
     repeated EmptyMessage rep_emptymsg = 10038;
     repeated bytes      rep_fbytes  = 10039;
+    repeated int32      rep_farray  = 10040;
     
     optional int32      opt_int32   = 10041 [default = 4041];
     optional int64      opt_int64   = 10042 [default = 4042];