Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}