diff options
Diffstat (limited to 'ext/readline/readline.c')
-rw-r--r-- | ext/readline/readline.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/ext/readline/readline.c b/ext/readline/readline.c index 888f5d847e..c87afcb18b 100644 --- a/ext/readline/readline.c +++ b/ext/readline/readline.c @@ -670,12 +670,13 @@ readline_attempted_completion_function(const char *text, int start, int end) if (TYPE(ary) != T_ARRAY) ary = rb_Array(ary); matches = RARRAY_LEN(ary); - if (matches == 0) - return NULL; - result = ALLOC_N(char *, matches + 2); + if (matches == NULL) rb_mem_error(); + result = (char**)malloc((matches + 2)*sizeof(char*)); + if (result == NULL) rb_raise(rb_eNoMemError, "%s"); for (i = 0; i < matches; i++) { temp = rb_obj_as_string(RARRAY_PTR(ary)[i]); - result[i + 1] = ALLOC_N(char, RSTRING_LEN(temp) + 1); + result[i + 1] = (char*)malloc(RSTRING_LEN(temp) + 1); + if (result[i + 1] == NULL) rb_mem_error(); strcpy(result[i + 1], RSTRING_PTR(temp)); } result[matches + 1] = NULL; @@ -707,7 +708,8 @@ readline_attempted_completion_function(const char *text, int start, int end) if (low > si) low = si; i++; } - result[0] = ALLOC_N(char, low + 1); + result[0] = (char*)malloc(low + 1); + if (result[0] == NULL) rb_mem_error(); strncpy(result[0], result[1], low); result[0][low] = '\0'; } |