X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/71458b3b2492943349f7693a46792756d5013c69..ef1ba39e8dae81091b6c3e73e72825ef6edea3c6:/uip/install-mh.c diff --git a/uip/install-mh.c b/uip/install-mh.c index 0fc97c45..70865337 100644 --- a/uip/install-mh.c +++ b/uip/install-mh.c @@ -24,17 +24,13 @@ DEFINE_SWITCH_ENUM(INSTALLMH); DEFINE_SWITCH_ARRAY(INSTALLMH, switches); #undef X -/* - * static prototypes - */ -static char *geta(void); - int main (int argc, char **argv) { int autof = 0; - char *cp, *pathname, buf[BUFSIZ]; + char *cp, buf[BUFSIZ]; + const char *pathname; char *dp, **arguments, **argp; struct node *np; struct passwd *pw; @@ -42,8 +38,8 @@ main (int argc, char **argv) FILE *in, *out; int check; - setlocale(LC_ALL, ""); - 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; @@ -84,8 +80,8 @@ main (int argc, char **argv) * the home directory field in the password file if that's not found. */ - if ((mypath = getenv("HOME")) == (char *)0) { - if ((pw = getpwuid(getuid())) == (struct passwd *)0 || *pw->pw_dir == '\0') + if ((mypath = getenv("HOME")) == NULL) { + if ((pw = getpwuid(getuid())) == NULL || *pw->pw_dir == '\0') adios(NULL, "cannot determine your home directory"); else mypath = pw->pw_dir; @@ -122,7 +118,7 @@ main (int argc, char **argv) done(1); } - if (!autof && gans ("Do you want help? ", anoyes)) { + if (!autof && read_switch ("Do you want help? ", anoyes)) { (void)printf( "\n" "Prior to using nmh, it is necessary to have a file in your login\n" @@ -138,7 +134,7 @@ main (int argc, char **argv) if (S_ISDIR(st.st_mode)) { cp = concat ("You already have the standard nmh directory \"", cp, "\".\nDo you want to use it for nmh? ", NULL); - if (gans (cp, anoyes)) + if (read_switch (cp, anoyes)) pathname = "Mail"; else goto query; @@ -151,25 +147,30 @@ main (int argc, char **argv) else cp = concat ("Do you want the standard nmh path \"", mypath, "/", "Mail\"? ", NULL); - if (autof || gans (cp, anoyes)) + if (autof || read_switch (cp, anoyes)) pathname = "Mail"; else { query: - if (gans ("Do you want a path below your login directory? ", + if (read_switch ("Do you want a path below your login directory? ", anoyes)) { printf ("What is the path? %s/", mypath); - pathname = geta (); + pathname = read_line (); + if (pathname == NULL) done (1); } else { printf ("What is the whole path? /"); - pathname = concat ("/", geta (), NULL); + pathname = read_line (); + if (pathname == NULL) done (1); + pathname = concat ("/", pathname, NULL); } } } - 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)) + if (autof || read_switch (cp, anoyes)) if (makedir (pathname) == 0) adios (NULL, "unable to create %s", pathname); } else { @@ -179,10 +180,10 @@ query: /* * Add some initial elements to the profile/context list */ - m_defs = (struct node *) mh_xmalloc (sizeof *np); - np = m_defs; - np->n_name = getcpy ("Path"); - np->n_field = getcpy (pathname); + NEW(np); + m_defs = np; + np->n_name = mh_xstrdup("Path"); + np->n_field = mh_xstrdup(pathname); np->n_context = 0; np->n_next = NULL; @@ -206,26 +207,26 @@ 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); - done (0); - return 1; -} + puts ("\nPlease see the nmh(7) man page for an introduction to nmh.\n"); + print_intro (stdout, FALSE); -static char * -geta (void) -{ - char *cp; - static char line[BUFSIZ]; - - fflush(stdout); - if (fgets(line, sizeof(line), stdin) == NULL) - done (1); - if ((cp = strchr(line, '\n'))) - *cp = 0; - return line; + /* Initialize the saved nmh version. The Path profile entry was added + above, that's all this needs. */ + (void) nmh_version_changed (0); + + done (0); + return 1; }