X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/8bf4e8784aa2a0438ba09b1a0eb9207d3baf6bd9..521674623:/uip/whatnowsbr.c?ds=inline diff --git a/uip/whatnowsbr.c b/uip/whatnowsbr.c index eb6106a7..3010bff0 100644 --- a/uip/whatnowsbr.c +++ b/uip/whatnowsbr.c @@ -26,8 +26,9 @@ * pwd command and exists to allow the user * to verify the directory. * - * attach files This option attaches the named files to - * the draft. + * attach [-v] files This option attaches the named files to + * the draft. -v displays the mhbuild + * directive that send(1) will use. * * alist [-ln] This option lists the attachments on the * draft. -l gets long listings, -n gets @@ -40,7 +41,6 @@ #include #include -#include #include #include @@ -81,8 +81,8 @@ DEFINE_SWITCH_ARRAY(WHATNOW, whatnowswitches); X("cd [directory]", 0, CDCMDSW) \ X("pwd", 0, PWDCMDSW) \ X("ls", 2, LSCMDSW) \ - X("attach", 0, ATTACHCMDSW) \ - X("detach [-n]", 2, DETACHCMDSW) \ + X("attach [-v]", 0, ATTACHCMDSW) \ + X("detach [-n]", 0, DETACHCMDSW) \ X("alist [-ln] ", 2, ALISTCMDSW) \ #define X(sw, minchars, id) id, @@ -110,11 +110,7 @@ static void writelscmd(char *, int, char *, char **); static void writesomecmd(char *buf, int bufsz, char *cmd, char *trailcmd, char **argp); static FILE* popen_in_dir(const char *dir, const char *cmd, const char *type); static int system_in_dir(const char *dir, const char *cmd); - - -#ifdef HAVE_LSTAT static int copyf (char *, char *); -#endif int @@ -398,18 +394,30 @@ WhatNow (int argc, char **argv) break; - case ATTACHCMDSW: + case ATTACHCMDSW: { /* * Attach files to current draft. */ + int verbose = 0; + char **ap; + if (attach == (char *)0) { advise((char *)0, "can't attach because no header field name was given."); break; } + for (ap = argp+1; *ap; ++ap) { + if (strcmp(*ap, "-v") == 0) { + ++argp; + verbose = 1; + } else if (*ap[0] != '-') { + break; + } + } + if (*(argp+1) == (char *)0) { - advise((char *)0, "attach command requires file argument(s)."); + advise(NULL, "attach command requires file argument(s)."); break; } @@ -417,7 +425,7 @@ WhatNow (int argc, char **argv) * Build a command line that causes the user's shell to list the file name * arguments. This handles and wildcard expansion, tilde expansion, etc. */ - writelscmd(buf, sizeof(buf), "-d", argp); + writelscmd(buf, sizeof(buf), "-d --", argp); /* * Read back the response from the shell, which contains a number of lines @@ -429,13 +437,28 @@ WhatNow (int argc, char **argv) if ((f = popen_in_dir(cwd, buf, "r")) != (FILE *)0) { while (fgets(shell, sizeof (shell), f) != (char *)0) { + char *build_directive; + *(strchr(shell, '\n')) = '\0'; - if (*shell == '/') + if (*shell == '/') { (void)annotate(drft, attach, shell, 1, 0, -2, 1); - else { + if (verbose) { + build_directive = + construct_build_directive (shell, NULL, 1); + } + } else { (void)sprintf(file, "%s/%s", cwd, shell); (void)annotate(drft, attach, file, 1, 0, -2, 1); + if (verbose) { + build_directive = + construct_build_directive (file, NULL, 1); + } + } + + if (verbose) { + printf ("%s", build_directive); + free (build_directive); } } @@ -446,7 +469,7 @@ WhatNow (int argc, char **argv) } break; - + } case DETACHCMDSW: /* * Detach files from current draft. @@ -506,7 +529,7 @@ WhatNow (int argc, char **argv) * We feed all the file names to the shell at once, otherwise you can't * provide a file name with a space in it. */ - writelscmd(buf, sizeof(buf), "-d", argp); + writelscmd(buf, sizeof(buf), "-d --", argp); if ((f = popen_in_dir(cwd, buf, "r")) != (FILE *)0) { while (fgets(shell, sizeof (shell), f) != (char *)0) { *(strchr(shell, '\n')) = '\0'; @@ -580,7 +603,7 @@ writesomecmd(char *buf, int bufsz, char *cmd, char *trailcmd, char **argp) static void writelscmd(char *buf, int bufsz, char *lsoptions, char **argp) { - char *lscmd = concat ("ls ", lsoptions, " --", NULL); + char *lscmd = concat ("ls ", lsoptions, NULL); writesomecmd(buf, bufsz, lscmd, "", argp); free (lscmd); } @@ -647,9 +670,7 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp, char *cp, *prog, **vec; struct stat st; -#ifdef HAVE_LSTAT int slinked = 0; -#endif /* HAVE_LSTAT */ /* Was there a previous edit session? */ if (reedit) { @@ -681,16 +702,12 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp, if (atfile) { unlink (linkpath); -#ifdef HAVE_LSTAT if (link (altpath, linkpath) == NOTOK) { symlink (altpath, linkpath); slinked = 1; } else { slinked = 0; } -#else /* not HAVE_LSTAT */ - link (altpath, linkpath); -#endif /* not HAVE_LSTAT */ } } @@ -741,7 +758,6 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp, } reedit++; -#ifdef HAVE_LSTAT if (altmsg && mp && !is_readonly(mp) @@ -754,16 +770,6 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp, && (unlink (altpath) == NOTOK || link (linkpath, altpath) == NOTOK))) advise (linkpath, "unable to update %s from", altmsg); -#else /* HAVE_LSTAT */ - if (altmsg - && mp - && !is_readonly(mp) - && stat (linkpath, &st) != NOTOK - && st.st_nlink == 1 - && (unlink (altpath) == NOTOK - || link (linkpath, altpath) == NOTOK)) - advise (linkpath, "unable to update %s from", altmsg); -#endif /* HAVE_LSTAT */ } /* normally, we remember which editor we used */ @@ -778,7 +784,6 @@ editfile (char **ed, char **arg, char *file, int use, struct msgs *mp, } -#ifdef HAVE_LSTAT static int copyf (char *ifile, char *ofile) { @@ -804,7 +809,6 @@ copyf (char *ifile, char *ofile) close (out); return i; } -#endif /* HAVE_LSTAT */ /* @@ -1023,7 +1027,7 @@ check_draft (char *msgnam) X("saslmaxssf", SASLminc(-10), SASLMXSSFSW) \ X("saslmech", SASLminc(-5), SASLMECHSW) \ X("user", SASLminc(-4), USERSW) \ - X("attach file", 6, SNDATTACHSW) \ + X("attach fieldname", 6, SNDATTACHSW) \ X("noattach", 0, SNDNOATTACHSW) \ X("attachformat", 7, SNDATTACHFORMAT) \ X("port server-port-name/number", 4, PORTSW) \ @@ -1062,9 +1066,6 @@ sendit (char *sp, char **arg, char *file, int pushed) char *cp, buf[BUFSIZ], **argp, *program; char **arguments, *savearg[MAXARGS], **vec; struct stat st; - char *attach = NMH_ATTACH_HEADER;/* attachment header field name */ - int attachformat = 1; /* mhbuild format specifier for - attachments */ #ifndef lint int distsw = 0; @@ -1122,13 +1123,19 @@ sendit (char *sp, char **arg, char *file, int pushed) vec[vecp++] = getcpy (m_maildir ("")); if ((cp = context_find ("fileproc"))) { - vec[vecp++] = "-fileproc"; - vec[vecp++] = cp; + vec[vecp++] = "-fileproc"; + vec[vecp++] = cp; } if ((cp = context_find ("mhlproc"))) { - vec[vecp++] = "-mhlproc"; - vec[vecp++] = cp; + vec[vecp++] = "-mhlproc"; + vec[vecp++] = cp; + } + + if ((cp = context_find ("credentials"))) { + /* post doesn't read context so need to pass credentials. */ + vec[vecp++] = "-credentials"; + vec[vecp++] = cp; } while ((cp = *argp++)) { @@ -1236,28 +1243,14 @@ sendit (char *sp, char **arg, char *file, int pushed) continue; case SNDATTACHSW: - if (!(attach = *argp++) || *attach == '-') { - advise (NULL, "missing argument to %s", argp[-2]); - return; - } + advise(NULL, "The -attach switch is deprecated"); continue; case SNDNOATTACHSW: - attach = NULL; + advise(NULL, "The -noattach switch is deprecated"); continue; case SNDATTACHFORMAT: - if (! *argp || **argp == '-') - adios (NULL, "missing argument to %s", argp[-1]); - else { - attachformat = atoi (*argp); - if (attachformat < 0 || - attachformat > ATTACHFORMATS - 1) { - advise (NULL, "unsupported attachformat %d", - attachformat); - continue; - } - } - ++argp; + advise(NULL, "The -attachformat switch is deprecated"); continue; } } @@ -1312,7 +1305,7 @@ sendit (char *sp, char **arg, char *file, int pushed) closefds (3); - if (sendsbr (vec, vecp, program, file, &st, 1, attach, attachformat) == OK) + if (sendsbr (vec, vecp, program, file, &st, 1) == OK) done (0); }