all repos — xrxs @ 9d81d9d6ab7969be1c152dba9b83537d5d2ebbb2

experimental networked application/game server with 9p

first commit -- hello from 9p
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAmDGPvIACgkQO3+8IhRO
Y5j/og//TNtddeHYSBYq/jAHI4WqrgGKkcvPfrKJ7Q9aAD88FH+hmCqPbAzcLcv3
3h+E+l39omlMOFZOnGNsr8HU3AOCosnFMrWsiZSoC7JRi1pxZaDKSjVkt5/jWlTY
pVTL4oeizNVh8fQHZHFJbvXgwhDaxhZv0IPm3ipQlM/AmEa6jOYrpvjW0fllLPtc
3KP+atV7i6gpq4eBz3Uja8Vhdc+OSSHXlXYFXRQvDY449tVeEdBZBja3fsKVR/DF
UDOd0sSdj71DsTrC3SjjwoC8TGdqqxryPeyJloR5ZN6z9A/nff7G1OH0+tZFxxsO
lxVnZ3Jxros/LoSXLbE71b5diMVWI9TA5AGC3lc4wzFN5GVlkTFeY+FqrCyEIElG
c3zcCHUblax+YuvrPVnybZTxFM2XGJx84SzhrfsEVAyPxXyTzFru+V0jmjBiuAj0
3k8536TRTZ1taUm4FNvzFX9jfpCddc4+gg7JMKBQxjzX0tXbOZKs7JykAsvavWd6
cHwoezr3NSKyql3rvlNKWQXFDwpuJV3TGnfwZ5+TFPh+4M6rX6p8WWT+TgSSp8BL
AJZxfmMiVdjywqxpSt7od/FU463waFr3r7tN6+zuwRLPsONFI0JDrcCcWbArg89M
BmRBUS2C1D5WrDqGZTJq4nNret6g2QJoAkbTcH8F9jVLruSrJFk=
=PnuZ
-----END PGP SIGNATURE-----
commit

9d81d9d6ab7969be1c152dba9b83537d5d2ebbb2

5 files changed, 97 insertions(+), 0 deletions(-)

jump to
A .clang-format

@@ -0,0 +1,23 @@

+TabWidth: 2 +IndentWidth: 2 +ContinuationIndentWidth: 2 +UseTab: Never +AllowShortBlocksOnASingleLine: Always +AllowShortCaseLabelsOnASingleLine: false +AllowShortEnumsOnASingleLine: true +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +PenaltyReturnTypeOnItsOwnLine: 255 +IndentCaseLabels: true +SpaceBeforeParens: ControlStatements +AlignAfterOpenBracket: AlwaysBreak +BinPackArguments: false +BinPackArguments: false +PointerAlignment: Left +BreakBeforeBraces: Attach +SortIncludes: false +AllowAllArgumentsOnNextLine: false +AllowAllParametersOfDeclarationOnNextLine: false +AlignEscapedNewlines: Left +
A .gitignore

@@ -0,0 +1,2 @@

+*.o +xrxs
A build.sh

@@ -0,0 +1,6 @@

+#!/bin/sh + +clang-format -i ./*.c + +mk o.xrxs +mv o.xrxs xrxs
A mkfile

@@ -0,0 +1,10 @@

+<$PLAN9/src/mkhdr + +SHORTLIB=9p + +TARG=xrxs + +OFILES=\ + xrxs.$O\ + +<$PLAN9/src/mkone
A xrxs.c

@@ -0,0 +1,56 @@

+#include <u.h> +#include <libc.h> +#include <fcall.h> +#include <thread.h> +#include <9p.h> +#include <stdio.h> + +/* clang-format off */ + +char clca(char c) { return c >= 'A' && c <= 'Z' ? c + ('a' - 'A') : c; } /* char to lowercase */ +char cuca(char c) { return c >= 'a' && c <= 'z' ? c - ('a' - 'A') : c; } /* char to uppercase */ +int slen(char *s) { int i = 0; while(s[i] && s[++i]) { ; } return i; } /* string length */ +char *st__(char *s, char (*fn)(char)) { int i = 0; char c; while((c = s[i])) s[i++] = fn(c); return s; } +char *stuc(char *s) { return st__(s, cuca); } /* string to uppercase */ +char *stlc(char *s) { return st__(s, clca); } /* string to lowercase */ +char *scpy(char *src, char *dst, int len) { int i = 0; while((dst[i] = src[i]) && i < len - 2) i++; dst[i + 1] = '\0'; return dst; } /* string copy */ +int scmp(char *a, char *b) { int i = 0; while(a[i] == b[i]) if(!a[i++]) return 1; return 0; } /* string compare */ +char *scsw(char *s, char a, char b) { int i = 0; char c; while((c = s[i])) s[i++] = c == a ? b : c; return s; } /* string char swap */ +char *scat(char *dst, const char *src) { char *ptr = dst + slen(dst); while(*src) *ptr++ = *src++; *ptr = '\0'; return dst; } /* string cat */ +int ssin(char *s, char *ss) { int a = 0, b = 0; while(s[a]) { if(s[a] == ss[b]) { if(!ss[b + 1]) return a - b; b++; } else b = 0; a++; } return -1; } /* string substring index */ +char *ccat(char *dst, char c) { int len = slen(dst); dst[len] = c; dst[len + 1] = '\0'; return dst; } + +/* clang-format on */ + +void fsread(Req* r) { + static int i = 0; + char numReads[16]; + i = i + 1; + sprintf(numReads, "%d reads\n", i); + readstr(r, "Hello from 9P!\n"); + readstr(r, numReads); + respond(r, nil); +} + +Srv fs = { + .read = fsread, +}; + +void threadmain(int argc, char** argv) { + Tree* tree; + char* mtpt = argv[1]; + + if (argc < 1) + sysfatal("supply a mountpoint"); + + tree = alloctree(nil, nil, DMDIR | 0555, nil); + fs.tree = tree; + fs.foreground = 1; + createfile(tree->root, "hello", nil, 0555, nil); + + if (mtpt && access(mtpt, AEXIST) < 0 && access(mtpt, AEXIST) < 0) + sysfatal("mountpoint %s does not exist", mtpt); + + threadpostmountsrv(&fs, nil, mtpt, MREPL | MCREATE); + threadexits(0); +}