]> diplodocus.org Git - nmh/blob - docs/historical/mh-6.8.5/uip/mhpath.c
Always check that mktemp()/mktemp2() succeeds before trying to
[nmh] / docs / historical / mh-6.8.5 / uip / mhpath.c
1 /* mhpath.c - print full pathnames */
2 #ifndef lint
3 static char ident[] = "@(#)$Id: mhpath.c,v 1.4 1992/12/15 00:20:22 jromine Exp $";
4 #endif /* lint */
5
6 #include "../h/mh.h"
7 #include <stdio.h>
8 #ifdef LOCALE
9 #include <locale.h>
10 #endif
11
12 /* \f */
13
14 static struct swit switches[] = {
15 #define HELPSW 0
16 "help", 4,
17
18 NULL, 0
19 };
20
21 /* \f */
22
23 /* ARGSUSED */
24
25 main(argc, argv)
26 int argc;
27 char *argv[];
28 {
29 int msgp = 0,
30 msgnum;
31 char *cp,
32 *maildir,
33 *folder = NULL,
34 buf[100],
35 **ap,
36 **argp,
37 *arguments[MAXARGS],
38 *msgs[MAXARGS];
39 struct msgs *mp;
40
41 #ifdef LOCALE
42 setlocale(LC_ALL, "");
43 #endif
44 invo_name = r1bindex (argv[0], '/');
45 if ((cp = m_find (invo_name)) != NULL) {
46 ap = brkstring (cp = getcpy (cp), " ", "\n");
47 ap = copyip (ap, arguments);
48 }
49 else
50 ap = arguments;
51 (void) copyip (argv + 1, ap);
52 argp = arguments;
53
54 /* \f */
55
56 while (cp = *argp++) {
57 if (*cp == '-')
58 switch (smatch (++cp, switches)) {
59 case AMBIGSW:
60 ambigsw (cp, switches);
61 done (1);
62 case UNKWNSW:
63 adios (NULLCP, "-%s unknown", cp);
64 case HELPSW:
65 (void) sprintf (buf, "%s [+folder] [msgs] [switches]",
66 invo_name);
67 help (buf, switches);
68 done (1);
69 }
70 if (*cp == '+' || *cp == '@') {
71 if (folder)
72 adios (NULLCP, "only one folder at a time!");
73 else
74 folder = path (cp + 1, *cp == '+' ? TFOLDER : TSUBCWF);
75 }
76 else
77 msgs[msgp++] = cp;
78 }
79
80 /* \f */
81
82 if (!m_find ("path"))
83 free (path ("./", TFOLDER));
84
85 if (!folder)
86 folder = m_getfolder ();
87 maildir = m_maildir (folder);
88 if (!msgp) {
89 printf ("%s\n", maildir);
90 done (0);
91 }
92
93 if (chdir (maildir) == NOTOK)
94 adios (maildir, "unable to change directory to");
95 if (!(mp = m_gmsg (folder)))
96 adios (NULLCP, "unable to read folder %s", folder);
97
98 if ((mp = m_remsg (mp, 0, MAXFOLDER)) == NULL)
99 adios (NULLCP, "unable to allocate folder storage");
100 mp -> msgflags |= MHPATH;
101
102 for (msgnum = 0; msgnum < msgp; msgnum++)
103 if (!m_convert (mp, msgs[msgnum]))
104 done (1);
105 m_setseq (mp);
106
107 /* \f */
108
109 if (mp -> numsel > MAXARGS - 2)
110 adios (NULLCP, "more than %d messages", MAXARGS - 2);
111
112 for (msgnum = mp -> lowsel; msgnum <= mp -> hghsel; msgnum++)
113 if (mp -> msgstats[msgnum] & SELECTED)
114 printf ("%s/%s\n", mp -> foldpath, m_name (msgnum));
115
116 m_sync (mp);
117 m_update ();
118
119 done (0);
120 }