Add change up e_write() and add e_flush() also note that this super buggy atm

This commit is contained in:
jake 2023-10-30 14:18:45 -04:00
parent 60646a5285
commit 0923407117
3 changed files with 95 additions and 10 deletions

8
README Normal file
View file

@ -0,0 +1,8 @@
install Unix::Mknod-0.05 or Fuse won't install:
$ git clone <path>
$ cpanm .
super buggy:
truncate a mess
Fuse error 34

0
huh.txt Normal file
View file

View file

@ -11,6 +11,9 @@
# If not, see <https://www.gnu.org/licenses/>.
# author: jake [a\ jakes-mail dot top
# release: 29, Oct 2023
#
# SETATTR -> truncate, utime, chown, chmod ?
#
use strict;
use warnings;
use 5.010;
@ -22,6 +25,9 @@ use POSIX qw(ENOENT EISDIR EINVAL EEXIST ENOTEMPTY EACCES EFBIG
use File::Slurper qw(read_text);
use Mojo::Date;
use Getopt::Long;
use Carp::Always;
use Smart::Comments;
use File::Temp qw(tempfile);
my $user;
my $pass;
@ -232,6 +238,15 @@ sub e_open {
return (0, $fh);
}
sub e_create {
my $path = shift;
my ($dirs, $file) = get_path_and_file($path);
return -EEXIST if exists($files{$dirs}{$file});
my $res = write_to_neocities($dirs, $file, '');
return res_errno($res, 0);
}
sub e_read {
my ($dirs, $file) = get_path_and_file(shift);
my ($buf, $off, $fh) = @_;
@ -256,9 +271,52 @@ sub e_statfs { return 255, 1, 1, 1, 1, 2 }
sub e_write {
my ($dirs, $file) = get_path_and_file(shift);
my ($buf, $off, $fh) = @_;
## # e_write
## # $off
## # $fh
return -ENOENT() unless exists($files{$dirs}{$file});
my $res = write_to_neocities($dirs, $file, $buf);
return res_errno($res, length($buf));
if (! exists $files{$dirs}{$file}{fh}) {
($files{$dirs}{$file}{fh}, $files{$dirs}{$file}{fn}) = tempfile();
}
my $fh2 = $files{$dirs}{$file}{fh};
seek $fh2, $off, 0;
print $fh2 $buf;
# my $res = write_to_neocities($dirs, $file, $buf);
return length $buf;
}
sub e_flush {
### @_
### %files
my ($path, $_fh) = @_;
my ($dirs, $file) = get_path_and_file($path);
if (exists $files{$dirs}{$file}{fh}) {
my $fn = $files{$dirs}{$file}{fn};
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};
return res_errno($res, 0);
}
}
sub e_not_implimented { return -ENOSYS; }
sub e_lie_implimented { return 0; }
sub e_truncate {
my ($path, $how_much) = @_;
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;
return 0;
}
sub e_mknod {
@ -277,13 +335,13 @@ sub e_unlink {
if ($pass) {
$tx = $ua->post("https://$user:$pass\@neocities.org/api/delete", => {Accept => '*/*'} => form =>
{'filenames[]' => [ "$dirs/$file" ]});
my $res = $tx->res;
$res = $tx->res;
}
else {
my $tx = $ua->build_tx(POST => 'https://neocities.org/api/delete', => {Accept => '*/*'} => form =>
{'filenames[]' => [ "$dirs/$file" ]});
$tx->req->headers->authorization("Bearer $api");
my $res = $ua->start($tx)->res;
$res = $ua->start($tx)->res;
}
$suppress_list_update = 1;
@ -304,7 +362,7 @@ sub e_mkdir {
# my $numb = int(rand(99999999)) . 'mkdir_hopefully_no_collsions.html';
#
# $suppress_list_update = 1;
# my $res = e_mknod("$dirs/$file/$numb");
# $res = e_mknod("$dirs/$file/$numb");
#
# $suppress_list_update = 0;
# return res_errno($res,0) if $res != 0;
@ -392,7 +450,7 @@ sub e_rename {
sub res_errno {
my ($res, $buf_len) = @_;
if ($res->is_success) {
my $res = get_listing_from_neocities();
get_listing_from_neocities();
return $buf_len;
}
elsif ($res->code == 400) {
@ -425,10 +483,22 @@ sub res_errno {
# this returns mojo's 'res' thing
sub write_to_neocities {
my ($dirs, $file, $buffer) = @_;
my ($dirs, $file, $buffer, $is_buf_fn) = @_;
defined $is_buf_fn or $is_buf_fn = 0;
my $ua = Mojo::UserAgent->new();
my $asset = Mojo::Asset::Memory->new->add_chunk($buffer);
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" =>
@ -441,6 +511,7 @@ sub write_to_neocities {
$tx->req->headers->authorization("Bearer $api");
$res = $ua->start($tx)->res;
}
undef $asset;
return $res;
}
@ -462,6 +533,12 @@ Fuse::main(
mkdir =>"main::e_mkdir",
rmdir =>"main::e_rmdir",
rename =>"main::e_rename",
threaded=>0
create =>"main::e_create",
flush =>"main::e_flush",
truncate => "main::e_truncate",
utime =>"main::e_not_implimented",
chown =>"main::e_not_implimented",
chmod =>"main::e_not_implimented",
threaded=>0,
debug=>1,
);