#ifndef _DSN_H_INCLUDED_
#define _DSN_H_INCLUDED_
typedef struct {
const char *status;
const char *action;
const char *reason;
const char *dtype;
const char *dtext;
const char *mtype;
const char *mname;
} DSN;
extern DSN *dsn_create(const char *, const char *, const char *, const char *,
const char *, const char *, const char *);
extern void dsn_free(DSN *);
#define DSN_ASSIGN(dsn, _status, _action, _reason, _dtype, _dtext, _mtype, _mname) \
(((dsn)->status = (_status)), \
((dsn)->action = (_action)), \
((dsn)->reason = (_reason)), \
((dsn)->dtype = (_dtype)), \
((dsn)->dtext = (_dtext)), \
((dsn)->mtype = (_mtype)), \
((dsn)->mname = (_mname)), \
(dsn))
#define DSN_SIMPLE(dsn, _status, _reason) \
(((dsn)->status = (_status)), \
((dsn)->action = DSN_NO_ACTION), \
((dsn)->reason = (_reason)), \
((dsn)->dtype = DSN_NO_DTYPE), \
((dsn)->dtext = DSN_NO_DTEXT), \
((dsn)->mtype = DSN_NO_MTYPE), \
((dsn)->mname = DSN_NO_MNAME), \
(dsn))
#define DSN_NO_ACTION ""
#define DSN_NO_DTYPE ""
#define DSN_NO_DTEXT ""
#define DSN_NO_MTYPE ""
#define DSN_NO_MNAME ""
#define DSN_COPY(dsn) \
dsn_create((dsn)->status, (dsn)->action, (dsn)->reason, \
(dsn)->dtype, (dsn)->dtext, \
(dsn)->mtype, (dsn)->mname)
#endif