diff options
Diffstat (limited to 'engines/sci')
-rw-r--r-- | engines/sci/engine/savegame.cpp | 34 | ||||
-rw-r--r-- | engines/sci/engine/scriptdebug.cpp | 170 | ||||
-rw-r--r-- | engines/sci/include/resource.h | 12 | ||||
-rw-r--r-- | engines/sci/include/sci_memory.h | 119 | ||||
-rw-r--r-- | engines/sci/scicore/sci_memory.cpp | 82 |
5 files changed, 24 insertions, 393 deletions
diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index daef5b331b..c7fc27d9ba 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -184,19 +184,6 @@ typedef mem_obj_t *mem_obj_ptr; #include <stdarg.h> /* We need va_lists */ #include "sci/include/sci_memory.h" -#ifdef CFSML_DEBUG_MALLOC -/* -#define free(p) dbg_sci_free(p) -#define malloc(s) dbg_sci_malloc(s) -#define calloc(n, s) dbg_sci_calloc(n, s) -#define realloc(p, s) dbg_sci_realloc(p, s) -*/ -#define free dbg_sci_free -#define malloc dbg_sci_malloc -#define calloc dbg_sci_calloc -#define realloc dbg_sci_realloc -#endif - static void _cfsml_error(const char *fmt, ...) { @@ -225,28 +212,13 @@ _cfsml_free_pointer_references_recursively(struct _cfsml_pointer_refstruct *refs { if (!refs) return; - #ifdef CFSML_DEBUG_MALLOC - SCI_MEMTEST; - #endif _cfsml_free_pointer_references_recursively(refs->next, free_pointers); - #ifdef CFSML_DEBUG_MALLOC - SCI_MEMTEST; - - fprintf(stderr,"Freeing ptrref %p [%p] %s\n", refs->ptr, refs, free_pointers? - "ALL": "cleanup only"); - #endif if (free_pointers) free(refs->ptr); - #ifdef CFSML_DEBUG_MALLOC - SCI_MEMTEST; - #endif free(refs); - #ifdef CFSML_DEBUG_MALLOC - SCI_MEMTEST; - #endif } static void @@ -266,10 +238,6 @@ _cfsml_get_current_refpointer() static void _cfsml_register_pointer(void *ptr) { struct _cfsml_pointer_refstruct *newref = (struct _cfsml_pointer_refstruct*)sci_malloc(sizeof (struct _cfsml_pointer_refstruct)); - #ifdef CFSML_DEBUG_MALLOC - SCI_MEMTEST; - fprintf(stderr,"Registering ptrref %p [%p]\n", ptr, newref); - #endif newref->next = *_cfsml_pointer_references_current; newref->ptr = ptr; *_cfsml_pointer_references_current = newref; @@ -4859,14 +4827,12 @@ gamestate_save(state_t *s, char *dirname) { /* Calculate the time spent with this game */ s->game_time = time(NULL) - s->game_start_time.tv_sec; -SCI_MEMTEST; #line 878 "savegame.cfsml" /* Auto-generated CFSML data writer code */ _cfsml_write_state_t(fh, s); fprintf(fh, "\n"); /* End of auto-generated CFSML data writer code */ #line 730 "savegame.cfsml" -SCI_MEMTEST; fclose(fh); diff --git a/engines/sci/engine/scriptdebug.cpp b/engines/sci/engine/scriptdebug.cpp index 1796edb5de..9b56e6408b 100644 --- a/engines/sci/engine/scriptdebug.cpp +++ b/engines/sci/engine/scriptdebug.cpp @@ -1680,154 +1680,6 @@ c_vmvars(state_t *s) { return 0; } -#ifdef HAVE_SYSV_IPC -static int _codebug_pid = 0; -static int _codebug_stdin[2]; -static int _codebug_stdout[2]; -static int _codebug_commands[2]; /* sends commands to intermediate process */ - -/* Codebugging uses two child processes: -** The first one only performs output "coloring", its child process -** is an actual secondary freesci process -*/ - -#define CODEBUG_BUFSIZE 512 -static const char *_codebug_colstr = "\033[31m\033[1m"; -static const char *_codebug_uncolstr = "\033[0m"; - -static void -codebug_send_command(const char *cmd) { - if (_codebug_pid) - write(_codebug_commands[1], cmd, strlen(cmd)); -} - -static void -_print_colored(int from_fd) { - char buf[CODEBUG_BUFSIZE + 64]; - char *buf_offset; - int br; - int length_increment; - - strcpy(buf, _codebug_colstr); - length_increment = strlen(_codebug_colstr); - buf_offset = buf + length_increment; - length_increment += strlen(_codebug_uncolstr); - - do { - br = read(from_fd, buf_offset, CODEBUG_BUFSIZE); - if (br > 0) { - strcpy(buf_offset + br, _codebug_uncolstr); - /* Atomic write with colors to nullify risk of - ** interference from fg process */ - write(1, buf, br + length_increment); - } - } while (br == CODEBUG_BUFSIZE); -} - -void -_codebug_kill_children() { - if (_codebug_pid) - kill(_codebug_pid, SIGTERM); -} - -void -_codebug_sighandler(int i) { - if (i == SIGPIPE || i == SIGTERM) - kill(_codebug_pid, SIGTERM); - - write(1, _codebug_uncolstr, strlen(_codebug_uncolstr)); - fprintf(stderr, "Child process failed, aborting!\n"); - fprintf(stderr, "(if you're using the UNIX sound server, you'll probably get spurious" - " warnings regarding the sound server now...)\n"); - exit(1); -} - -static void -do_codebug(char *path, char *datapath) { - pipe(_codebug_stdin); - pipe(_codebug_stdout); - close(_codebug_commands[1]); - - _codebug_pid = fork(); - if (_codebug_pid) { - fd_set fs; - int max_n; - - /* parent process */ - close(_codebug_stdin[0]); - close(_codebug_stdout[1]); - - max_n = _codebug_commands[0]; - if (max_n < _codebug_stdout[0]) - max_n = _codebug_stdout[0]; - - signal(SIGCHLD, _codebug_sighandler); - signal(SIGPIPE, _codebug_sighandler); - signal(SIGTERM, _codebug_sighandler); - - while (1) { /* Until sigchild */ - FD_ZERO(&fs); - FD_SET(_codebug_commands[0], &fs); - FD_SET(_codebug_stdout[0], &fs); - - fflush(NULL); - select(max_n + 1, &fs, NULL, NULL, NULL); - - if (FD_ISSET(_codebug_commands[0], &fs)) { - char buf[CODEBUG_BUFSIZE]; - int br; - do { - br = read(_codebug_commands[0], buf, CODEBUG_BUFSIZE); - if (br > 0) - write(_codebug_stdin[1], buf, br); - } while (br == CODEBUG_BUFSIZE); - } - - if (FD_ISSET(_codebug_stdout[0], &fs)) - _print_colored(_codebug_stdout[0]); - - } - } else { - /* child */ - close(_codebug_stdin[1]); - close(_codebug_stdout[0]); - - /* Re-associate stdin, stdout, stderr with i/o pipes */ - dup2(_codebug_stdin[0], 0); - dup2(_codebug_stdout[1], 1); - dup2(_codebug_stdout[1], 2); - - printf("Calling '%s' on data directory '%s'...\n", path, datapath); - execlp(path, path, "-D", "-gnull", "-Pnull", "-Onull", "-Mmt32gm", - "--disable-readline", "-d", datapath, NULL); - perror("execlp of FreeSCI"); - exit(1); - } -} - -static int -c_codebug(state_t *s) { - char *path = cmd_params[0].str; - - if (_codebug_pid) { - sciprintf("Already codebugging!\n"); - return 1; - } - - pipe(_codebug_commands); - _codebug_pid = fork(); - - if (!_codebug_pid) - do_codebug(path, s->resource_dir); /* Do codebugging in a child process */ - else { - close(_codebug_commands[0]); - sleep(1); /* Yield to the scheduler, at least a bit */ - atexit(_codebug_kill_children); - } - return 0; -} -#endif - static int c_backtrace(state_t *s) { int i; @@ -3618,15 +3470,6 @@ script_debug(state_t *s, reg_t *pc, stack_ptr_t *sp, stack_ptr_t *pp, reg_t *obj " s.1, snk.1, so.1, bpx.1"); con_hook_command(c_songlib_print, "songlib_print", "", ""); -#ifdef HAVE_SYSV_IPC - con_hook_command(c_codebug, "codebug", "!s", - "Starts codebugging mode\n\nUSAGE\n\n" - " codebug path/to/old/freesci\n\n" - " A different version of FreeSCI may be\n" - " spawned as a child process; all commands\n" - " send to this debugger will also be sent to\n" - " to the child process.\n\nSEE ALSO\n\n codebugging.3"); -#endif con_hook_command(c_type, "type", "!a", "Determines the type of a value\n\n" "SEE ALSO\n\n addresses.3, vo.1"); @@ -3743,19 +3586,14 @@ script_debug(state_t *s, reg_t *pc, stack_ptr_t *sp, stack_ptr_t *pp, reg_t *obj sfx_suspend(&s->sound, 1); #ifdef WANT_CONSOLE -# ifndef FORCE_CONSOLE if (!have_windowed) { -# endif con_gfx_show(s->gfx_state); input = con_gfx_read(s->gfx_state); con_gfx_hide(s->gfx_state); commandstring = input; sciprintf("> %s\n", commandstring); -# ifndef FORCE_CONSOLE } else -# endif #endif -#ifndef FORCE_CONSOLE commandstring = _debug_get_input(); /* Check if a specific destination has been given */ @@ -3764,14 +3602,6 @@ script_debug(state_t *s, reg_t *pc, stack_ptr_t *sp, stack_ptr_t *pp, reg_t *obj || commandstring[0] == ':')) skipfirst = 1; -#endif -#ifdef HAVE_SYSV_IPC - if (commandstring - && commandstring[0] != '.') { - codebug_send_command(commandstring + skipfirst); - codebug_send_command("\n"); - } -#endif if (commandstring && commandstring[0] != ':') con_parse(s, commandstring + skipfirst); diff --git a/engines/sci/include/resource.h b/engines/sci/include/resource.h index b64c02e4d2..2629fa5a33 100644 --- a/engines/sci/include/resource.h +++ b/engines/sci/include/resource.h @@ -58,7 +58,6 @@ //TODO: Remove these defines by replacing their functionality by their ScummVM counterparts #define HAVE_MEMCHR -#define HAVE_RMDIR #define HAVE_FCNTL_H #ifndef _MSC_VER #define HAVE_UNISTD_H @@ -154,8 +153,6 @@ putInt16(byte* dest, int src) { ** (int) src: value to write */ -#define SCI_MEMTEST memtest(__FILE__, __LINE__) - /*-- queues --*/ typedef struct _sci_queue_node { @@ -349,16 +346,7 @@ whether a string is really a string or an array. */ int is_print_str(char *str); # define sci_unlink unlink - -#ifdef HAVE_RMDIR # define sci_rmdir rmdir -#else /* !HAVE_RMDIR */ -# ifdef WIN32 -# define sci_rmdir _rmdir -# else -# error "Please provide an int sci_rmdir(const char *) for removing directories" -# endif -#endif /* !HAVE_RMDIR */ #ifndef HAVE_FFS int sci_ffs(int _mask); diff --git a/engines/sci/include/sci_memory.h b/engines/sci/include/sci_memory.h index ecda066627..6e3c23930f 100644 --- a/engines/sci/include/sci_memory.h +++ b/engines/sci/include/sci_memory.h @@ -87,12 +87,6 @@ /********** the memory allocation macros **********/ -#define INFO_MEMORY(alloc_statement, size, filename, linenum, funcname)\ - fprintf(stderr, "ALLOC_MEM(%lu bytes) [%s (%s) : %u] "\ - #alloc_statement "\n",\ - (unsigned long)size, filename, funcname, linenum); - - #ifdef UNCHECKED_MALLOCS #define ALLOC_MEM(alloc_statement, size, filename, linenum, funcname)\ @@ -122,14 +116,6 @@ do {\ PANIC_MEMORY(size, filename, linenum, funcname, "Failed! Exiting...")\ BREAKPOINT()\ \ - /* attempt to allocate memory indefinitely\ - do\ - {\ - PANIC_MEMORY(size, filename, linenum, funcname, "Failed! Trying again...");\ - sleep(1000);\ - alloc_statement;\ - } while (res == NULL);\ - */\ }\ } while (0); @@ -139,37 +125,29 @@ do {\ /********** memory allocation routines **********/ extern void * - _SCI_MALLOC(size_t size, const char *file, int line, const char *funct); + sci_malloc(size_t size); /* Allocates the specified amount of memory. ** Parameters: (size_t) size: Number of bytes to allocate -** (char *) file: Filename this routine is called from -** (use __FILE__) -** (int) line: Line number this routine is called from -** (use __LINE__) -** (char *) funct: Function this routine is called from -** (use __PRETTY_FUNCTION__ if available) ** Returns : (void *) A pointer to the allocated memory chunk ** To free this string, use the sci_free() command. ** If the call fails, behaviour is dependent on the definition of SCI_ALLOC. */ extern void * - _SCI_CALLOC(size_t num, size_t size, const char *file, int line, const char *funct); + sci_calloc(size_t num, size_t size); /* Allocates num * size bytes of zeroed-out memory. ** Parameters: (size_t) num: Number of elements to allocate ** (size_t) size: Amount of memory per element to allocate -** Please see _SCI_MALLOC() for details on other parameters. ** Returns : (void *) A pointer to the allocated memory chunk ** To free this string, use the sci_free() command. ** See _SCI_MALLOC() for more information if call fails. */ extern void * - _SCI_REALLOC(void *ptr, size_t size, const char *file, int line, const char *funct); + sci_realloc(void *ptr, size_t size); /* Increases the size of an allocated memory chunk. ** Parameters: (void *) ptr: The original pointer ** (size_t) size: New size of the memory chunk -** Please see _SCI_MALLOC() for details on other parameters. ** Returns : (void *) A possibly new pointer, containing 'size' ** bytes of memory and everything contained in the original 'ptr' ** (possibly minus some trailing data if the new memory area is @@ -179,19 +157,17 @@ extern void * */ extern void - _SCI_FREE(void *ptr, const char *file, int line, const char *funct); + sci_free(void *ptr); /* Frees previously allocated memory chunks ** Parameters: (void *) ptr: The pointer to free -** Please see _SCI_MALLOC() for details on other parameters. ** Returns : (void) */ extern void * - _SCI_MEMDUP(const void *src, size_t size, const char *file, int line, const char *funct); + sci_memdup(const void *src, size_t size); /* Duplicates a chunk of memory ** Parameters: (void *) src: Pointer to the data to duplicate ** (size_t) size: Number of bytes to duplicate -** Please see _SCI_MALLOC() for details on other parameters. ** Returns : (void *) An appropriately allocated duplicate, or NULL on error ** Please try to avoid data duplication unless absolutely neccessary! ** To free this string, use the sci_free() command. @@ -199,10 +175,9 @@ extern void * */ extern char * - _SCI_STRDUP(const char *src, const char *file, int line, const char *funct); + sci_strdup(const char *src); /* Duplicates a string. ** Parameters: (const char *) src: The original pointer -** Please see _SCI_MALLOC() for details on other parameters. ** Returns : (char *) a pointer to the storage location for the copied ** string. ** To free this string, use the sci_free() command. @@ -211,12 +186,11 @@ extern char * extern char * - _SCI_STRNDUP(const char *src, size_t length, const char *file, int line, const char *funct); + sci_strndup(const char *src, size_t length); /* Copies a string into a newly allocated memory part, up to a certain length. ** Parameters: (char *) src: The source string ** (int) length: The maximum length of the string (not counting ** a trailing \0). -** Please see _SCI_MALLOC() for details on other parameters. ** Returns : (char *) The resulting copy, allocated with sci_malloc(). ** To free this string, use the sci_free() command. ** See _SCI_MALLOC() for more information if call fails. @@ -265,83 +239,4 @@ extern void * ** The number of references accounted for will be one. */ -/********** macro definitions for routines **********/ - -# ifdef __GNUC__ -# define sci_malloc(size)\ - _SCI_MALLOC(size, __FILE__, __LINE__, __PRETTY_FUNCTION__) -# else -# define sci_malloc(size)\ - _SCI_MALLOC(size, __FILE__, __LINE__, "") -# endif - -# ifdef __GNUC__ -# define sci_calloc(num, count)\ - _SCI_CALLOC(num, count, __FILE__, __LINE__, __PRETTY_FUNCTION__) -# else -# define sci_calloc(num, count)\ - _SCI_CALLOC(num, count, __FILE__, __LINE__, "") -# endif - - -# ifdef __GNUC__ -# define sci_realloc(ptr, size)\ - _SCI_REALLOC(ptr, size, __FILE__, __LINE__, __PRETTY_FUNCTION__) -# else -# define sci_realloc(ptr, size)\ - _SCI_REALLOC(ptr, size, __FILE__, __LINE__, "") -# endif - - -# ifdef __GNUC__ -# define sci_free(ptr)\ - _SCI_FREE(ptr, __FILE__, __LINE__, __PRETTY_FUNCTION__) -# else -# define sci_free(ptr)\ - _SCI_FREE(ptr, __FILE__, __LINE__, "") -# endif - - -# ifdef __GNUC__ -# define sci_memdup(src, size)\ - _SCI_MEMDUP(src, size, __FILE__, __LINE__, __PRETTY_FUNCTION__) -# else -# define sci_memdup(src, size)\ - _SCI_MEMDUP(src, size, __FILE__, __LINE__, "") -# endif - - -# ifdef __GNUC__ -# define sci_strdup(src)\ - _SCI_STRDUP(src, __FILE__, __LINE__, __PRETTY_FUNCTION__) -# else -# define sci_strdup(src)\ - _SCI_STRDUP(src, __FILE__, __LINE__, "") -# endif - - -# ifdef __GNUC__ -# define sci_strndup(src, length)\ - _SCI_STRNDUP(src, length, __FILE__, __LINE__, __PRETTY_FUNCTION__) -# else -# define sci_strndup(src, length)\ - _SCI_STRNDUP(src, length, __FILE__, __LINE__, "") -# endif - - -/********** other memory/debug related routines **********/ - -#ifdef WIN32 -extern void - debug_win32_memory(int dbg_setting); -/* Sets debugging for Win32 memory. -** Parameters: (bool) dbg_setting: -** 0: no debugging -** 1: call _CrtCheckMemory at every memory request -** 2: perform automatic leak checking at program exit -** 3: enable debug heap allocations -*/ -#endif - - #endif /* _SCI_MEMORY_H */ diff --git a/engines/sci/scicore/sci_memory.cpp b/engines/sci/scicore/sci_memory.cpp index 4563c61762..332ae0a740 100644 --- a/engines/sci/scicore/sci_memory.cpp +++ b/engines/sci/scicore/sci_memory.cpp @@ -53,34 +53,34 @@ void * -_SCI_MALLOC(size_t size, const char *file, int line, const char *funct) { +sci_malloc(size_t size) { void *res; - ALLOC_MEM((res = malloc(size)), size, file, line, funct) + ALLOC_MEM((res = malloc(size)), size, __FILE__, __LINE__, "") return res; } void * -_SCI_CALLOC(size_t num, size_t size, const char *file, int line, const char *funct) { +sci_calloc(size_t num, size_t size) { void *res; - ALLOC_MEM((res = calloc(num, size)), num * size, file, line, funct) + ALLOC_MEM((res = calloc(num, size)), num * size, __FILE__, __LINE__, "") return res; } void * -_SCI_REALLOC(void *ptr, size_t size, const char *file, int line, const char *funct) { +sci_realloc(void *ptr, size_t size) { void *res; - ALLOC_MEM((res = realloc(ptr, size)), size, file, line, funct) + ALLOC_MEM((res = realloc(ptr, size)), size, __FILE__, __LINE__, "") return res; } void -_SCI_FREE(void *ptr, const char *file, int line, const char *funct) { +sci_free(void *ptr) { if (!ptr) { fprintf(stderr, "_SCI_FREE() [%s (%s) : %u]\n", - file, funct, line); + __FILE__, "", __LINE__); fprintf(stderr, " attempt to free NULL pointer\n"); BREAKPOINT(); } @@ -89,46 +89,46 @@ _SCI_FREE(void *ptr, const char *file, int line, const char *funct) { void * -_SCI_MEMDUP(const void *ptr, size_t size, const char *file, int line, const char *funct) { +sci_memdup(const void *ptr, size_t size) { void *res; if (!ptr) { fprintf(stderr, "_SCI_MEMDUP() [%s (%s) : %u]\n", - file, funct, line); + __FILE__, "", __LINE__); fprintf(stderr, " attempt to memdup NULL pointer\n"); BREAKPOINT(); } - ALLOC_MEM((res = malloc(size)), size, file, line, funct) + ALLOC_MEM((res = malloc(size)), size, __FILE__, __LINE__, "") memcpy(res, ptr, size); return res; } char * -_SCI_STRDUP(const char *src, const char *file, int line, const char *funct) { +sci_strdup(const char *src) { void *res; if (!src) { fprintf(stderr, "_SCI_STRDUP() [%s (%s) : %u]\n", - file, funct, line); + __FILE__, "", __LINE__); fprintf(stderr, " attempt to strdup NULL pointer\n"); BREAKPOINT(); } - ALLOC_MEM((res = strdup(src)), strlen(src), file, line, funct) + ALLOC_MEM((res = strdup(src)), strlen(src), __FILE__, __LINE__, "") return (char*)res; } char * -_SCI_STRNDUP(const char *src, size_t length, const char *file, int line, const char *funct) { +sci_strndup(const char *src, size_t length) { void *res; char *strres; size_t rlen = (int)MIN(strlen(src), length) + 1; if (!src) { fprintf(stderr, "_SCI_STRNDUP() [%s (%s) : %u]\n", - file, funct, line); + __FILE__, "", __LINE__); fprintf(stderr, " attempt to strndup NULL pointer\n"); BREAKPOINT(); } - ALLOC_MEM((res = malloc(rlen)), rlen, file, line, funct) + ALLOC_MEM((res = malloc(rlen)), rlen, __FILE__, __LINE__, "") strres = (char*)res; strncpy(strres, src, rlen); @@ -137,54 +137,6 @@ _SCI_STRNDUP(const char *src, size_t length, const char *file, int line, const c return strres; } - -/********** Win32 functions **********/ - -#ifdef _MSC_VER -void -debug_win32_memory(int dbg_setting) { -#if defined(NDEBUG) - fprintf(stderr, - "WARNING: Cannot debug Win32 memory in release mode.\n"); -#elif defined(SATISFY_PURIFY) - fprintf(stderr, - "WARNING: Cannot debug Win32 memory in this mode.\n"); -#else - - int tmpFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); - - if (dbg_setting > 0) - tmpFlag |= _CRTDBG_CHECK_ALWAYS_DF; - /* call _CrtCheckMemory at every request */ - - if (dbg_setting > 1) - tmpFlag |= _CRTDBG_LEAK_CHECK_DF; - /* perform automatic leak checking at program exit */ - - if (dbg_setting > 2) - tmpFlag |= _CRTDBG_DELAY_FREE_MEM_DF; - /* enable debug heap allocations */ - - if (dbg_setting > 3) { - PANIC((stderr, "Invalid value for debug_win32_memory!\n")); - BREAKPOINT(); - } - - if (dbg_setting <= 0) { - /* turn off above */ - tmpFlag &= ~_CRTDBG_CHECK_ALWAYS_DF; - tmpFlag &= ~_CRTDBG_DELAY_FREE_MEM_DF; - tmpFlag &= ~_CRTDBG_LEAK_CHECK_DF; - } - - /* set new state for flag */ - _CrtSetDbgFlag(tmpFlag); -#endif -} -#endif - - - /*-------- Refcounting ----------*/ #define REFCOUNT_OVERHEAD (sizeof(guint32)*3) |