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!