--- dump/dump.h.orig	Sun Dec 15 22:14:30 1996
+++ dump/dump.h	Wed Dec 25 16:11:06 1996
@@ -40,6 +40,9 @@
  *	@(#)dump.h	8.2 (Berkeley) 4/28/95
  */
 
+/* /etc/dumpdates will not be created, when not already here (Bug#3806).
+   David Frey */
+
 #define MAXINOPB	(MAXBSIZE / sizeof(struct dinode))
 #define MAXNINDIR	(MAXBSIZE / sizeof(daddr_t))
 
@@ -195,8 +198,8 @@
 int	nddates;		/* number of records (might be zero) */
 int	ddates_in;		/* we have read the increment file */
 struct	dumpdates **ddatev;	/* the arrayfied version */
-void	initdumptimes __P((void));
-void	getdumptime __P((void));
+void	initdumptimes __P((int));
+void	getdumptime __P((int));
 void	putdumptime __P((void));
 #define	ITITERATE(i, ddp) \
 	for (ddp = ddatev[i = 0]; i < nddates; ddp = ddatev[++i])
--- dump/itime.c.orig	Sun Dec 15 22:14:30 1996
+++ dump/itime.c	Wed Dec 25 16:18:15 1996
@@ -4,6 +4,8 @@
  *	Remy Card <card@Linux.EU.Org>, 1994, 1995, 1996
  *
  */
+/* /etc/dumpdates will not be created, when not already here (Bug#3806).
+   David Frey */
 
 /*-
  * Copyright (c) 1980, 1993
@@ -88,7 +90,8 @@
 static	void readdumptimes __P((FILE *));
 
 void
-initdumptimes()
+initdumptimes(createdumpdates)
+int createdumpdates;
 {
 	FILE *df;
 
@@ -101,22 +104,26 @@
 		/*
 		 * Dumpdates does not exist, make an empty one.
 		 */
-		msg("WARNING: no file `%s', making an empty one\n", dumpdates);
-		if ((df = fopen(dumpdates, "w")) == NULL) {
-			quit("cannot create %s: %s\n", dumpdates,
-			    strerror(errno));
-			/* NOTREACHED */
+		if (createdumpdates) {
+		  msg("WARNING: no file `%s', making an empty one\n", dumpdates);
+		  if ((df = fopen(dumpdates, "w")) == NULL) {
+			  quit("cannot create %s: %s\n", dumpdates,
+			      strerror(errno));
+			  /* NOTREACHED */
+		  }
+		  (void) fclose(df);
+		  if ((df = fopen(dumpdates, "r")) == NULL) {
+			  quit("cannot read %s even after creating it: %s\n",
+			      dumpdates, strerror(errno));
+			  /* NOTREACHED */
+		  }
 		}
+	}
+	if (df != NULL) {
+		(void) flock(fileno(df), LOCK_SH);
+		readdumptimes(df);
 		(void) fclose(df);
-		if ((df = fopen(dumpdates, "r")) == NULL) {
-			quit("cannot read %s even after creating it: %s\n",
-			    dumpdates, strerror(errno));
-			/* NOTREACHED */
-		}
 	}
-	(void) flock(fileno(df), LOCK_SH);
-	readdumptimes(df);
-	(void) fclose(df);
 }
 
 static void
@@ -148,7 +155,8 @@
 }
 
 void
-getdumptime()
+getdumptime(createdumpdates)
+int createdumpdates;
 {
 	register struct dumpdates *ddp;
 	register int i;
@@ -162,7 +170,9 @@
 	spcl.c_ddate = 0;
 	lastlevel = '0';
 
-	initdumptimes();
+	initdumptimes(createdumpdates);
+	if (ddp == NULL)
+		return;
 	/*
 	 *	Go find the entry with the same name for a lower increment
 	 *	and older date
--- dump/main.c.orig	Sun Dec 15 22:14:30 1996
+++ dump/main.c	Wed Dec 25 16:09:26 1996
@@ -4,6 +4,8 @@
  *	Remy Card <card@Linux.EU.Org>, 1994, 1995, 1996
  *
  */
+/* /etc/dumpdates will not be created, when not already here (Bug#3806).
+   David Frey */
 
 /*-
  * Copyright (c) 1980, 1991, 1993, 1994
@@ -331,7 +333,7 @@
 	spcl.c_level = level - '0';
 	spcl.c_type = TS_TAPE;
 	if (!Tflag)
-	        getdumptime();		/* /etc/dumpdates snarfed */
+	        getdumptime(uflag);		/* /etc/dumpdates snarfed */
 
 	msg("Date of this level %c dump: %s", level,
 #ifdef	__linux
--- dump/optr.c.orig	Sun Dec 15 22:14:30 1996
+++ dump/optr.c	Wed Dec 25 16:09:26 1996
@@ -4,6 +4,8 @@
  *	Remy Card <card@Linux.EU.Org>, 1994, 1995, 1996
  *
  */
+/* /etc/dumpdates will not be created, when not already here (Bug#3806).
+   David Frey */
 
 /*-
  * Copyright (c) 1980, 1988, 1993
@@ -534,22 +536,24 @@
 {
 	register int i;
 	register struct fstab *dt;
-	register struct dumpdates *dtwalk;
+	register struct dumpdates *dtwalk=NULL;
 	char *lastname, *date;
 	int dumpme;
 	time_t tnow;
 
 	(void) time(&tnow);
 	getfstab();		/* /etc/fstab input */
-	initdumptimes();	/* /etc/dumpdates input */
-	qsort((char *) ddatev, nddates, sizeof(struct dumpdates *), datesort);
-
-	if (arg == 'w')
-		(void) printf("Dump these file systems:\n");
-	else
+	initdumptimes(0);	/* /etc/dumpdates input */
+	if (*ddatev != NULL)
+	{
+	  qsort((char *) ddatev, nddates, sizeof(struct dumpdates *), datesort);
+
+	  if (arg == 'w')
+	 	(void) printf("Dump these file systems:\n");
+	  else
 		(void) printf("Last dump(s) done (Dump '>' file systems):\n");
-	lastname = "??";
-	ITITERATE(i, dtwalk) {
+	  lastname = "??";
+	  ITITERATE(i, dtwalk) {
 		if (strncmp(lastname, dtwalk->dd_name,
 		    sizeof(dtwalk->dd_name)) == 0)
 			continue;
@@ -568,6 +572,7 @@
 			    dt ? dt->fs_file : "",
 			    dtwalk->dd_level,
 			    date);
+	  }
 	}
 }
 
