string escaping
This commit is contained in:
@@ -13,26 +13,19 @@ extern unsigned int terminal_height;
|
||||
extern unsigned int terminal_width;
|
||||
char previewd;
|
||||
|
||||
char* text(char *path, unsigned long *file_size);
|
||||
char* text(file *f);
|
||||
void images_print(char *file_name);
|
||||
void images_clear();
|
||||
char* generic(char *path);
|
||||
char* generic(file *f);
|
||||
|
||||
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';
|
||||
char* get_mimetype(file *f){
|
||||
static const char *cmd_str = "file --mime-type -b";
|
||||
char *cmd = parse_cmd(cmd_str, f);
|
||||
|
||||
FILE *cmd_open = popen(cmd, "r");
|
||||
char *line = NULL;
|
||||
size_t size = 0;
|
||||
|
||||
free(cmd);
|
||||
if (getline(&line, &size, cmd_open) != -1){
|
||||
pclose(cmd_open);
|
||||
@@ -42,57 +35,60 @@ char* get_mimetype(char *path){
|
||||
return "unknown";
|
||||
}
|
||||
}
|
||||
char* preview_file(char *file_name, unsigned long file_size){
|
||||
char* preview_file(file *f){
|
||||
/* this calls "file" on path */
|
||||
|
||||
char *file_buffer;
|
||||
|
||||
|
||||
char *mime = get_mimetype(file_name);
|
||||
char *mime = get_mimetype(f);
|
||||
|
||||
#if SETTINGS_UEBERZUG_IMAGE_PREVIEW != 0
|
||||
images_clear();
|
||||
#endif
|
||||
|
||||
if (strstr(mime, "text")) {
|
||||
file_buffer = text(file_name, &file_size);
|
||||
file_buffer = text(f);
|
||||
#if SETTINGS_UEBERZUG_IMAGE_PREVIEW != 0
|
||||
} else if (strstr(mime, "image")) {
|
||||
file_buffer = generic(file_name);
|
||||
images_print(file_name);
|
||||
file_buffer = generic(f);
|
||||
images_print(f->file_name);
|
||||
previewd = 1;
|
||||
#endif
|
||||
} else {
|
||||
file_buffer = generic(file_name);
|
||||
file_buffer = generic(f);
|
||||
}
|
||||
|
||||
free(mime);
|
||||
return file_buffer;
|
||||
|
||||
}
|
||||
char* text(char *path, unsigned long *file_size){
|
||||
char* text(file *f){
|
||||
|
||||
unsigned long size = (terminal_width/2) * terminal_height;
|
||||
if (size > *file_size) {
|
||||
size = *file_size;
|
||||
if (size > f->file_size) {
|
||||
size = f->file_size;
|
||||
}
|
||||
char *file_buffer = malloc(size + 1);
|
||||
FILE *fp = fopen(path, "r");
|
||||
FILE *fp = fopen(f->file_name, "r");
|
||||
if (fread(file_buffer, size, 1, fp) != 0) {
|
||||
fclose(fp);
|
||||
file_buffer[size] = '\0';
|
||||
return file_buffer;
|
||||
} else {
|
||||
fclose(fp);
|
||||
return "failed reading file";
|
||||
}
|
||||
}
|
||||
char* generic(char *path){
|
||||
char *cmd;
|
||||
concat(cmd, "file ./\"", path, 0);
|
||||
concat(cmd, cmd, "\"", 1);
|
||||
char* generic(file *f){
|
||||
static const char *cmd_str = "file ";
|
||||
char *cmd = parse_cmd(cmd_str, f);
|
||||
|
||||
FILE *cmd_open = popen(cmd, "r");
|
||||
char *line = NULL;
|
||||
size_t size = 0;
|
||||
|
||||
free(cmd);
|
||||
if (getline(&line, &size, cmd_open) != -1) {
|
||||
pclose(cmd_open);
|
||||
return line;
|
||||
|
||||
Reference in New Issue
Block a user