/* * Hybserv2 Services by Hybserv2 team * This program comes with absolutely NO WARRANTY * * Should you choose to use and/or modify this source code, please * do so under the terms of the GNU General Public License under which * this program is distributed. * * $Id$ */ #include "stdinc.h" #include "helpserv.h" #include "crypt.h" #define HELPFILE_PLAIN ".db" #define HELPFILE_KEYS ".keys" /* XXX - nedovrseno */ int findrecursive(int *fd_keys, int *fd_plain, const char *targetdir) { DIR *dirp = NULL; struct dirent *dp = NULL; struct stat sbuf; char fullname[PATH_MAX + 1]; static char *buffer; static int fd, filehash; if ((targetdir == NULL) || (*targetdir == '\0')) return 1; dirp = opendir(targetdir); if (dirp != NULL) { while ((dp = readdir(dirp)) != NULL) { if ((dp->d_name[0] == '\0') || (dp->d_name[0] == '.')) continue; memset(fullname, '\0', PATH_MAX + 1); strcpy(fullname, targetdir); if (fullname[strlen(fullname) - 1] != '/') strcat(fullname, "/"); strcat(fullname, dp->d_name); if (stat(fullname, &sbuf) < 0) continue; #if STAT_MACROS_BROKEN if ((sbuf.st_mode & S_IFDIR) == S_IFDIR) #else if (S_ISDIR(sbuf.st_mode)) #endif { findrecursive(fd_keys, fd_plain, fullname); } else { fd = open(fullname, O_RDONLY); if (fd == -1) continue; buffer = malloc(sbuf.st_size); read(fd, buffer, sbuf.st_size); printf("processing %s - %ld\n", fullname, sbuf.st_size); write(*fd_plain, buffer, PATH_MAX); write(*indexfd, buffer, HELPFILE_SIZE); close(fd); } } closedir(dirp); } return 0; } int main(int argc, char *argv[]) { int i, fd_keys, fd_plain, pos; char keysname[PATH_MAX + 1]; char plainname[PATH_MAX + 1]; for (i = 1; i < argc; i++) { if (strlen(argv[i]) > (PATH_MAX / 2)) continue; strcpy(plainname, argv[i]); pos = strlen(plainname) - 1; if (plainname[pos] == '/') plainname[pos] = '\0'; strcat(plainname, HELPFILE_PLAIN); strcat(keysname, HELPFILE_PLAIN); fd_keys = open(indexname, O_CREAT|O_WRONLY|O_TRUNC, S_IRUSR|S_IWUSR); fd_plain = open(indexname, O_CREAT|O_WRONLY|O_TRUNC, S_IRUSR|S_IWUSR); if ((fd_keys == -1) || (fd_plain == -1)) continue; findrecursive(&fd_keys, &fd_plain, argv[i]); close(fd_keys); close(fd_plain); } return 0; }