Don't abort on OOM in sds.c
This commit is contained in:
parent
75bc8595c7
commit
ac9fb4993b
25
sds.c
25
sds.c
@ -28,18 +28,18 @@
|
|||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define SDS_ABORT_ON_OOM
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "sds.h"
|
#include "sds.h"
|
||||||
|
|
||||||
|
#ifdef SDS_ABORT_ON_OOM
|
||||||
static void sdsOomAbort(void) {
|
static void sdsOomAbort(void) {
|
||||||
fprintf(stderr,"SDS: Out Of Memory (SDS_ABORT_ON_OOM defined)\n");
|
fprintf(stderr,"SDS: Out Of Memory (SDS_ABORT_ON_OOM defined)\n");
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
sds sdsnewlen(const void *init, size_t initlen) {
|
sds sdsnewlen(const void *init, size_t initlen) {
|
||||||
struct sdshdr *sh;
|
struct sdshdr *sh;
|
||||||
@ -378,6 +378,8 @@ sds sdsfromlonglong(long long value) {
|
|||||||
|
|
||||||
sds sdscatrepr(sds s, char *p, size_t len) {
|
sds sdscatrepr(sds s, char *p, size_t len) {
|
||||||
s = sdscatlen(s,"\"",1);
|
s = sdscatlen(s,"\"",1);
|
||||||
|
if (s == NULL) return NULL;
|
||||||
|
|
||||||
while(len--) {
|
while(len--) {
|
||||||
switch(*p) {
|
switch(*p) {
|
||||||
case '\\':
|
case '\\':
|
||||||
@ -397,6 +399,7 @@ sds sdscatrepr(sds s, char *p, size_t len) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
p++;
|
p++;
|
||||||
|
if (s == NULL) return NULL;
|
||||||
}
|
}
|
||||||
return sdscatlen(s,"\"",1);
|
return sdscatlen(s,"\"",1);
|
||||||
}
|
}
|
||||||
@ -416,7 +419,7 @@ sds sdscatrepr(sds s, char *p, size_t len) {
|
|||||||
sds *sdssplitargs(char *line, int *argc) {
|
sds *sdssplitargs(char *line, int *argc) {
|
||||||
char *p = line;
|
char *p = line;
|
||||||
char *current = NULL;
|
char *current = NULL;
|
||||||
char **vector = NULL;
|
char **vector = NULL, **_vector = NULL;
|
||||||
|
|
||||||
*argc = 0;
|
*argc = 0;
|
||||||
while(1) {
|
while(1) {
|
||||||
@ -427,7 +430,11 @@ sds *sdssplitargs(char *line, int *argc) {
|
|||||||
int inq=0; /* set to 1 if we are in "quotes" */
|
int inq=0; /* set to 1 if we are in "quotes" */
|
||||||
int done=0;
|
int done=0;
|
||||||
|
|
||||||
if (current == NULL) current = sdsempty();
|
if (current == NULL) {
|
||||||
|
current = sdsempty();
|
||||||
|
if (current == NULL) goto err;
|
||||||
|
}
|
||||||
|
|
||||||
while(!done) {
|
while(!done) {
|
||||||
if (inq) {
|
if (inq) {
|
||||||
if (*p == '\\' && *(p+1)) {
|
if (*p == '\\' && *(p+1)) {
|
||||||
@ -471,9 +478,13 @@ sds *sdssplitargs(char *line, int *argc) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (*p) p++;
|
if (*p) p++;
|
||||||
|
if (current == NULL) goto err;
|
||||||
}
|
}
|
||||||
/* add the token to the vector */
|
/* add the token to the vector */
|
||||||
vector = realloc(vector,((*argc)+1)*sizeof(char*));
|
_vector = realloc(vector,((*argc)+1)*sizeof(char*));
|
||||||
|
if (_vector == NULL) goto err;
|
||||||
|
|
||||||
|
vector = _vector;
|
||||||
vector[*argc] = current;
|
vector[*argc] = current;
|
||||||
(*argc)++;
|
(*argc)++;
|
||||||
current = NULL;
|
current = NULL;
|
||||||
@ -485,8 +496,8 @@ sds *sdssplitargs(char *line, int *argc) {
|
|||||||
err:
|
err:
|
||||||
while((*argc)--)
|
while((*argc)--)
|
||||||
sdsfree(vector[*argc]);
|
sdsfree(vector[*argc]);
|
||||||
free(vector);
|
if (vector != NULL) free(vector);
|
||||||
if (current) sdsfree(current);
|
if (current != NULL) sdsfree(current);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user