History

isofs: use unsigned char types consistently

Based on the discussion about the signed character field for the year, I went through all fields in the iso9660 and rockridge standards to see whether they should used signed or unsigned characters. Only a single 8-bit value is defined as signed per 'section 7.1.2': the timezone offset in a timestamp, this has always been handled correctly through explicit sign-extension. All others are either '7.1.1 8-bit unsigned numerical values' or composite fields. I also read the linux source code and came to the same conclusion, also I could not find any other part of the implementation that actually behaves differently for signed or unsigned values. Since it is still ambigous to use plain 'char' in interface definitions, I'm changing all fields representing numbers and reserved bytes to the unambiguous '__u8'. Fields that hold actual strings are left as 'char' arrays. I built the code with '-Wpointer-sign -Wsign-compare' to see if anything got left out, but couldn't find anything wrong with the remaining warnings. This patch should not change runtime behavior and does not need to be backported.

Arnd Bergmann committed 9 years ago

Commit cb917751 parent 34be4db3 files · +122 −122Browse files

Showing the changes to include/uapi/linux (1 of 3 files). Show all

Unified · Split

include/uapi/linux/iso_fs.h+81−81
@@ -12,10 +12,10 @@ · 11 unmodified lines
1212 #define ISODCL(from, to) (to - from + 1)
1313
1414 struct iso_volume_descriptor {
15− char type[ISODCL(1,1)]; /* 711 */
15+ __u8 type[ISODCL(1,1)]; /* 711 */
1616 char id[ISODCL(2,6)];
17− char version[ISODCL(7,7)];
18− char data[ISODCL(8,2048)];
17+ __u8 version[ISODCL(7,7)];
18+ __u8 data[ISODCL(8,2048)];
1919 };
2020
2121 /* volume descriptor types */
@@ -26,24 +26,24 @@ struct iso_volume_descriptor { · 4 unmodified lines
2626 #define ISO_STANDARD_ID "CD001"
2727
2828 struct iso_primary_descriptor {
29− char type [ISODCL ( 1, 1)]; /* 711 */
29+ __u8 type [ISODCL ( 1, 1)]; /* 711 */
3030 char id [ISODCL ( 2, 6)];
31− char version [ISODCL ( 7, 7)]; /* 711 */
32− char unused1 [ISODCL ( 8, 8)];
31+ __u8 version [ISODCL ( 7, 7)]; /* 711 */
32+ __u8 unused1 [ISODCL ( 8, 8)];
3333 char system_id [ISODCL ( 9, 40)]; /* achars */
3434 char volume_id [ISODCL ( 41, 72)]; /* dchars */
35− char unused2 [ISODCL ( 73, 80)];
36− char volume_space_size [ISODCL ( 81, 88)]; /* 733 */
37− char unused3 [ISODCL ( 89, 120)];
38− char volume_set_size [ISODCL (121, 124)]; /* 723 */
39− char volume_sequence_number [ISODCL (125, 128)]; /* 723 */
40− char logical_block_size [ISODCL (129, 132)]; /* 723 */
41− char path_table_size [ISODCL (133, 140)]; /* 733 */
42− char type_l_path_table [ISODCL (141, 144)]; /* 731 */
43− char opt_type_l_path_table [ISODCL (145, 148)]; /* 731 */
44− char type_m_path_table [ISODCL (149, 152)]; /* 732 */
45− char opt_type_m_path_table [ISODCL (153, 156)]; /* 732 */
46− char root_directory_record [ISODCL (157, 190)]; /* 9.1 */
35+ __u8 unused2 [ISODCL ( 73, 80)];
36+ __u8 volume_space_size [ISODCL ( 81, 88)]; /* 733 */
37+ __u8 unused3 [ISODCL ( 89, 120)];
38+ __u8 volume_set_size [ISODCL (121, 124)]; /* 723 */
39+ __u8 volume_sequence_number [ISODCL (125, 128)]; /* 723 */
40+ __u8 logical_block_size [ISODCL (129, 132)]; /* 723 */
41+ __u8 path_table_size [ISODCL (133, 140)]; /* 733 */
42+ __u8 type_l_path_table [ISODCL (141, 144)]; /* 731 */
43+ __u8 opt_type_l_path_table [ISODCL (145, 148)]; /* 731 */
44+ __u8 type_m_path_table [ISODCL (149, 152)]; /* 732 */
45+ __u8 opt_type_m_path_table [ISODCL (153, 156)]; /* 732 */
46+ __u8 root_directory_record [ISODCL (157, 190)]; /* 9.1 */
4747 char volume_set_id [ISODCL (191, 318)]; /* dchars */
4848 char publisher_id [ISODCL (319, 446)]; /* achars */
4949 char preparer_id [ISODCL (447, 574)]; /* achars */
@@ -51,36 +51,36 @@ struct iso_primary_descriptor { · 1 unmodified line
5151 char copyright_file_id [ISODCL (703, 739)]; /* 7.5 dchars */
5252 char abstract_file_id [ISODCL (740, 776)]; /* 7.5 dchars */
5353 char bibliographic_file_id [ISODCL (777, 813)]; /* 7.5 dchars */
54− char creation_date [ISODCL (814, 830)]; /* 8.4.26.1 */
55− char modification_date [ISODCL (831, 847)]; /* 8.4.26.1 */
56− char expiration_date [ISODCL (848, 864)]; /* 8.4.26.1 */
57− char effective_date [ISODCL (865, 881)]; /* 8.4.26.1 */
58− char file_structure_version [ISODCL (882, 882)]; /* 711 */
59− char unused4 [ISODCL (883, 883)];
60− char application_data [ISODCL (884, 1395)];
61− char unused5 [ISODCL (1396, 2048)];
54+ __u8 creation_date [ISODCL (814, 830)]; /* 8.4.26.1 */
55+ __u8 modification_date [ISODCL (831, 847)]; /* 8.4.26.1 */
56+ __u8 expiration_date [ISODCL (848, 864)]; /* 8.4.26.1 */
57+ __u8 effective_date [ISODCL (865, 881)]; /* 8.4.26.1 */
58+ __u8 file_structure_version [ISODCL (882, 882)]; /* 711 */
59+ __u8 unused4 [ISODCL (883, 883)];
60+ __u8 application_data [ISODCL (884, 1395)];
61+ __u8 unused5 [ISODCL (1396, 2048)];
6262 };
6363
6464 /* Almost the same as the primary descriptor but two fields are specified */
6565 struct iso_supplementary_descriptor {
66− char type [ISODCL ( 1, 1)]; /* 711 */
66+ __u8 type [ISODCL ( 1, 1)]; /* 711 */
6767 char id [ISODCL ( 2, 6)];
68− char version [ISODCL ( 7, 7)]; /* 711 */
69− char flags [ISODCL ( 8, 8)]; /* 853 */
68+ __u8 version [ISODCL ( 7, 7)]; /* 711 */
69+ __u8 flags [ISODCL ( 8, 8)]; /* 853 */
7070 char system_id [ISODCL ( 9, 40)]; /* achars */
7171 char volume_id [ISODCL ( 41, 72)]; /* dchars */
72− char unused2 [ISODCL ( 73, 80)];
73− char volume_space_size [ISODCL ( 81, 88)]; /* 733 */
74− char escape [ISODCL ( 89, 120)]; /* 856 */
75− char volume_set_size [ISODCL (121, 124)]; /* 723 */
76− char volume_sequence_number [ISODCL (125, 128)]; /* 723 */
77− char logical_block_size [ISODCL (129, 132)]; /* 723 */
78− char path_table_size [ISODCL (133, 140)]; /* 733 */
79− char type_l_path_table [ISODCL (141, 144)]; /* 731 */
80− char opt_type_l_path_table [ISODCL (145, 148)]; /* 731 */
81− char type_m_path_table [ISODCL (149, 152)]; /* 732 */
82− char opt_type_m_path_table [ISODCL (153, 156)]; /* 732 */
83− char root_directory_record [ISODCL (157, 190)]; /* 9.1 */
72+ __u8 unused2 [ISODCL ( 73, 80)];
73+ __u8 volume_space_size [ISODCL ( 81, 88)]; /* 733 */
74+ __u8 escape [ISODCL ( 89, 120)]; /* 856 */
75+ __u8 volume_set_size [ISODCL (121, 124)]; /* 723 */
76+ __u8 volume_sequence_number [ISODCL (125, 128)]; /* 723 */
77+ __u8 logical_block_size [ISODCL (129, 132)]; /* 723 */
78+ __u8 path_table_size [ISODCL (133, 140)]; /* 733 */
79+ __u8 type_l_path_table [ISODCL (141, 144)]; /* 731 */
80+ __u8 opt_type_l_path_table [ISODCL (145, 148)]; /* 731 */
81+ __u8 type_m_path_table [ISODCL (149, 152)]; /* 732 */
82+ __u8 opt_type_m_path_table [ISODCL (153, 156)]; /* 732 */
83+ __u8 root_directory_record [ISODCL (157, 190)]; /* 9.1 */
8484 char volume_set_id [ISODCL (191, 318)]; /* dchars */
8585 char publisher_id [ISODCL (319, 446)]; /* achars */
8686 char preparer_id [ISODCL (447, 574)]; /* achars */
@@ -88,54 +88,54 @@ struct iso_supplementary_descriptor { · 1 unmodified line
8888 char copyright_file_id [ISODCL (703, 739)]; /* 7.5 dchars */
8989 char abstract_file_id [ISODCL (740, 776)]; /* 7.5 dchars */
9090 char bibliographic_file_id [ISODCL (777, 813)]; /* 7.5 dchars */
91− char creation_date [ISODCL (814, 830)]; /* 8.4.26.1 */
92− char modification_date [ISODCL (831, 847)]; /* 8.4.26.1 */
93− char expiration_date [ISODCL (848, 864)]; /* 8.4.26.1 */
94− char effective_date [ISODCL (865, 881)]; /* 8.4.26.1 */
95− char file_structure_version [ISODCL (882, 882)]; /* 711 */
96− char unused4 [ISODCL (883, 883)];
97− char application_data [ISODCL (884, 1395)];
98− char unused5 [ISODCL (1396, 2048)];
91+ __u8 creation_date [ISODCL (814, 830)]; /* 8.4.26.1 */
92+ __u8 modification_date [ISODCL (831, 847)]; /* 8.4.26.1 */
93+ __u8 expiration_date [ISODCL (848, 864)]; /* 8.4.26.1 */
94+ __u8 effective_date [ISODCL (865, 881)]; /* 8.4.26.1 */
95+ __u8 file_structure_version [ISODCL (882, 882)]; /* 711 */
96+ __u8 unused4 [ISODCL (883, 883)];
97+ __u8 application_data [ISODCL (884, 1395)];
98+ __u8 unused5 [ISODCL (1396, 2048)];
9999 };
100100
101101
102102 #define HS_STANDARD_ID "CDROM"
103103
104104 struct hs_volume_descriptor {
105− char foo [ISODCL ( 1, 8)]; /* 733 */
106− char type [ISODCL ( 9, 9)]; /* 711 */
105+ __u8 foo [ISODCL ( 1, 8)]; /* 733 */
106+ __u8 type [ISODCL ( 9, 9)]; /* 711 */
107107 char id [ISODCL ( 10, 14)];
108− char version [ISODCL ( 15, 15)]; /* 711 */
109− char data[ISODCL(16,2048)];
108+ __u8 version [ISODCL ( 15, 15)]; /* 711 */
109+ __u8 data[ISODCL(16,2048)];
110110 };
111111
112112
113113 struct hs_primary_descriptor {
114− char foo [ISODCL ( 1, 8)]; /* 733 */
115− char type [ISODCL ( 9, 9)]; /* 711 */
116− char id [ISODCL ( 10, 14)];
117− char version [ISODCL ( 15, 15)]; /* 711 */
118− char unused1 [ISODCL ( 16, 16)]; /* 711 */
114+ __u8 foo [ISODCL ( 1, 8)]; /* 733 */
115+ __u8 type [ISODCL ( 9, 9)]; /* 711 */
116+ __u8 id [ISODCL ( 10, 14)];
117+ __u8 version [ISODCL ( 15, 15)]; /* 711 */
118+ __u8 unused1 [ISODCL ( 16, 16)]; /* 711 */
119119 char system_id [ISODCL ( 17, 48)]; /* achars */
120120 char volume_id [ISODCL ( 49, 80)]; /* dchars */
121− char unused2 [ISODCL ( 81, 88)]; /* 733 */
122− char volume_space_size [ISODCL ( 89, 96)]; /* 733 */
123− char unused3 [ISODCL ( 97, 128)]; /* 733 */
124− char volume_set_size [ISODCL (129, 132)]; /* 723 */
125− char volume_sequence_number [ISODCL (133, 136)]; /* 723 */
126− char logical_block_size [ISODCL (137, 140)]; /* 723 */
127− char path_table_size [ISODCL (141, 148)]; /* 733 */
128− char type_l_path_table [ISODCL (149, 152)]; /* 731 */
129− char unused4 [ISODCL (153, 180)]; /* 733 */
130− char root_directory_record [ISODCL (181, 214)]; /* 9.1 */
121+ __u8 unused2 [ISODCL ( 81, 88)]; /* 733 */
122+ __u8 volume_space_size [ISODCL ( 89, 96)]; /* 733 */
123+ __u8 unused3 [ISODCL ( 97, 128)]; /* 733 */
124+ __u8 volume_set_size [ISODCL (129, 132)]; /* 723 */
125+ __u8 volume_sequence_number [ISODCL (133, 136)]; /* 723 */
126+ __u8 logical_block_size [ISODCL (137, 140)]; /* 723 */
127+ __u8 path_table_size [ISODCL (141, 148)]; /* 733 */
128+ __u8 type_l_path_table [ISODCL (149, 152)]; /* 731 */
129+ __u8 unused4 [ISODCL (153, 180)]; /* 733 */
130+ __u8 root_directory_record [ISODCL (181, 214)]; /* 9.1 */
131131 };
132132
133133 /* We use this to help us look up the parent inode numbers. */
134134
135135 struct iso_path_table{
136− unsigned char name_len[2]; /* 721 */
137− char extent[4]; /* 731 */
138− char parent[2]; /* 721 */
136+ __u8 name_len[2]; /* 721 */
137+ __u8 extent[4]; /* 731 */
138+ __u8 parent[2]; /* 721 */
139139 char name[0];
140140 } __attribute__((packed));
141141
@@ -143,16 +143,16 @@ struct iso_path_table{ · 1 unmodified line
143143 there is an extra reserved byte after the flags */
144144
145145 struct iso_directory_record {
146− char length [ISODCL (1, 1)]; /* 711 */
147− char ext_attr_length [ISODCL (2, 2)]; /* 711 */
148− char extent [ISODCL (3, 10)]; /* 733 */
149− char size [ISODCL (11, 18)]; /* 733 */
150− char date [ISODCL (19, 25)]; /* 7 by 711 */
151− char flags [ISODCL (26, 26)];
152− char file_unit_size [ISODCL (27, 27)]; /* 711 */
153− char interleave [ISODCL (28, 28)]; /* 711 */
154− char volume_sequence_number [ISODCL (29, 32)]; /* 723 */
155− unsigned char name_len [ISODCL (33, 33)]; /* 711 */
146+ __u8 length [ISODCL (1, 1)]; /* 711 */
147+ __u8 ext_attr_length [ISODCL (2, 2)]; /* 711 */
148+ __u8 extent [ISODCL (3, 10)]; /* 733 */
149+ __u8 size [ISODCL (11, 18)]; /* 733 */
150+ __u8 date [ISODCL (19, 25)]; /* 7 by 711 */
151+ __u8 flags [ISODCL (26, 26)];
152+ __u8 file_unit_size [ISODCL (27, 27)]; /* 711 */
153+ __u8 interleave [ISODCL (28, 28)]; /* 711 */
154+ __u8 volume_sequence_number [ISODCL (29, 32)]; /* 723 */
155+ __u8 name_len [ISODCL (33, 33)]; /* 711 */
156156 char name [0];
157157 } __attribute__((packed));
158158