X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/5afa7072e3fe7fc42287e2149e1c23b363700795..64f5cda4610fa3de39a9d69aeda2d8a26f147f2e:/uip/install-mh.c?ds=sidebyside diff --git a/uip/install-mh.c b/uip/install-mh.c index 34aed950..ce8e2940 100644 --- a/uip/install-mh.c +++ b/uip/install-mh.c @@ -1,27 +1,28 @@ /* * install-mh.c -- initialize the nmh environment of a new user * - * $Id$ - * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for * complete copyright information. */ #include /* mh internals */ +#include #include /* structure for getpwuid() results */ -static struct swit switches[] = { -#define AUTOSW 0 - { "auto", 0 }, -#define VERSIONSW 1 - { "version", 0 }, -#define HELPSW 2 - { "help", 0 }, -#define CHECKSW 3 - { "check", 1 }, - { NULL, 0 } -}; +#define INSTALLMH_SWITCHES \ + X("auto", 0, AUTOSW) \ + X("version", 0, VERSIONSW) \ + X("help", 0, HELPSW) \ + X("check", 1, CHECKSW) \ + +#define X(sw, minchars, id) id, +DEFINE_SWITCH_ENUM(INSTALLMH); +#undef X + +#define X(sw, minchars, id) { sw, minchars, id }, +DEFINE_SWITCH_ARRAY(INSTALLMH, switches); +#undef X /* * static prototypes @@ -41,10 +42,8 @@ main (int argc, char **argv) FILE *in, *out; int check; -#ifdef LOCALE - setlocale(LC_ALL, ""); -#endif - invo_name = r1bindex (argv[0], '/'); + if (nmh_init(argv[0], 0 /* use context_foil() */ )) { return 1; } + arguments = getarguments (invo_name, argc, argv, 0); argp = arguments; @@ -62,10 +61,10 @@ main (int argc, char **argv) case HELPSW: snprintf (buf, sizeof(buf), "%s [switches]", invo_name); print_help (buf, switches, 0); - done (1); + done (0); case VERSIONSW: print_version(invo_name); - done (1); + done (0); case AUTOSW: autof++; @@ -167,7 +166,9 @@ query: } } - chdir (mypath); + if (chdir (mypath) < 0) { + advise (mypath, "chdir"); + } if (chdir (pathname) == NOTOK) { cp = concat ("\"", pathname, "\" doesn't exist; Create it? ", NULL); if (autof || gans (cp, anoyes)) @@ -180,8 +181,7 @@ query: /* * Add some initial elements to the profile/context list */ - if (!(m_defs = (struct node *) malloc (sizeof *np))) - adios (NULL, "unable to allocate profile storage"); + m_defs = (struct node *) mh_xmalloc (sizeof *np); np = m_defs; np->n_name = getcpy ("Path"); np->n_field = getcpy (pathname); @@ -208,12 +208,20 @@ query: */ if ((out = fopen (defpath, "w")) == NULL) adios (defpath, "unable to write"); + /* + * The main purpose of this first line is to fool file(1). + * Without it, if the first line of the profile is Path:, + * file 5.19 reports its type as message/news. With it, + * it reports the type as text/plain. + */ + fprintf (out, "MH-Profile-Version: 1.0\n"); for (np = m_defs; np; np = np->n_next) { if (!np->n_context) fprintf (out, "%s: %s\n", np->n_name, np->n_field); } fclose (out); - return done (0); + done (0); + return 1; }