xref: /minix3/minix/fs/isofs/main.c (revision 3f82ac6a4e188419336747098d0d6616cd2f3d3d)
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