diff options
Diffstat (limited to 'erts/etc/win32/Install.c')
| -rw-r--r-- | erts/etc/win32/Install.c | 130 | 
1 files changed, 67 insertions, 63 deletions
| diff --git a/erts/etc/win32/Install.c b/erts/etc/win32/Install.c index dd02a9c111..59a5004662 100644 --- a/erts/etc/win32/Install.c +++ b/erts/etc/win32/Install.c @@ -21,58 +21,61 @@   * Dead simple installation program to set up init files etc after erlang is    * copied to its destination. Also to be used after a patch is applied.   */  +  #include <windows.h>  #include <stdio.h>  #include <stdlib.h>  #include "init_file.h" -int main(int argc, char **argv)  +int wmain(int argc, wchar_t **argv)   {      int silent = 0;      int start_sasl = 0; -    char *root = NULL; +    wchar_t *root = NULL;      int i; -    char buffer[MAX_PATH]; -    char erts_dir[MAX_PATH]; -    char release_dir[MAX_PATH]; -    char bin_dir[MAX_PATH]; +    wchar_t buffer[MAX_PATH]; +    wchar_t erts_dir[MAX_PATH]; +    wchar_t release_dir[MAX_PATH]; +    wchar_t bin_dir[MAX_PATH];      char *tmp; -    char my_ini_filename[MAX_PATH]; +    char tmp_utf8[MAX_PATH*4]; +    wchar_t my_ini_filename[MAX_PATH];      InitFile *my_ini_file;      InitSection *my_ini_section; -    char version_string[MAX_PATH]; +    char erts_version[MAX_PATH];      InitFile *ini_file;      InitSection *ini_section;      HANDLE module = GetModuleHandle(NULL); -    char *binaries[] = { "erl.exe", "werl.exe", "erlc.exe", -			 "dialyzer.exe", "typer.exe", -			 "escript.exe", "ct_run.exe", NULL }; -    char *scripts[] = { "start_clean.boot", "start_sasl.boot", NULL }; -    char fromname[MAX_PATH]; -    char toname[MAX_PATH]; -     +    wchar_t *binaries[] = { L"erl.exe", L"werl.exe", L"erlc.exe", +			    L"dialyzer.exe", L"typer.exe", +			    L"escript.exe", L"ct_run.exe", NULL }; +    wchar_t *scripts[] = { L"start_clean.boot", L"start_sasl.boot", NULL }; +    wchar_t fromname[MAX_PATH]; +    wchar_t toname[MAX_PATH]; +    size_t  converted;      for (i = 1; i < argc; ++i) {  	switch(argv[i][0]) { -	case '-' : +	case L'-' :  	    switch(argv[i][1]) { -	    case 's' : +	    case L's' :  		silent = 1;  		break;  	    default: -		fprintf(stderr, "Unknown command switch %s\n", +		fprintf(stderr, "Unknown command switch %S\n",  			argv[i]);  		exit(1);  	    }  	    break; -	default: +	default: {  	    if (root != NULL) {  		fprintf(stderr, "Only one root directory can be specified, " -			"parameter %s is illegal\n", +			"parameter %S is illegal\n",  			argv[i]);  		exit(1); -	    } +	    }	      	    root = argv[i]; +	    }  	    break;  	}      } @@ -82,19 +85,19 @@ int main(int argc, char **argv)  	    exit(1);  	} -	if (GetModuleFileName(module,buffer,MAX_PATH) == 0) { +	if (GetModuleFileNameW(module,buffer,MAX_PATH) == 0) {  	    fprintf(stderr,"Could not GetModuleFileName()\n");  	    exit(1);  	} -	i = strlen(buffer) - 1; -	while ( i >= 0 && buffer[i] != '\\') { +	i = wcslen(buffer) - 1; +	while ( i >= 0 && buffer[i] != L'\\') {  	    --i;  	}  	if (i < 0) {  	    fprintf(stderr,"GetModuleFileName returned broken path\n");  	    exit(1);  	} -	buffer[i] = '\0'; +	buffer[i] = L'\0';  	root = buffer;      } @@ -122,79 +125,78 @@ int main(int argc, char **argv)  	    start_sasl = 0;  	}      } -    sprintf(my_ini_filename,"%s\\Install.ini",root); +    swprintf(my_ini_filename, MAX_PATH, L"%s\\Install.ini", root);      my_ini_file = load_init_file(my_ini_filename);      if (my_ini_file == NULL) { -	fprintf(stderr,"Cannot open init file %s\n",my_ini_filename); +	fprintf(stderr,"Cannot open init file %S\n",my_ini_filename);  	exit(1);      }      if ((my_ini_section = lookup_init_section(my_ini_file,"Install"))   	== NULL) { -	fprintf(stderr,"No [Install] section in init file %s\n", +	fprintf(stderr,"No [Install] section in init file %S\n",  		my_ini_filename);  	exit(1);      }      if ((tmp = lookup_init_entry(my_ini_section, "VSN")) == NULL) { -	fprintf(stderr,"No key VSN in init file %s\n", +	fprintf(stderr,"No key VSN in init file %S\n",  		my_ini_filename);  	exit(1);      } - -    strcpy(version_string,tmp); +    strcpy(erts_version,tmp); -    sprintf(erts_dir,"%s\\erts-%s\\bin",root,tmp); +    swprintf(erts_dir,MAX_PATH,L"%s\\erts-%S\\bin",root,erts_version);      if ((tmp = lookup_init_entry(my_ini_section, "SYSTEM_VSN")) == NULL) { -	fprintf(stderr,"No key SYSTEM_VSN in init file %s\n", -		my_ini_filename); +	fprintf(stderr,"No key SYSTEM_VSN in init file %S\n", +		 my_ini_filename);  	exit(1);      } -    sprintf(release_dir,"%s\\releases\\%s",root,tmp);  +    swprintf(release_dir,MAX_PATH,L"%s\\releases\\%S",root,tmp);  -    sprintf(bin_dir,"%s\\bin",root); -    CreateDirectory(bin_dir,NULL); +    swprintf(bin_dir,MAX_PATH,L"%s\\bin",root); +    CreateDirectoryW(bin_dir,NULL);      free_init_file(my_ini_file);      for (i = 0; binaries[i] != NULL; ++i) { -	sprintf(fromname,"%s\\%s",erts_dir,binaries[i]); -	sprintf(toname,"%s\\%s",bin_dir,binaries[i]); -	if (GetFileAttributes(fromname) == 0xFFFFFFFF) { -	    fprintf(stderr,"Could not find file %s\n", +	swprintf(fromname,MAX_PATH,L"%s\\%s",erts_dir,binaries[i]); +	swprintf(toname,MAX_PATH,L"%s\\%s",bin_dir,binaries[i]); +	if (GetFileAttributesW(fromname) == 0xFFFFFFFF) { +	    fprintf(stderr,"Could not find file %S\n",  		    fromname);  	    exit(1);  	} -	if (!CopyFile(fromname,toname,FALSE)) { -	    fprintf(stderr,"Could not copy file %s to %s\n", +	if (!CopyFileW(fromname,toname,FALSE)) { +	    fprintf(stderr,"Could not copy file %S to %S\n",  		    fromname,toname);  	    fprintf(stderr,"Continuing installation anyway...\n");  	}      }      for (i = 0; scripts[i] != NULL; ++i) { -	sprintf(fromname,"%s\\%s",release_dir,scripts[i]); -	sprintf(toname,"%s\\%s",bin_dir,scripts[i]); -	if (GetFileAttributes(fromname) == 0xFFFFFFFF) { -	    fprintf(stderr,"Could not find file %s\n", +	swprintf(fromname,MAX_PATH,L"%s\\%s",release_dir,scripts[i]); +	swprintf(toname,MAX_PATH,L"%s\\%s",bin_dir,scripts[i]); +	if (GetFileAttributesW(fromname) == 0xFFFFFFFF) { +	    fprintf(stderr,"Could not find file %S\n",  		    fromname);  	    exit(1);  	} -	if (!CopyFile(fromname,toname,FALSE)) { -	    fprintf(stderr,"Could not copy file %s to %s\n", +	if (!CopyFileW(fromname,toname,FALSE)) { +	    fprintf(stderr,"Could not copy file %S to %S\n",  		    fromname,toname);  	    fprintf(stderr,"Cannot continue installation, bailing out.\n");  	    exit(1);  	}      }      if (start_sasl) { -	sprintf(fromname,"%s\\start_sasl.boot",bin_dir); +	swprintf(fromname,MAX_PATH,L"%s\\start_sasl.boot",bin_dir);      } else { -	sprintf(fromname,"%s\\start_clean.boot",bin_dir); +	swprintf(fromname,MAX_PATH,L"%s\\start_clean.boot",bin_dir);      } -    sprintf(toname,"%s\\start.boot",bin_dir); -    if (!CopyFile(fromname,toname,FALSE)) { -	fprintf(stderr,"Could not copy file %s to %s\n", +    swprintf(toname,MAX_PATH,L"%s\\start.boot",bin_dir); +    if (!CopyFileW(fromname,toname,FALSE)) { +	fprintf(stderr,"Could not copy file %S to %S\n",  		fromname,toname);  	fprintf(stderr,"Cannot continue installation, bailing out.\n");  	exit(1); @@ -205,25 +207,27 @@ int main(int argc, char **argv)      ini_file = create_init_file();      ini_section = create_init_section("erlang");      add_init_section(ini_file,ini_section); -    add_init_entry(ini_section,"Bindir",erts_dir); +    WideCharToMultiByte(CP_UTF8,0,erts_dir,-1,tmp_utf8,MAX_PATH*4,NULL,NULL); +    add_init_entry(ini_section,"Bindir",tmp_utf8);      add_init_entry(ini_section,"Progname","erl"); -    add_init_entry(ini_section,"Rootdir",root); -    sprintf(fromname,"%s\\erl.ini",erts_dir); -    sprintf(toname,"%s\\erl.ini",bin_dir); +    WideCharToMultiByte(CP_UTF8,0,root,-1,tmp_utf8,MAX_PATH*4,NULL,NULL); +    add_init_entry(ini_section,"Rootdir",tmp_utf8); +    swprintf(fromname,MAX_PATH,L"%s\\erl.ini",erts_dir); +    swprintf(toname,MAX_PATH,L"%s\\erl.ini",bin_dir);      if (store_init_file(ini_file,fromname) != 0) { -	fprintf(stderr,"Could not create file %s\n", +	fprintf(stderr,"Could not create file %S\n",  		fromname);  	fprintf(stderr,"Cannot continue installation, bailing out.\n");  	exit(1);      } -    if (!CopyFile(fromname,toname,FALSE)) { -	fprintf(stderr,"Could not copy file %s to %s\n", -		fromname,toname); +    if (!CopyFileW(fromname,toname,FALSE)) { +	fprintf(stderr,"Could not copy file %S to %S\n", +		 fromname,toname);  	fprintf(stderr,"Cannot continue installation, bailing out.\n");  	exit(1);      }      if (!silent) { -	printf("Erlang %s installed successfully\n", version_string); +	printf("Erlang %s installed successfully\n", erts_version);      }      return 0;  } | 
