diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2013-08-23 10:57:07 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2013-08-23 10:57:07 -0700 |
commit | c365c3558065fca4c11c3f46605d1045763485ab (patch) | |
tree | 9005b8c7afef991fe569928e2cb9a8b2f7e78324 /src/process.h | |
parent | bb35f42f61663c47d3443a87665462f75dfd3b2c (diff) | |
download | emacs-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.h | 1 |
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. */ |