@@ -351,32 +351,20 @@ function* loadFirmware(
351351 'Expected metadata to be v2.x' ,
352352 ) ;
353353
354- const firmware = new Uint8Array ( firmwareBase . length + 4 ) ;
355- const firmwareView = new DataView ( firmware . buffer ) ;
356-
357- firmware . set ( firmwareBase ) ;
358-
359- // empty string means use default name (don't write over firmware)
360- if ( hubName ) {
361- firmware . set ( encodeHubName ( hubName , metadata ) , metadata [ 'hub-name-offset' ] ) ;
362- }
363-
364- const checksum = ( function ( ) {
354+ const [ checksumFunc , checksumExtraLength ] = ( ( ) => {
365355 switch ( metadata [ 'checksum-type' ] ) {
366356 case 'sum' :
367- return sumComplement32 (
368- firmwareIterator ( firmwareView , metadata [ 'checksum-size' ] ) ,
369- ) ;
357+ return [ sumComplement32 , 4 ] ;
370358 case 'crc32' :
371- return crc32 ( firmwareIterator ( firmwareView , metadata [ 'checksum-size' ] ) ) ;
359+ return [ crc32 , 4 ] ;
372360 case 'none' :
373- return null ;
361+ return [ null , 0 ] ;
374362 default :
375- return undefined ;
363+ return [ undefined , 0 ] ;
376364 }
377365 } ) ( ) ;
378366
379- if ( checksum === undefined ) {
367+ if ( checksumFunc === undefined ) {
380368 // FIXME: we should return error/throw instead
381369 yield * put (
382370 didFailToFinish (
@@ -391,8 +379,22 @@ function* loadFirmware(
391379 throw new Error ( 'unreachable' ) ;
392380 }
393381
394- if ( checksum !== null ) {
395- firmwareView . setUint32 ( firmwareBase . length , checksum , true ) ;
382+ const firmware = new Uint8Array ( firmwareBase . length + checksumExtraLength ) ;
383+ const firmwareView = new DataView ( firmware . buffer ) ;
384+
385+ firmware . set ( firmwareBase ) ;
386+
387+ // empty string means use default name (don't write over firmware)
388+ if ( hubName ) {
389+ firmware . set ( encodeHubName ( hubName , metadata ) , metadata [ 'hub-name-offset' ] ) ;
390+ }
391+
392+ if ( checksumFunc !== null ) {
393+ firmwareView . setUint32 (
394+ firmwareBase . length ,
395+ checksumFunc ( firmwareIterator ( firmwareView , metadata [ 'checksum-size' ] ) ) ,
396+ true ,
397+ ) ;
396398 }
397399
398400 return { firmware, deviceId : metadata [ 'device-id' ] } ;
0 commit comments