Skip to content

Commit 2644fc6

Browse files
committed
Fix off-by-one index error
1 parent eab180c commit 2644fc6

File tree

3 files changed

+17
-14
lines changed

3 files changed

+17
-14
lines changed

src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ fn output_path(
4040
}
4141

4242
fn run(args: Args) -> Result<(), Box<dyn std::error::Error>> {
43-
let output_obj = output_path(args.output_obj, &args.input_file, ".obj")?;
44-
let output_mtl = output_path(args.output_mtl, &args.input_file, ".mtl")?;
43+
let output_obj = output_path(args.output_obj, &args.input_file, "obj")?;
44+
let output_mtl = output_path(args.output_mtl, &args.input_file, "mtl")?;
4545

4646
cmodconvert::convert_cmod(args.input_file, output_obj, output_mtl)
4747
}

src/reader/binaryread.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ impl<R: Read> BinaryReader<R> {
2121

2222
fn read_expected_data_type(&mut self, expected_type: DataType) -> Result<(), CmodError> {
2323
let token = self.input.read_u16::<LittleEndian>()?;
24-
let data_type =
25-
DataType::from_u16(token).ok_or_else(|| CmodError::InvalidDataType(token))?;
24+
let data_type = DataType::from_u16(token).ok_or(CmodError::InvalidDataType(token))?;
2625
if data_type == expected_type {
2726
Ok(())
2827
} else {
@@ -36,20 +35,20 @@ impl<R: Read> CmodTokenizer for BinaryReader<R> {
3635
match self.input.read_u16::<LittleEndian>() {
3736
Ok(token) => Token::from_u16(token)
3837
.map(Some)
39-
.ok_or_else(|| CmodError::InvalidToken(token)),
38+
.ok_or(CmodError::InvalidToken(token)),
4039
Err(err) if err.kind() == io::ErrorKind::UnexpectedEof => Ok(None),
4140
Err(err) => Err(err.into()),
4241
}
4342
}
4443

4544
fn read_texture_semantic(&mut self) -> Result<TextureSemantic, CmodError> {
4645
let token = self.input.read_u16::<LittleEndian>()?;
47-
TextureSemantic::from_u16(token).ok_or_else(|| CmodError::InvalidTextureSemantic(token))
46+
TextureSemantic::from_u16(token).ok_or(CmodError::InvalidTextureSemantic(token))
4847
}
4948

5049
fn read_blend_mode(&mut self) -> Result<BlendMode, CmodError> {
5150
let token = self.input.read_u16::<LittleEndian>()?;
52-
BlendMode::from_u16(token).ok_or_else(|| CmodError::InvalidBlendMode(token))
51+
BlendMode::from_u16(token).ok_or(CmodError::InvalidBlendMode(token))
5352
}
5453

5554
fn read_attribute_type(&mut self) -> Result<Option<AttributeType>, CmodError> {
@@ -59,14 +58,14 @@ impl<R: Read> CmodTokenizer for BinaryReader<R> {
5958
}
6059

6160
let attribute_type =
62-
AttributeType::from_u16(token).ok_or_else(|| CmodError::InvalidAttributeType(token))?;
61+
AttributeType::from_u16(token).ok_or(CmodError::InvalidAttributeType(token))?;
6362

6463
Ok(Some(attribute_type))
6564
}
6665

6766
fn read_attribute_format(&mut self) -> Result<AttributeFormat, CmodError> {
6867
let token = self.input.read_u16::<LittleEndian>()?;
69-
AttributeFormat::from_u16(token).ok_or_else(|| CmodError::InvalidAttributeFormat(token))
68+
AttributeFormat::from_u16(token).ok_or(CmodError::InvalidAttributeFormat(token))
7069
}
7170

7271
fn read_primitive_type(&mut self) -> Result<Option<PrimitiveType>, CmodError> {
@@ -76,7 +75,7 @@ impl<R: Read> CmodTokenizer for BinaryReader<R> {
7675
}
7776

7877
let primitive_type =
79-
PrimitiveType::from_u16(token).ok_or_else(|| CmodError::InvalidPrimitiveType(token))?;
78+
PrimitiveType::from_u16(token).ok_or(CmodError::InvalidPrimitiveType(token))?;
8079

8180
Ok(Some(primitive_type))
8281
}

src/wavefront.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ impl VertexHandler {
101101
.position_lookup
102102
.entry(position)
103103
.or_insert_with_key(|key| {
104-
let position_idx = self.positions.len();
104+
let position_idx = self.positions.len() + 1;
105105
self.positions.push(*key);
106106
position_idx as u32
107107
});
@@ -118,7 +118,7 @@ impl VertexHandler {
118118
.tex_coord_lookup
119119
.entry(tex_coord)
120120
.or_insert_with_key(|key| {
121-
let tex_coord_idx = self.tex_coords.len();
121+
let tex_coord_idx = self.tex_coords.len() + 1;
122122
self.tex_coords.push(*key);
123123
tex_coord_idx as u32
124124
})
@@ -131,7 +131,7 @@ impl VertexHandler {
131131
};
132132

133133
*self.normal_lookup.entry(normal).or_insert_with_key(|key| {
134-
let normal_idx = self.normals.len();
134+
let normal_idx = self.normals.len() + 1;
135135
self.normals.push(*key);
136136
normal_idx as u32
137137
})
@@ -307,7 +307,11 @@ impl From<EquatableF32> for f32 {
307307

308308
impl Display for EquatableF32 {
309309
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
310-
self.0.fmt(f)
310+
if self.0 == 0.0 || (self.0.abs() >= 1e-4 && self.0.abs() <= 1e9) {
311+
write!(f, "{}", self.0)
312+
} else {
313+
write!(f, "{:E}", self.0)
314+
}
311315
}
312316
}
313317

0 commit comments

Comments
 (0)