mirror of
https://hacklab.nilfm.cc/kuro
synced 2024-10-22 07:11:47 +00:00
104 lines
1.8 KiB
C
104 lines
1.8 KiB
C
#include "dat.h"
|
|
#include "fns.h"
|
|
|
|
static Node* node;
|
|
|
|
Aux* create_aux(FileType t) {
|
|
Aux* self = (Aux*)malloc(sizeof(Aux));
|
|
self->type = t;
|
|
self->data = nil;
|
|
self->count = 0;
|
|
return self;
|
|
}
|
|
|
|
void fs_destroy_file(File* f) {
|
|
Aux* a = (Aux*)f->aux;
|
|
if(a && a->data) {
|
|
free(a->data);
|
|
}
|
|
if (a) {
|
|
free (a);
|
|
}
|
|
}
|
|
|
|
void kuro_read(Req* r) {
|
|
Aux* a = (Aux*)r->fid->file->aux;
|
|
switch (a->type) {
|
|
case CTL:
|
|
case MEMORY:
|
|
default:
|
|
respond(r, nil);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void write_ctl(Req* r) {
|
|
char cmd[16] = {0};
|
|
char* c = r->ifcall.data;
|
|
int i;
|
|
|
|
for (i = 0; i < r->ifcall.count && *c != ' ' && *c != '\n'; i++) {
|
|
strncat(cmd, c, 1);
|
|
c++;
|
|
}
|
|
|
|
if (*c == ' ') {
|
|
c++;
|
|
}
|
|
|
|
/* maybe don't do this... */
|
|
strcsw(c, '\n', 0);
|
|
|
|
/* diagnostics for now */
|
|
print("cmd: %s\n", cmd);
|
|
print("arg: %s\n", c);
|
|
|
|
|
|
print("unknown command...\n");
|
|
r->ofcall.count = r->ifcall.count;
|
|
respond(r, nil);
|
|
|
|
}
|
|
|
|
void kuro_write(Req* r) {
|
|
Aux* a = (Aux*)r->fid->file->aux;
|
|
switch (a->type) {
|
|
case CTL:
|
|
write_ctl(r);
|
|
break;
|
|
case CPU:
|
|
default:
|
|
respond(r, nil);
|
|
break;
|
|
}
|
|
}
|
|
|
|
char* mk_mtpt(char* parent, char* buf) {
|
|
int pid = getpid();
|
|
sprintf(buf, "%s/%d", parent, pid);
|
|
return buf;
|
|
}
|
|
|
|
void start_9p(Node* n) {
|
|
node = n;
|
|
char* mtpt_base = getenv("KURO_MTPT");
|
|
|
|
if (mtpt_base && n) {
|
|
char mtpt[256] = {0};
|
|
mk_mtpt(mtpt_base, mtpt);
|
|
|
|
if (ensure(mtpt)) {
|
|
print("kuro fsys: %s\n", mtpt);
|
|
} else {
|
|
sysfatal("couldn't create fsys at %s\n", mtpt);
|
|
}
|
|
|
|
Srv srv = { .read = kuro_read, .write = kuro_write };
|
|
Tree* tree = alloctree(nil, nil, DMDIR | 0777, fs_destroy_file);
|
|
srv.tree = tree;
|
|
closefile(createfile(tree->root, "ctl", nil, 0600, create_aux(CTL)));
|
|
|
|
threadpostmountsrv(&srv, nil, mtpt, MREPL | MCREATE);
|
|
threadexits(0);
|
|
}
|
|
}
|