1c2f99d7cSDavid van Moolenbroek /*
2c2f99d7cSDavid van Moolenbroek * This file contains the main function for the server. It waits for a request
3c2f99d7cSDavid van Moolenbroek * and then send a response.
4c2f99d7cSDavid van Moolenbroek */
5c2f99d7cSDavid van Moolenbroek
6c2f99d7cSDavid van Moolenbroek #include "inc.h"
7c2f99d7cSDavid van Moolenbroek #include <minix/optset.h>
8c2f99d7cSDavid van Moolenbroek
9c2f99d7cSDavid van Moolenbroek static struct optset optset_table[] = {
10c2f99d7cSDavid van Moolenbroek { "norock", OPT_BOOL, &opt.norock, TRUE },
11c2f99d7cSDavid van Moolenbroek { NULL, 0, NULL, 0 }
12c2f99d7cSDavid van Moolenbroek };
13c2f99d7cSDavid van Moolenbroek
sef_cb_init_fresh(int __unused type,sef_init_info_t * __unused info)14c2f99d7cSDavid van Moolenbroek static int sef_cb_init_fresh(int __unused type,
15c2f99d7cSDavid van Moolenbroek sef_init_info_t * __unused info)
16c2f99d7cSDavid van Moolenbroek {
17c2f99d7cSDavid van Moolenbroek /* Initialize the iso9660fs server. */
18c2f99d7cSDavid van Moolenbroek int i;
19c2f99d7cSDavid van Moolenbroek
20c2f99d7cSDavid van Moolenbroek /* Defaults */
21c2f99d7cSDavid van Moolenbroek opt.norock = FALSE;
22c2f99d7cSDavid van Moolenbroek
23c2f99d7cSDavid van Moolenbroek /* If we have been given an options string, parse options here. */
24c2f99d7cSDavid van Moolenbroek for (i = 1; i < env_argc - 1; i++)
25c2f99d7cSDavid van Moolenbroek if (!strcmp(env_argv[i], "-o"))
26c2f99d7cSDavid van Moolenbroek optset_parse(optset_table, env_argv[++i]);
27c2f99d7cSDavid van Moolenbroek
28c2f99d7cSDavid van Moolenbroek setenv("TZ","",1); /* Used to calculate the time */
29c2f99d7cSDavid van Moolenbroek
30c2f99d7cSDavid van Moolenbroek lmfs_buf_pool(NR_BUFS);
31c2f99d7cSDavid van Moolenbroek
32c2f99d7cSDavid van Moolenbroek return OK;
33c2f99d7cSDavid van Moolenbroek }
34c2f99d7cSDavid van Moolenbroek
sef_cb_signal_handler(int signo)35c2f99d7cSDavid van Moolenbroek static void sef_cb_signal_handler(int signo)
36c2f99d7cSDavid van Moolenbroek {
37c2f99d7cSDavid van Moolenbroek /* Only check for termination signal, ignore anything else. */
38c2f99d7cSDavid van Moolenbroek if (signo != SIGTERM) return;
39c2f99d7cSDavid van Moolenbroek
40c2f99d7cSDavid van Moolenbroek fsdriver_terminate();
41c2f99d7cSDavid van Moolenbroek }
42c2f99d7cSDavid van Moolenbroek
sef_local_startup(void)43c2f99d7cSDavid van Moolenbroek static void sef_local_startup(void)
44c2f99d7cSDavid van Moolenbroek {
45c2f99d7cSDavid van Moolenbroek /* Register init callbacks. */
46c2f99d7cSDavid van Moolenbroek sef_setcb_init_fresh(sef_cb_init_fresh);
47*3f82ac6aSCristiano Giuffrida sef_setcb_init_restart(SEF_CB_INIT_RESTART_STATEFUL);
48c2f99d7cSDavid van Moolenbroek
49c2f99d7cSDavid van Moolenbroek /* Register signal callbacks. */
50c2f99d7cSDavid van Moolenbroek sef_setcb_signal_handler(sef_cb_signal_handler);
51c2f99d7cSDavid van Moolenbroek
52c2f99d7cSDavid van Moolenbroek /* Let SEF perform startup. */
53c2f99d7cSDavid van Moolenbroek sef_startup();
54c2f99d7cSDavid van Moolenbroek }
55c2f99d7cSDavid van Moolenbroek
main(int argc,char * argv[])56c2f99d7cSDavid van Moolenbroek int main(int argc, char *argv[])
57c2f99d7cSDavid van Moolenbroek {
58c2f99d7cSDavid van Moolenbroek /* SEF local startup. */
59c2f99d7cSDavid van Moolenbroek env_setargs(argc, argv);
60c2f99d7cSDavid van Moolenbroek sef_local_startup();
61c2f99d7cSDavid van Moolenbroek
62c2f99d7cSDavid van Moolenbroek fsdriver_task(&isofs_table);
63c2f99d7cSDavid van Moolenbroek
64c2f99d7cSDavid van Moolenbroek return 0;
65c2f99d7cSDavid van Moolenbroek }
66