|
|
@@ -0,0 +1,85 @@ |
|
|
|
#include "cms_page.h" |
|
|
|
#include <stdlib.h> |
|
|
|
#include <stddef.h> |
|
|
|
#include <string.h> |
|
|
|
#include <dirent.h> |
|
|
|
#include <sys/types.h> |
|
|
|
#include <errno.h> |
|
|
|
|
|
|
|
cms_page* cms_page_create() |
|
|
|
{ |
|
|
|
cms_page* page = malloc(sizeof(cms_page)); |
|
|
|
return page; |
|
|
|
} |
|
|
|
|
|
|
|
int cms_page_parse(cms_page* page, char* str) |
|
|
|
{ |
|
|
|
size_t len = strlen(str) + 1; |
|
|
|
|
|
|
|
page->_str = malloc(len * sizeof(char)); |
|
|
|
|
|
|
|
if (page->_str == 0) |
|
|
|
return 1; //alloc error |
|
|
|
|
|
|
|
memcpy(page->_str, str, len * sizeof(char)); |
|
|
|
|
|
|
|
page->title = page->_str; |
|
|
|
|
|
|
|
size_t line = 0; |
|
|
|
for (size_t i = 0; i < len; ++i) |
|
|
|
{ |
|
|
|
char c = str[i]; |
|
|
|
|
|
|
|
switch (c) |
|
|
|
{ |
|
|
|
case '\n': |
|
|
|
line += 1; |
|
|
|
if (line == 1) |
|
|
|
page->slug = (page->_str + i + 1); |
|
|
|
|
|
|
|
case '\r': |
|
|
|
page->_str[i] = '\0'; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
if (line == 2) |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
if (line == 2) |
|
|
|
return 0; |
|
|
|
else |
|
|
|
return 1; //parse error |
|
|
|
} |
|
|
|
|
|
|
|
int cms_page_add_post(cms_page* page, cms_post* post) |
|
|
|
{ |
|
|
|
page->numposts += 1; |
|
|
|
page->posts = realloc(page->posts, page->numposts * sizeof(cms_post)); |
|
|
|
|
|
|
|
if (page->posts == 0) |
|
|
|
return 1; //alloc error |
|
|
|
|
|
|
|
page->posts[page->numposts - 1] = *post; |
|
|
|
} |
|
|
|
|
|
|
|
int cms_page_create_tree(cms_page* root, const char* path) |
|
|
|
{ |
|
|
|
DIR* dp = opendir(path); |
|
|
|
if (dp == NULL) |
|
|
|
{ |
|
|
|
switch (errno) |
|
|
|
{ |
|
|
|
case ENOMEM: |
|
|
|
return 1; |
|
|
|
case EACCES: |
|
|
|
return 2; |
|
|
|
case ENOENT: |
|
|
|
return 3; |
|
|
|
case ENOTDIR: |
|
|
|
return 4; |
|
|
|
default: |
|
|
|
return 5; |
|
|
|
} |
|
|
|
} |
|
|
|
} |