Implemented saving in subdirectories

This commit is contained in:
2014-10-20 17:01:30 +02:00
parent 4cd1a75acc
commit daedbc788c
2 changed files with 82 additions and 58 deletions
+81 -58
View File
@@ -3712,11 +3712,10 @@ int eli_compare(const void *e1, const void *e2)
/*------------------------------------------------------------------*/
void generate_new_file_name(char *file_name, char *path, int size)
void generate_subdir_name(char *file_name, char *subdir, int size)
{
char fn[MAX_PATH_LENGTH], subdir[MAX_PATH_LENGTH];
int status, year, month;
static int first = TRUE;
char fn[MAX_PATH_LENGTH], path[MAX_PATH_LENGTH];
int year, month;
// extract path from file_name
strlcpy(path, file_name, size);
@@ -3737,30 +3736,7 @@ void generate_new_file_name(char *file_name, char *path, int size)
else
sprintf(subdir, "19%02d", year);
// create new subdir
strlcat(path, subdir, size);
#ifdef OS_WINNT
status = mkdir(path);
#else
status = mkdir(path, 0755);
#endif
if (status == 0) {
if (first) {
eprintf("\nFound old directory structure. Creating subdirectories and moving files...\n");
first = FALSE;
}
eprintf("Created directory \"%s\"\n", path);
} else {
if (errno != EEXIST) {
eprintf("generate_new_file_name: %s\n", strerror(errno));
eprintf("Cannot create directory \"%s\"\n", path);
}
}
// assemble new path
strlcat(path, DIR_SEPARATOR_STR, size);
strlcat(path, fn, size);
strlcat(subdir, DIR_SEPARATOR_STR, size);
}
/*------------------------------------------------------------------*/
@@ -3768,18 +3744,45 @@ void generate_new_file_name(char *file_name, char *path, int size)
int restructure_dir(char *dir)
{
char *file_list;
int n1, n2, index;
char file_name[MAX_PATH_LENGTH], old_path[MAX_PATH_LENGTH], new_path[MAX_PATH_LENGTH];
int n1, n2, index, status;
char old_path[MAX_PATH_LENGTH], new_path[MAX_PATH_LENGTH],
subdir[MAX_PATH_LENGTH];
static int first = TRUE;
/* go through all entry files */
n1 = ss_file_find(dir, "??????a.log", &file_list);
for (index = 0; index < n1; index++) {
strlcpy(file_name, dir, sizeof(file_name));
strlcat(file_name, file_list + index * MAX_PATH_LENGTH, sizeof(file_name));
strlcpy(old_path, file_name, sizeof(old_path));
strlcpy(new_path, old_path, sizeof(new_path));
generate_subdir_name(file_list + index * MAX_PATH_LENGTH, subdir, sizeof(subdir));
// create new subdir
strlcpy(new_path, dir, MAX_PATH_LENGTH);
strlcat(new_path, subdir, MAX_PATH_LENGTH);
#ifdef OS_WINNT
status = mkdir(new_path);
#else
status = mkdir(new_path, 0755);
#endif
if (status == 0) {
if (first) {
eprintf("\nFound old directory structure. Creating subdirectories and moving files...\n");
first = FALSE;
}
eprintf("Created directory \"%s\"\n", new_path);
} else {
if (errno != EEXIST) {
eprintf("generate_subdir_name: %s\n", strerror(errno));
eprintf("Cannot create directory \"%s\"\n", new_path);
}
}
strlcpy(old_path, dir, sizeof(old_path));
strlcat(old_path, file_list + index * MAX_PATH_LENGTH, sizeof(old_path));
strlcpy(new_path, dir, sizeof(new_path));
strlcat(new_path, subdir, sizeof(new_path));
strlcat(new_path, file_list + index * MAX_PATH_LENGTH, sizeof(new_path));
generate_new_file_name(old_path, new_path, sizeof(new_path));
rename(old_path, new_path);
}
if (file_list)
@@ -3788,12 +3791,24 @@ int restructure_dir(char *dir)
/* go through all attachment files */
n2 = ss_file_find(dir, "??????_??????_*", &file_list);
for (index = 0; index < n2; index++) {
strlcpy(file_name, dir, sizeof(file_name));
strlcat(file_name, file_list + index * MAX_PATH_LENGTH, sizeof(file_name));
strlcpy(old_path, file_name, sizeof(old_path));
strlcpy(new_path, old_path, sizeof(new_path));
generate_subdir_name(file_list + index * MAX_PATH_LENGTH, subdir, sizeof(subdir));
// create new subdir
strlcpy(new_path, dir, MAX_PATH_LENGTH);
strlcat(new_path, subdir, MAX_PATH_LENGTH);
#ifdef OS_WINNT
status = mkdir(new_path);
#else
status = mkdir(new_path, 0755);
#endif
strlcpy(old_path, dir, sizeof(old_path));
strlcat(old_path, file_list + index * MAX_PATH_LENGTH, sizeof(old_path));
strlcpy(new_path, dir, sizeof(new_path));
strlcat(new_path, subdir, sizeof(new_path));
strlcat(new_path, file_list + index * MAX_PATH_LENGTH, sizeof(new_path));
generate_new_file_name(old_path, new_path, sizeof(new_path));
rename(old_path, new_path);
}
if (file_list)
@@ -3840,6 +3855,10 @@ int parse_file(LOGBOOK *lbs, char *file_name)
return EL_MEM_ERROR;
}
strlcpy(lbs->el_index[*lbs->n_el_index].subdir, file_name+strlen(lbs->data_dir), 256);
if (strrchr(lbs->el_index[*lbs->n_el_index].subdir, DIR_SEPARATOR))
*(strrchr(lbs->el_index[*lbs->n_el_index].subdir, DIR_SEPARATOR)+1) = 0;
if (strrchr(file_name, DIR_SEPARATOR))
strlcpy(str, strrchr(file_name, DIR_SEPARATOR)+1, sizeof(str));
else
@@ -3893,25 +3912,26 @@ int parse_file(LOGBOOK *lbs, char *file_name)
int scan_dir_tree(LOGBOOK *lbs, const char *dir, char **file_list, int *n)
{
int index, i;
int index, n_files;
char str[MAX_PATH_LENGTH];
char *fl, *p;
fl = NULL;
i = ss_file_find(dir, "*", &fl);
if (i == 0) {
n_files = ss_file_find(dir, "*", &fl);
if (n_files == 0) {
if (fl)
xfree(fl);
return 0;
}
if (*file_list == NULL)
*file_list = (char *)xmalloc(n_files*MAX_PATH_LENGTH);
else
*file_list = (char *)xrealloc(*file_list, ((*n)+n_files)*MAX_PATH_LENGTH);
/* go through all files */
for (index = 0; index < i; index++) {
for (index = 0; index < n_files; index++) {
if (fnmatch1("??????a.log", &fl[index * MAX_PATH_LENGTH]) == 0) {
if (*file_list == NULL)
*file_list = (char *)xmalloc(MAX_PATH_LENGTH);
else
*file_list = (char *)xrealloc(file_list, (*n+1)*MAX_PATH_LENGTH);
p = *file_list + ((*n) * MAX_PATH_LENGTH);
strlcpy(p, dir, MAX_PATH_LENGTH);
if (p[strlen(p)-1] != DIR_SEPARATOR)
@@ -3922,7 +3942,7 @@ int scan_dir_tree(LOGBOOK *lbs, const char *dir, char **file_list, int *n)
}
/* go through all sub-directories */
for (index = 0; index < i; index++) {
for (index = 0; index < n_files; index++) {
if (fnmatch1("????", &fl[index * MAX_PATH_LENGTH]) == 0 ||
fnmatch1("??", &fl[index * MAX_PATH_LENGTH]) == 0) {
if (strieq(fl + index * MAX_PATH_LENGTH, ".."))
@@ -3946,8 +3966,7 @@ int scan_dir_tree(LOGBOOK *lbs, const char *dir, char **file_list, int *n)
int el_build_index(LOGBOOK * lbs, BOOL rebuild)
/* scan all ??????a.log files and build an index table in eli[] */
{
char *file_list, error_str[256], base_dir[256],
file_name[MAX_PATH_LENGTH], *buffer;
char *file_list, error_str[256], base_dir[256], *buffer;
int index, n;
int i, status;
unsigned char digest[16];
@@ -4371,7 +4390,7 @@ int el_retrieve(LOGBOOK * lbs, int message_id, char *date, char attr_list[MAX_N_
if (index == *lbs->n_el_index)
return EL_NO_MSG;
sprintf(file_name, "%s%s", lbs->data_dir, lbs->el_index[index].file_name);
sprintf(file_name, "%s%s%s", lbs->data_dir, lbs->el_index[index].subdir, lbs->el_index[index].file_name);
fh = open(file_name, O_RDONLY | O_BINARY, 0644);
if (fh < 0) {
/* file might have been deleted, rebuild index */
@@ -4613,7 +4632,7 @@ int el_retrieve_attachment(LOGBOOK * lbs, int message_id, int n, char name[MAX_P
if (index == *lbs->n_el_index)
return EL_NO_MSG;
sprintf(file_name, "%s%s", lbs->data_dir, lbs->el_index[index].file_name);
sprintf(file_name, "%s%s%s", lbs->data_dir, lbs->el_index[index].subdir, lbs->el_index[index].file_name);
fh = open(file_name, O_RDONLY | O_BINARY, 0644);
if (fh < 0) {
/* file might have been deleted, rebuild index */
@@ -4664,8 +4683,10 @@ int el_retrieve_attachment(LOGBOOK * lbs, int message_id, int n, char name[MAX_P
break;
}
if (p)
strlcpy(name, p, MAX_PATH_LENGTH);
if (p) {
strlcpy(name, lbs->el_index[index].subdir, MAX_PATH_LENGTH);
strlcat(name, p, MAX_PATH_LENGTH);
}
return EL_SUCCESS;
}
@@ -4710,7 +4731,7 @@ int el_submit(LOGBOOK * lbs, int message_id, BOOL bedit, char *date, char attr_n
char file_name[256], dir[256], str[NAME_LENGTH], date1[256], attrib[MAX_N_ATTR][NAME_LENGTH],
reply_to1[MAX_REPLY_TO * 10], in_reply_to1[MAX_REPLY_TO * 10], encoding1[80], *message, *p,
*old_text, *buffer;
char attachment_all[64 * MAX_ATTACHMENTS];
char attachment_all[64 * MAX_ATTACHMENTS], subdir[MAX_PATH_LENGTH];
time_t ltime;
tail_size = orig_size = 0;
@@ -4738,7 +4759,7 @@ int el_submit(LOGBOOK * lbs, int message_id, BOOL bedit, char *date, char attr_n
return -1;
}
sprintf(file_name, "%s%s", lbs->data_dir, lbs->el_index[index].file_name);
sprintf(file_name, "%s%s%s", lbs->data_dir, lbs->el_index[index].subdir, lbs->el_index[index].file_name);
fh = open(file_name, O_CREAT | O_RDWR | O_BINARY, 0644);
if (fh < 0) {
xfree(message);
@@ -4840,7 +4861,9 @@ int el_submit(LOGBOOK * lbs, int message_id, BOOL bedit, char *date, char attr_n
sprintf(file_name, "%c%c%02d%c%ca.log", date1[14], date1[15], i + 1, date1[5], date1[6]);
sprintf(str, "%s%s", dir, file_name);
generate_subdir_name(file_name, subdir, sizeof(subdir));
sprintf(str, "%s%s%s", dir, subdir, file_name);
fh = open(str, O_CREAT | O_RDWR | O_BINARY, 0644);
if (fh < 0) {
xfree(message);
+1
View File
@@ -228,6 +228,7 @@ long _timezone;
typedef struct {
int message_id;
char subdir[256];
char file_name[32];
time_t file_time;
int offset;