Subversion Repositories Kolibri OS

Rev

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
    };