1 /* $NetBSD: dsn_print.c,v 1.3 2022/10/08 16:12:45 christos Exp $ */ 2 3 /*++ 4 /* NAME 5 /* dsn_print 6 /* SUMMARY 7 /* write DSN structure to stream 8 /* SYNOPSIS 9 /* #include <dsn_print.h> 10 /* 11 /* int dsn_print(print_fn, stream, flags, ptr) 12 /* ATTR_PRINT_COMMON_FN print_fn; 13 /* VSTREAM *stream; 14 /* int flags; 15 /* void *ptr; 16 /* DESCRIPTION 17 /* dsn_print() writes a DSN structure to the named stream using 18 /* the specified attribute print routine. dsn_print() is meant 19 /* to be passed as a call-back to attr_print(), thusly: 20 /* 21 /* ... SEND_ATTR_FUNC(dsn_print, (const void *) dsn), ... 22 /* DIAGNOSTICS 23 /* Fatal: out of memory. 24 /* LICENSE 25 /* .ad 26 /* .fi 27 /* The Secure Mailer license must be distributed with this software. 28 /* AUTHOR(S) 29 /* Wietse Venema 30 /* IBM T.J. Watson Research 31 /* P.O. Box 704 32 /* Yorktown Heights, NY 10598, USA 33 /* 34 /* Wietse Venema 35 /* Google, Inc. 36 /* 111 8th Avenue 37 /* New York, NY 10011, USA 38 /*--*/ 39 40 /* System library. */ 41 42 #include <sys_defs.h> 43 44 /* Utility library. */ 45 46 #include <attr.h> 47 48 /* Global library. */ 49 50 #include <mail_proto.h> 51 #include <dsn_print.h> 52 53 /* dsn_print - write DSN to stream */ 54 55 int dsn_print(ATTR_PRINT_COMMON_FN print_fn, VSTREAM *fp, 56 int flags, const void *ptr) 57 { 58 DSN *dsn = (DSN *) ptr; 59 int ret; 60 61 /* 62 * The attribute order is determined by backwards compatibility. It can 63 * be sanitized after all the ad-hoc DSN read/write code is replaced. 64 */ 65 ret = print_fn(fp, flags | ATTR_FLAG_MORE, 66 SEND_ATTR_STR(MAIL_ATTR_DSN_STATUS, dsn->status), 67 SEND_ATTR_STR(MAIL_ATTR_DSN_DTYPE, dsn->dtype), 68 SEND_ATTR_STR(MAIL_ATTR_DSN_DTEXT, dsn->dtext), 69 SEND_ATTR_STR(MAIL_ATTR_DSN_MTYPE, dsn->mtype), 70 SEND_ATTR_STR(MAIL_ATTR_DSN_MNAME, dsn->mname), 71 SEND_ATTR_STR(MAIL_ATTR_DSN_ACTION, dsn->action), 72 SEND_ATTR_STR(MAIL_ATTR_WHY, dsn->reason), 73 ATTR_TYPE_END); 74 return (ret); 75 } 76