예제 #1
0
/* create a unique file */
string
make_temp_file (string name, char suffix)
{
    char path[PATH_MAX];
    int len;
    int count = 1;

    len = strlen (name);
    if (len+4 >= PATH_MAX) {
	fprintf(stderr,"%s %s\n","path name too long:", name);
	exit(1);
    }

    strcpy (path, name);

    if (suffix && len >= 2) {
	/* remove the original suffix */
	if (path[len-2] == '.') {
	    len -= 2;
	    path[len] = 0;
	}
    }

    if (suffix) {
	path[len] = '.';
	path[len+1] = suffix;
	path[len+2] = 0;
    }

    if (access (path, F_OK) != 0)
	return ipa_copy_of (path);

    do {
	if (suffix)
	    sprintf (&(path[len]), ".%d.%c", count, suffix);
	else
	    sprintf (&(path[len]), "%d", count);
	count++;
    } while (access (path, F_OK) == 0);

    return ipa_copy_of (path);

} /* make_temp_file */
예제 #2
0
	/*******************************************************
		Function: ipa_opt



	 *******************************************************/
static int
ipa_opt (char **argv )
{
    if (ipa_argc == 0) {
	ipa_argv = (string *) MALLOC (orig_iargc_size * sizeof (string));
	MALLOC_ASSERT (ipa_argv);
    }
    else if (ipa_argc >= orig_iargc_size) {
	orig_iargc_size *=2;
	ipa_argv = (string *) REALLOC (ipa_argv, (orig_iargc_size * sizeof(string)));
	MALLOC_ASSERT (ipa_argv);
    }

    ipa_argv[ipa_argc++] = ipa_copy_of(argv[0]);

    return 1;
} /* ipa_opt */
예제 #3
0
static void
add_Y_opt (char **argv)
{
    char *p = *argv;

    if ( Y_flags == NULL ) {
    	Y_flags = ipa_copy_of(p);
    } else {
    	char *flg;
	
	flg = concat_names(Y_flags," ");
	FREE (Y_flags);
	Y_flags = flg;
	
	flg = concat_names(Y_flags,p);
	FREE (Y_flags);
	Y_flags = flg;
    }

    return;
}
예제 #4
0
	/*******************************************************
		Function: do_compile

		Actually perform compilation

	 *******************************************************/
int
do_compile (string *argv)
{
    int pid;
    
    if (toolroot) {
	if ((toolroot = getenv ("TOOLROOT")) == 0)
	    toolroot = ipa_copy_of(DEFAULT_TOOLROOT);
	else
	    toolroot = concat_names (toolroot, DEFAULT_TOOLROOT);
    }

    argv[0] = concat_names (toolroot, basename (argv[0]));

    if (ld_ipa_opt[LD_IPA_VERBOSE].flag || ld_ipa_opt[LD_IPA_SHOW].flag)
	dump_argv (argv);

    pid = fork();
    pid = execve(argv[0], argv, environ_vars);

    if (pid < 0) {
    	perror(argv[0]);
	exit(1);
    }

    active_pid = pid;
    
    FREE (argv[0]);
    argv[0] = NULL;

    if (toolroot) {
    	FREE (toolroot);
	toolroot = NULL;
    }

    return pid;

} /* do_compile */