int sbcl_bin_download(struct install_options* param) { int result; char* home=configdir(); char* arch=arch_(param); char* uri=get_opt("sbcl-bin-uri",0); cond_printf(1,"sbcl_bin_download\n"); int retry=10; do { param->expand_path=cat(home,"src",SLASH,"sbcl","-",param->version,"-",arch,SLASH,NULL); impls_sbcl_bin.uri=cat(uri?uri:SBCL_BIN_URI ,param->version,"/sbcl-",param->version, "-",arch,"-binary",sbcl_bin_extention(param),NULL); result = download(param); if(!result && param->version_not_specified) { int len = strlen(param->version)-1; if('1'<= param->version[len] && param->version[len] <= '9') { param->version[len]--; s(param->expand_path),s(impls_sbcl_bin.uri); }else if('2' <= param->version[len-1] && param->version[len-1] <= '9') { param->version[len-1]--; param->version[len] = '9'; s(param->expand_path),s(impls_sbcl_bin.uri); }else if('1' == param->version[len-1]) { param->version[len-1] = '9'; param->version[len] = '\0'; s(param->expand_path),s(impls_sbcl_bin.uri); }else{ s(arch),s(home); return 0; } } }while (!result && retry--); s(arch),s(home); return !!result; }
int sbcl_bin_expand(struct install_options* param) { char* impl=param->impl; char* version=q(param->version); int ret; char* home=configdir(); char* arch= arch_(param); char* archive=cat(impl,"-",version,"-",arch,".msi",NULL); char* log_path=cat(home,"impls",SLASH,"log",SLASH,impl,"-",version,"-",arch,SLASH,"install.log",NULL); char* dist_path; int pos=position_char("-",impl); if(pos!=-1) { impl=subseq(impl,0,pos); }else impl=q(impl); dist_path=cat(home,"src",SLASH,impl,"-",version,"-",arch,SLASH,NULL); printf("Extracting the msi archive. %s to %s\n",archive,dist_path); archive=s_cat(q(home),q("archives"),q(SLASH),archive,NULL); delete_directory(dist_path,1); ensure_directories_exist(dist_path); ensure_directories_exist(log_path); if(dist_path[strlen(dist_path)-1]=='\\') dist_path[strlen(dist_path)-1]='\0'; char* cmd=cat("msiexec.exe /a \"", archive, "\" targetdir=\"", dist_path, "\" /qn /lv ", "\"", log_path, "\"", NULL); cmd=cat("cmd /c \"",cmd,"\"",NULL); cond_printf(1,"msiexeccmd:%s\n",cmd); ret=System(cmd); s(impl); s(dist_path); s(log_path); s(archive); s(cmd),s(home),s(version),s(arch); return !ret; }