~ubuntu-branches/ubuntu/hoary/postfix/hoary-security

« back to all changes in this revision

Viewing changes to src/global/tok822_node.c

  • Committer: Bazaar Package Importer
  • Author(s): LaMont Jones
  • Date: 2004-10-06 11:50:33 UTC
  • Revision ID: james.westby@ubuntu.com-20041006115033-ooo6yfg6kmoteu04
Tags: upstream-2.1.3
ImportĀ upstreamĀ versionĀ 2.1.3

Show diffs side-by-side

added added

removed removed

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