On Wed, Feb 22, 2012 at 04:16:27PM -0500, Kenneth R Westerback wrote:
> First very hacky attempt. Could easily destroy your data!
> 
> .... Ken
> 
> 
> Index: boot.c
> ===================================================================
> RCS file: /cvs/src/sbin/fsck_msdos/boot.c,v
> retrieving revision 1.15
> diff -u -p -r1.15 boot.c
> --- boot.c    18 Dec 2010 04:57:34 -0000      1.15
> +++ boot.c    22 Feb 2012 21:12:50 -0000
> @@ -33,6 +33,9 @@
>   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>   */

[skipped]

>  
> -             o = boot->Backup * boot->BytesPerSec;
> -             if ((o = lseek(dosfs, o, SEEK_SET)) == -1
> -                 || o != boot->Backup * boot->BytesPerSec
> -                 || (n = read(dosfs, backup, sizeof backup)) == -1
> -                 || n != sizeof backup) {
> +             o = lseek(dosfs, boot->Backup * secsize, SEEK_SET);
> +             if (o == -1 || o != boot->Backup * secsize) {
> +                     xperror("could not seek backup bootblock");
> +                     return (FSFATAL);
> +             }
> +             n = read(dosfs, block, secsize);
                                ^^^^^^^^^
> +             if (n == -1 || n != secsize) {
>                       xperror("could not read backup bootblock");
>                       return FSFATAL;
>               }

You are reading backup boot block into `block` but later you are
checking `backup` pointer. I put 'memcpy(backup, block, 512);' after
'read();' and... other things seem to work fine.

So, put proper code there and i'm ready to test next patch :)

Thanks!

Reply via email to