From 8b71da218514b30fcc8eaa2b9c173540dcd30e32 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Fri, 12 Oct 2018 14:17:40 -0400 Subject: Add -d and -s flags to server --- server.c | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/server.c b/server.c index f6c0580..52082e1 100644 --- a/server.c +++ b/server.c @@ -37,15 +37,16 @@ static struct Tile *tiles; -static void tilesMap(void) { - int fd = open("torus.dat", O_CREAT | O_RDWR, 0644); - if (fd < 0) err(EX_CANTCREAT, "torus.dat"); +static void tilesMap(const char *path) { + int fd = open(path, O_CREAT | O_RDWR, 0644); + if (fd < 0) err(EX_CANTCREAT, "%s", path); int error = ftruncate(fd, TilesSize); - if (error) err(EX_IOERR, "ftruncate"); + if (error) err(EX_IOERR, "%s", path); tiles = mmap(NULL, TilesSize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (tiles == MAP_FAILED) err(EX_OSERR, "mmap"); + close(fd); error = madvise(tiles, TilesSize, MADV_RANDOM); if (error) err(EX_OSERR, "madvise"); @@ -353,23 +354,32 @@ static bool clientMap(const struct Client *client) { return true; } -int main() { +int main(int argc, char *argv[]) { int error; - tilesMap(); + const char *dataPath = "torus.dat"; + const char *sockPath = "torus.sock"; + int opt; + while (0 < (opt = getopt(argc, argv, "d:s:"))) { + switch (opt) { + break; case 'd': dataPath = optarg; + break; case 's': sockPath = optarg; + break; default: return EX_USAGE; + } + } + + tilesMap(dataPath); int server = socket(PF_LOCAL, SOCK_STREAM, 0); if (server < 0) err(EX_OSERR, "socket"); - error = unlink("torus.sock"); - if (error && errno != ENOENT) err(EX_IOERR, "torus.sock"); + error = unlink(sockPath); + if (error && errno != ENOENT) err(EX_IOERR, "%s", sockPath); - struct sockaddr_un addr = { - .sun_family = AF_LOCAL, - .sun_path = "torus.sock", - }; - error = bind(server, (struct sockaddr *)&addr, sizeof(addr)); - if (error) err(EX_CANTCREAT, "torus.sock"); + struct sockaddr_un addr = { .sun_family = AF_LOCAL }; + strlcpy(addr.sun_path, sockPath, sizeof(addr.sun_path)); + error = bind(server, (struct sockaddr *)&addr, SUN_LEN(&addr)); + if (error) err(EX_CANTCREAT, "%s", sockPath); error = listen(server, 0); if (error) err(EX_OSERR, "listen"); -- cgit 1.4.1 =2.2a&id=4cda410b574c93c2ea7ad467e2b27809d0a0ba62&follow=1'>term.c (unfollow)
Commit message (Expand)Author
2019-02-25Add M-l to list the logJune McEnroe
2019-02-25Output raw to standard error if it is not a terminalJune McEnroe
2019-02-25Update tag colorsJune McEnroe
2019-02-25Add color to tagsJune McEnroe
2019-02-25Remove tag X macros againJune McEnroe
2019-02-25Add M-a to switch to hot or unread windowJune McEnroe
2019-02-25Refactor uiReadJune McEnroe
2019-02-24Scroll by full pages with PageUp/PageDownJune McEnroe
2019-02-23Clarify /window documentationJune McEnroe
2019-02-23Use first word of params in input commandsJune McEnroe
2019-02-23Add C-n and C-p key bindings to switch windowsJune McEnroe
2019-02-23Change example command to join #ascii.town on freenodeJune McEnroe
2019-02-23Call def_prog_mode after termNoFlowJune McEnroe
2019-02-22Move IRC formatting reset to C-sJune McEnroe
2019-02-22Disable terminal flow controlJune McEnroe
2019-02-22Bind up and down arrows to scrollJune McEnroe
2019-02-22Remove topic TODOJune McEnroe
2019-02-22Add /znc commandJune McEnroe
2019-02-22Update status line after scrolling and term eventsJune McEnroe
2019-02-22Reorganize input.cJune McEnroe
2019-02-22Fix name of <raw> window in man pageJune McEnroe
2019-02-22Rename global tags with angle bracketsJune McEnroe
2019-02-22Show status window while connectingJune McEnroe
2019-02-22Reorganize UI code for the umpteenth timeJune McEnroe
2019-02-21Replace "view" with "window"June McEnroe
2019-02-21Remove ROT13June McEnroe
2019-02-21Clean up man pageJune McEnroe
2019-01-26Draw UI before connectingJune McEnroe
2019-01-25Avoid unused variable warnings with getyxJune McEnroe
2019-01-25Add GNU/Linux build instructionsJune McEnroe