#ifndef _DSN_UTIL_H_INCLUDED_
#define _DSN_UTIL_H_INCLUDED_
#include <vstring.h>
#define DSN_DIGS1 1
#define DSN_DIGS2 3
#define DSN_DIGS3 3
#define DSN_LEN (DSN_DIGS1 + 1 + DSN_DIGS2 + 1 + DSN_DIGS3)
#define DSN_SIZE (DSN_LEN + 1)
typedef struct {
char data[DSN_SIZE];
} DSN_STAT;
#define DSN_UPDATE(dsn_buf, dsn, len) do { \
if (len >= sizeof((dsn_buf).data)) \
msg_panic("DSN_UPDATE: bad DSN code \"%.*s...\" length %d", \
INT_SIZEOF((dsn_buf).data) - 1, dsn, len); \
strncpy((dsn_buf).data, (dsn), (len)); \
(dsn_buf).data[len] = 0; \
} while (0)
#define DSN_STATUS(dsn_buf) ((const char *) (dsn_buf).data)
#define DSN_CLASS(dsn_buf) ((dsn_buf).data[0])
typedef struct {
DSN_STAT dsn;
const char *text;
} DSN_SPLIT;
extern DSN_SPLIT *dsn_split(DSN_SPLIT *, const char *, const char *);
extern size_t dsn_valid(const char *);
extern char *dsn_prepend(const char *, const char *);
#endif