diff options
author | Mystery Man <unknown@mandriva.org> | 2000-11-08 00:01:16 +0000 |
---|---|---|
committer | Mystery Man <unknown@mandriva.org> | 2000-11-08 00:01:16 +0000 |
commit | d5c526273db473a7d87a26000585900fc10dda7d (patch) | |
tree | 0fdaabe7a00921b6cc556601b103d344fc7ac781 /perl-install/resize_fat/io.pm | |
parent | 9c164312d4bfff6d93e1c4529de6b992f2bebc44 (diff) | |
download | drakx-backup-do-not-use-d5c526273db473a7d87a26000585900fc10dda7d.tar drakx-backup-do-not-use-d5c526273db473a7d87a26000585900fc10dda7d.tar.gz drakx-backup-do-not-use-d5c526273db473a7d87a26000585900fc10dda7d.tar.bz2 drakx-backup-do-not-use-d5c526273db473a7d87a26000585900fc10dda7d.tar.xz drakx-backup-do-not-use-d5c526273db473a7d87a26000585900fc10dda7d.zip |
This commit was manufactured by cvs2svn to create branch
'unlabeled-1.1.1'.
Diffstat (limited to 'perl-install/resize_fat/io.pm')
-rw-r--r-- | perl-install/resize_fat/io.pm | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/perl-install/resize_fat/io.pm b/perl-install/resize_fat/io.pm index 6543f9118..8ffaa8355 100644 --- a/perl-install/resize_fat/io.pm +++ b/perl-install/resize_fat/io.pm @@ -4,15 +4,13 @@ use diagnostics; use strict; use resize_fat::fat; -use c; 1; sub read($$$) { my ($fs, $pos, $size) = @_; - print "reading $size bytes at $pos\n"; - my $buf = "\0" x $size; + my $buf; sysseek $fs->{fd}, $pos, 0 or die "seeking to byte #$pos failed on device $fs->{fs_name}"; sysread $fs->{fd}, $buf, $size or die "reading at byte #$pos failed on device $fs->{fs_name}"; $buf; @@ -20,31 +18,36 @@ sub read($$$) { sub write($$$$) { my ($fs, $pos, $size, $buf) = @_; sysseek $fs->{fd}, $pos, 0 or die "seeking to byte #$pos failed on device $fs->{fs_name}"; - syswrite $fs->{fd}, $buf or die "writing at byte #$pos failed on device $fs->{fs_name}"; + syswrite $fs->{fd}, $buf, $size or die "writing at byte #$pos failed on device $fs->{fs_name}"; } sub read_cluster($$) { my ($fs, $cluster) = @_; my $buf; - my $pos = $fs->{cluster_offset} / 512 + $cluster * ($fs->{cluster_size} / 512); - c::lseek_sector(fileno $fs->{fd}, $pos, 0) or die "seeking to sector #$pos failed on device $fs->{fs_name}"; - sysread $fs->{fd}, $buf, $fs->{cluster_size} or die "reading at sector #$pos failed on device $fs->{fs_name}"; + eval { + $buf = &read($fs, + $fs->{cluster_offset} + $cluster * $fs->{cluster_size}, + $fs->{cluster_size}); + }; @$ and die "reading cluster #$cluster failed on device $fs->{fs_name}"; $buf; } sub write_cluster($$$) { my ($fs, $cluster, $buf) = @_; - my $pos = $fs->{cluster_offset} / 512 + $cluster * ($fs->{cluster_size} / 512); - c::lseek_sector(fileno $fs->{fd}, $pos, 0) or die "seeking to sector #$pos failed on device $fs->{fs_name}"; - syswrite $fs->{fd}, $buf or die "writing at sector #$pos failed on device $fs->{fs_name}"; + eval { + &write($fs, + $fs->{cluster_offset} + $cluster * $fs->{cluster_size}, + $fs->{cluster_size}, + $buf); + }; @$ and die "writing cluster #$cluster failed on device $fs->{fs_name}"; } sub read_file($$) { my ($fs, $cluster) = @_; my $buf = ''; - for (; !resize_fat::fat::is_eof($cluster); $cluster = resize_fat::fat::next ($fs, $cluster)) { + for (; !resize_fat::fat::is_eof($cluster); $cluster = resize_fat::fat::next($fs, $cluster)) { $cluster == 0 and die "Bad FAT: unterminated chain\n"; $buf .= read_cluster($fs, $cluster); } @@ -67,5 +70,5 @@ sub open($) { check_mounted($fs->{device}); sysopen F, $fs->{fs_name}, 2 or sysopen F, $fs->{fs_name}, 0 or die "error opening device $fs->{fs_name} for writing\n"; - $fs->{fd} = *F; + $fs->{fd} = \*F; } |