+
+ /* Normally the data is stored directly in the array entries, but
+ * for pointer-type string fields, the array entries are actually
+ * string pointers. So we have to dereference once more to get to
+ * the character data. */
+ if (PB_ATYPE(field->type) == PB_ATYPE_POINTER &&
+ PB_LTYPE(field->type) == PB_LTYPE_STRING)
+ {
+ if (!func(stream, field, *(const void* const*)p))
+ return false;
+ }
+ else
+ {
+ if (!func(stream, field, p))
+ return false;
+ }