X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=netinstall%2Ffind.cc;fp=netinstall%2Ffind.cc;h=dfaef53c6895dc31dc12f4a6d3bf807a76bf0094;hp=0000000000000000000000000000000000000000;hb=1ecbe603154527afa87c21523aedd8e3bda77c2f;hpb=131844b7560952b4f8e1cb8628d9115e0f2f29d2 diff --git a/netinstall/find.cc b/netinstall/find.cc new file mode 100644 index 0000000..dfaef53 --- /dev/null +++ b/netinstall/find.cc @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2000, Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * A copy of the GNU General Public License can be found at + * http://www.gnu.org/ + * + * Written by DJ Delorie + * + */ + +/* The purpose of this file is to doa recursive find on a given + directory, calling a given function for each file found. */ + +#include "win32.h" +#include +#include + +#include "port.h" + +static void (*for_each)(char *, unsigned int); +static char dir[_MAX_PATH], *found_part; + +static int +find_sub () +{ + WIN32_FIND_DATA wfd; + HANDLE h; + char *end = dir + strlen (dir); + int rv = 0; + + *end++ = '/'; + strcpy (end, "*"); + + h = FindFirstFile (dir, &wfd); + + if (h == INVALID_HANDLE_VALUE) + return 0; + + do { + if (strcmp (wfd.cFileName, ".") == 0 + || strcmp (wfd.cFileName, "..") == 0) + continue; + + strcpy (end, wfd.cFileName); + + if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + find_sub (); + else + { + for_each (found_part, wfd.nFileSizeLow); + rv ++; + } + + } while (FindNextFile (h, &wfd)); + + FindClose (h); + return rv; +} + +int +find (char *starting_dir, void (*_for_each)(char *, unsigned int)) +{ + strcpy (dir, starting_dir); + for_each = _for_each; + found_part = dir + strlen (dir) + 1; + + return find_sub (); +}