Index: crontab.1
--- crontab.1.orig	1999-02-10 07:22:37 +0100
+++ crontab.1	2008-04-14 14:33:15 +0200
@@ -26,7 +26,7 @@
 manipulates the crontab for a particular user.  Only the superuser may 
 specify a different user and/or crontab directory.  Generally the -e
 option is used to edit your crontab.  crontab will use /usr/bin/vi or
-the editor specified by your VISUAL environment variable to edit the
+the editor specified by your EDITOR environment variable to edit the
 crontab.
 .PP
 Unlike other crond/crontabs, this crontab does not try to do everything
Index: crontab.c
--- crontab.c.orig	2006-04-27 19:29:56 +0200
+++ crontab.c	2008-04-14 14:33:15 +0200
@@ -302,7 +302,7 @@
 
 	if (ChangeUser(user, 1) < 0)
 	    exit(0);
-	if ((ptr = getenv("VISUAL")) == NULL || strlen(ptr) > 256)
+	if ((ptr = getenv("EDITOR")) == NULL || strlen(ptr) > 256)
 	    ptr = PATH_VI;
 
 	snprintf(visual, sizeof(visual), "%s %s", ptr, file);
Index: database.c
--- database.c.orig	2006-05-16 18:20:01 +0200
+++ database.c	2008-04-14 14:33:15 +0200
@@ -225,7 +225,7 @@
 		if (--maxEntries == 0)
 		    break;
 
-		bzero(&line, sizeof(line));
+		memset(&line, 0, sizeof(line));
 
 		if (DebugOpt)
 		    log9("User %s Entry %s\n", userName, buf);
Index: defs.h
--- defs.h.orig	2006-05-16 18:24:45 +0200
+++ defs.h	2008-04-14 14:33:15 +0200
@@ -22,7 +22,7 @@
 #include <pwd.h>
 #include <unistd.h>
 #include <grp.h>
-#include <err.h>
+#include <sys/termios.h>
 
 #define Prototype extern
 #define arysize(ary)	(sizeof(ary)/sizeof((ary)[0]))
@@ -60,6 +60,9 @@
 #ifndef PATH_VI
 #define PATH_VI		"/usr/bin/vi"	/* location of vi	*/
 #endif
+#ifndef PIDFILE
+#define PIDFILE		"/var/run/dcron.pid"
+#endif
 
 #define VERSION	"V3.2"
 
@@ -93,3 +96,6 @@
 
 #include "protos.h"
 
+#define errx my_errx
+#define asprintf my_asprintf
+
Index: main.c
--- main.c.orig	2006-04-29 18:47:26 +0200
+++ main.c	2008-04-14 14:33:15 +0200
@@ -120,8 +120,14 @@
             perror("fork");
             exit(1);
         }
-        if (pid > 0)
+        if (pid > 0) {
+            FILE *fp;
+            if ((fp = fopen(PIDFILE, "w")) != NULL) {
+                fprintf(fp, "%d\n", pid);
+                fclose(fp);
+            }
             exit(0);
+        }
     }
 
     /* 
Index: subs.c
--- subs.c.orig	2006-04-27 19:29:56 +0200
+++ subs.c	2008-04-14 14:35:49 +0200
@@ -15,6 +15,8 @@
 Prototype int ChangeUser(const char *user, short dochdir);
 Prototype void vlog(int level, int fd, const char *ctl, va_list va);
 Prototype int slog(char *buf, const char *ctl, int nmax, va_list va, short useDate);
+Prototype void my_errx(int eval, const char *fmt, ...);
+Prototype int my_asprintf(char **ret, const char *fmt, ...);
 
 void 
 log9(const char *ctl, ...)
@@ -79,7 +81,7 @@
 
     buf[0] = 0;
     if (useDate)
-	strftime(buf, 128, "%d-%b-%y %H:%M  ", tp);
+	strftime(buf, 128, "%d-%b-%Y %H:%M  ", tp);
     vsnprintf(buf + strlen(buf), nmax, ctl, va);
     return(strlen(buf));
 }
@@ -97,9 +99,15 @@
         logn(9, "failed to get uid for %s", user);
         return(-1);
     }
-    setenv("USER", pas->pw_name, 1);
-    setenv("HOME", pas->pw_dir, 1);
-    setenv("SHELL", "/bin/sh", 1);
+    {
+        char buf[256];
+        snprintf(buf, sizeof(buf), "USER=%s", pas->pw_name);
+        putenv(buf);
+        snprintf(buf, sizeof(buf), "HOME=%s", pas->pw_dir);
+        putenv(buf);
+        snprintf(buf, sizeof(buf), "SHELL=%s", "/bin/sh");
+        putenv(buf);
+    }
 
     /*
      * Change running state to the user in question
@@ -143,3 +151,37 @@
 }
 
 #endif
+
+void my_errx(int eval, const char *fmt, ...)
+{
+    va_list ap;
+
+    va_start(ap, fmt);
+    vfprintf(stderr, fmt, ap);
+    va_end(ap);
+    exit(eval);
+}
+
+int my_asprintf(char **ret, const char *fmt, ...)
+{
+    va_list ap;
+    va_list ap2;
+    int l;
+
+    va_start(ap, fmt);
+#if defined(__STDC__) && defined(__STDC__VERSION__) && (__STDC_VERSION__ >= 199901L)
+    va_copy(ap2, ap);
+#else
+    __builtin_va_copy(ap2, ap);
+#endif
+    l = vsnprintf(NULL, 0, fmt, ap2);
+    if (((*ret) = (char *)malloc(l+1)) == NULL) {
+        va_end(ap);
+        *ret = NULL;
+        return -1;
+    }
+    l = vsnprintf((*ret), l+1, fmt, ap);
+    va_end(ap);
+    return l;
+}
+
