git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Kernel - Change virtual memory API to use void* for virtual addresses
[tpg/acess2.git]
/
KernelLand
/
Kernel
/
libc.c
diff --git
a/KernelLand/Kernel/libc.c
b/KernelLand/Kernel/libc.c
index
2950782
..
2e08a17
100644
(file)
--- a/
KernelLand/Kernel/libc.c
+++ b/
KernelLand/Kernel/libc.c
@@
-156,19
+156,20
@@
void itoa(char *buf, Uint64 num, int base, int minLength, char pad)
int pos=0, i;
Uint64 rem;
int pos=0, i;
Uint64 rem;
+ buf[0] = 0;
+ ASSERTR(base >= 2, );
+ ASSERTR(base <= 16, );
+
// Sanity check
if(!buf) return;
// Sanity check
if(!buf) return;
- // Sanity Check
- if(base > 16 || base < 2) {
- buf[0] = 0;
- return;
- }
-
// Convert
while(num > base-1) {
num = DivMod64U(num, base, &rem); // Shift `num` and get remainder
ASSERT(rem >= 0);
// Convert
while(num > base-1) {
num = DivMod64U(num, base, &rem); // Shift `num` and get remainder
ASSERT(rem >= 0);
+ if( rem >= base && base != 16 ) {
+ Debug("rem(%llx) >= base(%x), num=%llx", rem, base, num);
+ }
ASSERT(rem < base);
tmpBuf[pos] = cUCDIGITS[ rem ];
pos++;
ASSERT(rem < base);
tmpBuf[pos] = cUCDIGITS[ rem ];
pos++;
@@
-316,11
+317,14
@@
int vsnprintf(char *__s, const size_t __maxlen, const char *__format, va_list ar
GETVAL();
if( isLongLong && val >> 63 ) {
PUTCH('-');
GETVAL();
if( isLongLong && val >> 63 ) {
PUTCH('-');
- val = -val;
+ if( val == LLONG_MIN )
+ val = LLONG_MAX;
+ else
+ val = -val;
}
}
- else if( !isLongLong &&
val >> 31
) {
+ else if( !isLongLong &&
(val >> 31)
) {
PUTCH('-');
PUTCH('-');
- val =
-(Sint32)val
;
+ val =
(~val & 0xFFFFFFFF)+1
;
}
itoa(tmpBuf, val, 10, minSize, pad);
goto printString;
}
itoa(tmpBuf, val, 10, minSize, pad);
goto printString;
@@
-387,10
+391,23
@@
int vsnprintf(char *__s, const size_t __maxlen, const char *__format, va_list ar
case 'C': // Non-Null Terminated Character Array
p = va_arg(args, char*);
case 'C': // Non-Null Terminated Character Array
p = va_arg(args, char*);
- if( !CheckMem(p, minSize) ) continue; // No #PFs please
+ if( !CheckMem(p, minSize) ) {
+ p = "(inval)";
+ goto printString;
+ }
if(!p) goto printString;
while(minSize--) {
if(!p) goto printString;
while(minSize--) {
- PUTCH(*p);
+ if(*p == '\0') {
+ PUTCH('\\');
+ PUTCH('0');
+ }
+ else if(*p == '\\') {
+ PUTCH('\\');
+ PUTCH('\\');
+ }
+ else {
+ PUTCH(*p);
+ }
p ++;
}
break;
p ++;
}
break;
UCC
git Repository :: git.ucc.asn.au