aboutsummaryrefslogtreecommitdiff
path: root/win32/mingw.c
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2018-03-04 08:56:04 +0000
committerRon Yorston <rmy@pobox.com>2018-03-04 08:56:04 +0000
commit31997b1796bdaf5734f5fff1a20a637d8872419d (patch)
tree9c27f6741a1149059cb4f2cb324f6b2ee913e428 /win32/mingw.c
parent13cb88b0f6f2a69076e91858fbbdd0c65697e621 (diff)
downloadbusybox-w32-31997b1796bdaf5734f5fff1a20a637d8872419d.tar.gz
busybox-w32-31997b1796bdaf5734f5fff1a20a637d8872419d.tar.bz2
busybox-w32-31997b1796bdaf5734f5fff1a20a637d8872419d.zip
win32: reduce amount of static data
It appears that uninitialised static variables are placed in the data section rather than bss, increasing the size of the binary. Rewrite some code to reduce the amount of static data.
Diffstat (limited to 'win32/mingw.c')
-rw-r--r--win32/mingw.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/win32/mingw.c b/win32/mingw.c
index bedf14784..4c449514a 100644
--- a/win32/mingw.c
+++ b/win32/mingw.c
@@ -676,11 +676,14 @@ int mingw_rename(const char *pold, const char *pnew)
676 676
677static char *gethomedir(void) 677static char *gethomedir(void)
678{ 678{
679 static char buf[PATH_MAX]; 679 static char *buf = NULL;
680 DWORD len = sizeof(buf); 680 DWORD len = PATH_MAX;
681 HANDLE h; 681 HANDLE h;
682 char *s; 682 char *s;
683 683
684 if (!buf)
685 buf = xmalloc(PATH_MAX);
686
684 buf[0] = '\0'; 687 buf[0] = '\0';
685 if ( !OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &h) ) 688 if ( !OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &h) )
686 return buf; 689 return buf;
@@ -701,11 +704,17 @@ static char *gethomedir(void)
701 return buf; 704 return buf;
702} 705}
703 706
707#define NAME_LEN 100
704static char *get_user_name(void) 708static char *get_user_name(void)
705{ 709{
706 static char user_name[100] = ""; 710 static char *user_name = NULL;
707 char *s; 711 char *s;
708 DWORD len = sizeof(user_name); 712 DWORD len = NAME_LEN;
713
714 if ( user_name == NULL ) {
715 user_name = xmalloc(NAME_LEN);
716 user_name[0] = '\0';
717 }
709 718
710 if ( user_name[0] != '\0' ) { 719 if ( user_name[0] != '\0' ) {
711 return user_name; 720 return user_name;
@@ -857,7 +866,12 @@ char *realpath(const char *path, char *resolved_path)
857 866
858const char *get_busybox_exec_path(void) 867const char *get_busybox_exec_path(void)
859{ 868{
860 static char path[PATH_MAX] = ""; 869 static char *path = NULL;
870
871 if (!path) {
872 path = xmalloc(PATH_MAX);
873 path[0] = '\0';
874 }
861 875
862 if (!*path) 876 if (!*path)
863 GetModuleFileName(NULL, path, PATH_MAX); 877 GetModuleFileName(NULL, path, PATH_MAX);