@@ -44,6 +44,7 @@ typedef struct {
4444 uint32_t last_sector ;
4545 uint32_t flags_and_permissions ;
4646 uint64_t partition_id ;
47+ bool has_name ;
4748 char name [PARTITION_NAME_MAX + 1 ]; // name length is indicated by 7 bits
4849 uint32_t extra_family_id_count ;
4950 uint32_t extra_family_ids [PARTITION_EXTRA_FAMILY_ID_MAX ];
@@ -107,7 +108,8 @@ bool read_next_partition(pico_partition_table_t *pt, pico_partition_t *p) {
107108
108109 p -> extra_family_id_count = (p -> flags_and_permissions & PICOBIN_PARTITION_FLAGS_ACCEPTS_NUM_EXTRA_FAMILIES_BITS )
109110 >> PICOBIN_PARTITION_FLAGS_ACCEPTS_NUM_EXTRA_FAMILIES_LSB ;
110- if (p -> extra_family_id_count | (p -> flags_and_permissions & PICOBIN_PARTITION_FLAGS_HAS_NAME_BITS )) {
111+ p -> has_name = p -> flags_and_permissions & PICOBIN_PARTITION_FLAGS_HAS_NAME_BITS ;
112+ if (p -> extra_family_id_count | p -> has_name ) {
111113 // Read variable length fields
112114 uint32_t extra_family_id_and_name [PARTITION_EXTRA_FAMILY_ID_MAX + (((PARTITION_NAME_MAX + 1 ) / sizeof (uint32_t )) + 1 )];
113115 uint32_t flags = PT_INFO_SINGLE_PARTITION | PT_INFO_PARTITION_FAMILY_IDS | PT_INFO_PARTITION_NAME ;
@@ -124,14 +126,14 @@ bool read_next_partition(pico_partition_table_t *pt, pico_partition_t *p) {
124126 p -> extra_family_ids [i ] = extra_family_id_and_name [pos ];
125127 }
126128
127- if (p -> flags_and_permissions & PICOBIN_PARTITION_FLAGS_HAS_NAME_BITS ) {
129+ if (p -> has_name ) {
128130 uint8_t * name_buf = (uint8_t * )& extra_family_id_and_name [pos ];
129131 uint8_t name_length = * name_buf ++ & 0x7F ;
130132 memcpy (p -> name , name_buf , name_length );
131133 p -> name [name_length ] = '\0' ;
132134 }
133135 }
134- if (!(p -> flags_and_permissions & PICOBIN_PARTITION_FLAGS_HAS_NAME_BITS ))
136+ if (!(p -> has_name ))
135137 p -> name [0 ] = '\0' ;
136138
137139 pt -> current_partition ++ ;
0 commit comments