hi

log tags | changeset raw browse | file diff annotate file log raw

view main.c @ 13:175342326bd6

id file
author yiyus@1936
date Sun Jul 26 03:49:52 2009 +0200 (2009-07-26 ago)
parents bd97d94a2b2d
children

1 /* © 2009 JGL (yiyus) <yiyu.jgl@gmail.com>
2 * See COPYING for details.
3 */
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <string.h>
7 #include <err.h>
8 #include <errno.h>
9 #include <sys/stat.h>
11 #include <ixp.h>
13 #include "hi.h"
15 extern Ixp9Srv p9srv;
16 char *message;
17 char hellomsg[12] = "Hello world!";
19 #define GETARG() (cp-*argv == strlen(*argv)-1) ? *++argv : cp+1
21 int
22 main(int argc, char **argv)
23 {
24 IxpServer srv = {0};
25 char *address, *cp, buf[512];
26 int fd, i;
28 address = getenv("IXP_ADDRESS");
29 while(*++argv) {
30 if(strcmp(*argv, "--") == 0 || !(**argv == '-')) {
31 break;
32 }
33 for(cp=*argv+1; cp<*argv+strlen(*argv); ++cp) {
34 if(*cp == 'a') {
35 address = GETARG();
36 break;
37 } else if(*cp == 'm') {
38 message = GETARG();
39 break;
40 } else {
41 errx(1, "usage: hi [ -a ADDRESS ] [-m MESSAGE]");
42 }
43 }
44 }
45 if(!address) {
46 char *nsdir = ixp_namespace();
47 if(mkdir(nsdir, 0700) == -1 && errno != EEXIST) {
48 err(1, "mkdir: %s", nsdir);
49 }
50 snprintf(buf, sizeof(buf), "unix!%s/hi", nsdir);
51 address = buf;
52 }
54 fd = ixp_announce(address);
55 if(fd < 0) {
56 err(1, "ixp_announce");
57 }
59 ixp_listen(&srv, fd, &p9srv, serve_9pcon, NULL);
61 if(!message)
62 message = hellomsg;
63 i = ixp_serverloop(&srv);
65 return i;
66 }