cmogstored 1.8.1 - use default system stack size
[cmogstored.git] / listen_parser.rl
bloba32193e294f0817c5bb5ad8e4860665f41bffc70
1 /*
2  * Copyright (C) 2012-2020 all contributors <cmogstored-public@yhbt.net>
3  * License: GPL-3.0+ <https://www.gnu.org/licenses/gpl-3.0.txt>
4  */
5 #include "cmogstored.h"
6 #include "listen_parser.h"
7 %%{
8         machine listen_parser;
9         include listen_parser_common "listen_parser_common.rl";
11         main := listen '\0'> {
12                 a = mog_listen_parse_internal(mark_beg, mark_len,
13                                               port_beg, port_len, sa_family);
14         };
15 }%%
17 %% write data;
19 static struct mog_addrinfo *listen_parse(char *str)
21         char *p, *pe, *eof = NULL;
22         char *mark_beg = NULL;
23         char *port_beg = NULL;
24         size_t mark_len = 0;
25         size_t port_len = 0;
26         sa_family_t sa_family = AF_INET;
27         struct mog_addrinfo *a = NULL;
28         int cs;
30         %% write init;
32         p = str;
33         pe = str + strlen(str) + 1;
35         %% write exec;
37         if ((cs == listen_parser_error) && a)
38                 mog_addrinfo_free(&a);
40         assert(p <= pe && "buffer overflow after listen parse");
41         return a;
44 struct mog_addrinfo *mog_listen_parse(const char *str)
46         char *tmp = xstrdup(str);
47         struct mog_addrinfo *rv = listen_parse(tmp);
48         free(tmp);
50         return rv;