summaryrefslogtreecommitdiff
path: root/src/process.h
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2013-08-23 10:57:07 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2013-08-23 10:57:07 -0700
commitc365c3558065fca4c11c3f46605d1045763485ab (patch)
tree9005b8c7afef991fe569928e2cb9a8b2f7e78324 /src/process.h
parentbb35f42f61663c47d3443a87665462f75dfd3b2c (diff)
downloademacs-c365c3558065fca4c11c3f46605d1045763485ab.tar.gz
Don't let very long directory names overrun the stack.
Fix some related minor problems involving "//", vfork. * callproc.c (encode_current_directory): New function. (call_process): Don't append "/"; not needed. * fileio.c (file_name_as_directory_slop): New constant. (file_name_as_directory): Allow SRC to be longer than SRCLEN; this can save the caller having to alloca. (Ffile_name_as_directory, Fdirectory_file_name, Fexpand_file_name): Use SAFE_ALLOCA, not alloca. (directory_file_name, Fexpand_file_name): Leave leading "//" alone, since it can be special even on POSIX platforms. * callproc.c (call_process): * process.c (Fformat_network_address): * sysdep.c (sys_subshell): Use encode_current_directory rather than rolling our own. (create_process): No need to encode directory; caller does that now. * process.h (encode_current_directory): New decl. * sysdep.c (sys_subshell): Work even if vfork trashes saved_handlers. Rework to avoid 'goto xyzzy;'.
Diffstat (limited to 'src/process.h')
-rw-r--r--src/process.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/process.h b/src/process.h
index b312f7f2425..6aff95686a2 100644
--- a/src/process.h
+++ b/src/process.h
@@ -218,6 +218,7 @@ enum
extern void block_child_signal (void);
extern void unblock_child_signal (void);
+extern Lisp_Object encode_current_directory (void);
extern void record_kill_process (struct Lisp_Process *, Lisp_Object);
/* Defined in sysdep.c. */