diff options
| author | German M. Bravo <german.mb@deipi.com> | 2011-12-26 15:33:28 -0600 |
|---|---|---|
| committer | German M. Bravo <german.mb@deipi.com> | 2011-12-26 15:33:28 -0600 |
| commit | 9b1ad84654a520db055100ed2167f2542d7cdc59 (patch) | |
| tree | df5e92eaed6a36ad6dc1713cdb49f36c316a9179 /scss/src | |
| parent | 8ccd33d07aa5dda7f98d67c9557c6e3838739197 (diff) | |
| download | pyscss-9b1ad84654a520db055100ed2167f2542d7cdc59.tar.gz | |
Using PyMem for allocating memory
Diffstat (limited to 'scss/src')
| -rw-r--r-- | scss/src/_scss.c | 4 | ||||
| -rw-r--r-- | scss/src/block_locator.c | 11 | ||||
| -rw-r--r-- | scss/src/scanner.c | 39 |
3 files changed, 36 insertions, 18 deletions
diff --git a/scss/src/_scss.c b/scss/src/_scss.c index ffa5017..d4f1a95 100644 --- a/scss/src/_scss.c +++ b/scss/src/_scss.c @@ -424,7 +424,7 @@ scss_Scanner_repr(scss_Scanner *self) cur = strlen(p_token->regex->tok) * 2; if (cur > max) max = cur; } - tok = malloc(max + 4); + tok = PyMem_New(char, max + 4); repr = PyString_FromString(""); for (i = (start < 0) ? 0 : start; i < self->scanner->tokens_sz; i++) { p_token = self->scanner->tokens[i]; @@ -452,7 +452,7 @@ scss_Scanner_repr(scss_Scanner *self) first = 0; } - free(tok); + PyMem_Del(tok); } else { repr = PyString_FromString("None"); } diff --git a/scss/src/block_locator.c b/scss/src/block_locator.c index 3684085..d025ea3 100644 --- a/scss/src/block_locator.c +++ b/scss/src/block_locator.c @@ -8,6 +8,8 @@ * MIT license (http://www.opensource.org/licenses/mit-license.php) * Copyright (c) 2011 German M. Bravo (Kronuz), All rights reserved. */ +#include <Python.h> + #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -359,15 +361,16 @@ BlockLocator_finalize(void) BlockLocator * BlockLocator_new(char *codestr, int codestr_sz) { - BlockLocator *self = (BlockLocator *)malloc(sizeof(BlockLocator)); + BlockLocator *self = PyMem_New(BlockLocator, 1); + memset(self, 0, sizeof(BlockLocator)); #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif if (self) { - self->_codestr = (char *)malloc(codestr_sz); + self->_codestr = PyMem_New(char, codestr_sz); memcpy(self->_codestr, codestr, codestr_sz); self->codestr_sz = codestr_sz; - self->codestr = (char *)malloc(self->codestr_sz); + self->codestr = PyMem_New(char, self->codestr_sz); memcpy(self->codestr, self->_codestr, self->codestr_sz); self->codestr_ptr = self->codestr; self->lineno = 0; @@ -404,7 +407,7 @@ BlockLocator_rewind(BlockLocator *self) fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif free(self->codestr); - self->codestr = (char *)malloc(self->codestr_sz); + self->codestr = PyMem_New(char, self->codestr_sz); memcpy(self->codestr, self->_codestr, self->codestr_sz); self->codestr_ptr = self->codestr; self->lineno = 0; diff --git a/scss/src/scanner.c b/scss/src/scanner.c index d9d6182..401c837 100644 --- a/scss/src/scanner.c +++ b/scss/src/scanner.c @@ -8,10 +8,23 @@ * MIT license (http://www.opensource.org/licenses/mit-license.php) * Copyright (c) 2011 German M. Bravo (Kronuz), All rights reserved. */ +#include <Python.h> + #include <stdio.h> #include <string.h> #include "scanner.h" +char * +PyMem_Strdup(const char *str) +{ + if (str != NULL) { + char *copy = PyMem_New(char, strlen(str) + 1); + if (copy != NULL) + return strcpy(copy, str); + } + return NULL; +} + Pattern *Pattern_patterns[MAX_PATTERNS]; int Pattern_patterns_initialized = 0; @@ -25,9 +38,10 @@ Pattern_regex(char *tok, char *expr) { for (j = 0; j < MAX_PATTERNS; j++) { if(Pattern_patterns[j] == NULL) { if (expr) { - Pattern_patterns[j] = (Pattern *)calloc(1, sizeof(Pattern)); - Pattern_patterns[j]->tok = strdup(tok); - Pattern_patterns[j]->expr = strdup(expr); + Pattern_patterns[j] = PyMem_New(Pattern, 1); + memset(Pattern_patterns[j], 0, sizeof(Pattern)); + Pattern_patterns[j]->tok = PyMem_Strdup(tok); + Pattern_patterns[j]->expr = PyMem_Strdup(expr); ret = Pattern_patterns[j]; } break; @@ -126,12 +140,12 @@ Pattern_finalize(void) { if (Pattern_patterns_initialized) { for (j = 0; j < MAX_PATTERNS; j++) { if (Pattern_patterns[j] != NULL) { - free(Pattern_patterns[j]->tok); - free(Pattern_patterns[j]->expr); + PyMem_Del(Pattern_patterns[j]->tok); + PyMem_Del(Pattern_patterns[j]->expr); if (Pattern_patterns[j]->pattern != NULL) { pcre_free(Pattern_patterns[j]->pattern); } - free(Pattern_patterns[j]); + PyMem_Del(Pattern_patterns[j]); Pattern_patterns[j] = NULL; } } @@ -256,7 +270,7 @@ Scanner_reset(Scanner *self, char *input, int input_sz) { fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif if (input_sz) { - if (self->input) free(self->input); + if (self->input) PyMem_Del(self->input); self->input = strndup(input, input_sz + 1); self->input[input_sz] = '\0'; self->input_sz = input_sz; @@ -264,7 +278,7 @@ Scanner_reset(Scanner *self, char *input, int input_sz) { self->tokens_sz = 0; for (i = 0; i < MAX_TOKENS; i++) { if (self->tokens[i]) { - free(self->tokens[i]); + PyMem_Del(self->tokens[i]); } self->tokens[i] = NULL; for (j = 0; j < MAX_PATTERNS; j++) { @@ -283,17 +297,17 @@ Scanner_del(Scanner *self) { #endif for (i = 0; i < MAX_TOKENS; i++) { if (self->tokens[i]) { - free(self->tokens[i]); + PyMem_Del(self->tokens[i]); } self->tokens[i] = NULL; } if (self->input != NULL) { - free(self->input); + PyMem_Del(self->input); self->input = NULL; } - free(self); + PyMem_Del(self); } Scanner* @@ -305,7 +319,8 @@ Scanner_new(Pattern patterns[], int patterns_sz, Pattern ignore[], int ignore_sz #ifdef DEBUG fprintf(stderr, "%s\n", __PRETTY_FUNCTION__); #endif - self = (Scanner *)calloc(1, sizeof(Scanner)); + self = PyMem_New(Scanner, 1); + memset(self, 0, sizeof(Scanner)); if (self) { for (i = 0; i < patterns_sz; i++) { regex = Pattern_regex(patterns[i].tok, patterns[i].expr); |
