Files
th/file_previews.c

59 lines
1.4 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#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 */
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;
*/