+Sat Apr 29 00:26:06 2000 Christopher Faylor <cgf@cygnus.com>
+
+ * pkg.c: New file.
+ * setup.c (tarx): Skip already installed or older packages. Report
+ when a package has been updated.
+ (processdirlisting): Skip already installed or older packages.
+ (main): Detect -f option for forced installation. Initialize pkg stuff
+ if appropriate.
+ * setup.h: Add pkg definitions.
+
Thu Apr 27 14:21:30 2000 Christopher Faylor <cgf@cygnus.com>
* setup.c (findhref): Return NULL on empty string. Eat any trailing
static HANDLE devnull = NULL;
static HINTERNET session = NULL;
static SA deleteme = {NULL, 0, 0};
+static pkg *pkgstuff;
+static int forceinstall;
static void
filedel (void)
HANDLE hproc;
FILE *fp;
int filehere;
+ char *pkgname, *pkgversion;
+ pkg *pkg;
+
+ normalize_version (fn, &pkgname, &pkgversion);
+ pkg = find_pkg (pkgstuff, pkgname);
+ if (!newer_pkg (pkg, pkgversion))
+ {
+ warning ("Skipping extraction of package '%s'\n", pkgname);
+ return 1;
+ }
dpath = pathcat (dir, fn);
path = dtoupath (dpath);
warning ("Unable to reset protection on '%s' - %s\n",
files.array[filehere], _strerror (""));
+ warning ("%s package '%s'\n", write_pkg (pkg, pkgname, pkgversion) ?
+ "Updated" : "Refreshed", pkgname);
+
return 1;
}
{
int download = 0;
char *filename = strrchr (url, '/') + 1;
+ char *pkgname, *pkgversion;
+ pkg *pkg;
+
retval++;
+ normalize_version (filename, &pkgname, &pkgversion);
+ pkg = find_pkg (pkgstuff, pkgname);
+ if (!newer_pkg (pkg, pkgversion))
+ {
+ warning ("Skipping %s\n", filename);
+ continue;
+ }
+
if (download_when == ALWAYS || needfile (filename, filedate, filesize))
download = 1;
else
fprintf (uninst,
"@echo off\n" "%c:\n" "cd \"%s\"\n", *cwd, cwd);
+ fprintf (uninst, "bin\\regtool remove /HKLM/SOFTWARE/'Cygnus Solutions'/cygwin/'Installed Components'\n");
for (n = 0; n < files.count; ++n)
{
char *dpath;
static char rev[] = "$Revision$ ";
int
-main ()
+main (int argc, char **argv)
{
int retval = 1; /* Default to error code */
clock_t start;
char *revn, *p;
int fd = _open ("nul", _O_WRONLY | _O_BINARY);
+ while (*++argv)
+ if (strstr (*argv, "-f") != NULL)
+ {
+ forceinstall = 1;
+ break;
+ }
+
devnull = (HANDLE) _get_osfhandle (fd);
setbuf (stdout, NULL);
update =
prompt ("Install from the current directory (d) or from the Internet (i)", "i");
+
+ pkgstuff = init_pkgs ();
+ if (forceinstall)
+ {
+ static pkg dummy = {NULL, NULL};
+ pkgstuff = &dummy;
+ }
+
if (toupper (*update) == 'I')
{
char *dir = getdownloadsource ();
#include <stddef.h>
+/* Package versioning stuff */
+
+typedef struct
+{
+ char *name;
+ char *version;
+} pkg;
+
+pkg *init_pkgs (void);
+pkg * find_pkg (pkg *stuff, char *name);
+int write_pkg (pkg *pkg, char *name, char *version);
+int newer_pkg (pkg *pkg, char *version);
+void normalize_version (const char *fn, char **prod, char **version);
+void close_pkgs (void);
+
/* Routines in error.c. */
void lowmem (); /* Report low memory and exit the
application. */