symbian-qemu-0.9.1-12/python-2.6.1/Python/asdl.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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 }