- if (cmdline_parser_configfile(cf, &conf, 0, 0, 0)) {
- fprintf(stderr, "parse error in config file\n");
- exit(EXIT_FAILURE);
- }
- }
- args = conf.inputs_num?
- concat_args(conf.inputs_num, conf.inputs) :
- para_strdup("stat");
- buf = para_malloc(conf.bufsize_arg);
- if (conf.socket_given)
- socket_name = para_strdup(conf.socket_arg);
- else
- socket_name = make_message(
- "/var/paraslash/audiod_socket.%s", hn);
- if (conf.tmpdir_given)
- tmpsocket_name = make_message("%s/audioc.sock.%s.%s",
- conf.tmpdir_arg, hn, randname);
- else
- tmpsocket_name = make_message("%s/.paraslash/audioc_sock.%s.%s",
- home, hn, randname);
-
- ret = -E_SOCKET;
- fd = create_pf_socket(tmpsocket_name, &unix_addr, S_IRUSR | S_IWUSR);
- unlink(tmpsocket_name);
- if (fd < 0)
- goto out;
- ret = -E_INIT_SOCK_ADDR;
- if (init_unix_addr(&unix_addr, socket_name) < 0)
- goto out;
- ret = - E_CONNECT;
- if (connect(fd, (struct sockaddr *)&unix_addr, UNIX_PATH_MAX) < 0)
- goto out;
- ret = -E_CREDENTIALS;
- if (send_cred_buffer(fd, args) < 0)
- goto out;
- for (;;) {
- int max_fileno = -1, check_write = 0;
- ssize_t len;
- fd_set rfd, wfd;
- FD_ZERO(&rfd);
- FD_ZERO(&wfd);
- if (loaded && loaded > 10000)
- fprintf(stderr, "loaded: %d\n", loaded);
- if (loaded < conf.bufsize_arg) {
- FD_SET(fd, &rfd);
- max_fileno = MAX(max_fileno, fd);
- }
- if (loaded > 0) {
- FD_SET(STDOUT_FILENO, &wfd);
- max_fileno = MAX(max_fileno, STDOUT_FILENO);
- check_write = 1;
- }
- ret = -E_OVERRUN;
- if (max_fileno < 0)
- goto out;
- ret = para_select(max_fileno + 1, &rfd, &wfd, NULL);
- if (ret < 0) {
- ret = -E_SELECT;
- goto out;
- }
- if (loaded < conf.bufsize_arg && FD_ISSET(fd, &rfd)) {
- len = recv_bin_buffer(fd, buf + loaded,
- conf.bufsize_arg - loaded);
- if (len <= 0) {
- ret = len < 0? -E_READ : 0;
+ void *map;
+ size_t sz;
+ int cf_argc;
+ char **cf_argv;
+ ret = mmap_full_file(cf, O_RDONLY, &map, &sz, NULL);
+ if (ret != -E_EMPTY) {
+ if (ret < 0)
+ goto out;
+ ret = lls(lls_convert_config(map, sz, NULL, &cf_argv,
+ &errctx));
+ para_munmap(map, sz);
+ if (ret < 0) {
+ PARA_ERROR_LOG("syntax error in %s\n", cf);