--- trunk/src/cpu_x86.c 2007/10/08 16:18:11 6 +++ trunk/src/cpu_x86.c 2007/10/08 16:18:27 10 @@ -25,7 +25,7 @@ * SUCH DAMAGE. * * - * $Id: cpu_x86.c,v 1.161 2005/05/31 06:20:38 debug Exp $ + * $Id: cpu_x86.c,v 1.163 2005/06/26 22:23:42 debug Exp $ * * x86 (and amd64) CPU emulation. * @@ -92,14 +92,10 @@ * * Create a new x86 cpu object. */ -struct cpu *x86_cpu_new(struct memory *mem, struct machine *machine, +int x86_cpu_new(struct cpu *cpu, struct memory *mem, struct machine *machine, int cpu_id, char *cpu_type_name) { int i = 0; - struct cpu *cpu; - - if (cpu_type_name == NULL) - return NULL; /* Try to find a match: */ while (models[i].model_number != 0) { @@ -109,23 +105,10 @@ } if (models[i].name == NULL) - return NULL; - - cpu = malloc(sizeof(struct cpu)); - if (cpu == NULL) { - fprintf(stderr, "out of memory\n"); - exit(1); - } + return 0; - memset(cpu, 0, sizeof(struct cpu)); - cpu->memory_rw = x86_memory_rw; - cpu->name = cpu_type_name; - cpu->mem = mem; - cpu->machine = machine; - cpu->cpu_id = cpu_id; - cpu->byte_order = EMUL_LITTLE_ENDIAN; - cpu->bootstrap_cpu_flag = 0; - cpu->running = 0; + cpu->memory_rw = x86_memory_rw; + cpu->byte_order = EMUL_LITTLE_ENDIAN; cpu->cd.x86.model = models[i]; @@ -158,7 +141,7 @@ debug("%s", cpu->name); } - return cpu; + return 1; } @@ -1350,7 +1333,8 @@ case 3: if (flags & MODRM_EIGHTBIT) { if (disasm) { - strcpy(modrm_rm, reg_names_bytes[rm]); + strlcpy(modrm_rm, reg_names_bytes[rm], + sizeof(modrm_rm)); } else { switch (writeflag) { case MODRM_WRITE_RM: @@ -1375,7 +1359,8 @@ } else { if (disasm) { if (mode == 16 || flags & MODRM_RM_16BIT) - strcpy(modrm_rm, reg_names[rm]); + strlcpy(modrm_rm, reg_names[rm], + sizeof(modrm_rm)); else sprintf(modrm_rm, "%s%s", e, reg_names[rm]); @@ -1415,7 +1400,8 @@ if (flags & MODRM_EIGHTBIT && !(flags & MODRM_R_NONEIGHTBIT)) { if (disasm) { - strcpy(modrm_r, reg_names_bytes[r]); + strlcpy(modrm_r, reg_names_bytes[r], + sizeof(modrm_r)); } else { switch (writeflag) { case MODRM_WRITE_R: @@ -1437,7 +1423,8 @@ } else { if (disasm) { if (flags & MODRM_SEG) - strcpy(modrm_r, seg_names[r]); + strlcpy(modrm_r, seg_names[r], + sizeof(modrm_r)); else if (flags & MODRM_CR) sprintf(modrm_r, "cr%i", r); else if (flags & MODRM_DR) @@ -1447,7 +1434,8 @@ sprintf(modrm_r, "%s%s", e, reg_names[r]); else - strcpy(modrm_r, reg_names[r]); + strlcpy(modrm_r, reg_names[r], + sizeof(modrm_r)); } } else { switch (writeflag) {