blob: f02b57467c61dac7316e479907c90e79bedc333a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
/*++
/* NAME
/* tok822_node 3
/* SUMMARY
/* token memory management
/* SYNOPSIS
/* #include <tok822.h>
/*
/* TOK822 *tok822_alloc(type, strval)
/* int type;
/* const char *strval;
/*
/* TOK822 *tok822_free(tp)
/* TOK822 *tp;
/* DESCRIPTION
/* This module implements memory management for token
/* structures. A distinction is made between single-character
/* tokens that have no string value, and string-valued tokens.
/*
/* tok822_alloc() allocates memory for a token structure of
/* the named type, and initializes it properly. In case of
/* a single-character token, no string memory is allocated.
/* Otherwise, \fIstrval\fR is a null pointer or provides
/* string data to initialize the token with.
/*
/* tok822_free() releases the memory used for the specified token
/* and conveniently returns a null pointer value.
/* LICENSE
/* .ad
/* .fi
/* The Secure Mailer license must be distributed with this software.
/* AUTHOR(S)
/* Wietse Venema
/* IBM T.J. Watson Research
/* P.O. Box 704
/* Yorktown Heights, NY 10598, USA
/*--*/
/* System library. */
#include <sys_defs.h>
#include <string.h>
/* Utility library. */
#include <mymalloc.h>
#include <vstring.h>
/* Global library. */
#include "tok822.h"
/* tok822_alloc - allocate and initialize token */
TOK822 *tok822_alloc(int type, const char *strval)
{
TOK822 *tp;
#define CONTAINER_TOKEN(x) \
((x) == TOK822_ADDR || (x) == TOK822_STARTGRP)
tp = (TOK822 *) mymalloc(sizeof(*tp));
tp->type = type;
tp->next = tp->prev = tp->head = tp->tail = tp->owner = 0;
tp->vstr = (type < TOK822_MINTOK || CONTAINER_TOKEN(type) ? 0 :
strval == 0 ? vstring_alloc(10) :
vstring_strcpy(vstring_alloc(strlen(strval) + 1), strval));
return (tp);
}
/* tok822_free - destroy token */
TOK822 *tok822_free(TOK822 *tp)
{
if (tp->vstr)
vstring_free(tp->vstr);
myfree((void *) tp);
return (0);
}
|