diff --git a/file_previews.c b/file_previews.c new file mode 100644 index 0000000..b1aaba7 --- /dev/null +++ b/file_previews.c @@ -0,0 +1,59 @@ +#include +#include +#include +#include "defines.h" + +char* text(char *path, unsigned long *file_size); +char* preview_file(char *path, unsigned long file_size){ + /* this calls "file" on path */ + /* TODO(2025-06-13T01:26:16) fix the noisy buffer */ + + char *file_buffer; + unsigned long cmd_size = 0; + + 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; + char *tmp = getline(&line, &size, cmd_open); + cmd_size = strlen(line); + pclose(cmd_open); + + if (strstr(line, "text")) { + file_buffer = text(path, &file_size); + } else { + file_buffer = malloc(cmd_size + 1); + memset(file_buffer, ' ', cmd_size); + memcpy(file_buffer, line, cmd_size); + file_buffer[cmd_size] = '\0'; + } + free(cmd); + 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; +} +/* + FILE *cmd_open = popen(cmd, "r"); + memset(file_buffer, ' ', file_size); + fread(file_buffer, file_size, 1, cmd_open); + file_buffer[file_size] = '\0'; + pclose(cmd_open); + return file_buffer; + */ diff --git a/file_previews.h b/file_previews.h new file mode 100644 index 0000000..00208f1 --- /dev/null +++ b/file_previews.h @@ -0,0 +1,3 @@ +#include "file_previews.c" + +char* preview_file(char *path, unsigned long file_size);