aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog29
-rw-r--r--initscripts.spec5
2 files changed, 33 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 2271fadc..ffda5223 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,32 @@
+2002-05-29 Bill Nottingham <notting@redhat.com>
+
+ * ChangeLog, initscripts.spec: 6.75-1
+
+ * sysconfig/network-scripts/ifup:
+ start checking for link again
+
+2002-05-13 Bill Nottingham <notting@redhat.com>
+
+ * service: cd / , not cd /etc/init.d
+
+2002-05-13 Christian Rose <menthos@menthos.com>
+
+ * sv.po: Fixed Swedish translation.
+
+2002-05-08 Bill Nottingham <notting@redhat.com>
+
+ * rc.d/rc.sysinit:
+ actually test that hdparm is there before trying to call it
+
+2002-05-06 Florian La Roche <laroche@redhat.com>
+
+ * initscripts-s390.patch:
+ - fix the s390 patch
+
+2002-05-05 Christian Rose <menthos@menthos.com>
+
+ * sv.po: Fixed Swedish translation.
+
2002-04-19 Bill Nottingham <notting@redhat.com>
* Changelog, initscripts.spec: 6.67-1
diff --git a/initscripts.spec b/initscripts.spec
index f92df7f4..c4d785e0 100644
--- a/initscripts.spec
+++ b/initscripts.spec
@@ -1,6 +1,6 @@
Summary: The inittab file and the /etc/init.d scripts.
Name: initscripts
-Version: 6.67
+Version: 6.75
License: GPL
Group: System Environment/Base
Release: 1
@@ -244,6 +244,9 @@ rm -rf $RPM_BUILD_ROOT
%dir /etc/locale/*/LC_MESSAGES
%changelog
+* Tue May 28 2002 Bill Nottingham <notting@redhat.com> 6.75-1
+- add check for link for dhcp back in
+
* Fri Apr 19 2002 Bill Nottingham <notting@redhat.com> 6.67-1
- fix silly cut&paste bug in hdparm settings in initscripts
href='#n49'>49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
package resize_fat::fat;

use diagnostics;
use strict;

use resize_fat::any;
use resize_fat::io;

1;

sub read($) {
    my ($fs) = @_;

    @{$fs->{fats}} = map {
	my $fat = eval { resize_fat::io::read($fs, $fs->{fat_offset} + $_ * $fs->{fat_size}, $fs->{fat_size}) };
	$@ and die "reading fat #$_ failed";
	vec($fat, 0, 8) == $fs->{media} or die "FAT $_ has invalid signature";
	$fat;
    } (0 .. $fs->{nb_fats} - 1);

    $fs->{fat} = $fs->{fats}->[0];

    my ($free, $bad, $used) = (0, 0, 0);

    for (my $i = 2; $i < $fs->{nb_clusters} + 2; $i++) {
	my $cluster = &next($fs, $i);
	if ($cluster == 0) { $free++; }
	elsif ($cluster == $resize_fat::bad_cluster_value) { $bad++; }
	else { $used++; }
    }
    @{$fs->{clusters}->{count}}{qw(free bad used)} = ($free, $bad, $used);
}

sub write($) {
    my ($fs) = @_;

    sysseek $fs->{fd}, $fs->{fat_offset}, 0 or die "write_fat: seek failed";
    foreach (1..$fs->{nb_fats}) {
	syswrite $fs->{fd}, $fs->{fat}, $fs->{fat_size} or die "write_fat: write failed";
    }
}



# allocates where all the clusters will be moved to. Clusters before cut_point
# remain in the same position, however cluster that are part of a directory are
# moved regardless (this is a mechanism to prevent data loss) (cut_point is the
# first cluster that won't occur in the new fs)
sub allocate_remap {
    my ($fs, $cut_point) = @_;
    my ($cluster, $new_cluster);
    my $remap = sub { $fs->{fat_remap}->[$cluster] = $new_cluster; };
    my $get_new = sub {
	$new_cluster = get_free($fs);
	0 < $new_cluster && $new_cluster < $cut_point or die "no free clusters";
	set_eof($fs, $new_cluster); # mark as used
	#log::ld("resize_fat: [$cluster,", &next($fs, $cluster), "...]->$new_cluster...");
    };

    $fs->{fat_remap}->[0] = 0;
    $fs->{last_free_cluster} = 2;
    for ($cluster = 2; $cluster < $fs->{nb_clusters} + 2; $cluster++) {
	if ($cluster < $cut_point) {
	    if ($fs->{fat_flag_map}->[$cluster] == $resize_fat::any::DIRECTORY) {
		&$get_new();
	    } else {
		$new_cluster = $cluster;
	    }
	    &$remap();
	} elsif (!is_empty(&next($fs, $cluster))) {
	    &$get_new();
	    &$remap();
	 }
    }
}


# updates the fat for the resized filesystem
sub update {
    my ($fs) = @_;

    for (my $cluster = 2; $cluster < $fs->{nb_clusters} + 2; $cluster++) {
	 if ($fs->{fat_flag_map}->[$cluster]) {
	     my $old_next = &next($fs, $cluster);
	     my $new      = $fs->{fat_remap}->[$cluster];
	     my $new_next = $fs->{fat_remap}->[$old_next];

	     set_available($fs, $cluster);

	     is_eof($old_next) ?
		 set_eof($fs, $new) :
		 set_next($fs, $new, $new_next);
	 }
    }
}


# - compares the two FATs (one's a backup that should match) - skips first entry
# - its just a signature (already checked above) NOTE: checks for cross-linking
# are done in count.c
sub check($) {
    my ($fs) = @_;
    foreach (@{$fs->{fats}}) {
	$_ eq $fs->{fats}->[0] or die "FAT tables do not match";
    }
}

sub endianness16($) { (($_[0] & 0xff) << 8) + ($_[0] >> 8); }
sub endianness($$) {
    my ($val, $nb_bits) = @_;
    my $r = 0;
    for (; $nb_bits > 0; $nb_bits -= 8) {
	$r <<= 8;
	$r += $val & 0xff;
	$val >>= 8;
    }
    $nb_bits < 0 and die "error: endianness only handle numbers divisible by 8";
    $r;
}

sub next($$) {
    my ($fs, $cluster) = @_;
    $cluster > $fs->{nb_clusters} + 2 and die "fat::next: cluster $cluster outside filesystem";
    endianness(vec($fs->{fat}, $cluster, $fs->{fs_type_size}), $fs->{fs_type_size});

}
sub set_next($$$) { 
    my ($fs, $cluster, $new_v) = @_;
    $cluster > $fs->{nb_clusters} + 2 and die "fat::set_next: cluster $cluster outside filesystem";
    vec($fs->{fat}, $cluster, $fs->{fs_type_size}) = endianness($new_v, $fs->{fs_type_size});
}


sub get_free($) {
    my ($fs) = @_;
    foreach (my $i = 0; $i < $fs->{nb_clusters}; $i++) {
        my $cluster = ($i + $fs->{last_free_cluster} - 2) % $fs->{nb_clusters} + 2;
        is_available(&next($fs, $cluster)) and return $fs->{last_free_cluster} = $cluster;
    }
    die "no free clusters";
}

#    returns true if <cluster> represents an EOF marker
sub is_eof($) {
    my ($cluster) = @_;
    $cluster >= $resize_fat::bad_cluster_value;
}
sub set_eof($$) {
    my ($fs, $cluster) = @_;
    set_next($fs, $cluster, $resize_fat::bad_cluster_value + 1);
}

#    returns true if <cluster> is empty.  Note that this includes bad clusters.
sub is_empty($) {
    my ($cluster) = @_;
    $cluster == 0 || $cluster == $resize_fat::bad_cluster_value;
}

#    returns true if <cluster> is available.
sub is_available($) {
    my ($cluster) = @_;
    $cluster == 0;
}
sub set_available($$) {
    my ($fs, $cluster) = @_;
    set_next($fs, $cluster, 0);
}