#define O_RDWR 2
#endif
+extern void malloc_warning ();
+extern char *index ();
+extern char *strerror ();
+
/* Command line args from shell, as list of strings */
Lisp_Object Vcommand_line_args;
/* The directory name from which Emacs was invoked. */
Lisp_Object Vinvocation_directory;
+/* The directory name in which to find subdirs such as lisp and etc.
+ nil means get them only from PATH_LOADSEARCH. */
+Lisp_Object Vinstallation_directory;
+
/* Hook run by `kill-emacs' before it does really anything. */
Lisp_Object Vkill_emacs_hook;
#ifdef SIGDANGER
-/* Handle bus errors, illegal instruction, etc. */
+/* Handler for SIGDANGER. */
SIGTYPE
memory_warning_signal (sig)
int sig;
int skip_args;
{
register int i;
+ Lisp_Object name, dir;
Vinvocation_name = Ffile_name_nondirectory (build_string (argv[0]));
Vinvocation_directory = Ffile_name_directory (build_string (argv[0]));
Vinvocation_directory = Ffile_name_directory (found);
}
+ Vinstallation_directory = Qnil;
+
+ if (!NILP (Vinvocation_directory))
+ {
+ dir = Vinvocation_directory;
+ name = Fexpand_file_name (Vinvocation_name, dir);
+ while (1)
+ {
+ Lisp_Object tem, lisp_exists, lib_src_exists;
+ Lisp_Object etc_exists, info_exists;
+
+ /* See if dir contains subdirs for use by Emacs. */
+ tem = Fexpand_file_name (build_string ("lisp"), dir);
+ lisp_exists = Ffile_exists_p (tem);
+ if (!NILP (lisp_exists))
+ {
+ tem = Fexpand_file_name (build_string ("lib-src"), dir);
+ lib_src_exists = Ffile_exists_p (tem);
+ if (!NILP (lib_src_exists))
+ {
+ tem = Fexpand_file_name (build_string ("etc"), dir);
+ etc_exists = Ffile_exists_p (tem);
+ if (!NILP (etc_exists))
+ {
+ tem = Fexpand_file_name (build_string ("info"), dir);
+ info_exists = Ffile_exists_p (tem);
+ if (!NILP (info_exists))
+ {
+ Vinstallation_directory
+ = Ffile_name_as_directory (dir);
+ break;
+ }
+ }
+ }
+ }
+
+ /* See if dir's parent contains those subdirs. */
+ tem = Fexpand_file_name (build_string ("../lisp"), dir);
+ lisp_exists = Ffile_exists_p (tem);
+ if (!NILP (lisp_exists))
+ {
+ tem = Fexpand_file_name (build_string ("../lib-src"), dir);
+ lib_src_exists = Ffile_exists_p (tem);
+ if (!NILP (lib_src_exists))
+ {
+ tem = Fexpand_file_name (build_string ("../etc"), dir);
+ etc_exists = Ffile_exists_p (tem);
+ if (!NILP (etc_exists))
+ {
+ tem = Fexpand_file_name (build_string ("../info"), dir);
+ info_exists = Ffile_exists_p (tem);
+ if (!NILP (info_exists))
+ {
+ tem = Fexpand_file_name (build_string (".."), dir);
+ Vinstallation_directory
+ = Ffile_name_as_directory (tem);
+ break;
+ }
+ }
+ }
+ }
+
+ /* If the Emacs executable is actually a link,
+ next try the dir that the link points into. */
+ tem = Ffile_symlink_p (name);
+ if (!NILP (tem))
+ {
+ name = tem;
+ dir = Ffile_name_directory (name);
+ }
+ else
+ break;
+ }
+ }
+
Vcommand_line_args = Qnil;
for (i = argc - 1; i >= 0; i--)
int skip_args = 0;
extern int errno;
extern sys_nerr;
- extern char *strerror ();
- extern void malloc_warning ();
/* Map in shared memory, if we are using that. */
#ifdef HAVE_SHM
clearerr (stdin);
-#ifdef BSD
+#ifdef BSD_PGRPS
if (initialized)
{
inherited_pgroup = EMACS_GETPGRP (0);
#endif
#ifdef AIX
- signal (20, fatal_error_signal);
- signal (21, fatal_error_signal);
- signal (22, fatal_error_signal);
- signal (24, fatal_error_signal);
-#if 0 /* mvn@library.ucla.edu says these are SIGIO on AIX 3.2.4. */
- signal (23, fatal_error_signal);
-#ifdef SIGIO
- signal (SIGAIO, fatal_error_signal);
- signal (SIGPTY, fatal_error_signal);
-#endif
-#endif
+/* 20 is SIGCHLD, 21 is SIGTTIN, 22 is SIGTTOU. */
+ signal (SIGXCPU, fatal_error_signal);
#ifndef _I386
signal (SIGIOINT, fatal_error_signal);
#endif
{
extern int my_edata;
Lisp_Object tem;
- extern void malloc_warning ();
CHECK_STRING (intoname, 0);
intoname = Fexpand_file_name (intoname, Qnil);
{
extern int my_edata;
Lisp_Object tem;
- extern void malloc_warning ();
CHECK_STRING (intoname, 0);
intoname = Fexpand_file_name (intoname, Qnil);
char *evarname, *defalt;
{
register char *path, *p;
- extern char *index ();
Lisp_Object lpath;
it to change priority. (Emacs sets its uid back to the real uid.)");
emacs_priority = 0;
+ staticpro (&Vinstallation_directory);
+ Vinstallation_directory = Qnil;
staticpro (&Vinvocation_name);
Vinvocation_name = Qnil;
staticpro (&Vinvocation_directory);