diff -Nur --exclude Manifest anacron.orig/anacron-2.3-r2.ebuild anacron/anacron-2.3-r2.ebuild --- anacron.orig/anacron-2.3-r2.ebuild 2006-07-22 12:13:59 +0000 +++ anacron/anacron-2.3-r2.ebuild 2006-07-22 12:34:13 +0000 @@ -8,9 +8,9 @@ HOMEPAGE="http://anacron.sourceforge.net/" SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz" -LICENSE="as-is" +LICENSE="GPL-2" SLOT="0" -KEYWORDS="x86 ppc amd64" +KEYWORDS="x86 ppc amd64 ~x86-fbsd" IUSE="" DEPEND="virtual/libc @@ -21,7 +21,11 @@ src_unpack() { unpack ${A} cd ${S} - epatch ${FILESDIR}/${P}-compile-fix-from-debian.patch + epatch "${FILESDIR}"/${P}-compile-fix-from-debian.patch + epatch "${FILESDIR}"/${P}-tempnam.patch + if use elibc_FreeBSD; then + epatch "${FILESDIR}"/${P}-obstack.patch + fi sed -i "s:^CFLAGS =:CFLAGS = $CFLAGS:" Makefile } diff -Nur --exclude Manifest anacron.orig/files/anacron-2.3-obstack.patch anacron/files/anacron-2.3-obstack.patch --- anacron.orig/files/anacron-2.3-obstack.patch 1970-01-01 00:00:00 +0000 +++ anacron/files/anacron-2.3-obstack.patch 2006-07-22 12:35:58 +0000 @@ -0,0 +1,161 @@ +--- readtab.c.orig Fri Jun 23 00:13:12 2000 ++++ readtab.c Thu Jun 16 17:35:07 2005 +@@ -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 + #include + #include +-#include + #include + #include + #include +@@ -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), diff -Nur --exclude Manifest anacron.orig/files/anacron-2.3-tempnam.patch anacron/files/anacron-2.3-tempnam.patch --- anacron.orig/files/anacron-2.3-tempnam.patch 1970-01-01 00:00:00 +0000 +++ anacron/files/anacron-2.3-tempnam.patch 2006-07-22 12:35:10 +0000 @@ -0,0 +1,34 @@ +--- runjob.c.orig Thu Jun 16 17:04:19 2005 ++++ runjob.c Thu Jun 16 17:10:48 2005 +@@ -39,26 +39,14 @@ + temp_file() + /* Open a temporary file and return its file descriptor */ + { +- const int max_retries = 50; +- char *name; +- int fd, i; ++ int fd; ++ char name[] = "/tmp/anacron.XXXXXX"; ++ ++ fd = mkstemp(name); + +- i = 0; +- name = NULL; +- do +- { +- i++; +- free(name); +- name = tempnam(NULL, NULL); +- if (name == NULL) die("Can't find a unique temporary filename"); +- fd = open(name, O_RDWR | O_CREAT | O_EXCL | O_APPEND, +- S_IRUSR | S_IWUSR); +- /* I'm not sure we actually need to be so persistent here */ +- } while (fd == -1 && errno == EEXIST && i < max_retries); +- + if (fd == -1) die_e("Can't open temporary file"); + if (unlink(name)) die_e("Can't unlink temporary file"); +- free(name); ++ + fcntl(fd, F_SETFD, 1); /* set close-on-exec flag */ + return fd; + }