fixed a memory leak and clarified the comment on the strtok_r problem
This commit is contained in:
parent
37e814ce51
commit
952d1398f5
|
@ -103,6 +103,9 @@ typedef struct blob_t_struct{
|
||||||
const unsigned char* fontData;
|
const unsigned char* fontData;
|
||||||
unsigned char font_storebytes;/*bytes per char*/
|
unsigned char font_storebytes;/*bytes per char*/
|
||||||
unsigned char space;
|
unsigned char space;
|
||||||
|
#ifndef AVR
|
||||||
|
char scrolltextBuffer[SCROLLTEXT_BUFFER_SIZE];
|
||||||
|
#endif
|
||||||
}blob_t;
|
}blob_t;
|
||||||
|
|
||||||
|
|
||||||
|
@ -280,29 +283,23 @@ unsigned char blobNextCommand(blob_t * blob){
|
||||||
|
|
||||||
|
|
||||||
blob_t * setupBlob(char * str){
|
blob_t * setupBlob(char * str){
|
||||||
#ifndef AVR
|
|
||||||
// strtok_r must not be used on string literals so we copy the string to
|
|
||||||
// the heap (at least on non-AVR based processors)
|
|
||||||
int n;
|
|
||||||
char *scrolltext = NULL;
|
|
||||||
if ((str != NULL) && ((n = (strlen(str))) != 0)) {
|
|
||||||
scrolltext = malloc(n + 1);
|
|
||||||
strcpy(scrolltext, str);
|
|
||||||
str = scrolltext;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static unsigned char chop_cnt;
|
static unsigned char chop_cnt;
|
||||||
static char *last; static char delim[] = "#";
|
static char *last; static char delim[] = "#";
|
||||||
static char *lastcommands;
|
static char *lastcommands;
|
||||||
unsigned int tmp;
|
unsigned int tmp;
|
||||||
|
|
||||||
|
blob_t *blob = malloc(sizeof (blob_t));
|
||||||
|
|
||||||
if(str){
|
if(str){
|
||||||
|
#ifndef AVR
|
||||||
|
// on non-AVR archs strtok_r fails for some reason if it operates on a
|
||||||
|
// string which is located on another stack frame, so we need our own copy
|
||||||
|
memcpy (&blob->scrolltextBuffer, str, SCROLLTEXT_BUFFER_SIZE);
|
||||||
|
str = &blob->scrolltextBuffer;
|
||||||
|
#endif
|
||||||
chop_cnt = 0;
|
chop_cnt = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
blob_t *blob = malloc(sizeof (blob_t));
|
|
||||||
|
|
||||||
if(!chop_cnt){
|
if(!chop_cnt){
|
||||||
blob->commands = strtok_r (str, delim, &last);
|
blob->commands = strtok_r (str, delim, &last);
|
||||||
|
|
||||||
|
@ -369,13 +366,6 @@ blob_t * setupBlob(char * str){
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
free(blob);
|
free(blob);
|
||||||
|
|
||||||
#ifndef AVR
|
|
||||||
if (scrolltext != NULL) {
|
|
||||||
free(scrolltext);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;//no more blobs to parse
|
return 0;//no more blobs to parse
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue