#include #include #include #include "defines.h" char* text(char *path, unsigned long *file_size); char* get_mimetype(char *path){ static char *cmd_str = "file --mime-type -b ./\""; unsigned long cmd_len = strlen(cmd_str); unsigned int path_len = strlen(path); char *cmd = malloc((cmd_len + path_len) + 2); memset(cmd, ' ', cmd_len + path_len); memcpy(cmd, cmd_str, cmd_len); memcpy(cmd + cmd_len, path, path_len); cmd[cmd_len + path_len] = '\"'; cmd[cmd_len + path_len + 1] = '\0'; FILE *cmd_open = popen(cmd, "r"); char *line; size_t size = 0; getline(&line, &size, cmd_open); pclose(cmd_open); return line; } char* preview_file(char *path, unsigned long file_size){ /* this calls "file" on path */ char *file_buffer; char *mime = get_mimetype(path); unsigned int mime_len = strlen(mime); if (strstr(mime, "text")) { file_buffer = text(path, &file_size); } else { file_buffer = malloc(mime_len + 1); memset(file_buffer, ' ', mime_len); memcpy(file_buffer, mime, mime_len); file_buffer[mime_len] = '\0'; } free(mime); return file_buffer; } char* text(char *path, unsigned long *file_size){ char *file_buffer = malloc(*file_size + 1); FILE *fp = fopen(path, "r"); fread(file_buffer, *file_size, 1, fp); file_buffer[*file_size] = '\0'; return file_buffer; }