char* NaClInstStateInstructionToString(struct NaClInstState* state) { /* Print to a memory buffer, and then duplicate. */ struct GioMemoryFile filemem; struct Gio *file = (struct Gio*) &filemem; char buffer[MAX_INST_TEXT_SIZE]; char* result; /* Note: Be sure to leave an extra byte to add the null character to * the end of the string. */ GioMemoryFileCtor(&filemem, buffer, MAX_INST_TEXT_SIZE - 1); NaClInstStateInstPrint(file, state); buffer[filemem.curpos < MAX_INST_TEXT_SIZE ? filemem.curpos : MAX_INST_TEXT_SIZE] ='\0'; result = strdup(buffer); GioMemoryFileDtor(file); return result; }
/* Print out the given instruction, using the given instruction print function, * and return the printed text as a (malloc allocated) string. */ static char* InstToStringConvert(const NCDecoderInst* dinst, inst_print_fn print_fn) { /* Print to a memory buffer, and then duplicate. */ struct GioMemoryFile filemem; struct Gio *file = (struct Gio*) &filemem; char buffer[MAX_INST_TEXT_SIZE]; char* result; /* Note: Be sure to leave an extra byte to add the null character to * the end of the string. */ GioMemoryFileCtor(&filemem, buffer, MAX_INST_TEXT_SIZE - 1); print_fn(dinst, file); buffer[filemem.curpos < MAX_INST_TEXT_SIZE ? filemem.curpos : MAX_INST_TEXT_SIZE] ='\0'; result = strdup(buffer); GioMemoryFileDtor(file); return result; }
void GioMemoryFileSnapshotDtor(struct Gio *vself) { struct GioMemoryFileSnapshot *self = (struct GioMemoryFileSnapshot *) vself; free(self->base.buffer); GioMemoryFileDtor(vself); }