@@ -81,8 +81,6 @@ use humility_cmd::idol;
8181use humility_cmd:: { Archive , Attach , Command , Run , Validate } ;
8282use indicatif:: { ProgressBar , ProgressStyle } ;
8383use std:: fs;
84- use tlvc_text:: Piece ;
85- use zerocopy:: AsBytes ;
8684
8785#[ derive( Parser , Debug ) ]
8886#[ clap(
@@ -160,103 +158,6 @@ fn list(hubris: &HubrisArchive) -> Result<()> {
160158 Ok ( ( ) )
161159}
162160
163- fn pack ( piece : & Piece ) -> Vec < u8 > {
164- match piece {
165- Piece :: Bytes ( b) => b. to_vec ( ) ,
166- Piece :: Chunk ( tag, body) => {
167- let mut out = vec ! [ ] ;
168-
169- let mut header = tlvc:: ChunkHeader {
170- tag : ( * tag) . into ( ) ,
171- len : 0 . into ( ) ,
172- header_checksum : 0 . into ( ) ,
173- } ;
174-
175- out. extend ( header. as_bytes ( ) ) ;
176-
177- let c = tlvc:: begin_body_crc ( ) ;
178- let mut c = c. digest ( ) ;
179- for p in body {
180- let segment = pack ( p) ;
181- c. update ( & segment) ;
182- out. extend ( segment) ;
183- }
184- let body_len = out. len ( ) - std:: mem:: size_of :: < tlvc:: ChunkHeader > ( ) ;
185- let body_len = u32:: try_from ( body_len) . unwrap ( ) ;
186- while out. len ( ) & 0b11 != 0 {
187- out. push ( 0 ) ;
188- }
189- out. extend ( c. finalize ( ) . to_le_bytes ( ) ) ;
190-
191- // Update the header.
192- header. len . set ( body_len) ;
193- header. header_checksum . set ( header. compute_checksum ( ) ) ;
194-
195- out[ ..std:: mem:: size_of :: < tlvc:: ChunkHeader > ( ) ]
196- . copy_from_slice ( header. as_bytes ( ) ) ;
197- out
198- }
199- Piece :: String ( s) => s. as_bytes ( ) . to_vec ( ) ,
200- }
201- }
202-
203- fn dump < R > ( mut src : tlvc:: TlvcReader < R > ) -> Vec < Piece >
204- where
205- R : tlvc:: TlvcRead ,
206- {
207- let mut pieces = vec ! [ ] ;
208- loop {
209- match src. next ( ) {
210- Ok ( Some ( chunk) ) => {
211- let mut tmp = [ 0 ; 512 ] ;
212- if chunk. check_body_checksum ( & mut tmp) . is_ok ( ) {
213- pieces. push ( Piece :: Chunk (
214- tlvc_text:: Tag :: new ( chunk. header ( ) . tag ) ,
215- dump ( chunk. read_as_chunks ( ) ) ,
216- ) ) ;
217- } else {
218- let bytes = remaining_bytes (
219- src,
220- chunk. header ( ) . total_len_in_bytes ( ) ,
221- ) ;
222-
223- if let Ok ( s) = std:: str:: from_utf8 ( & bytes) {
224- pieces. push ( Piece :: String ( s. to_string ( ) ) ) ;
225- } else {
226- pieces. push ( Piece :: Bytes ( bytes) ) ;
227- }
228-
229- break ;
230- }
231- }
232- Ok ( None ) => break ,
233- Err ( _) => {
234- let bytes = remaining_bytes ( src, 0 ) ;
235-
236- if let Ok ( s) = std:: str:: from_utf8 ( & bytes) {
237- pieces. push ( Piece :: String ( s. to_string ( ) ) ) ;
238- } else {
239- pieces. push ( Piece :: Bytes ( bytes) ) ;
240- }
241-
242- break ;
243- }
244- }
245- }
246- pieces
247- }
248-
249- fn remaining_bytes < R > ( src : tlvc:: TlvcReader < R > , rewind : usize ) -> Vec < u8 >
250- where
251- R : tlvc:: TlvcRead ,
252- {
253- let ( src, start, end) = src. into_inner ( ) ;
254- let start = start as usize - rewind;
255- let mut bytes = vec ! [ 0 ; end as usize - start] ;
256- src. read_exact ( start as u64 , & mut bytes) . unwrap ( ) ;
257- bytes
258- }
259-
260161fn target ( hubris : & HubrisArchive , subargs : & VpdArgs ) -> Result < usize > {
261162 let mut rval = None ;
262163
@@ -304,21 +205,17 @@ fn vpd_write(
304205 . context ( "is the 'vpd' task present?" ) ?;
305206 let target = target ( hubris, subargs) ?;
306207
307- let mut bytes = vec ! [ ] ;
308-
309- if let Some ( ref filename) = subargs. write {
208+ let bytes = if let Some ( ref filename) = subargs. write {
310209 let file = fs:: File :: open ( filename) ?;
311210
312211 let p = tlvc_text:: load ( file) . with_context ( || {
313212 format ! ( "failed to parse {} as VPD input" , filename)
314213 } ) ?;
315214
316- for piece in p {
317- bytes. extend ( pack ( & piece) ) ;
318- }
215+ tlvc_text:: pack ( & p)
319216 } else {
320- bytes . resize_with ( 1024 , || 0xffu8 ) ;
321- }
217+ vec ! [ 0xffu8 ; 1024 ]
218+ } ;
322219
323220 let mut all_ops = vec ! [ ] ;
324221
@@ -480,7 +377,7 @@ fn vpd_read(
480377 }
481378 } ;
482379
483- let p = dump ( reader) ;
380+ let p = tlvc_text :: dump ( reader) ;
484381 tlvc_text:: save ( std:: io:: stdout ( ) , & p) ?;
485382 println ! ( ) ;
486383
0 commit comments