1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-10-31 21:57:12 +00:00
freebsd-ports/cad/cider/files/patch-bc
Kevin Lo fe660b3573 - Prevent possible buffer overflow
- Use erfc(3).

PR: 22343
Submitted by:	 MAINTAINER
2000-10-28 16:13:06 +00:00

214 lines
4.8 KiB
Plaintext

*** cider/common/src/bin/main.c.orig Sat Mar 12 08:20:59 1994
--- cider/common/src/bin/main.c Tue Oct 24 03:37:38 2000
***************
*** 25,30 ****
--- 25,37 ----
#include <pwd.h>
#endif
+ #ifdef HAS_GNUREADLINE
+ /* Added GNU Readline Support 11/3/97 -- Andrew Veliath <veliaa@rpi.edu> */
+ #include <readline/readline.h>
+ #include <readline/history.h>
+ #include "fteinput.h"
+ #endif
+
#ifdef HAS_UNIX_SIGS
#include <signal.h>
#endif
***************
*** 36,41 ****
--- 43,53 ----
#endif
#include "patchlev.h"
+
+ #ifdef __FreeBSD__
+ #include <ieeefp.h>
+ #endif
+
#include "suffix.h"
/* (Virtual) Machine architecture parameters */
***************
*** 53,58 ****
--- 65,75 ----
bool ft_intrpt = false; /* Set by the (void) signal handlers. */
bool ft_setflag = false; /* Don't abort after an interrupt. */
+ #ifdef HAS_GNUREADLINE
+ char gnu_history_file[512];
+ static char *application_name;
+ #endif
+
struct variable *(*if_getparam)( );
#ifdef BATCH
***************
*** 185,190 ****
--- 202,294 ----
#endif
+ #ifdef HAS_GNUREADLINE
+ /* Adapted ../lib/cp/lexical.c:prompt() for GNU Readline -- Andrew Veliath <veliaa@rpi.edu> */
+ static char *
+ prompt()
+ {
+ static char pbuf[128];
+ int n = sizeof(pbuf);
+ char *p = pbuf, *s;
+
+ if (cp_interactive == false)
+ return;
+ if (cp_promptstring == NULL)
+ s = "-> ";
+ else
+ s = cp_promptstring;
+ if (cp_altprompt)
+ s = cp_altprompt;
+ while (*s && (n > 1)) {
+ int w;
+ switch (strip(*s)) {
+ case '!':
+ w = snprintf(p, n, "%d", where_history() + 1);
+ w = (w >= n) ? n - 1 : w;
+ p += w;
+ n -= w;
+ break;
+ default:
+ *p = strip(*s); ++p;
+ --n;
+ break;
+ }
+ s++;
+ }
+ *p = 0;
+ return pbuf;
+ }
+
+ /* Process device events in Readline's hook since there is no where
+ else to do it now - AV */
+ int rl_event_func()
+ {
+ static REQUEST reqst = { checkup_option, 0 };
+ Input(&reqst, NULL);
+ return 0;
+ }
+
+ /* Added GNU Readline Support -- Andrew Veliath <veliaa@rpi.edu> */
+ void app_rl_readlines()
+ {
+ char *line, *expanded_line;
+
+ strcpy(gnu_history_file, getenv("HOME"));
+ strcat(gnu_history_file, "/.");
+ strcat(gnu_history_file, application_name);
+ strcat(gnu_history_file, "_history");
+
+ using_history();
+ read_history(gnu_history_file);
+
+ rl_readline_name = application_name;
+ rl_instream = cp_in;
+ rl_outstream = cp_out;
+ rl_event_hook = rl_event_func;
+
+ while (1) {
+ history_set_pos(history_length);
+ line = readline(prompt());
+ if (line && *line) {
+ int s = history_expand(line, &expanded_line);
+
+ if (s == 2) {
+ fprintf(stderr, "-> %s\n", expanded_line);
+ } else if (s == -1) {
+ fprintf(stderr, "readline: %s\n", expanded_line);
+ } else {
+ cp_evloop(expanded_line);
+ add_history(expanded_line);
+ }
+ free(expanded_line);
+ }
+ if (line) free(line);
+ else if (line == NULL) cp_evloop("quit");
+ }
+ /* History gets written in ../fte/misccoms.c com_quit */
+ }
+ #endif /* HAS_GNUREADLINE */
+
char *hlp_filelist[] = { "spice", "cider", 0 };
void
***************
*** 216,221 ****
--- 320,329 ----
#endif
+ #ifdef __FreeBSD__
+ fpsetmask(fpgetmask() & ~FP_X_INV & ~FP_X_DZ & ~FP_X_OFL);
+ #endif
+
/* MFB tends to jump to 0 on errors. This tends to catch it. */
if (started) {
fprintf(cp_err, "main: Internal Error: jump to zero\n");
***************
*** 236,241 ****
--- 344,356 ----
ARCHsize = 1;
#endif /* PARALLEL_ARCH */
+ #ifdef HAS_GNUREADLINE
+ if (!(application_name = strrchr(av[0],'/')))
+ application_name = av[0];
+ else
+ ++application_name;
+ #endif
+
#ifdef HAS_MAC_ARGCARGV
ac = initmac(&av);
#endif
***************
*** 472,478 ****
--- 587,597 ----
# ifdef HAS_UNIX_SIGS
/* Set up (void) signal handling */
if (!ft_batchmode) {
+ # ifdef HAS_GNUREADLINE
+ (void) signal(SIGINT, SIG_IGN);
+ # else
(void) signal(SIGINT, ft_sigintr);
+ # endif
(void) signal(SIGFPE, sigfloat);
# ifdef SIGTSTP
(void) signal(SIGTSTP, sigstop);
***************
*** 668,674 ****
--- 787,797 ----
} else {
(void) setjmp(jbuf);
cp_interactive = true;
+ #ifdef HAS_GNUREADLINE
+ app_rl_readlines();
+ #else
while (cp_evloop((char *) NULL) == 1) ;
+ #endif /* ifelse HAS_GNUREADLINE */
}
# else /* if BATCH */
***************
*** 708,714 ****
--- 831,841 ----
/* Nutmeg "main" */
(void) setjmp(jbuf);
cp_interactive = true;
+ #ifdef HAS_GNUREADLINE
+ app_rl_readlines();
+ #else
while (cp_evloop((char *) NULL) == 1) ;
+ #endif /* ifelse HAS_GNUREADLINE */
#endif