Rev 996 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 996 | Rev 1066 | ||
---|---|---|---|
Line 171... | Line 171... | ||
171 | PIMAGE_DOS_HEADER dos; |
171 | PIMAGE_DOS_HEADER dos; |
172 | PIMAGE_NT_HEADERS32 nt; |
172 | PIMAGE_NT_HEADERS32 nt; |
173 | 173 | ||
Line 174... | Line 174... | ||
174 | drv_entry_t *drv_entry; |
174 | drv_entry_t *drv_entry; |
175 | md_t *md; |
175 | addr_t *img_base ; |
176 | srv_t *srv; |
176 | srv_t *srv; |
Line 177... | Line 177... | ||
177 | 177 | ||
Line 178... | Line 178... | ||
178 | md = load_image(path); |
178 | img_base = load_image(path); |
179 | 179 | ||
Line 180... | Line 180... | ||
180 | if( ! md ) |
180 | if( ! img_base ) |
181 | return 0; |
181 | return 0; |
182 | 182 | ||
183 | if( link_image( md->base ) ) |
183 | if( link_image( img_base ) ) |
Line 184... | Line 184... | ||
184 | { |
184 | { |
185 | dos = (PIMAGE_DOS_HEADER)md->base; |
185 | dos = (PIMAGE_DOS_HEADER)img_base; |
Line 186... | Line 186... | ||
186 | nt = MakePtr( PIMAGE_NT_HEADERS32, dos, dos->e_lfanew); |
186 | nt = MakePtr( PIMAGE_NT_HEADERS32, dos, dos->e_lfanew); |
Line 187... | Line 187... | ||
187 | 187 | ||
188 | drv_entry = MakePtr(drv_entry_t*, md->base, |
188 | drv_entry = MakePtr(drv_entry_t*, img_base, |
Line 189... | Line 189... | ||
189 | nt->OptionalHeader.AddressOfEntryPoint); |
189 | nt->OptionalHeader.AddressOfEntryPoint); |
190 | 190 | ||
191 | srv = drv_entry(1); |
191 | srv = drv_entry(1); |
192 | 192 | ||
193 | if(srv != NULL) |
193 | if(srv != NULL) |
194 | srv->entry = nt->OptionalHeader.AddressOfEntryPoint + md->base; |
194 | srv->entry = nt->OptionalHeader.AddressOfEntryPoint + img_base; |
195 | 195 | ||
196 | return srv; |
196 | return srv; |
Line 197... | Line 197... | ||
197 | } |
197 | } |
Line 275... | Line 275... | ||
275 | ( ( raw[1] == 0x31305445) || |
275 | ( ( raw[1] == 0x31305445) || |
276 | ( raw[1] == 0x30305445) ) ) |
276 | ( raw[1] == 0x30305445) ) ) |
277 | 277 | ||
Line 278... | Line 278... | ||
278 | { |
278 | { |
279 | DBG("leagacy Kolibri application"); |
279 | DBG("leagacy Kolibri application\n"); |
280 | int tmp = mnt_exec(raw, raw_size, path, cmdline, flags); |
280 | int tmp = mnt_exec(raw, raw_size, path, cmdline, flags); |
281 | DBG(" pid %x\n",tmp); |
281 | DBG("pid %x\n",tmp); |
282 | return tmp; |
282 | return tmp; |
283 | } |
283 | } |
Line 309... | Line 309... | ||
309 | DBG("command line too long\n"); |
309 | DBG("command line too long\n"); |
310 | return -30; |
310 | return -30; |
311 | } |
311 | } |
312 | 312 | ||
Line 313... | Line 313... | ||
313 | ex_stack_page = core_alloc(0); /* 2^0 = 1 page */ |
313 | ex_stack_page = alloc_page(); /* 2^0 = 1 page */ |
314 | if( ! ex_stack_page ) |
314 | if( ! ex_stack_page ) |
315 | { |
315 | { |
316 | mem_free(raw); |
316 | mem_free(raw); |
317 | return -30; /* FIXME */ |
317 | return -30; /* FIXME */ |
318 | }; |
318 | }; |
Line 325... | Line 325... | ||
325 | ex_pg_dir = pe_app_space(img_size); |
325 | ex_pg_dir = pe_app_space(img_size); |
Line 326... | Line 326... | ||
326 | 326 | ||
327 | if( !ex_pg_dir ) |
327 | if( !ex_pg_dir ) |
328 | { |
328 | { |
329 | core_free(ex_stack_page); |
329 | frame_free(ex_stack_page); |
330 | mem_free(raw); |
330 | mem_free(raw); |
331 | return -30; /* FIXME */ |
331 | return -30; /* FIXME */ |
Line 332... | Line 332... | ||
332 | }; |
332 | }; |