diff options
Diffstat (limited to 'source3/lib/util.c')
-rw-r--r-- | source3/lib/util.c | 83 |
1 files changed, 53 insertions, 30 deletions
diff --git a/source3/lib/util.c b/source3/lib/util.c index ddc20e492c..4f564b332a 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -1040,7 +1040,7 @@ BOOL get_mydomname(fstring my_domname) Interpret a protocol description string, with a default. ****************************************************************************/ -int interpret_protocol(const char *str,int def) +int interpret_protocol(char *str,int def) { if (strequal(str,"NT1")) return(PROTOCOL_NT1); @@ -1400,24 +1400,20 @@ void smb_panic(const char *why) { char *cmd; int result; - size_t i; - void *backtrace_stack[BACKTRACE_STACK_SIZE]; - size_t backtrace_size; - char **backtrace_strings; #ifdef DEVELOPER { extern char *global_clobber_region_function; extern unsigned int global_clobber_region_line; - + if (global_clobber_region_function) { DEBUG(0,("smb_panic: clobber_region() last called from [%s(%u)]\n", - global_clobber_region_function, - global_clobber_region_line)); + global_clobber_region_function, + global_clobber_region_line)); } } #endif - + cmd = lp_panic_action(); if (cmd && *cmd) { DEBUG(0, ("smb_panic(): calling panic action [%s]\n", cmd)); @@ -1425,36 +1421,19 @@ void smb_panic(const char *why) if (result == -1) DEBUG(0, ("smb_panic(): fork failed in panic action: %s\n", - strerror(errno))); + strerror(errno))); else DEBUG(0, ("smb_panic(): action returned status %d\n", - WEXITSTATUS(result))); + WEXITSTATUS(result))); } DEBUG(0,("PANIC: %s\n", why)); - -#ifdef HAVE_BACKTRACE_SYMBOLS - /* get the backtrace (stack frames) */ - backtrace_size = backtrace(backtrace_stack,BACKTRACE_STACK_SIZE); - backtrace_strings = backtrace_symbols(backtrace_stack, backtrace_size); - - DEBUG(0, ("BACKTRACE: %d stack frames:\n", backtrace_size)); - - if (backtrace_strings) { - for (i = 0; i < backtrace_size; i++) - DEBUGADD(0, (" #%u %s\n", i, backtrace_strings[i])); - - SAFE_FREE(backtrace_strings); - } - -#endif - dbgflush(); abort(); } /******************************************************************* - A readdir wrapper which just returns the file name. - ********************************************************************/ + A readdir wrapper which just returns the file name. +********************************************************************/ const char *readdirname(DIR *p) { @@ -1840,6 +1819,50 @@ enum remote_arch_types get_remote_arch(void) return ra_type; } + +void out_ascii(FILE *f, unsigned char *buf,int len) +{ + int i; + for (i=0;i<len;i++) + fprintf(f, "%c", isprint(buf[i])?buf[i]:'.'); +} + +void out_data(FILE *f,char *buf1,int len, int per_line) +{ + unsigned char *buf = (unsigned char *)buf1; + int i=0; + if (len<=0) { + return; + } + + fprintf(f, "[%03X] ",i); + for (i=0;i<len;) { + fprintf(f, "%02X ",(int)buf[i]); + i++; + if (i%(per_line/2) == 0) fprintf(f, " "); + if (i%per_line == 0) { + out_ascii(f,&buf[i-per_line ],per_line/2); fprintf(f, " "); + out_ascii(f,&buf[i-per_line/2],per_line/2); fprintf(f, "\n"); + if (i<len) fprintf(f, "[%03X] ",i); + } + } + if ((i%per_line) != 0) { + int n; + + n = per_line - (i%per_line); + fprintf(f, " "); + if (n>(per_line/2)) fprintf(f, " "); + while (n--) { + fprintf(f, " "); + } + n = MIN(per_line/2,i%per_line); + out_ascii(f,&buf[i-(i%per_line)],n); fprintf(f, " "); + n = (i%per_line) - n; + if (n>0) out_ascii(f,&buf[i-n],n); + fprintf(f, "\n"); + } +} + void print_asc(int level, const unsigned char *buf,int len) { int i; |