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 }