aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ctemplates.c105
-rw-r--r--src/ctemplates.h12
-rw-r--r--src/fbuf.c4
-rw-r--r--src/fbuf.h4
-rw-r--r--src/kmp.c4
-rw-r--r--src/kmp.h4
6 files changed, 66 insertions, 67 deletions
diff --git a/src/ctemplates.c b/src/ctemplates.c
index c154dcb..1de9b64 100644
--- a/src/ctemplates.c
+++ b/src/ctemplates.c
@@ -34,34 +34,34 @@
struct TMPL_token* TMPL_alloc_token(void);
void TMPL_free_token(struct TMPL_token* token);
-enum TMPL_tagtype starts_with_token(char* str, size_t strlen);
+enum TMPL_tagtype starts_with_token(const char* str, size_t strlen);
size_t tagtype_len(enum TMPL_tagtype t);
struct TMPL_token* scan_text(
- char* start,
+ const char* start,
size_t strlen,
size_t* consumed
);
struct TMPL_token* scan_tag(
- char* start,
+ const char* start,
size_t strlen,
size_t* consumed
);
void print_tokens(struct TMPL_token* head);
struct TMPL_varitem* TMPL_alloc_varitem(void);
void TMPL_free_varitem(struct TMPL_varitem* vi);
-void TMPL_add_var_to_varlist(
+int TMPL_add_var_to_varlist(
struct TMPL_varlist* t,
- char* varname,
- char* var
+ const char* varname,
+ const char* var
);
void print_ast_helper(
struct TMPL_tagnode* cursor,
int level
);
void print_ast(struct TMPL_templates* root);
-struct TMPL_token* TMPL_tokenize(char* tmplstr, size_t strlen);
+struct TMPL_token* TMPL_tokenize(const char* tmplstr, size_t strlen);
struct TMPL_tagnode* alloc_tagnode(void);
-size_t get_quoted_string(char* start, size_t len);
+size_t get_quoted_string(const char* start, size_t len);
int is_whitespace(char c);
struct TMPL_tagnode* parse_text(
struct TMPL_token* head,
@@ -92,13 +92,13 @@ int TMPL_free_hashmapitems(any_t a, any_t b);
void TMPL_free_varlist(struct TMPL_varlist* vl);
struct TMPL_loop* TMPL_alloc_loop(void);
void TMPL_free_loop(struct TMPL_loop* tl);
-void TMPL_add_varlist_to_loop(
+int TMPL_add_varlist_to_loop(
struct TMPL_loop* tl,
struct TMPL_varlist* vl
);
-void TMPL_add_loop_to_varlist(
+int TMPL_add_loop_to_varlist(
struct TMPL_varlist* vl,
- char* name,
+ const char* name,
struct TMPL_loop* l
);
struct TMPL_tagnode* parse(
@@ -106,7 +106,7 @@ struct TMPL_tagnode* parse(
struct TMPL_buf* errbuf
);
struct TMPL_templates* alloc_templates(void);
-struct TMPL_templates* compile(char* tmplstr);
+struct TMPL_templates* compile(const char* tmplstr);
int render_variable(
struct TMPL_templates* t,
struct TMPL_tagnode* node,
@@ -147,7 +147,7 @@ char* TMPL_render(
struct TMPL_varlist* varlist,
size_t* size_p
);
-struct TMPL_templates* TMPL_alloc_template(char* tmplstr);
+struct TMPL_templates* TMPL_alloc_template(const char* tmplstr);
void TMPL_free_template(struct TMPL_templates* t);
void TMPL_free_tagnode(struct TMPL_tagnode* tn);
char* TMPL_get_error(struct TMPL_templates* t);
@@ -178,7 +178,7 @@ TMPL_free_token(struct TMPL_token* token){
/*Check if it starts with the names of any of our tokens*/
enum TMPL_tagtype
-starts_with_token(char* str, size_t strlen){
+starts_with_token(const char* str, size_t strlen){
/*Make sure we get TMPL_ first*/
if(strlen < 5){
return tag_null;
@@ -282,14 +282,14 @@ tagtype_len(enum TMPL_tagtype t){
/*Quickly find the token*/
struct TMPL_token*
-scan_text(char* start, size_t strlen, size_t* consumed){
+scan_text(const char* start, size_t strlen, size_t* consumed){
struct TMPL_token* t = TMPL_alloc_token();
t->start = start;
enum TMPL_tagtype type = tag_null;
- char* cursor = start;
+ const char* cursor = start;
while(type == tag_null){
int left = strlen - (cursor - start);
- cursor = (char*)memchr(cursor,'<',left);
+ cursor = (const char*)memchr(cursor,'<',left);
if(cursor == NULL){
cursor = start + (strlen > 0 ? strlen : 1);
break;
@@ -302,14 +302,11 @@ scan_text(char* start, size_t strlen, size_t* consumed){
t->end = cursor;
t->length = t->end - t->start;
*consumed = t->length;
- char* c;
- for(c = start; c < cursor; c++){
- }
return t;
}
struct TMPL_token*
-scan_tag(char* start, size_t strlen, size_t* consumed){
+scan_tag(const char* start, size_t strlen, size_t* consumed){
struct TMPL_token* t = TMPL_alloc_token();
t->start = start;
char* cursor = (char*)memchr(start,'>',strlen);
@@ -324,7 +321,7 @@ print_tokens(struct TMPL_token* head){
struct TMPL_token* cursor = head;
while(cursor != NULL){
printf("char start is %p char end is %p cursor is %p type is %d\n",cursor->start, cursor->end,(void*)cursor,(int)cursor->type);
- char* i;
+ const char* i;
for(i = cursor->start; i != cursor->end; i++){
printf("%c",*i);
}
@@ -350,18 +347,18 @@ TMPL_free_varitem(struct TMPL_varitem* vi){
free(vi);
}
-void
-TMPL_add_var_to_varlist(struct TMPL_varlist* t, char* varname, char* var){
+/* Adds a variable to the variable list, returns -1 on error*/
+int
+TMPL_add_var_to_varlist(struct TMPL_varlist* t, const char* varname, const char* var){
struct TMPL_varitem* vi = TMPL_alloc_varitem();
vi->type = vartype_var;
size_t slen = strlen(var);/*strlen dosn't count \0*/
- vi->item.s = (char*)malloc(sizeof(char)*(slen + 1));
+ vi->item.s = (char*)malloc(sizeof(char)*(slen + 1));/*+1 for \0*/
vi->item.s[slen] = '\0';
memcpy(vi->item.s,var,slen);
- int succ = hashmap_put(t->map,varname,vi);
- if(succ != MAP_OK){
- exit(-1);
- }
+ int succ = hashmap_put(t->map,(char*)varname,(char*)vi);
+ if(succ != MAP_OK) return 0;
+ return -1;
}
void
@@ -430,10 +427,10 @@ print_ast(struct TMPL_templates* t){
}
struct TMPL_token*
-TMPL_tokenize(char* tmplstr, size_t m_strlen){
+TMPL_tokenize(const char* tmplstr, size_t m_strlen){
if(m_strlen == 0) return NULL;
struct TMPL_token* first;
- char* textcursor = tmplstr;
+ const char* textcursor = tmplstr;
size_t newlength;
enum TMPL_tagtype ttype;
ttype = starts_with_token(tmplstr+1,m_strlen);
@@ -475,7 +472,7 @@ alloc_tagnode(){
/*Finds a quoted string, allows for \"*/
size_t
-get_quoted_string(char* start, size_t len){
+get_quoted_string(const char* start, size_t len){
size_t i;
int setup = 0;
for(i = 0; i < len; i++){
@@ -519,9 +516,9 @@ parse_else(struct TMPL_token* head, struct TMPL_buf* errbuf){
struct TMPL_tagnode*
parse_elseif(struct TMPL_token* head, struct TMPL_buf* errbuf){
struct TMPL_tagnode* t = alloc_tagnode();
- char* start_of_attribs = head->start + TAG_ELSEIF_LENGTH;
+ const char* start_of_attribs = head->start + TAG_ELSEIF_LENGTH;
int name_offset = kmp(start_of_attribs,head->length, ATTRIBUTE_VARNAME,ATTRIBUTE_VARNAME_LENGTH);
- char* start_of_name = start_of_attribs + name_offset + ATTRIBUTE_VARNAME_LENGTH;
+ const char* start_of_name = start_of_attribs + name_offset + ATTRIBUTE_VARNAME_LENGTH;
while(is_whitespace(*start_of_name))
start_of_name++;
if(*start_of_name != '='){
@@ -544,7 +541,7 @@ parse_elseif(struct TMPL_token* head, struct TMPL_buf* errbuf){
if(testval_offset == -1){
t->TMPL_tag.ifelse.testval = NULL;
}else{
- char* start_of_value = start_of_attribs + testval_offset + ATTRIBUTE_VALUE_LENGTH;
+ const char* start_of_value = start_of_attribs + testval_offset + ATTRIBUTE_VALUE_LENGTH;
while(is_whitespace(*start_of_value))
start_of_value++;
if(*start_of_value != '='){
@@ -604,10 +601,10 @@ parse_elseif(struct TMPL_token* head, struct TMPL_buf* errbuf){
struct TMPL_tagnode*
parse_if(struct TMPL_token* head, struct TMPL_buf* errbuf){
struct TMPL_tagnode* t = alloc_tagnode();
- char* start_of_attribs = head->start + TAG_IF_LENGTH;
+ const char* start_of_attribs = head->start + TAG_IF_LENGTH;
/*Find the name of the varialbe*/
int name_offset = kmp(start_of_attribs,head->length,ATTRIBUTE_VARNAME,ATTRIBUTE_VARNAME_LENGTH);
- char* start_of_name = start_of_attribs + name_offset + ATTRIBUTE_VARNAME_LENGTH;
+ const char* start_of_name = start_of_attribs + name_offset + ATTRIBUTE_VARNAME_LENGTH;
while(is_whitespace(*start_of_name))
start_of_name++;
if(*start_of_name != '='){
@@ -630,7 +627,7 @@ parse_if(struct TMPL_token* head, struct TMPL_buf* errbuf){
if(testval_offset == -1){
t->TMPL_tag.ifelse.testval = NULL;
}else{
- char* start_of_value = start_of_attribs + testval_offset + ATTRIBUTE_VALUE_LENGTH;
+ const char* start_of_value = start_of_attribs + testval_offset + ATTRIBUTE_VALUE_LENGTH;
while(is_whitespace(*start_of_value))
start_of_value++;
if(*start_of_value != '='){
@@ -692,7 +689,7 @@ parse_if(struct TMPL_token* head, struct TMPL_buf* errbuf){
struct TMPL_tagnode*
parse_loop(struct TMPL_token* head, struct TMPL_buf* errbuf){
struct TMPL_tagnode* t = alloc_tagnode();
- char* loop_start = head->start + TAG_LOOP_LENGTH;
+ const char* loop_start = head->start + TAG_LOOP_LENGTH;
int loop_length = head->length - TAG_LOOP_LENGTH;
int name_offset = kmp(loop_start,loop_length, ATTRIBUTE_VARNAME, ATTRIBUTE_VARNAME_LENGTH);
if(name_offset == -1 && DEBUGGING){
@@ -701,7 +698,7 @@ parse_loop(struct TMPL_token* head, struct TMPL_buf* errbuf){
return NULL;
}
if(name_offset >= 0){
- char* start_of_name = loop_start + name_offset + ATTRIBUTE_VARNAME_LENGTH;
+ const char* start_of_name = loop_start + name_offset + ATTRIBUTE_VARNAME_LENGTH;
while(is_whitespace(*start_of_name))
start_of_name++;
if(*start_of_name != '='){
@@ -754,7 +751,7 @@ parse_variable(struct TMPL_token* head, struct TMPL_buf* errbuf){
struct TMPL_tagnode* t = alloc_tagnode();
/*<TMPL_VAR name="..." default="...">
^*/
- char* start_of_attribs = head->start + TAG_VAR_LENGTH;
+ const char* start_of_attribs = head->start + TAG_VAR_LENGTH;
/*Find the length of attributes*/
int attribs_length = head->length - TAG_VAR_LENGTH;
/*Find where the "name" attribute is*/
@@ -767,7 +764,7 @@ parse_variable(struct TMPL_token* head, struct TMPL_buf* errbuf){
bputs(errbuf,"\n");
}
if(in_name >= 0){
- char* start_of_name = start_of_attribs + in_name + ATTRIBUTE_VARNAME_LENGTH;
+ const char* start_of_name = start_of_attribs + in_name + ATTRIBUTE_VARNAME_LENGTH;
while(is_whitespace(*start_of_name))
start_of_name++;
if(*start_of_name != '='){
@@ -788,7 +785,7 @@ parse_variable(struct TMPL_token* head, struct TMPL_buf* errbuf){
t->TMPL_tag.var.name_len = name_size;
}
if(in_default >= 0){
- char* start_of_default = start_of_attribs + in_default + ATTRIBUTE_DEFAULT_LENGTH;
+ const char* start_of_default = start_of_attribs + in_default + ATTRIBUTE_DEFAULT_LENGTH;
while(is_whitespace(*start_of_default))
start_of_default++;
if(*start_of_default != '='){
@@ -840,6 +837,7 @@ TMPL_free_varlist(struct TMPL_varlist* vl){
struct TMPL_loop*
TMPL_alloc_loop(){
struct TMPL_loop* ret = (struct TMPL_loop*)malloc(sizeof(struct TMPL_loop));
+ if(ret == NULL) return NULL;
ret->loop_len = 0;
ret->varlist = NULL;
ret->next = NULL;
@@ -857,29 +855,30 @@ TMPL_free_loop(struct TMPL_loop* tl){
free(tl);
}
-void TMPL_add_varlist_to_loop(struct TMPL_loop* tl,struct TMPL_varlist* vl){
+int TMPL_add_varlist_to_loop(struct TMPL_loop* tl,struct TMPL_varlist* vl){
if(tl->loop_len == 0){/*Add the first node*/
tl->varlist = vl;
tl->tail = tl;
tl->loop_len++;
}else{
struct TMPL_loop* new = TMPL_alloc_loop();
+ if(new == NULL) return -1;
new->varlist = vl;
tl->tail->next = new;
tl->tail = new;
}
+ return 0;
}
-void
-TMPL_add_loop_to_varlist(struct TMPL_varlist* vl, char* name, struct TMPL_loop* l){
+/*Returns 0 for "OK" or -1 for "out of memory"*/
+int
+TMPL_add_loop_to_varlist(struct TMPL_varlist* vl, const char* name, struct TMPL_loop* l){
struct TMPL_varitem* vi = TMPL_alloc_varitem();
vi->type = vartype_loop;
vi->item.l = l;
- int err = hashmap_put(vl->map,name,vi);
- if(err != MAP_OK){
- }
- struct TMPL_varitem* back;
- hashmap_get(vl->map,name,(void**)&back);
+ int err = hashmap_put(vl->map,(char*)name,vi);
+ if(err == MAP_OK) return 0;
+ return -1;
}
@@ -930,7 +929,7 @@ alloc_templates(){
}
struct TMPL_templates*
-compile(char* tmplstr){
+compile(const char* tmplstr){
size_t slen = strlen(tmplstr);
struct TMPL_templates* ret = alloc_templates();
ret->out = alloc_tmpl_buf();
@@ -1161,7 +1160,7 @@ TMPL_render(struct TMPL_templates* t, struct TMPL_varlist* varlist, size_t* size
}
struct TMPL_templates*
-TMPL_alloc_template(char* tmplstr){
+TMPL_alloc_template(const char* tmplstr){
struct TMPL_templates* n = compile(tmplstr);
if(n != NULL){
diff --git a/src/ctemplates.h b/src/ctemplates.h
index 658a9f3..4d4fac5 100644
--- a/src/ctemplates.h
+++ b/src/ctemplates.h
@@ -170,8 +170,8 @@ struct TMPL_templates{
struct TMPL_token{
- char* start;//Start of token
- char* end;//End of token
+ const char* start;//Start of token
+ const char* end;//End of token
enum TMPL_tagtype type;//The type of token
size_t length;//Length of token, should always be end-start
struct TMPL_token* next;//The next token
@@ -179,9 +179,9 @@ struct TMPL_token{
unsigned int character;// Not used currently
}TMPL_token;
-void TMPL_add_var_to_varlist(struct TMPL_varlist* vl, char* name, char* value);
-void TMPL_add_loop_to_varlist(struct TMPL_varlist* vl, char* name, struct TMPL_loop* loop);
-void TMPL_add_varlist_to_loop(struct TMPL_loop* l, struct TMPL_varlist* vl);
+int TMPL_add_var_to_varlist(struct TMPL_varlist* vl, const char* name, const char* value);
+int TMPL_add_loop_to_varlist(struct TMPL_varlist* vl, const char* name, struct TMPL_loop* loop);
+int TMPL_add_varlist_to_loop(struct TMPL_loop* l, struct TMPL_varlist* vl);
struct TMPL_varlist* TMPL_alloc_varlist(void);
@@ -190,7 +190,7 @@ void TMPL_free_varlist(struct TMPL_varlist* t);
struct TMPL_varitem* TMPL_alloc_varitem(void);
void TMPL_free_varitem(struct TMPL_varitem* vi);
-struct TMPL_templates* TMPL_alloc_template(char* t);
+struct TMPL_templates* TMPL_alloc_template(const char* t);
void TMPL_free_template(struct TMPL_templates* t);
struct TMPL_loop* TMPL_alloc_loop(void);
diff --git a/src/fbuf.c b/src/fbuf.c
index 9ce4163..69a3475 100644
--- a/src/fbuf.c
+++ b/src/fbuf.c
@@ -23,7 +23,7 @@ void bputc(struct TMPL_buf* b,char s){
}
}
-void bputsn(struct TMPL_buf* b, char* s, size_t size){
+void bputsn(struct TMPL_buf* b, const char* s, size_t size){
if(b->head == NULL){
struct LLNode* new = (struct LLNode*)malloc(sizeof(struct LLNode));
new->length = size;
@@ -46,7 +46,7 @@ void bputsn(struct TMPL_buf* b, char* s, size_t size){
}
}
-void bputs(struct TMPL_buf* b, char* s){
+void bputs(struct TMPL_buf* b, const char* s){
size_t len = strlen(s);
bputsn(b,s,len);
}
diff --git a/src/fbuf.h b/src/fbuf.h
index 212979b..8f5837d 100644
--- a/src/fbuf.h
+++ b/src/fbuf.h
@@ -15,8 +15,8 @@ struct TMPL_buf{
struct LLNode* tail;
};
-void bputs(struct TMPL_buf* b, char* s);
-void bputsn(struct TMPL_buf* b, char* s, size_t size);
+void bputs(struct TMPL_buf* b, const char* s);
+void bputsn(struct TMPL_buf* b, const char* s, size_t size);
void bputc(struct TMPL_buf* b, char s);
diff --git a/src/kmp.c b/src/kmp.c
index d5923bf..f74dcf0 100644
--- a/src/kmp.c
+++ b/src/kmp.c
@@ -15,7 +15,7 @@ int* init_array(int size) {
return arr;
}
-int kmp(char* t,size_t tlen, char* p,size_t plen) {
+int kmp(const char* t,size_t tlen, const char* p,size_t plen) {
int m = plen;
int n = tlen;
@@ -46,7 +46,7 @@ int kmp(char* t,size_t tlen, char* p,size_t plen) {
return -1;
}
-void failure(char* p, int* f) {
+void failure(const char* p, int* f) {
f[0] = 0;
int i = 1;
int j = 0;
diff --git a/src/kmp.h b/src/kmp.h
index 24c609e..c02f16b 100644
--- a/src/kmp.h
+++ b/src/kmp.h
@@ -1,3 +1,3 @@
-void failure(char* pattern, int* f);
-int kmp(char* t,size_t tlen, char* p,size_t plen);
+void failure(const char* pattern, int* f);
+int kmp(const char* t,size_t tlen, const char* p,size_t plen);