NEWS: Welcome to my new homepage! <3

util.c - poet - A terminal-based blogging interface

poet

A terminal-based blogging interface
git clone git://192.168.2.2/poet
Log | Files | Refs | README

util.c (1892B)


      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <stdarg.h>
      4 #include <string.h>
      5 #include <time.h>
      6 
      7 char *util_read_file(char *filename) {
      8   FILE *fp = fopen(filename, "r+");
      9   fseek(fp, 0, SEEK_END);
     10   long len = ftell(fp);
     11   fseek(fp, 0, SEEK_SET);
     12   char *content = malloc(sizeof(char) * (len + 1));
     13   fread(content, sizeof(char), len, fp);
     14   content[len] = '\0';
     15   fclose(fp);
     16   return content;
     17 }
     18 
     19 char *util_format_json_date(char *json_date, char *format) {
     20   time_t now = time(NULL);
     21   struct tm *tm = localtime(&now);
     22   int year;
     23   int month;
     24   int day;
     25   sscanf(json_date, "%d-%d-%d", &year, &month, &day);
     26   tm->tm_year = year - 1900;
     27   tm->tm_mon = month - 1;
     28   tm->tm_mday = day;
     29   char buffer[100];
     30   int len = strftime(buffer, 100, format, tm);
     31   char *date = malloc(sizeof(char) * (len + 1));
     32   memcpy(date, buffer, len);
     33   date[len] = '\0';
     34   return date;
     35 }
     36 
     37 void str_append_len(char **buffer, char *value, int len) {
     38   int buffer_len = 0;
     39   if (*buffer != NULL) {
     40     buffer_len = strlen(*buffer);
     41   }
     42   *buffer = realloc(*buffer, sizeof(char) * (buffer_len + len + 1));
     43   memcpy(*buffer + buffer_len, value, len);
     44   (*buffer)[buffer_len + len] = '\0';
     45 }
     46 
     47 void str_append(char **buffer, char *value) {
     48   int len = strlen(value);
     49   str_append_len(buffer, value, len);
     50 }
     51 
     52 void str_appendf(char **buffer, const char *format, ...) {
     53   va_list args;
     54   va_start(args, format);
     55   char str[1000];
     56   vsnprintf(str, sizeof(str), format, args);
     57   str_append(buffer, str);
     58   va_end(args);
     59 }
     60 
     61 char *str_replace_all(char *buffer, char *str, char *replacement) {
     62   char *result = NULL;
     63   int str_len = strlen(str);
     64   for (int i = 0; i < (int) strlen(buffer); i++) {
     65     char *ptr = &buffer[i];
     66     if (strncmp(ptr, str, str_len) == 0) {
     67       str_append(&result, replacement);
     68       i += str_len - 1;
     69     }
     70     else {
     71       str_append_len(&result, &buffer[i], 1);
     72     }
     73   }
     74   return result;
     75 }