int io_load_span(struct io *io, const char *separators, size_t *lineno, io_read_fn read_property, void *data) { io->span = TRUE; return io_load_file(io, separators, lineno, read_property, data); }
int dl_get_funcs (int *numentries, IXFMODULEENTRY **entries) { unsigned long addr, size; char buf[0x100]; char *line = buf; char str[24]; char *s = str; char *p, *funcname; int funcaddr; int i, n, rc; memset(line, 0, 0x100); rc = io_load_file("c:\\dl.map", &addr, &size); if (rc) return rc; p = (char *)addr; getline(&p, line); n = atol(line); *numentries = n; *entries = (IXFMODULEENTRY *)malloc(n * sizeof(IXFMODULEENTRY)); if (!*entries) return 1; for (i = 0; i < n; i++) { getline(&p, line); sscanf(line, "%x %s", &funcaddr, s); funcname = (char *)malloc(strlen(s) + 1); if (!funcname) return 1; strcpy(funcname, s); LOG("function %s", funcname); LOG("address %x", funcaddr); (*entries)[i].FunctionName = funcname; (*entries)[i].Address = funcaddr; (*entries)[i].Ordinal = i + 1; (*entries)[i].ModuleName = NULL; } return 0;
int io_load(struct io *io, const char *separators, io_read_fn read_property, void *data) { return io_load_file(io, separators, NULL, read_property, data); }
unsigned long OpenModule(char * pszName, unsigned long cbName, char const * pszModname, char exeflag, unsigned long * phmod) { #ifdef L4API_l4v2 l4_addr_t pageaddr, addr2; #endif #define buf_size 4096 char buf[buf_size+1]; char *p_buf = (char *) &buf; //char *orig_name = NULL; struct module_rec *prev; IXFModule *ixfModule, *ixf; IXFSYSDEP *ixfSysDep, *sd; slist_t *s, *s0, *r; l4exec_section_t *section; void *addr; unsigned long size; int rc, t, n, i; // Check input arguments if ((phmod==NULL)|| (pszModname==NULL)|| (pszName==NULL)) return 87 /*ERROR_INVALID_PARAMETER*/; // Initialize return vars *pszName=0; *phmod=0; // @todo extract filename only because can be fullname with path char *mname = get_fname(pszModname); // Specail case - EMXWRAP.DLL. Read more in docs\os2\sub32.txt if (!exeflag && !strcasecmp(mname, "EMXWRAP")) { if (options.debugmodmgr) LOG("ModLoadModule: EXMWRAP module replaced by SUB32 module."); //mname="SUB32"; pszModname="SUB32.DLL"; } if (options.debugmodmgr) LOG("ModLoadModule: Loading module %s...", mname); //// //if (!exeflag) if (!(t = getrec(mname, &prev))) { if (!exeflag) { // @todo use handles here *phmod=(unsigned long)prev->module_struct; LOG("already loaded"); return 0/*NO_ERROR*/; } } else if (t == -1) { LOG("mod not loaded!"); *phmod=NULL; if (cbName<=strlen(mname)) return 8 /*ERROR_NOT_ENOUGH_MEMORY*/; strcpy(pszName, mname); return 5 /*ERROR_ACCESS_DENIED*/; // @todo Need more accurate code } // Ok. No module found. Try to load file LOG("open: %s", pszModname); // Consider fully-qualified name specified. rc=io_load_file(pszModname, &addr, &size); if (rc) { // Searches for module name and returns the full path in the buffer p_buf. LOG("io_load_file1: rc=%u", rc); if (!exeflag) rc = find_module_path(pszModname, p_buf); else rc = find_path(pszModname, p_buf); LOG("find_module_path: rc=%u, p_buf=%s", rc, p_buf); if (!rc) rc=io_load_file(p_buf, &addr, &size); } else LOG("successful"); if (rc) { LOG("io_load_file2: rc=%u", rc); strcpy(pszName, pszModname); *phmod=NULL; return rc; } ixfModule = (IXFModule *)malloc(sizeof(IXFModule)); #ifdef L4API_l4v2 ixfSysDep = (IXFSYSDEP *)malloc(sizeof(IXFSYSDEP)); if (!t && exeflag) { // 1st instance IXFModule structure ixf = (IXFModule *)(prev->module_struct); memmove(ixfModule, ixf, sizeof(IXFModule)); sd = (IXFSYSDEP *)(ixf->hdlSysDep); memmove(ixfSysDep, sd, sizeof(IXFSYSDEP)); ixfModule->hdlSysDep = (unsigned int)ixfSysDep; for (i = 0, r = 0, s0 = sd->seclist; s0; i++, r = s, s0 = s0->next) { s = (slist_t *)malloc(sizeof(slist_t)); if (i == 0) // 1st loop iteration ixfSysDep->seclist = s; else { r->next = s; s->next = 0; } section = (l4exec_section_t *)malloc(sizeof(l4exec_section_t)); s->section = section; memmove(section, s0->section, sizeof(l4exec_section_t)); // create Copy-On-Write copy of original dataspace rc = l4dm_copy(&s0->section->ds, L4DM_COW, "os2exec section", §ion->ds); if (rc) LOG("dataspace copy rc=%d", rc); } // @todo use handles here *phmod=(unsigned long)ixfModule; ModRegister(mname, ixfModule, exeflag); LOG("copy created"); return 0/*NO_ERROR*/; } else { ixfModule->hdlSysDep = (unsigned int)ixfSysDep; // initialize section number to zero ixfSysDep->secnum = 0; ixfSysDep->seclist = 0; } #else // other hosts // ... #endif rc=IXFIdentifyModule(addr, size, ixfModule); if (rc) { LOG("IXFIdentifyModule: rc=%u", rc); strcpy(pszName, pszModname); *phmod=NULL; free((void *)(ixfModule->hdlSysDep)); free(ixfModule); return rc; } //save addr and size into the structure ixfModule->addr = addr; ixfModule->size = size; ixfModule->name = (char *)malloc(strlen(pszModname) + 1); strcpy(ixfModule->name, pszModname); ixfModule->exec = exeflag; //@todo use handle table *phmod=(unsigned long)ixfModule; return rc; }