diff options
Diffstat (limited to 'src/w32.c')
-rw-r--r-- | src/w32.c | 71 |
1 files changed, 36 insertions, 35 deletions
diff --git a/src/w32.c b/src/w32.c index 26cfae7a6af..dc8bed582c0 100644 --- a/src/w32.c +++ b/src/w32.c @@ -1771,7 +1771,40 @@ filename_from_ansi (const char *fn_in, char *fn_out) /* The directory where we started, in UTF-8. */ static char startup_dir[MAX_UTF8_PATH]; -/* Get the current working directory. */ +/* Get the current working directory. The caller must arrange for CWD + to be allocated with enough space to hold a 260-char directory name + in UTF-8. IOW, the space should be at least MAX_UTF8_PATH bytes. */ +static void +w32_get_current_directory (char *cwd) +{ + /* FIXME: Do we need to resolve possible symlinks in startup_dir? + Does it matter anywhere in Emacs? */ + if (w32_unicode_filenames) + { + wchar_t wstartup_dir[MAX_PATH]; + + if (!GetCurrentDirectoryW (MAX_PATH, wstartup_dir)) + emacs_abort (); + filename_from_utf16 (wstartup_dir, cwd); + } + else + { + char astartup_dir[MAX_PATH]; + + if (!GetCurrentDirectoryA (MAX_PATH, astartup_dir)) + emacs_abort (); + filename_from_ansi (astartup_dir, cwd); + } +} + +/* For external callers. Used by 'main' in emacs.c. */ +void +w32_init_current_directory (void) +{ + w32_get_current_directory (startup_dir); +} + +/* Return the original directory where Emacs started. */ char * getcwd (char *dir, int dirsize) { @@ -2997,24 +3030,7 @@ init_environment (char ** argv) } /* Remember the initial working directory for getcwd. */ - /* FIXME: Do we need to resolve possible symlinks in startup_dir? - Does it matter anywhere in Emacs? */ - if (w32_unicode_filenames) - { - wchar_t wstartup_dir[MAX_PATH]; - - if (!GetCurrentDirectoryW (MAX_PATH, wstartup_dir)) - emacs_abort (); - filename_from_utf16 (wstartup_dir, startup_dir); - } - else - { - char astartup_dir[MAX_PATH]; - - if (!GetCurrentDirectoryA (MAX_PATH, astartup_dir)) - emacs_abort (); - filename_from_ansi (astartup_dir, startup_dir); - } + w32_get_current_directory (startup_dir); { static char modname[MAX_PATH]; @@ -3198,22 +3214,7 @@ GetCachedVolumeInformation (char * root_dir) /* NULL for root_dir means use root from current directory. */ if (root_dir == NULL) { - if (w32_unicode_filenames) - { - wchar_t curdirw[MAX_PATH]; - - if (GetCurrentDirectoryW (MAX_PATH, curdirw) == 0) - return NULL; - filename_from_utf16 (curdirw, default_root); - } - else - { - char curdira[MAX_PATH]; - - if (GetCurrentDirectoryA (MAX_PATH, curdira) == 0) - return NULL; - filename_from_ansi (curdira, default_root); - } + w32_get_current_directory (default_root); parse_root (default_root, (const char **)&root_dir); *root_dir = 0; root_dir = default_root; |