Added PATH search.
* If argv[0] contains a '/', then we look for argv[0]++".boot" * Otherwise, search the path[i] for where argv[0] came from and append ".boot" to that.
This commit is contained in:
parent
d0355ead97
commit
d04eb83cf3
BIN
bin/ikarus
BIN
bin/ikarus
Binary file not shown.
|
@ -42,19 +42,81 @@ get_option(char* opt, int argc, char** argv){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
file_exists(char* filename){
|
||||||
|
struct stat sb;
|
||||||
|
int s = stat(filename, &sb);
|
||||||
|
return (s == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
copy_fst_path(char* buff, char* x){
|
||||||
|
int i = 0;
|
||||||
|
while(1){
|
||||||
|
char c = x[i];
|
||||||
|
if ((c == 0) || (c == ':')){
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
buff[i] = c;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int global_exe(char* x){
|
||||||
|
while(1){
|
||||||
|
char c = *x;
|
||||||
|
if(c == 0){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if(c == '/'){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
x++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char** argv){
|
int main(int argc, char** argv){
|
||||||
char ikarus_boot[FILENAME_MAX];
|
char buff[FILENAME_MAX];
|
||||||
char* boot_file = get_option("-b", argc, argv);
|
char* boot_file = get_option("-b", argc, argv);
|
||||||
if(boot_file){
|
if(boot_file){
|
||||||
argc -= 2;
|
argc -= 2;
|
||||||
|
}
|
||||||
|
else if(global_exe(argv[0])){
|
||||||
|
/* search path name */
|
||||||
|
char* path = getenv("PATH");
|
||||||
|
if(path == NULL){
|
||||||
|
fprintf(stderr, "unable to locate boot file\n");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
while(*path){
|
||||||
|
int len = copy_fst_path(buff, path);
|
||||||
|
char* x = buff + len;
|
||||||
|
x = stpcpy(x, "/");
|
||||||
|
x = stpcpy(x, argv[0]);
|
||||||
|
if(file_exists(buff)){
|
||||||
|
x = stpcpy(x, ".boot");
|
||||||
|
boot_file = buff;
|
||||||
|
path = "";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(path[len]){
|
||||||
|
path += (len+1);
|
||||||
} else {
|
} else {
|
||||||
boot_file = ikarus_boot;
|
fprintf(stderr, "unable to locate %s\n", argv[0]);
|
||||||
char* x = ikarus_boot;
|
exit(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
char* x = buff;
|
||||||
x = stpcpy(x, argv[0]);
|
x = stpcpy(x, argv[0]);
|
||||||
x = stpcpy(x, ".boot");
|
x = stpcpy(x, ".boot");
|
||||||
|
boot_file = buff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(sizeof(mp_limb_t) != sizeof(int)){
|
if(sizeof(mp_limb_t) != sizeof(int)){
|
||||||
fprintf(stderr, "ERROR: limb size\n");
|
fprintf(stderr, "ERROR: limb size\n");
|
||||||
}
|
}
|
||||||
|
|
BIN
lib/ikarus.boot
BIN
lib/ikarus.boot
Binary file not shown.
Loading…
Reference in New Issue