version 1.19, 2001/11/19 19:02:13 |
version 1.24, 2003/06/03 02:56:06 |
|
|
* 2. Redistributions in binary form must reproduce the above copyright |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* 3. Neither the name of the University nor the names of its contributors |
* must display the following acknowledgement: |
|
* This product includes software developed by the University of |
|
* California, Berkeley and its contributors. |
|
* 4. Neither the name of the University nor the names of its contributors |
|
* may be used to endorse or promote products derived from this software |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* without specific prior written permission. |
* |
* |
|
|
|
|
|
|
void |
void |
cal() |
cal(void) |
{ |
{ |
int printing; |
int printing; |
char *p; |
char *p; |
|
|
char buf[2048 + 1], *prefix = NULL; |
char buf[2048 + 1], *prefix = NULL; |
struct event *events, *cur_evt, *ev1, *tmp; |
struct event *events, *cur_evt, *ev1, *tmp; |
struct match *m; |
struct match *m; |
|
size_t nlen; |
|
|
events = NULL; |
events = NULL; |
cur_evt = NULL; |
cur_evt = NULL; |
|
|
if (m->bodun && prefix) { |
if (m->bodun && prefix) { |
int l1 = strlen(prefix); |
int l1 = strlen(prefix); |
int l2 = strlen(p); |
int l2 = strlen(p); |
|
int len = l1 + l2 + 2; |
if ((cur_evt->ldesc = |
if ((cur_evt->ldesc = |
malloc(l1 + l2)) == NULL) |
malloc(len)) == NULL) |
err(1, "malloc"); |
err(1, "malloc"); |
sprintf(cur_evt->ldesc, |
snprintf(cur_evt->ldesc, len, |
"\t%s %s", prefix, p + 1); |
"\t%s %s", prefix, p + 1); |
} else if ((cur_evt->ldesc = |
} else if ((cur_evt->ldesc = |
strdup(p)) == NULL) |
strdup(p)) == NULL) |
|
|
} |
} |
} |
} |
else if (printing) { |
else if (printing) { |
if ((ev1->ldesc = realloc(ev1->ldesc, |
nlen = strlen(ev1->ldesc) + strlen(buf) + 2; |
(2 + strlen(ev1->ldesc) + strlen(buf)))) == NULL) |
if ((ev1->ldesc = realloc(ev1->ldesc, nlen)) == NULL) |
err(1, NULL); |
err(1, NULL); |
strcat(ev1->ldesc, "\n"); |
snprintf(ev1->ldesc, nlen, "%s\n%s", ev1->ldesc, buf); |
strcat(ev1->ldesc, buf); |
|
} |
} |
} |
} |
tmp = events; |
tmp = events; |
|
|
|
|
|
|
FILE * |
FILE * |
opencal() |
opencal(void) |
{ |
{ |
int pdes[2]; |
int pdes[2], fdin; |
int fdin; |
struct stat st; |
|
|
/* open up calendar file as stdin */ |
/* open up calendar file as stdin */ |
if ((fdin = open(calendarFile, O_RDONLY)) == -1) { |
if ((fdin = open(calendarFile, O_RDONLY)) == -1 || |
|
fstat(fdin, &st) == -1 || !S_ISREG(st.st_mode)) { |
if (!doall) { |
if (!doall) { |
char *home = getenv("HOME"); |
char *home = getenv("HOME"); |
if (home == NULL || *home == '\0') |
if (home == NULL || *home == '\0') |
|
|
calendarFile, calendarHome, calendarFile); |
calendarFile, calendarHome, calendarFile); |
} |
} |
} |
} |
|
|
if (pipe(pdes) < 0) |
if (pipe(pdes) < 0) |
return (NULL); |
return (NULL); |
switch (vfork()) { |
switch (vfork()) { |
|
|
(void)close(pdes[1]); |
(void)close(pdes[1]); |
} |
} |
(void)close(pdes[0]); |
(void)close(pdes[0]); |
/* Set stderr to /dev/null. Necessary so that cron does not |
/* |
|
* Set stderr to /dev/null. Necessary so that cron does not |
* wait for cpp to finish if it's running calendar -a. |
* wait for cpp to finish if it's running calendar -a. |
*/ |
*/ |
if (doall) { |
if (doall) { |