static char * list_targets(xml_node_t *x) { char *msg = NULL, *prop = NULL, *iname = NULL; xml_node_t *targ = NULL; Boolean_t luninfo = False, dostat = False; /* * It's okay to not supply a "name" element. That just means the * administrator wants a complete list of targets. However if a * "name" is supplied then there must be a value for that element. */ if ((xml_find_value_str(x, XML_ELEMENT_NAME, &prop) == True) && (prop == NULL)) { xml_rtn_msg(&msg, ERR_SYNTAX_MISSING_NAME); return (msg); } /* ---- optional arguments ---- */ (void) xml_find_value_boolean(x, XML_ELEMENT_LUNINFO, &luninfo); (void) xml_find_value_boolean(x, XML_ELEMENT_IOSTAT, &dostat); buf_add_tag_and_attr(&msg, XML_ELEMENT_RESULT, "version='1.0'"); while ((targ = xml_node_next(targets_config, XML_ELEMENT_TARG, targ)) != NULL) { if (targ->x_value == NULL) { xml_add_tag(&msg, XML_ELEMENT_TARG, "bogus entry"); continue; } if (xml_find_value_str(targ, XML_ELEMENT_INAME, &iname) == False) { xml_add_tag(&msg, XML_ELEMENT_TARG, "missing iscsi-name"); continue; } if (prop != NULL) { if (strcmp(prop, targ->x_value) == 0) { buf_add_tag(&msg, XML_ELEMENT_TARG, Tag_Start); buf_add_tag(&msg, targ->x_value, Tag_String); xml_add_tag(&msg, XML_ELEMENT_INAME, iname); if (luninfo == True) target_info(&msg, iname, targ); if (dostat == True) target_stat(&msg, iname, mgmt_full_phase_statistics); buf_add_tag(&msg, XML_ELEMENT_TARG, Tag_End); } } else { buf_add_tag(&msg, XML_ELEMENT_TARG, Tag_Start); buf_add_tag(&msg, targ->x_value, Tag_String); xml_add_tag(&msg, XML_ELEMENT_INAME, iname); if (dostat == True) target_stat(&msg, iname, mgmt_full_phase_statistics); if (luninfo == True) target_info(&msg, iname, targ); buf_add_tag(&msg, XML_ELEMENT_TARG, Tag_End); } free(iname); } buf_add_tag(&msg, XML_ELEMENT_RESULT, Tag_End); free(prop); return (msg); }
int main(int argc, char *argv[]) { char **args = alloca(sizeof(char*) * (argc+12)); int i, j; char execpath[PATH_MAX+1]; char sdkpath[PATH_MAX+1]; char codesign_allocate[64]; char osvermin[64]; char *compiler; char *target; char *sdk; char *cpu; char *osmin; target_info(argv, &target, &compiler); if (!get_executable_path(execpath, sizeof(execpath))) abort(); snprintf(sdkpath, sizeof(sdkpath), "%s/../SDK", execpath); snprintf(codesign_allocate, sizeof(codesign_allocate), "%s-codesign_allocate", target); setenv("CODESIGN_ALLOCATE", codesign_allocate, 1); setenv("IOS_FAKE_CODE_SIGN", "1", 1); env(&sdk, "IOS_SDK_SYSROOT", sdkpath); env(&cpu, "IOS_TARGET_CPU", TARGET_CPU); env(&osmin, "IPHONEOS_DEPLOYMENT_TARGET", OS_VER_MIN); unsetenv("IPHONEOS_DEPLOYMENT_TARGET"); snprintf(osvermin, sizeof(osvermin), "-miphoneos-version-min=%s", osmin); for (i = 1; i < argc; ++i) { if (!strcmp(argv[i], "-arch")) { cpu = NULL; break; } } i = 0; args[i++] = compiler; args[i++] = "-target"; args[i++] = target; args[i++] = "-isysroot"; args[i++] = sdk; if (cpu) { args[i++] = "-arch"; args[i++] = cpu; } args[i++] = osvermin; args[i++] = "-mlinker-version=253.3"; for (j = 1; j < argc; ++i, ++j) args[i] = argv[j]; args[i] = NULL; printf("GAR: Path: %s \n" "Compiler: %s\n", execpath, compiler); setenv("COMPILER_PATH", execpath, 1); int k; for (k = 0; k < i; k++) printf("Compiler option: %s\n", args[k]); printf("End of Compiler args\n"); execvp(compiler, args); fprintf(stderr, "cannot invoke compiler!\n"); return 1; }