54 #ifdef STRCASECMP_IN_STRINGS_H
69 static char *smtp_quoted(
char *cp,
SMTPD_TOKEN *arg,
int start,
int last)
78 #define ENTER_CHAR(buf, ch) VSTRING_ADDCH(buf, ch);
79 #define LEAVE_CHAR(buf, ch) { \
80 vstring_truncate(buf, VSTRING_LEN(buf) - 1); \
81 ch = vstring_end(buf)[-1]; \
100 }
else if (c == wanted) {
104 }
else if (c ==
'"') {
106 }
else if (c ==
'<' && wanted ==
'>') {
116 static char *smtp_next_token(
char *cp,
SMTPD_TOKEN *arg)
123 #define STR(x) vstring_str(x)
124 #define LEN(x) VSTRING_LEN(x)
125 #define STREQ(x,y,l) (strncasecmp((x), (y), (l)) == 0)
136 }
else if (c ==
'<') {
137 cp = smtp_quoted(cp, arg, c,
'>');
138 }
else if (c ==
'"') {
139 cp = smtp_quoted(cp, arg, c, c);
140 }
else if (c ==
':') {
164 static void smtpd_token_init(
char *ptr, ssize_t count)
169 for (arg = (
SMTPD_TOKEN *) ptr, n = 0; n < count; arg++, n++)
186 if ((cp = smtp_next_token(cp, smtp_argv + n)) == 0)
203 int main(
int unused_argc,
char **unused_argv)
211 if (isatty(STDIN_FILENO))
218 if (!isatty(STDIN_FILENO))
221 for (i = 0; i < tok_argc; i++) {
int vstring_get_nonl(VSTRING *vp, VSTREAM *fp)
int main(int argc, char **argv)
#define LEAVE_CHAR(buf, ch)
#define VSTRING_TERMINATE(vp)
#define VSTRING_ADDCH(vp, ch)
VSTREAM * vstream_printf(const char *fmt,...)
#define VSTRING_RESET(vp)
VSTRING * vstring_alloc(ssize_t len)
char * mvect_alloc(MVECT *vect, ssize_t elsize, ssize_t nelm, void(*init_fn)(char *, ssize_t), void(*wipe_fn)(char *, ssize_t))
int vstream_fflush(VSTREAM *stream)
void(* MVECT_FN)(char *, ssize_t)
char * mvect_realloc(MVECT *vect, ssize_t nelm)
VSTRING * vstring_free(VSTRING *vp)
int smtpd_token(char *cp, SMTPD_TOKEN **argvp)
#define ENTER_CHAR(buf, ch)