Home | History | Annotate | Line # | Download | only in global
      1 /*	$NetBSD: record.h,v 1.2 2017/02/14 01:16:45 christos Exp $	*/
      2 
      3 #ifndef _RECORD_H_INCLUDED_
      4 #define _RECORD_H_INCLUDED_
      5 
      6 /*++
      7 /* NAME
      8 /*	record 3h
      9 /* SUMMARY
     10 /*	simple typed record I/O
     11 /* SYNOPSIS
     12 /*	#include <record.h>
     13 /* DESCRIPTION
     14 /* .nf
     15 
     16  /*
     17   * System library.
     18   */
     19 #include <stdarg.h>
     20 
     21  /*
     22   * Utility library.
     23   */
     24 #include <vstring.h>
     25 #include <vstream.h>
     26 
     27  /*
     28   * Record type values are positive numbers 0..255. Negative record type
     29   * values are reserved for diagnostics.
     30   */
     31 #define REC_TYPE_EOF	-1		/* no record */
     32 #define REC_TYPE_ERROR	-2		/* bad record */
     33 
     34  /*
     35   * Functional interface.
     36   */
     37 extern int rec_get_raw(VSTREAM *, VSTRING *, ssize_t, int);
     38 extern int rec_put(VSTREAM *, int, const char *, ssize_t);
     39 extern int rec_put_type(VSTREAM *, int, off_t);
     40 extern int PRINTFLIKE(3, 4) rec_fprintf(VSTREAM *, int, const char *,...);
     41 extern int rec_fputs(VSTREAM *, int, const char *);
     42 extern int rec_goto(VSTREAM *, const char *);
     43 extern int rec_pad(VSTREAM *, int, ssize_t);
     44 
     45 #define REC_PUT_BUF(v, t, b) rec_put((v), (t), vstring_str(b), VSTRING_LEN(b))
     46 
     47 #define REC_FLAG_NONE	(0)
     48 #define REC_FLAG_FOLLOW_PTR	(1<<0)	/* follow PTR records */
     49 #define REC_FLAG_SKIP_DTXT	(1<<1)	/* skip DTXT records */
     50 #define REC_FLAG_SEEK_END	(1<<2)	/* seek EOF after END record */
     51 
     52 #define REC_FLAG_DEFAULT \
     53 	(REC_FLAG_FOLLOW_PTR | REC_FLAG_SKIP_DTXT | REC_FLAG_SEEK_END)
     54 
     55 #define REC_GET_HIDDEN_TYPE(t) \
     56 	((t) == REC_TYPE_PTR || (t) == REC_TYPE_DTXT)
     57 
     58 #define rec_get(fp, buf, limit) \
     59 	rec_get_raw((fp), (buf), (limit), REC_FLAG_DEFAULT)
     60 
     61 #define REC_SPACE_NEED(buflen, reclen) do { \
     62 	    ssize_t _c, _l; \
     63 	    for (_c = 1, _l = (buflen); (_l >>= 7U) != 0; _c++) \
     64 		; \
     65 	    (reclen) = 1 + _c + (buflen); \
     66 	} while (0)
     67 
     68  /*
     69   * Stuff that needs <stdarg.h>
     70   */
     71 extern int rec_vfprintf(VSTREAM *, int, const char *, va_list);
     72 
     73 /* LICENSE
     74 /* .ad
     75 /* .fi
     76 /*	The Secure Mailer license must be distributed with this software.
     77 /* AUTHOR(S)
     78 /*	Wietse Venema
     79 /*	IBM T.J. Watson Research
     80 /*	P.O. Box 704
     81 /*	Yorktown Heights, NY 10598, USA
     82 /*--*/
     83 
     84 #endif
     85