fix bug that cut files short (wasn't hot flushing and then file handle closed before perl saw a newline) and make truncate less spooky

yoink naughty file
This commit is contained in:
jake 2023-11-01 10:16:24 -04:00
parent d58be4e039
commit 3dcbb3251f

View file

@ -279,6 +279,7 @@ sub e_write {
($files{$dirs}{$file}{fh}, $files{$dirs}{$file}{fn}) = tempfile();
}
my $fh2 = $files{$dirs}{$file}{fh};
$fh2->autoflush( 1 ); # perl doesnt 'print line' until it sees "\n" normally
seek $fh2, $off, 0;
print $fh2 $buf;
@ -287,8 +288,6 @@ sub e_write {
}
sub e_flush {
### @_
### %files
my ($path, $_fh) = @_;
my ($dirs, $file) = get_path_and_file($path);
if (exists $files{$dirs}{$file}{fh}) {
@ -296,8 +295,8 @@ sub e_flush {
my $res = write_to_neocities($dirs, $file, $fn, 1);
close $files{$dirs}{$file}{fh};
delete $files{$dirs}{$file}{fh};
delete $files{$dirs}{$file}{fn};
unlink $files{$dirs}{$file}{fn};
delete $files{$dirs}{$file}{fn};
return res_errno($res, 0);
}
}
@ -307,15 +306,21 @@ sub e_not_implimented { return -ENOSYS; }
sub e_lie_implimented { return 0; }
sub e_truncate {
my ($path, $how_much) = @_;
my ($path, $length) = @_;
my ($dirs, $file) = get_path_and_file($path);
return -ENOENT if ! exists $files{$dirs}{$file};
### XXX DRAGONS HERE
my $path_to_thing = $mountpoint ."/$path";
### $path_to_thing
open my $fh, '>', $path_to_thing or return -ENOENT;
truncate $fh, $how_much;
close $fh;
if ($length == 0) { # truncate entire file
e_write($path, '');
my $res = e_flush($path);
return $res;
}
else {
e_write($path, e_read($path,0,0), 0, 0);
truncate $files{$dirs}{$file}{fh}, $length;
my $res = e_flush($path);
return $res;
}
return 0;
}
@ -485,20 +490,18 @@ sub res_errno {
sub write_to_neocities {
my ($dirs, $file, $buffer, $is_buf_fn) = @_;
defined $is_buf_fn or $is_buf_fn = 0;
my $ua = Mojo::UserAgent->new();
my $asset;
if (! $is_buf_fn) {
### write_to_neocities
### buf _IS NOT_ fn
$asset = Mojo::Asset::Memory->new->add_chunk($buffer);
}
else {
### write_to_neocities
### buf _IS_ fn
$asset = Mojo::Asset::File->new(path => $buffer);
}
my ($tx, $res);
if ($pass) {
$tx = $ua->post("https://$user:$pass\@neocities.org/api/upload" =>
@ -540,5 +543,5 @@ Fuse::main(
chown =>"main::e_not_implimented",
chmod =>"main::e_not_implimented",
threaded=>0,
debug=>1,
#debug=>1,
);