#include <locale.h>
#include <libintl.h>
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <pkgtrans.h>
#include <pkglib.h>
#include <pkglocs.h>
#include <libadm.h>
#include <libinst.h>
#include <messages.h>
static int options;
static void usage(void);
static void trap(int signo);
int
main(int argc, char *argv[])
{
int c;
void (*func)();
extern int optind;
int ret;
(void) setlocale(LC_ALL, "");
#if !defined(TEXT_DOMAIN)
#define TEXT_DOMAIN "SYS_TEST"
#endif
(void) textdomain(TEXT_DOMAIN);
(void) set_prog_name(argv[0]);
while ((c = getopt(argc, argv, "snio?")) != EOF) {
switch (c) {
case 'n':
options |= PT_RENAME;
break;
case 'i':
options |= PT_INFO_ONLY;
break;
case 'o':
options |= PT_OVERWRITE;
break;
case 's':
options |= PT_ODTSTREAM;
break;
default:
usage();
return (1);
}
}
func = signal(SIGINT, trap);
if (func != SIG_DFL)
(void) signal(SIGINT, func);
(void) signal(SIGHUP, trap);
(void) signal(SIGQUIT, trap);
(void) signal(SIGTERM, trap);
(void) signal(SIGPIPE, trap);
(void) signal(SIGPWR, trap);
if ((argc-optind) < 2) {
usage();
return (1);
}
ret = pkgtrans(flex_device(argv[optind], 1),
flex_device(argv[optind+1], 1), &argv[optind+2], options);
quit(ret);
}
void
quit(int retcode)
{
(void) signal(SIGINT, SIG_IGN);
(void) signal(SIGHUP, SIG_IGN);
(void) ds_close(1);
(void) pkghead(NULL);
exit(retcode);
}
static void
trap(int signo)
{
(void) signal(SIGINT, SIG_IGN);
(void) signal(SIGHUP, SIG_IGN);
if (signo == SIGINT) {
progerr(gettext("aborted at user request.\n"));
quit(3);
}
progerr(gettext("aborted by signal %d\n"), signo);
quit(1);
}
static void
usage(void)
{
(void) fprintf(stderr,
gettext("usage: %s [-ions] srcdev dstdev [pkg [pkg...]]\n"),
get_prog_name());
}