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
12#define ISODCL(from, to) (to - from + 1)12#define ISODCL(from, to) (to - from + 1)
13 13
14struct iso_volume_descriptor {14struct iso_volume_descriptor {
15 char type[ISODCL(1,1)]; /* 711 */15 __u8 type[ISODCL(1,1)]; /* 711 */
16 char id[ISODCL(2,6)];16 char id[ISODCL(2,6)];
17 char version[ISODCL(7,7)];17 __u8 version[ISODCL(7,7)];
18 char data[ISODCL(8,2048)];18 __u8 data[ISODCL(8,2048)];
19};19};
20 20
21/* volume descriptor types */21/* volume descriptor types */
@@ -26,24 +26,24 @@ struct iso_volume_descriptor { · 4 unmodified lines
26#define ISO_STANDARD_ID "CD001"26#define ISO_STANDARD_ID "CD001"
27 27
28struct iso_primary_descriptor {28struct iso_primary_descriptor {
29 char type [ISODCL ( 1, 1)]; /* 711 */29 __u8 type [ISODCL ( 1, 1)]; /* 711 */
30 char id [ISODCL ( 2, 6)];30 char id [ISODCL ( 2, 6)];
31 char version [ISODCL ( 7, 7)]; /* 711 */31 __u8 version [ISODCL ( 7, 7)]; /* 711 */
32 char unused1 [ISODCL ( 8, 8)];32 __u8 unused1 [ISODCL ( 8, 8)];
33 char system_id [ISODCL ( 9, 40)]; /* achars */33 char system_id [ISODCL ( 9, 40)]; /* achars */
34 char volume_id [ISODCL ( 41, 72)]; /* dchars */34 char volume_id [ISODCL ( 41, 72)]; /* dchars */
35 char unused2 [ISODCL ( 73, 80)];35 __u8 unused2 [ISODCL ( 73, 80)];
36 char volume_space_size [ISODCL ( 81, 88)]; /* 733 */36 __u8 volume_space_size [ISODCL ( 81, 88)]; /* 733 */
37 char unused3 [ISODCL ( 89, 120)];37 __u8 unused3 [ISODCL ( 89, 120)];
38 char volume_set_size [ISODCL (121, 124)]; /* 723 */38 __u8 volume_set_size [ISODCL (121, 124)]; /* 723 */
39 char volume_sequence_number [ISODCL (125, 128)]; /* 723 */39 __u8 volume_sequence_number [ISODCL (125, 128)]; /* 723 */
40 char logical_block_size [ISODCL (129, 132)]; /* 723 */40 __u8 logical_block_size [ISODCL (129, 132)]; /* 723 */
41 char path_table_size [ISODCL (133, 140)]; /* 733 */41 __u8 path_table_size [ISODCL (133, 140)]; /* 733 */
42 char type_l_path_table [ISODCL (141, 144)]; /* 731 */42 __u8 type_l_path_table [ISODCL (141, 144)]; /* 731 */
43 char opt_type_l_path_table [ISODCL (145, 148)]; /* 731 */43 __u8 opt_type_l_path_table [ISODCL (145, 148)]; /* 731 */
44 char type_m_path_table [ISODCL (149, 152)]; /* 732 */44 __u8 type_m_path_table [ISODCL (149, 152)]; /* 732 */
45 char opt_type_m_path_table [ISODCL (153, 156)]; /* 732 */45 __u8 opt_type_m_path_table [ISODCL (153, 156)]; /* 732 */
46 char root_directory_record [ISODCL (157, 190)]; /* 9.1 */46 __u8 root_directory_record [ISODCL (157, 190)]; /* 9.1 */
47 char volume_set_id [ISODCL (191, 318)]; /* dchars */47 char volume_set_id [ISODCL (191, 318)]; /* dchars */
48 char publisher_id [ISODCL (319, 446)]; /* achars */48 char publisher_id [ISODCL (319, 446)]; /* achars */
49 char preparer_id [ISODCL (447, 574)]; /* achars */49 char preparer_id [ISODCL (447, 574)]; /* achars */
@@ -51,36 +51,36 @@ struct iso_primary_descriptor { · 1 unmodified line
51 char copyright_file_id [ISODCL (703, 739)]; /* 7.5 dchars */51 char copyright_file_id [ISODCL (703, 739)]; /* 7.5 dchars */
52 char abstract_file_id [ISODCL (740, 776)]; /* 7.5 dchars */52 char abstract_file_id [ISODCL (740, 776)]; /* 7.5 dchars */
53 char bibliographic_file_id [ISODCL (777, 813)]; /* 7.5 dchars */53 char bibliographic_file_id [ISODCL (777, 813)]; /* 7.5 dchars */
54 char creation_date [ISODCL (814, 830)]; /* 8.4.26.1 */54 __u8 creation_date [ISODCL (814, 830)]; /* 8.4.26.1 */
55 char modification_date [ISODCL (831, 847)]; /* 8.4.26.1 */55 __u8 modification_date [ISODCL (831, 847)]; /* 8.4.26.1 */
56 char expiration_date [ISODCL (848, 864)]; /* 8.4.26.1 */56 __u8 expiration_date [ISODCL (848, 864)]; /* 8.4.26.1 */
57 char effective_date [ISODCL (865, 881)]; /* 8.4.26.1 */57 __u8 effective_date [ISODCL (865, 881)]; /* 8.4.26.1 */
58 char file_structure_version [ISODCL (882, 882)]; /* 711 */58 __u8 file_structure_version [ISODCL (882, 882)]; /* 711 */
59 char unused4 [ISODCL (883, 883)];59 __u8 unused4 [ISODCL (883, 883)];
60 char application_data [ISODCL (884, 1395)];60 __u8 application_data [ISODCL (884, 1395)];
61 char unused5 [ISODCL (1396, 2048)];61 __u8 unused5 [ISODCL (1396, 2048)];
62};62};
63 63
64/* Almost the same as the primary descriptor but two fields are specified */64/* Almost the same as the primary descriptor but two fields are specified */
65struct iso_supplementary_descriptor {65struct iso_supplementary_descriptor {
66 char type [ISODCL ( 1, 1)]; /* 711 */66 __u8 type [ISODCL ( 1, 1)]; /* 711 */
67 char id [ISODCL ( 2, 6)];67 char id [ISODCL ( 2, 6)];
68 char version [ISODCL ( 7, 7)]; /* 711 */68 __u8 version [ISODCL ( 7, 7)]; /* 711 */
69 char flags [ISODCL ( 8, 8)]; /* 853 */69 __u8 flags [ISODCL ( 8, 8)]; /* 853 */
70 char system_id [ISODCL ( 9, 40)]; /* achars */70 char system_id [ISODCL ( 9, 40)]; /* achars */
71 char volume_id [ISODCL ( 41, 72)]; /* dchars */71 char volume_id [ISODCL ( 41, 72)]; /* dchars */
72 char unused2 [ISODCL ( 73, 80)];72 __u8 unused2 [ISODCL ( 73, 80)];
73 char volume_space_size [ISODCL ( 81, 88)]; /* 733 */73 __u8 volume_space_size [ISODCL ( 81, 88)]; /* 733 */
74 char escape [ISODCL ( 89, 120)]; /* 856 */74 __u8 escape [ISODCL ( 89, 120)]; /* 856 */
75 char volume_set_size [ISODCL (121, 124)]; /* 723 */75 __u8 volume_set_size [ISODCL (121, 124)]; /* 723 */
76 char volume_sequence_number [ISODCL (125, 128)]; /* 723 */76 __u8 volume_sequence_number [ISODCL (125, 128)]; /* 723 */
77 char logical_block_size [ISODCL (129, 132)]; /* 723 */77 __u8 logical_block_size [ISODCL (129, 132)]; /* 723 */
78 char path_table_size [ISODCL (133, 140)]; /* 733 */78 __u8 path_table_size [ISODCL (133, 140)]; /* 733 */
79 char type_l_path_table [ISODCL (141, 144)]; /* 731 */79 __u8 type_l_path_table [ISODCL (141, 144)]; /* 731 */
80 char opt_type_l_path_table [ISODCL (145, 148)]; /* 731 */80 __u8 opt_type_l_path_table [ISODCL (145, 148)]; /* 731 */
81 char type_m_path_table [ISODCL (149, 152)]; /* 732 */81 __u8 type_m_path_table [ISODCL (149, 152)]; /* 732 */
82 char opt_type_m_path_table [ISODCL (153, 156)]; /* 732 */82 __u8 opt_type_m_path_table [ISODCL (153, 156)]; /* 732 */
83 char root_directory_record [ISODCL (157, 190)]; /* 9.1 */83 __u8 root_directory_record [ISODCL (157, 190)]; /* 9.1 */
84 char volume_set_id [ISODCL (191, 318)]; /* dchars */84 char volume_set_id [ISODCL (191, 318)]; /* dchars */
85 char publisher_id [ISODCL (319, 446)]; /* achars */85 char publisher_id [ISODCL (319, 446)]; /* achars */
86 char preparer_id [ISODCL (447, 574)]; /* achars */86 char preparer_id [ISODCL (447, 574)]; /* achars */
@@ -88,54 +88,54 @@ struct iso_supplementary_descriptor { · 1 unmodified line
88 char copyright_file_id [ISODCL (703, 739)]; /* 7.5 dchars */88 char copyright_file_id [ISODCL (703, 739)]; /* 7.5 dchars */
89 char abstract_file_id [ISODCL (740, 776)]; /* 7.5 dchars */89 char abstract_file_id [ISODCL (740, 776)]; /* 7.5 dchars */
90 char bibliographic_file_id [ISODCL (777, 813)]; /* 7.5 dchars */90 char bibliographic_file_id [ISODCL (777, 813)]; /* 7.5 dchars */
91 char creation_date [ISODCL (814, 830)]; /* 8.4.26.1 */91 __u8 creation_date [ISODCL (814, 830)]; /* 8.4.26.1 */
92 char modification_date [ISODCL (831, 847)]; /* 8.4.26.1 */92 __u8 modification_date [ISODCL (831, 847)]; /* 8.4.26.1 */
93 char expiration_date [ISODCL (848, 864)]; /* 8.4.26.1 */93 __u8 expiration_date [ISODCL (848, 864)]; /* 8.4.26.1 */
94 char effective_date [ISODCL (865, 881)]; /* 8.4.26.1 */94 __u8 effective_date [ISODCL (865, 881)]; /* 8.4.26.1 */
95 char file_structure_version [ISODCL (882, 882)]; /* 711 */95 __u8 file_structure_version [ISODCL (882, 882)]; /* 711 */
96 char unused4 [ISODCL (883, 883)];96 __u8 unused4 [ISODCL (883, 883)];
97 char application_data [ISODCL (884, 1395)];97 __u8 application_data [ISODCL (884, 1395)];
98 char unused5 [ISODCL (1396, 2048)];98 __u8 unused5 [ISODCL (1396, 2048)];
99};99};
100 100
101 101
102#define HS_STANDARD_ID "CDROM"102#define HS_STANDARD_ID "CDROM"
103 103
104struct hs_volume_descriptor {104struct hs_volume_descriptor {
105 char foo [ISODCL ( 1, 8)]; /* 733 */105 __u8 foo [ISODCL ( 1, 8)]; /* 733 */
106 char type [ISODCL ( 9, 9)]; /* 711 */106 __u8 type [ISODCL ( 9, 9)]; /* 711 */
107 char id [ISODCL ( 10, 14)];107 char id [ISODCL ( 10, 14)];
108 char version [ISODCL ( 15, 15)]; /* 711 */108 __u8 version [ISODCL ( 15, 15)]; /* 711 */
109 char data[ISODCL(16,2048)];109 __u8 data[ISODCL(16,2048)];
110};110};
111 111
112 112
113struct hs_primary_descriptor {113struct hs_primary_descriptor {
114 char foo [ISODCL ( 1, 8)]; /* 733 */114 __u8 foo [ISODCL ( 1, 8)]; /* 733 */
115 char type [ISODCL ( 9, 9)]; /* 711 */115 __u8 type [ISODCL ( 9, 9)]; /* 711 */
116 char id [ISODCL ( 10, 14)];116 __u8 id [ISODCL ( 10, 14)];
117 char version [ISODCL ( 15, 15)]; /* 711 */117 __u8 version [ISODCL ( 15, 15)]; /* 711 */
118 char unused1 [ISODCL ( 16, 16)]; /* 711 */118 __u8 unused1 [ISODCL ( 16, 16)]; /* 711 */
119 char system_id [ISODCL ( 17, 48)]; /* achars */119 char system_id [ISODCL ( 17, 48)]; /* achars */
120 char volume_id [ISODCL ( 49, 80)]; /* dchars */120 char volume_id [ISODCL ( 49, 80)]; /* dchars */
121 char unused2 [ISODCL ( 81, 88)]; /* 733 */121 __u8 unused2 [ISODCL ( 81, 88)]; /* 733 */
122 char volume_space_size [ISODCL ( 89, 96)]; /* 733 */122 __u8 volume_space_size [ISODCL ( 89, 96)]; /* 733 */
123 char unused3 [ISODCL ( 97, 128)]; /* 733 */123 __u8 unused3 [ISODCL ( 97, 128)]; /* 733 */
124 char volume_set_size [ISODCL (129, 132)]; /* 723 */124 __u8 volume_set_size [ISODCL (129, 132)]; /* 723 */
125 char volume_sequence_number [ISODCL (133, 136)]; /* 723 */125 __u8 volume_sequence_number [ISODCL (133, 136)]; /* 723 */
126 char logical_block_size [ISODCL (137, 140)]; /* 723 */126 __u8 logical_block_size [ISODCL (137, 140)]; /* 723 */
127 char path_table_size [ISODCL (141, 148)]; /* 733 */127 __u8 path_table_size [ISODCL (141, 148)]; /* 733 */
128 char type_l_path_table [ISODCL (149, 152)]; /* 731 */128 __u8 type_l_path_table [ISODCL (149, 152)]; /* 731 */
129 char unused4 [ISODCL (153, 180)]; /* 733 */129 __u8 unused4 [ISODCL (153, 180)]; /* 733 */
130 char root_directory_record [ISODCL (181, 214)]; /* 9.1 */130 __u8 root_directory_record [ISODCL (181, 214)]; /* 9.1 */
131};131};
132 132
133/* We use this to help us look up the parent inode numbers. */133/* We use this to help us look up the parent inode numbers. */
134 134
135struct iso_path_table{135struct iso_path_table{
136 unsigned char name_len[2]; /* 721 */136 __u8 name_len[2]; /* 721 */
137 char extent[4]; /* 731 */137 __u8 extent[4]; /* 731 */
138 char parent[2]; /* 721 */138 __u8 parent[2]; /* 721 */
139 char name[0];139 char name[0];
140} __attribute__((packed));140} __attribute__((packed));
141 141
@@ -143,16 +143,16 @@ struct iso_path_table{ · 1 unmodified line
143 there is an extra reserved byte after the flags */143 there is an extra reserved byte after the flags */
144 144
145struct iso_directory_record {145struct iso_directory_record {
146 char length [ISODCL (1, 1)]; /* 711 */146 __u8 length [ISODCL (1, 1)]; /* 711 */
147 char ext_attr_length [ISODCL (2, 2)]; /* 711 */147 __u8 ext_attr_length [ISODCL (2, 2)]; /* 711 */
148 char extent [ISODCL (3, 10)]; /* 733 */148 __u8 extent [ISODCL (3, 10)]; /* 733 */
149 char size [ISODCL (11, 18)]; /* 733 */149 __u8 size [ISODCL (11, 18)]; /* 733 */
150 char date [ISODCL (19, 25)]; /* 7 by 711 */150 __u8 date [ISODCL (19, 25)]; /* 7 by 711 */
151 char flags [ISODCL (26, 26)];151 __u8 flags [ISODCL (26, 26)];
152 char file_unit_size [ISODCL (27, 27)]; /* 711 */152 __u8 file_unit_size [ISODCL (27, 27)]; /* 711 */
153 char interleave [ISODCL (28, 28)]; /* 711 */153 __u8 interleave [ISODCL (28, 28)]; /* 711 */
154 char volume_sequence_number [ISODCL (29, 32)]; /* 723 */154 __u8 volume_sequence_number [ISODCL (29, 32)]; /* 723 */
155 unsigned char name_len [ISODCL (33, 33)]; /* 711 */155 __u8 name_len [ISODCL (33, 33)]; /* 711 */
156 char name [0];156 char name [0];
157} __attribute__((packed));157} __attribute__((packed));
158 158