diff options
| author | Paul Eggert | 2013-08-23 10:57:07 -0700 |
|---|---|---|
| committer | Paul Eggert | 2013-08-23 10:57:07 -0700 |
| commit | c365c3558065fca4c11c3f46605d1045763485ab (patch) | |
| tree | 9005b8c7afef991fe569928e2cb9a8b2f7e78324 /src/process.h | |
| parent | bb35f42f61663c47d3443a87665462f75dfd3b2c (diff) | |
| download | emacs-c365c3558065fca4c11c3f46605d1045763485ab.tar.gz emacs-c365c3558065fca4c11c3f46605d1045763485ab.zip | |
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 | |||
| 218 | 218 | ||
| 219 | extern void block_child_signal (void); | 219 | extern void block_child_signal (void); |
| 220 | extern void unblock_child_signal (void); | 220 | extern void unblock_child_signal (void); |
| 221 | extern Lisp_Object encode_current_directory (void); | ||
| 221 | extern void record_kill_process (struct Lisp_Process *, Lisp_Object); | 222 | extern void record_kill_process (struct Lisp_Process *, Lisp_Object); |
| 222 | 223 | ||
| 223 | /* Defined in sysdep.c. */ | 224 | /* Defined in sysdep.c. */ |