freebsd-ports/sysutils/anacron/files/patch-aa
Edwin Groothuis 1891fd41b9 New port: anacron
Anacron is a periodic command scheduler.  It executes
	commands at intervals specified in days.  Unlike cron, it
	does not assume that the system is running continuously.
	It can therefore be used to control the execution of daily,
	weekly and monthly jobs (or anything with a period of n
	days), on systems that don't run 24 hours a day.

	Anacron is not an attempt to make cron redundant.

PR:		ports/55959
Submitted by:	Derik van Zuetphen <dz@426.ch>
2003-10-04 00:29:47 +00:00

275 lines
7.6 KiB
Text

diff -uN ../anacron-2.3/Makefile ./Makefile
--- ../anacron-2.3/Makefile Fri Jun 23 00:26:11 2000
+++ ./Makefile Fri May 2 22:16:51 2003
@@ -19,16 +19,16 @@
# `COPYING' that comes with the Anacron source distribution.
-PREFIX =
-BINDIR = $(PREFIX)/usr/sbin
-MANDIR = $(PREFIX)/usr/man
+PREFIX ?= /usr/local
+BINDIR = $(PREFIX)/sbin
+MANDIR = $(PREFIX)/man
CFLAGS = -Wall -pedantic -O2
#CFLAGS = -Wall -O2 -g -DDEBUG
# If you change these, please update the man-pages too
# Only absolute paths here, please
SPOOLDIR = /var/spool/anacron
-ANACRONTAB = /etc/anacrontab
+ANACRONTAB = $(PREFIX)/etc/anacrontab
RELEASE = 2.3
package_name = anacron-$(RELEASE)
@@ -64,7 +64,7 @@
.PHONY: installdirs
installdirs:
- $(INSTALL_DIR) $(BINDIR) $(PREFIX)$(SPOOLDIR) \
+ $(INSTALL_DIR) $(BINDIR) $(SPOOLDIR) \
$(MANDIR)/man5 $(MANDIR)/man8
.PHONY: install
@@ -72,6 +72,7 @@
$(INSTALL_PROGRAM) anacron $(BINDIR)/anacron
$(INSTALL_DATA) anacrontab.5 $(MANDIR)/man5/anacrontab.5
$(INSTALL_DATA) anacron.8 $(MANDIR)/man8/anacron.8
+ $(INSTALL_DATA) anacrontab.sample $(PREFIX)/etc/anacrontab.sample
.PHONY: clean
clean:
diff -uN ../anacron-2.3/anacron.8 ./anacron.8
--- ../anacron-2.3/anacron.8 Fri Jun 23 00:42:05 2000
+++ ./anacron.8 Fri May 2 21:57:56 2003
@@ -18,7 +18,7 @@
usually controlled by \fBcron\fR.
.PP
When executed, Anacron reads a list of jobs from a configuration file, normally
-.I /etc/anacrontab
+.I /usr/local/etc/anacrontab
(see \fBanacrontab(5)\fR). This file
contains the list of jobs that Anacron controls. Each
job entry specifies a period in days,
@@ -84,7 +84,7 @@
.TP
.B -n
Run jobs now. Ignore the delay specifications in the
-.I /etc/anacrontab
+.I /usr/local/etc/anacrontab
file. This options implies \fB-s\fR.
.TP
.B -d
@@ -117,7 +117,7 @@
for more information.
.SH FILES
.TP
-.I /etc/anacrontab
+.I /usr/local/etc/anacrontab
Contains specifications of jobs. See \fBanacrontab(5)\fR for a complete
description.
.TP
diff -uN ../anacron-2.3/anacrontab.5 ./anacrontab.5
--- ../anacron-2.3/anacrontab.5 Wed Jun 21 01:12:18 2000
+++ ./anacrontab.5 Fri May 2 21:58:31 2003
@@ -1,9 +1,9 @@
.TH ANACRONTAB 5 1998-02-02 "Itai Tzur" "Anacron Users' Manual"
.SH NAME
-/etc/anacrontab \- configuration file for anacron
+/usr/local/etc/anacrontab \- configuration file for anacron
.SH DESCRIPTION
The file
-.I /etc/anacrontab
+.I /usr/local/etc/anacrontab
describes the jobs controlled by \fBanacron(8)\fR. Its lines can be of
three kinds: job-description lines, environment
assignments, or empty lines.
diff -uN ../anacron-2.3/anacrontab.sample ./anacrontab.sample
--- ../anacron-2.3/anacrontab.sample Thu Jan 1 01:00:00 1970
+++ ./anacrontab.sample Sat May 3 20:14:43 2003
@@ -0,0 +1,12 @@
+
+PATH=/bin:/sbin:/usr/bin:/usr/sbin
+
+# days make sure the command is executed at least every 'days' days
+# delay delay in minutes, before a command starts
+# id unique id of a command
+
+# days delay id command
+1 5 daily periodic daily
+7 15 weekly periodic weekly
+30 60 monthly periodic monthly
+
diff -uN ../anacron-2.3/matchrx.c ./matchrx.c
--- ../anacron-2.3/matchrx.c Wed Jun 21 01:12:18 2000
+++ ./matchrx.c Thu May 1 14:46:35 2003
@@ -23,6 +23,7 @@
#include <stdio.h>
+#include <unistd.h>
#include <regex.h>
#include <stdarg.h>
#include <stdlib.h>
diff -uN ../anacron-2.3/readtab.c ./readtab.c
--- ../anacron-2.3/readtab.c Fri Jun 23 00:13:12 2000
+++ ./readtab.c Mon Aug 25 16:46:18 2003
@@ -19,6 +19,11 @@
The GNU General Public License can also be found in the file
`COPYING' that comes with the Anacron source distribution.
+
+ Changes:
+
+ May 2003 (Derik van Zuetphen)
+ replaced obstack with malloc/realloc calls
*/
@@ -29,7 +34,6 @@
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
-#include <obstack.h>
#include <limits.h>
#include <fnmatch.h>
#include <unistd.h>
@@ -37,8 +41,6 @@
#include "global.h"
#include "matchrx.h"
-static struct obstack input_o; /* holds input line */
-static struct obstack tab_o; /* holds processed data read from anacrontab */
static FILE *tab;
job_rec **job_array;
int njobs; /* number of jobs to run */
@@ -47,9 +49,7 @@
static job_rec *last_job_rec; /* last job stored in memory, at the moment */
static env_rec *last_env_rec; /* last environment assignment stored */
-/* some definitions for the obstack macros */
-#define obstack_chunk_alloc xmalloc
-#define obstack_chunk_free free
+#define MAXTABLINE 1000
static void *
xmalloc (size_t size)
@@ -63,6 +63,18 @@
return ptr;
}
+static void *
+xrealloc (void *mem, size_t size)
+/* Just like standard realloc(), only never returns NULL. */
+{
+ void * ptr;
+
+ ptr = realloc(mem,size);
+ if (ptr == NULL)
+ die("Memory exhausted");
+ return ptr;
+}
+
static int
conv2int(const char *s)
/* Return the int or -1 on over/under-flow
@@ -78,19 +90,20 @@
}
static char *
-read_tab_line ()
+read_tab_line (char *line)
/* Read one line and return a pointer to it.
Return NULL if no more lines.
*/
{
int c;
+ int i = 0;
if (feof(tab)) return NULL;
- while ((c = getc(tab)) != EOF && c != '\n')
- obstack_1grow(&input_o, c);
+ while (i < MAXTABLINE-1 && (c = getc(tab)) != EOF && c != '\n')
+ line[i++] = c;
if (ferror(tab)) die_e("Error reading %s", anacrontab);
- obstack_1grow(&input_o, '\0');
- return obstack_finish(&input_o);
+ line[i] = 0;
+ return line;
}
static int
@@ -119,8 +132,8 @@
var_len = strlen(env_var);
val_len = strlen(value);
- er = obstack_alloc(&tab_o, sizeof(env_rec));
- er->assign = obstack_alloc(&tab_o, var_len + 1 + val_len + 1);
+ er = (env_rec*)xmalloc(sizeof(env_rec));
+ er->assign = (char*)xmalloc(var_len + 1 + val_len + 1);
strcpy(er->assign, env_var);
er->assign[var_len] = '=';
strcpy(er->assign + var_len + 1, value);
@@ -151,14 +164,14 @@
anacrontab, line_num);
return;
}
- jr = obstack_alloc(&tab_o, sizeof(job_rec));
+ jr = (job_rec*)xmalloc(sizeof(job_rec));
jr->period = period;
jr->delay = delay;
jr->tab_line = line_num;
- jr->ident = obstack_alloc(&tab_o, ident_len + 1);
+ jr->ident = (char*)xmalloc(ident_len + 1);
strcpy(jr->ident, ident);
jr->arg_num = job_arg_num(ident);
- jr->command = obstack_alloc(&tab_o, command_len + 1);
+ jr->command = (char*)xmalloc(command_len + 1);
strcpy(jr->command, command);
jr->job_pid = jr->mailer_pid = 0;
if (last_job_rec != NULL) last_job_rec->next = jr;
@@ -222,7 +235,7 @@
read_tab()
/* Read the anacrontab file into memory */
{
- char *tab_line;
+ char tab_line[MAXTABLINE];
first_job_rec = last_job_rec = NULL;
first_env_rec = last_env_rec = NULL;
@@ -231,14 +244,10 @@
/* Open the anacrontab file */
tab = fopen(anacrontab, "r");
if (tab == NULL) die_e("Error opening %s", anacrontab);
- /* Initialize the obstacks */
- obstack_init(&input_o);
- obstack_init(&tab_o);
- while ((tab_line = read_tab_line()) != NULL)
+ while ((read_tab_line(tab_line)) != NULL)
{
line_num++;
parse_tab_line(tab_line);
- obstack_free(&input_o, tab_line);
}
if (fclose(tab)) die_e("Error closing %s", anacrontab);
}
@@ -269,16 +278,17 @@
j = first_job_rec;
njobs = 0;
+ job_array = NULL;
while (j != NULL)
{
if (j->arg_num != -1 && (update_only || consider_job(j)))
{
+ job_array = (job_rec**)xrealloc(job_array, (njobs+1)*sizeof(j));
+ job_array[njobs] = j;
njobs++;
- obstack_grow(&tab_o, &j, sizeof(j));
}
j = j->next;
}
- job_array = obstack_finish(&tab_o);
/* sort the jobs */
qsort(job_array, njobs, sizeof(*job_array),