~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Python/asdl.c

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "Python.h"
 
2
#include "asdl.h"
 
3
 
 
4
asdl_seq *
 
5
asdl_seq_new(int size, PyArena *arena)
 
6
{
 
7
        asdl_seq *seq = NULL;
 
8
        size_t n = (size ? (sizeof(void *) * (size - 1)) : 0);
 
9
 
 
10
        /* check size is sane */
 
11
        if (size < 0 || size == INT_MIN || 
 
12
                (size && ((size - 1) > (PY_SIZE_MAX / sizeof(void *))))) {
 
13
                PyErr_NoMemory();
 
14
                return NULL;
 
15
        }
 
16
 
 
17
        /* check if size can be added safely */
 
18
        if (n > PY_SIZE_MAX - sizeof(asdl_seq)) {
 
19
                PyErr_NoMemory();
 
20
                return NULL;
 
21
        }
 
22
 
 
23
        n += sizeof(asdl_seq);
 
24
 
 
25
        seq = (asdl_seq *)PyArena_Malloc(arena, n);
 
26
        if (!seq) {
 
27
                PyErr_NoMemory();
 
28
                return NULL;
 
29
        }
 
30
        memset(seq, 0, n);
 
31
        seq->size = size;
 
32
        return seq;
 
33
}
 
34
 
 
35
asdl_int_seq *
 
36
asdl_int_seq_new(int size, PyArena *arena)
 
37
{
 
38
        asdl_int_seq *seq = NULL;
 
39
        size_t n = (size ? (sizeof(void *) * (size - 1)) : 0);
 
40
 
 
41
        /* check size is sane */
 
42
        if (size < 0 || size == INT_MIN || 
 
43
                (size && ((size - 1) > (PY_SIZE_MAX / sizeof(void *))))) {
 
44
                        PyErr_NoMemory();
 
45
                        return NULL;
 
46
        }
 
47
 
 
48
        /* check if size can be added safely */
 
49
        if (n > PY_SIZE_MAX - sizeof(asdl_seq)) {
 
50
                PyErr_NoMemory();
 
51
                return NULL;
 
52
        }
 
53
 
 
54
        n += sizeof(asdl_seq);
 
55
 
 
56
        seq = (asdl_int_seq *)PyArena_Malloc(arena, n);
 
57
        if (!seq) {
 
58
                PyErr_NoMemory();
 
59
                return NULL;
 
60
        }
 
61
        memset(seq, 0, n);
 
62
        seq->size = size;
 
63
        return seq;
 
64
}