Import ezmlm-idx 0.40
[ezmlm] / ezmlm-list.c
CommitLineData
f8beb284
MW
1/*$Id: ezmlm-list.c,v 1.15 1999/09/12 20:25:33 lindberg Exp $*/
2/*$Name: ezmlm-idx-040 $*/
5b62e993 3#include "strerr.h"
5b62e993 4#include "readwrite.h"
f8beb284
MW
5#include "substdio.h"
6#include "subscribe.h"
5b62e993 7#include "exit.h"
f8beb284
MW
8#include "fmt.h"
9#include "sgetopt.h"
10#include "errtxt.h"
11#include "idx.h"
5b62e993
MW
12
13#define FATAL "ezmlm-list: fatal: "
f8beb284
MW
14
15int flagnumber = 0; /* default list subscribers, not number of */
16
17void *psql = (void *) 0;
18
19char strnum[FMT_ULONG];
20
5b62e993
MW
21void die_write()
22{
f8beb284
MW
23 strerr_die3sys(111,FATAL,ERR_WRITE,"stdout: ");
24}
25
26void die_usage()
27{
28 strerr_die1x(100,"ezmlm-list: usage: ezmlm-list [-mMnNvV] dir");
5b62e993
MW
29}
30
f8beb284
MW
31static char outbuf[512];
32static substdio ssout = SUBSTDIO_FDBUF(write,1,outbuf,sizeof(outbuf));
5b62e993 33
f8beb284
MW
34int subwrite(s,l)
35char *s;
36unsigned int l;
37{
38 return substdio_put(&ssout,s,l) | substdio_put(&ssout,"\n",1);
39}
5b62e993 40
f8beb284
MW
41int dummywrite(s,l)
42char *s; /* ignored */
43unsigned int l;
44{
45 return (int) l;
46}
5b62e993
MW
47
48void main(argc,argv)
49int argc;
50char **argv;
51{
52 char *dir;
f8beb284
MW
53 int flagmysql = 1; /* use if supported */
54 unsigned long n;
55 int opt;
5b62e993 56
f8beb284
MW
57 while ((opt = getopt(argc,argv,"mMnNvV")) != opteof)
58 switch(opt) {
59 case 'm': flagmysql = 1; break;
60 case 'M': flagmysql = 0; break;
61 case 'n': flagnumber = 1; break;
62 case 'N': flagnumber = 0; break;
63 case 'v':
64 case 'V': strerr_die2x(0,
65 "ezmlm-list version: ezmlml-0.53+",EZIDX_VERSION);
66 default:
67 die_usage();
68 }
5b62e993 69
f8beb284
MW
70 dir = argv[optind++];
71 if (!dir) die_usage();
5b62e993 72
f8beb284
MW
73 if (chdir(dir) == -1)
74 strerr_die4sys(111,FATAL,ERR_SWITCH,dir,": ");
5b62e993 75
f8beb284
MW
76 if (dir[0] != '/')
77 strerr_die2x(100,FATAL,ERR_SLASH);
5b62e993 78
f8beb284
MW
79 if (flagnumber) {
80 n = putsubs(dir,0L,52L,dummywrite,flagmysql,FATAL);
81 if (substdio_put(&ssout,strnum,fmt_ulong(strnum,n)) == -1) die_write(FATAL);
82 if (substdio_put(&ssout,"\n",1) == -1) die_write(FATAL);
83 } else
84 (void) putsubs(dir,0L,52L,subwrite,flagmysql,FATAL);
85 if (substdio_flush(&ssout) == -1) die_write(FATAL);
86 closesql();
5b62e993
MW
87 _exit(0);
88}