121c1c48aSSascha Wildner /*
221c1c48aSSascha Wildner * Copyright (c)2004 The DragonFly Project. All rights reserved.
321c1c48aSSascha Wildner *
421c1c48aSSascha Wildner * Redistribution and use in source and binary forms, with or without
521c1c48aSSascha Wildner * modification, are permitted provided that the following conditions
621c1c48aSSascha Wildner * are met:
721c1c48aSSascha Wildner *
821c1c48aSSascha Wildner * Redistributions of source code must retain the above copyright
921c1c48aSSascha Wildner * notice, this list of conditions and the following disclaimer.
1021c1c48aSSascha Wildner *
1121c1c48aSSascha Wildner * Redistributions in binary form must reproduce the above copyright
1221c1c48aSSascha Wildner * notice, this list of conditions and the following disclaimer in
1321c1c48aSSascha Wildner * the documentation and/or other materials provided with the
1421c1c48aSSascha Wildner * distribution.
1521c1c48aSSascha Wildner *
1621c1c48aSSascha Wildner * Neither the name of the DragonFly Project nor the names of its
1721c1c48aSSascha Wildner * contributors may be used to endorse or promote products derived
1821c1c48aSSascha Wildner * from this software without specific prior written permission.
1921c1c48aSSascha Wildner *
2021c1c48aSSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2121c1c48aSSascha Wildner * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2221c1c48aSSascha Wildner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
2321c1c48aSSascha Wildner * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
2421c1c48aSSascha Wildner * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
2521c1c48aSSascha Wildner * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
2621c1c48aSSascha Wildner * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
2721c1c48aSSascha Wildner * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2821c1c48aSSascha Wildner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
2921c1c48aSSascha Wildner * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3021c1c48aSSascha Wildner * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
3121c1c48aSSascha Wildner * OF THE POSSIBILITY OF SUCH DAMAGE.
3221c1c48aSSascha Wildner */
3321c1c48aSSascha Wildner
3421c1c48aSSascha Wildner /*
3521c1c48aSSascha Wildner * main.c
3621c1c48aSSascha Wildner * Main program for installer backend.
3721c1c48aSSascha Wildner * $Id: main.c,v 1.18 2005/03/11 19:57:27 cpressey Exp $
3821c1c48aSSascha Wildner */
3921c1c48aSSascha Wildner
4021c1c48aSSascha Wildner #include <err.h>
4121c1c48aSSascha Wildner #include <stdio.h>
4221c1c48aSSascha Wildner #include <stdlib.h>
4321c1c48aSSascha Wildner #include <string.h>
4421c1c48aSSascha Wildner #include <unistd.h>
4521c1c48aSSascha Wildner
4621c1c48aSSascha Wildner #ifdef ENABLE_NLS
4721c1c48aSSascha Wildner #include <libintl.h>
4821c1c48aSSascha Wildner #define _(String) gettext (String)
4921c1c48aSSascha Wildner #else
5021c1c48aSSascha Wildner #define _(String) (String)
5121c1c48aSSascha Wildner #endif
5221c1c48aSSascha Wildner
5321c1c48aSSascha Wildner #include "libaura/mem.h"
5421c1c48aSSascha Wildner
5521c1c48aSSascha Wildner #include "libdfui/dfui.h"
5621c1c48aSSascha Wildner #include "libdfui/dump.h"
5721c1c48aSSascha Wildner #include "libdfui/system.h"
5821c1c48aSSascha Wildner
5921c1c48aSSascha Wildner #include "flow.h"
6021c1c48aSSascha Wildner #include "pathnames.h"
6121c1c48aSSascha Wildner
6221c1c48aSSascha Wildner static void usage(char **);
6321c1c48aSSascha Wildner
6421c1c48aSSascha Wildner int
main(int argc,char ** argv)6521c1c48aSSascha Wildner main(int argc, char **argv)
6621c1c48aSSascha Wildner {
6721c1c48aSSascha Wildner char os_root[256];
6821c1c48aSSascha Wildner char *rendezvous = NULL;
6921c1c48aSSascha Wildner int do_reboot = 0;
7021c1c48aSSascha Wildner int opt;
7121c1c48aSSascha Wildner int transport = 0;
72*c4d6eff4SAntonio Huete Jimenez int flags = 0;
7321c1c48aSSascha Wildner
7421c1c48aSSascha Wildner #ifdef ENABLE_NLS
7521c1c48aSSascha Wildner setlocale (LC_ALL, "");
7621c1c48aSSascha Wildner bindtextdomain (PACKAGE, LOCALEDIR);
7721c1c48aSSascha Wildner textdomain (PACKAGE);
7821c1c48aSSascha Wildner #endif
7921c1c48aSSascha Wildner
8021c1c48aSSascha Wildner /*
8121c1c48aSSascha Wildner * XXX TODO: set transport and rendezvous from
8221c1c48aSSascha Wildner * corresponding environment variables, if set.
8321c1c48aSSascha Wildner */
8421c1c48aSSascha Wildner
8521c1c48aSSascha Wildner strlcpy(os_root, DEFAULT_OS_ROOT, sizeof(os_root));
8621c1c48aSSascha Wildner
8721c1c48aSSascha Wildner #ifdef DEBUG
8821c1c48aSSascha Wildner dfui_debug_file = fopen("/tmp/dfuibe_installer_debug.log", "w");
8921c1c48aSSascha Wildner #endif
9021c1c48aSSascha Wildner
9121c1c48aSSascha Wildner /*
9221c1c48aSSascha Wildner * Get command-line arguments.
9321c1c48aSSascha Wildner */
9421c1c48aSSascha Wildner while ((opt = getopt(argc, argv, "o:r:t:")) != -1) {
9521c1c48aSSascha Wildner switch (opt) {
9621c1c48aSSascha Wildner case 'o':
9721c1c48aSSascha Wildner strlcpy(os_root, optarg, sizeof(os_root));
9821c1c48aSSascha Wildner break;
9921c1c48aSSascha Wildner case 'r':
10021c1c48aSSascha Wildner rendezvous = aura_strdup(optarg);
10121c1c48aSSascha Wildner break;
10221c1c48aSSascha Wildner case 't':
10321c1c48aSSascha Wildner transport = user_get_transport(optarg);
10421c1c48aSSascha Wildner break;
10521c1c48aSSascha Wildner case '?':
10621c1c48aSSascha Wildner default:
10721c1c48aSSascha Wildner usage(argv);
10821c1c48aSSascha Wildner }
10921c1c48aSSascha Wildner }
11021c1c48aSSascha Wildner argc -= optind;
11121c1c48aSSascha Wildner argv += optind;
11221c1c48aSSascha Wildner
11321c1c48aSSascha Wildner if (transport == 0)
11421c1c48aSSascha Wildner transport = user_get_transport("tcp");
11521c1c48aSSascha Wildner
11621c1c48aSSascha Wildner if (rendezvous == NULL) {
11721c1c48aSSascha Wildner if (transport == DFUI_TRANSPORT_TCP)
11821c1c48aSSascha Wildner rendezvous = aura_strdup("9999");
11921c1c48aSSascha Wildner else
12021c1c48aSSascha Wildner rendezvous = aura_strdup("test");
12121c1c48aSSascha Wildner }
12221c1c48aSSascha Wildner
12321c1c48aSSascha Wildner do_reboot = flow(transport, rendezvous, os_root,
124*c4d6eff4SAntonio Huete Jimenez flags);
12521c1c48aSSascha Wildner free(rendezvous);
12621c1c48aSSascha Wildner
12721c1c48aSSascha Wildner if (do_reboot)
12821c1c48aSSascha Wildner exit(5);
12921c1c48aSSascha Wildner else
13021c1c48aSSascha Wildner exit(0);
13121c1c48aSSascha Wildner }
13221c1c48aSSascha Wildner
13321c1c48aSSascha Wildner static void
usage(char ** argv)13421c1c48aSSascha Wildner usage(char **argv)
13521c1c48aSSascha Wildner {
13621c1c48aSSascha Wildner fprintf(stderr, _("Usage: %s [-o rootdir] [-r rendezvous] "
1378f8e1dafSSascha Wildner "[-t npipe|tcp]\n"), argv[0]);
13821c1c48aSSascha Wildner exit(1);
13921c1c48aSSascha Wildner }
140