2
============================================================================
3
Name : hstr_blacklist.c
4
Author : martin.dvorak@midforger.com
6
Description : Commands to be skipped from history.
7
============================================================================
14
#include "include/hstr_blacklist.h"
16
static const char *implicitCommandBlacklist[] = {
17
"ls", "pwd", "cd", "cd ..", "hh", "mc",
18
"ls ", "pwd ", "cd ", "cd .. ", "hh ", "mc "
21
void blacklist_init(Blacklist *blacklist)
23
blacklist->loaded=false;
24
blacklist->implicit=false;
25
blacklist->set=malloc(sizeof(HashSet));
26
hashset_init(blacklist->set);
29
char* blacklist_get_filename()
31
char *home = getenv(ENV_VAR_HOME);
32
char *fileName = (char*) malloc(strlen(home) + 1 + strlen(FILE_HH_BLACKLIST) + 1);
33
strcpy(fileName, home);
34
strcat(fileName, "/");
35
strcat(fileName, FILE_HH_BLACKLIST);
39
void blacklist_get(Blacklist *blacklist)
41
if(!blacklist->loaded) {
42
char* fileName = favorites_get_filename();
43
char *file_contents=NULL;
44
if(access(fileName, F_OK) != -1) {
47
FILE *input_file = fopen(fileName, "rb");
48
fseek(input_file, 0, SEEK_END);
49
input_file_size = ftell(input_file);
51
file_contents = malloc((input_file_size + 1) * (sizeof(char)));
52
if(fread(file_contents, sizeof(char), input_file_size, input_file)==-1) {
56
file_contents[input_file_size] = 0;
58
if(file_contents && strlen(file_contents)) {
59
char *p=strchr(file_contents,'\n');
63
char *pb=file_contents, *pe, *s;
64
pe=strchr(file_contents, '\n');
67
if(!hashset_contains(blacklist->set,pb)) {
69
hashset_add(blacklist->set,s);
77
// blacklist not found - use default one (flushed on exit)
78
blacklist->loaded=true;
79
blacklist->implicit=true;
80
int i, length=sizeof(implicitCommandBlacklist)/sizeof(implicitCommandBlacklist[0]);
81
for(i=0; i<length; i++) {
82
hashset_add(blacklist->set, implicitCommandBlacklist[i]);
89
bool blacklist_in(Blacklist *blacklist, char *cmd)
91
return hashset_contains(blacklist->set, cmd);
94
void blacklist_destroy(Blacklist *blacklist)
97
if(blacklist->implicit) {
98
// TODO save blacklist to file if implicit
100
hashset_destroy(blacklist->set, false);
101
free(blacklist->set);