diff options
author | Kisuka <Kisuka@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2011-03-09 12:50:24 +0000 |
---|---|---|
committer | Kisuka <Kisuka@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2011-03-09 12:50:24 +0000 |
commit | 5cca96bf950bcd9586ab04f0e0f2b5d9a556c5e0 (patch) | |
tree | 1f546bf12a99017b41ae2fd90e0ac452f97b0282 /src/common/utils.c | |
parent | b4208257ea0906e375024f811d8e51208d539d35 (diff) | |
download | hercules-5cca96bf950bcd9586ab04f0e0f2b5d9a556c5e0.tar.gz hercules-5cca96bf950bcd9586ab04f0e0f2b5d9a556c5e0.tar.bz2 hercules-5cca96bf950bcd9586ab04f0e0f2b5d9a556c5e0.tar.xz hercules-5cca96bf950bcd9586ab04f0e0f2b5d9a556c5e0.zip |
* Merged changes from trunk [14688:14739/trunk].
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/renewal@14740 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/common/utils.c')
-rw-r--r-- | src/common/utils.c | 72 |
1 files changed, 50 insertions, 22 deletions
diff --git a/src/common/utils.c b/src/common/utils.c index 12123784f..f1813ea41 100644 --- a/src/common/utils.c +++ b/src/common/utils.c @@ -5,6 +5,7 @@ #include "../common/mmo.h" #include "../common/malloc.h" #include "../common/showmsg.h" +#include "socket.h" #include "utils.h" #include <stdio.h> @@ -25,39 +26,64 @@ #include <sys/stat.h> #endif -// generate a hex dump of the first 'length' bytes of 'buffer' -void dump(FILE* fp, const unsigned char* buffer, int length) + +/// Dumps given buffer into file pointed to by a handle. +void WriteDump(FILE* fp, const void* buffer, size_t length) { - int i, j; + size_t i; + char hex[48+1], ascii[16+1]; - fprintf(fp, " Hex ASCII\n"); - fprintf(fp, " ----------------------------------------------- ----------------"); + fprintf(fp, "--- 00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E-0F 0123456789ABCDEF\n"); + ascii[16] = 0; - for (i = 0; i < length; i += 16) + for( i = 0; i < length; i++ ) { - fprintf(fp, "\n%p ", &buffer[i]); - for (j = i; j < i + 16; ++j) + char c = RBUFB(buffer,i); + + ascii[i%16] = ISCNTRL(c) ? '.' : c; + sprintf(hex+(i%16)*3, "%02X ", RBUFB(buffer,i)); + + if( (i%16) == 15 ) { - if (j < length) - fprintf(fp, "%02hX ", buffer[j]); - else - fprintf(fp, " "); + fprintf(fp, "%03X %s %s\n", i/16, hex, ascii); } + } + + if( (i%16) != 0 ) + { + ascii[i%16] = 0; + fprintf(fp, "%03X %-48s %-16s\n", i/16, hex, ascii); + } +} + - fprintf(fp, " | "); +/// Dumps given buffer on the console. +void ShowDump(const void* buffer, size_t length) +{ + size_t i; + char hex[48+1], ascii[16+1]; + + ShowDebug("--- 00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E-0F 0123456789ABCDEF\n"); + ascii[16] = 0; + + for( i = 0; i < length; i++ ) + { + char c = RBUFB(buffer,i); + + ascii[i%16] = ISCNTRL(c) ? '.' : c; + sprintf(hex+(i%16)*3, "%02X ", RBUFB(buffer,i)); - for (j = i; j < i + 16; ++j) + if( (i%16) == 15 ) { - if (j < length) { - if (buffer[j] > 31 && buffer[j] < 127) - fprintf(fp, "%c", buffer[j]); - else - fprintf(fp, "."); - } else - fprintf(fp, " "); + ShowDebug("%03X %s %s\n", i/16, hex, ascii); } } - fprintf(fp, "\n"); + + if( (i%16) != 0 ) + { + ascii[i%16] = 0; + ShowDebug("%03X %-48s %-16s\n", i/16, hex, ascii); + } } @@ -183,6 +209,8 @@ void findfile(const char *p, const char *pat, void (func)(const char*)) findfile(tmppath, pat, func); } }//end while + + closedir(dir); } #endif |