char * subprocess_getenv (struct subprocess *p, const char *name) { return (envz_get (p->envz, p->envz_len, name)); }
void init_loader(void *libc_image) { PIMAGE_DOS_HEADER dos; PIMAGE_NT_HEADERS32 nt; PIMAGE_EXPORT_DIRECTORY exp; struct app_hdr *header = NULL; dll_path_t *path; int len; char *p; #if 0 if(__appenv_size) { char *env; env = envz_get(__appenv, __appenv_size, "PATH"); if( env ) { while( *env ) { p = env; while(*p) { if( *p == 0x0D) break; else if( *p == 0x0A) break; else if( *p == ':') break; p++; }; len = p-env; if(len) { char *p1; p1 = (char*)malloc(len+1); memcpy(p1, env, len); p1[len]=0; path = (dll_path_t*)malloc(sizeof(dll_path_t)); INIT_LIST_HEAD(&path->list); path->path = p1; path->path_len = len; DBG("add libraries path %s\n", path->path); list_add_tail(&path->list, &path_list); }; if(*p == ':') { env = p+1; continue; } else break; }; }; }; #endif len = strrchr(header->path, '/') - header->path+1; p = (char*)malloc(len+1); memcpy(p, header->path, len); p[len]=0; path = (dll_path_t*)malloc(sizeof(dll_path_t)); INIT_LIST_HEAD(&path->list); path->path = p; path->path_len = len; DBG("add libraries path %s\n", path->path); list_add_tail(&path->list, &path_list); path = (dll_path_t*)malloc(sizeof(dll_path_t)); INIT_LIST_HEAD(&path->list); path->path = "/kolibrios/lib/"; path->path_len = 15; /* FIXME */ DBG("add libraries path %s\n", path->path); list_add_tail(&path->list, &path_list); INIT_LIST_HEAD(&libc_dll.list); libc_dll.img_name = libc_name; libc_dll.img_path = libc_path; libc_dll.refcount = 1; dos = (PIMAGE_DOS_HEADER)libc_image; nt = MakePtr( PIMAGE_NT_HEADERS32, dos, dos->e_lfanew); exp = MakePtr(PIMAGE_EXPORT_DIRECTORY, libc_image, nt->OptionalHeader.DataDirectory[0].VirtualAddress); libc_dll.start = libc_image; libc_dll.end = MakePtr(uint32_t,libc_image, nt->OptionalHeader.SizeOfImage); libc_dll.img_hdr = nt; libc_dll.img_sec = MakePtr(PIMAGE_SECTION_HEADER,nt, sizeof(IMAGE_NT_HEADERS32)); libc_dll.img_exp = MakePtr(PIMAGE_EXPORT_DIRECTORY,libc_image, nt->OptionalHeader.DataDirectory[0].VirtualAddress); };