Enable more temp directory flexiblity
This commit is contained in:
parent
03bd6bda76
commit
9895dab8dd
52
cc.c
52
cc.c
|
@ -18,6 +18,7 @@
|
|||
*/
|
||||
|
||||
#include"cc.h"
|
||||
#include <unistd.h>
|
||||
|
||||
/* The core functions */
|
||||
void populate_env(char** envp);
|
||||
|
@ -31,7 +32,7 @@ void init_macro_env(char* sym, char* value, char* source, int num);
|
|||
void preprocess();
|
||||
void output_tokens(struct token_list *i, FILE* out);
|
||||
int strtoint(char *a);
|
||||
void spawn_processes(int debug_flag, char* preprocessed_file, char* destination, char** envp);
|
||||
void spawn_processes(int debug_flag, char* prefix, char* preprocessed_file, char* destination, char** envp);
|
||||
|
||||
void prechecks(int argc, char** argv)
|
||||
{
|
||||
|
@ -82,7 +83,7 @@ void prechecks(int argc, char** argv)
|
|||
if(1 <= DEBUG_LEVEL)
|
||||
{
|
||||
fputs("M2LIBC_PATH set by -I to ", stderr);
|
||||
fputs(M2LIBC_PATH, stderr);
|
||||
fputs(hold, stderr);
|
||||
fputc('\n', stderr);
|
||||
}
|
||||
M2LIBC_PATH = hold;
|
||||
|
@ -140,6 +141,15 @@ int main(int argc, char** argv, char** envp)
|
|||
fputc('\n', stderr);
|
||||
}
|
||||
|
||||
TEMPDIR = env_lookup("TMPDIR");
|
||||
if(NULL == TEMPDIR) TEMPDIR = "/tmp";
|
||||
else if(1 <= DEBUG_LEVEL)
|
||||
{
|
||||
fputs("TEMPDIR set by environment variable to ", stderr);
|
||||
fputs(TEMPDIR, stderr);
|
||||
fputc('\n', stderr);
|
||||
}
|
||||
|
||||
int i = 1;
|
||||
while(i <= argc)
|
||||
{
|
||||
|
@ -245,6 +255,23 @@ int main(int argc, char** argv, char** envp)
|
|||
debug_flag = FALSE;
|
||||
i += 1;
|
||||
}
|
||||
else if(match(argv[i], "--temp-directory"))
|
||||
{
|
||||
name = argv[i+1];
|
||||
if(NULL == name)
|
||||
{
|
||||
fputs("--temp-directory requires a PATH\n", stderr);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if(1 <= DEBUG_LEVEL)
|
||||
{
|
||||
fputs("TEMPDIR set by --temp-directory to ", stderr);
|
||||
fputs(name, stderr);
|
||||
fputc('\n', stderr);
|
||||
}
|
||||
TEMPDIR = name;
|
||||
i += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
fputs("UNKNOWN ARGUMENT\n", stdout);
|
||||
|
@ -288,18 +315,19 @@ int main(int argc, char** argv, char** envp)
|
|||
}
|
||||
else
|
||||
{
|
||||
char* prefix = calloc(10, sizeof(char));
|
||||
if(0 == access("/tmp", 0))
|
||||
/* Ensure we can write to the temp directory */
|
||||
int permissions = access(TEMPDIR, 0);
|
||||
if(0 != permissions)
|
||||
{
|
||||
strcpy(prefix, "/tmp/");
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(prefix, "tmp-");
|
||||
fputs("unable to access: ", stderr);
|
||||
fputs(TEMPDIR, stderr);
|
||||
fputs(" for use as a temp directory\nPlease use --temp-directory to set a directory you can use or set the TMPDIR variable\n", stderr);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
name = calloc(100, sizeof(char));
|
||||
strcpy(name, prefix);
|
||||
strcat(name, "M2-Mesoplanet-XXXXXX");
|
||||
strcpy(name, TEMPDIR);
|
||||
strcat(name, "/M2-Mesoplanet-XXXXXX");
|
||||
i = mkstemp(name);
|
||||
tempfile = fdopen(i, "w");
|
||||
if(NULL != tempfile)
|
||||
|
@ -309,7 +337,7 @@ int main(int argc, char** argv, char** envp)
|
|||
fclose(tempfile);
|
||||
|
||||
/* Make me a real binary */
|
||||
spawn_processes(debug_flag, prefix, name, destination_name, envp);
|
||||
spawn_processes(debug_flag, TEMPDIR, name, destination_name, envp);
|
||||
|
||||
/* And clean up the donkey */
|
||||
if(!DIRTY_MODE) remove(name);
|
||||
|
|
4
cc_env.c
4
cc_env.c
|
@ -321,7 +321,7 @@ void populate_env(char** envp)
|
|||
require(4096 > strlen(envp[i]), "envp line exceeds 4096byte limit\n");
|
||||
strcpy(envp_line, envp[i]);
|
||||
|
||||
if(4 <= DEBUG_LEVEL)
|
||||
if(9 <= DEBUG_LEVEL)
|
||||
{
|
||||
fputs("trying envp_line: ", stderr);
|
||||
fputs(envp_line, stderr);
|
||||
|
@ -330,7 +330,7 @@ void populate_env(char** envp)
|
|||
|
||||
env = process_env_variable(envp_line, env);
|
||||
|
||||
if(8 <= DEBUG_LEVEL)
|
||||
if(9 <= DEBUG_LEVEL)
|
||||
{
|
||||
fputs("got var of: ", stderr);
|
||||
fputs(env->var, stderr);
|
||||
|
|
|
@ -44,6 +44,7 @@ int WORDSIZE;
|
|||
int ENDIAN;
|
||||
char* BASEADDRESS;
|
||||
int STDIO_USED;
|
||||
char* TEMPDIR;
|
||||
|
||||
/* So we don't shoot ourself in the face */
|
||||
int FUZZING;
|
||||
|
|
|
@ -45,6 +45,7 @@ extern int WORDSIZE;
|
|||
extern int ENDIAN;
|
||||
extern char* BASEADDRESS;
|
||||
extern int STDIO_USED;
|
||||
extern char* TEMPDIR;
|
||||
|
||||
/* So we don't shoot ourself in the face */
|
||||
extern int FUZZING;
|
||||
|
|
|
@ -264,7 +264,6 @@ int get_token(int c)
|
|||
c = consume_byte(c);
|
||||
}
|
||||
|
||||
new_token(hold_string, string_index + 2);
|
||||
return c;
|
||||
}
|
||||
|
||||
|
@ -313,8 +312,6 @@ int read_include(int c)
|
|||
}
|
||||
}
|
||||
|
||||
/* with just a little extra to put in the matching at the end */
|
||||
new_token(hold_string, string_index + 3);
|
||||
return c;
|
||||
}
|
||||
|
||||
|
@ -348,6 +345,9 @@ int include_file(int ch)
|
|||
|
||||
/* Get new filename */
|
||||
read_include(ch);
|
||||
/* with just a little extra to put in the matching at the end */
|
||||
new_token(hold_string, string_index + 3);
|
||||
|
||||
ch = '\n';
|
||||
new_filename = token->s;
|
||||
/* Remove name from stream */
|
||||
|
@ -425,6 +425,7 @@ struct token_list* read_all_tokens(FILE* a, struct token_list* current, char* fi
|
|||
while(EOF != ch)
|
||||
{
|
||||
ch = get_token(ch);
|
||||
new_token(hold_string, string_index + 2);
|
||||
if(match("#include", token->s)) ch = include_file(ch);
|
||||
}
|
||||
|
||||
|
|
|
@ -421,7 +421,7 @@ void spawn_processes(int debug_flag, char* prefix, char* preprocessed_file, char
|
|||
|
||||
char* M2_output = calloc(100, sizeof(char));
|
||||
strcpy(M2_output, prefix);
|
||||
strcat(M2_output, "M2-Planet-XXXXXX");
|
||||
strcat(M2_output, "/M2-Planet-XXXXXX");
|
||||
int i = mkstemp(M2_output);
|
||||
if(-1 != i)
|
||||
{
|
||||
|
@ -439,7 +439,7 @@ void spawn_processes(int debug_flag, char* prefix, char* preprocessed_file, char
|
|||
{
|
||||
blood_output = calloc(100, sizeof(char));
|
||||
strcpy(blood_output, prefix);
|
||||
strcat(blood_output, "blood-elf-XXXXXX");
|
||||
strcat(blood_output, "/blood-elf-XXXXXX");
|
||||
i = mkstemp(blood_output);
|
||||
if(-1 != i)
|
||||
{
|
||||
|
@ -455,7 +455,7 @@ void spawn_processes(int debug_flag, char* prefix, char* preprocessed_file, char
|
|||
|
||||
char* M1_output = calloc(100, sizeof(char));
|
||||
strcpy(M1_output, prefix);
|
||||
strcat(M1_output, "M1-macro-XXXXXX");
|
||||
strcat(M1_output, "/M1-macro-XXXXXX");
|
||||
i = mkstemp(M1_output);
|
||||
if(-1 != i)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue