From 0e816d23119c75153727b17b418066792d2ce8c8 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Fri, 1 Sep 1995 10:57:07 +0000 Subject: [PATCH] Minor changes. --- index/dir.c | 10 ++++++--- index/main.c | 67 ++++++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 51 insertions(+), 26 deletions(-) diff --git a/index/dir.c b/index/dir.c index c643b40..7c59200 100644 --- a/index/dir.c +++ b/index/dir.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: dir.c,v $ - * Revision 1.1 1995-09-01 10:34:51 adam + * Revision 1.2 1995-09-01 10:57:07 adam + * Minor changes. + * + * Revision 1.1 1995/09/01 10:34:51 adam * Added dir.c * */ @@ -63,13 +66,14 @@ struct dir_entry *dir_open (const char *rep) exit (1); } strcpy (entry[idx].name, dent->d_name); + idx++; } entry[idx].name = NULL; closedir (dir); return entry; } -int dir_cmp (const void *p1, const void *p2) +static int dir_cmp (const void *p1, const void *p2) { return strcmp (((struct dir_entry *) p1)->name, ((struct dir_entry *) p2)->name); @@ -90,7 +94,7 @@ void dir_free (struct dir_entry **e_p) assert (e); while (e[i].name) - free (e[i].name); + free (e[i++].name); free (e); *e_p = NULL; } diff --git a/index/main.c b/index/main.c index 1cb0a66..358b0a9 100644 --- a/index/main.c +++ b/index/main.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: main.c,v $ - * Revision 1.2 1995-09-01 10:30:24 adam + * Revision 1.3 1995-09-01 10:57:07 adam + * Minor changes. + * + * Revision 1.2 1995/09/01 10:30:24 adam * More work on indexing. Not working yet. * * Revision 1.1 1995/08/31 14:50:24 adam @@ -141,7 +144,8 @@ void text_extract (SYSNO sysno, int cmd, const char *fname) fclose (inf); } -void file_extract (int cmd, struct stat *fs, const char *fname) +void file_extract (int cmd, struct stat *fs, const char *fname, + const char *kname) { int i; char ext[128]; @@ -150,7 +154,7 @@ void file_extract (int cmd, struct stat *fs, const char *fname) const char *file_type; void *file_info; - log (LOG_DEBUG, "%c %s", cmd, fname); + log (LOG_DEBUG, "%c %s k=%s", cmd, fname, kname); return; for (i = strlen(fname); --i >= 0; ) if (fname[i] == '/') @@ -202,7 +206,7 @@ static void repository_extract_r (int cmd, char *rep) switch (fs.st_mode & S_IFMT) { case S_IFREG: - file_extract (cmd, &fs, rep); + file_extract (cmd, &fs, rep, rep); break; case S_IFDIR: repository_extract_r (cmd, rep); @@ -254,43 +258,57 @@ void repository_update_r (int cmd, char *dst, char *src) dst[dst_len] = '/'; else --dst_len; - while (e_dst[i_dst].name && e_src[i_src].name) + while (e_dst[i_dst].name || e_src[i_src].name) { - int sd = strcmp (e_dst[i_dst].name, e_src[i_src].name); - - strcpy (dst +dst_len+1, e_dst[i_dst].name); - strcpy (src +src_len+1, e_src[i_src].name); + int sd; + if (e_dst[i_dst].name && e_src[i_src].name) + sd = strcmp (e_dst[i_dst].name, e_src[i_src].name); + else if (e_src[i_src].name) + sd = 1; + else + sd = -1; + if (sd == 0) { + strcpy (dst +dst_len+1, e_dst[i_dst].name); + strcpy (src +src_len+1, e_src[i_src].name); + /* check type, date, length */ - stat (dst, &fs_dst); - stat (src, &fs_src); - - switch (fs_dst.st_mode & S_IFMT) + if (strcmp (e_dst[i_dst].name, ".") && + strcmp (e_dst[i_dst].name, "..")) { - case S_IFREG: - if (fs_src.st_mtime != fs_dst.st_mtime) + stat (dst, &fs_dst); + stat (src, &fs_src); + + switch (fs_dst.st_mode & S_IFMT) { - file_extract ('a', &fs_src, src); - file_extract ('d', &fs_dst, dst); + case S_IFREG: + if (fs_src.st_mtime != fs_dst.st_mtime) + { + file_extract ('d', &fs_dst, dst, dst); + file_extract ('a', &fs_src, src, dst); + } + break; + case S_IFDIR: + repository_update_r (cmd, dst, src); + break; } - break; - case S_IFDIR: - repository_update_r (cmd, dst, src); - break; } i_src++; i_dst++; } else if (sd > 0) { + strcpy (dst +dst_len+1, e_src[i_src].name); + strcpy (src +src_len+1, e_src[i_src].name); + stat (src, &fs_src); switch (fs_src.st_mode & S_IFMT) { case S_IFREG: - file_extract ('a', &fs_src, src); + file_extract ('a', &fs_src, src, dst); break; case S_IFDIR: repository_add_tree (cmd, dst, src); @@ -300,11 +318,14 @@ void repository_update_r (int cmd, char *dst, char *src) } else { + strcpy (dst +dst_len+1, e_dst[i_dst].name); + strcpy (src +src_len+1, e_dst[i_dst].name); + stat (dst, &fs_dst); switch (fs_dst.st_mode & S_IFMT) { case S_IFREG: - file_extract ('d', &fs_dst, dst); + file_extract ('d', &fs_dst, dst, dst); break; case S_IFDIR: repository_del_tree (cmd, dst, src); -- 1.7.10.4