Subversion Repositories HelenOS

Rev

Rev 3022 | Rev 4201 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3022 Rev 4055
Line 38... Line 38...
38
#include <printf/printf_core.h>
38
#include <printf/printf_core.h>
39
#include <putchar.h>
39
#include <putchar.h>
40
#include <print.h>
40
#include <print.h>
41
#include <arch/arg.h>
41
#include <arch/arg.h>
42
#include <macros.h>
42
#include <macros.h>
43
#include <func.h>
43
#include <string.h>
44
#include <arch.h>
44
#include <arch.h>
45
 
45
 
46
/** show prefixes 0x or 0 */
46
/** show prefixes 0x or 0 */
47
#define __PRINTF_FLAG_PREFIX        0x00000001
47
#define __PRINTF_FLAG_PREFIX        0x00000001
48
/** signed / unsigned number */
48
/** signed / unsigned number */
Line 73... Line 73...
73
    PrintfQualifierByte = 0,
73
    PrintfQualifierByte = 0,
74
    PrintfQualifierShort,
74
    PrintfQualifierShort,
75
    PrintfQualifierInt,
75
    PrintfQualifierInt,
76
    PrintfQualifierLong,
76
    PrintfQualifierLong,
77
    PrintfQualifierLongLong,
77
    PrintfQualifierLongLong,
78
    PrintfQualifierNative,
-
 
79
    PrintfQualifierPointer
78
    PrintfQualifierPointer
80
} qualifier_t;
79
} qualifier_t;
81
 
80
 
82
static char digits_small[] = "0123456789abcdef";
81
static char digits_small[] = "0123456789abcdef";
83
static char digits_big[] = "0123456789ABCDEF";
82
static char digits_big[] = "0123456789ABCDEF";
Line 430... Line 429...
430
 *  - "hh"  Signed or unsigned char.@n
429
 *  - "hh"  Signed or unsigned char.@n
431
 *  - "h"   Signed or unsigned short.@n
430
 *  - "h"   Signed or unsigned short.@n
432
 *  - ""    Signed or unsigned int (default value).@n
431
 *  - ""    Signed or unsigned int (default value).@n
433
 *  - "l"   Signed or unsigned long int.@n
432
 *  - "l"   Signed or unsigned long int.@n
434
 *  - "ll"  Signed or unsigned long long int.@n
433
 *  - "ll"  Signed or unsigned long long int.@n
435
 *  - "z"   unative_t (non-standard extension).@n
-
 
436
 *
434
 *
437
 *
435
 *
438
 * CONVERSION:@n
436
 * CONVERSION:@n
439
 *  - % Print percentile character itself.
437
 *  - % Print percentile character itself.
440
 *
438
 *
Line 583... Line 581...
583
                if (fmt[i] == 'l') {
581
                if (fmt[i] == 'l') {
584
                    i++;
582
                    i++;
585
                    qualifier = PrintfQualifierLongLong;
583
                    qualifier = PrintfQualifierLongLong;
586
                }
584
                }
587
                break;
585
                break;
588
            case 'z':   /* unative_t */
-
 
589
                qualifier = PrintfQualifierNative;
-
 
590
                break;
-
 
591
            default:
586
            default:
592
                /* default type */
587
                /* default type */
593
                qualifier = PrintfQualifierInt;
588
                qualifier = PrintfQualifierInt;
594
                --i;
589
                --i;
595
            }  
590
            }  
Line 684... Line 679...
684
                size = sizeof(unsigned long);
679
                size = sizeof(unsigned long);
685
                number = (uint64_t)va_arg(ap, unsigned long);
680
                number = (uint64_t) va_arg(ap, unsigned long);
686
                break;
681
                break;
687
            case PrintfQualifierLongLong:
682
            case PrintfQualifierLongLong:
688
                size = sizeof(unsigned long long);
683
                size = sizeof(unsigned long long);
689
                number = (uint64_t)va_arg(ap,
684
                number = (uint64_t) va_arg(ap, unsigned long long);
690
                    unsigned long long);
-
 
691
                break;
685
                break;
692
            case PrintfQualifierPointer:
686
            case PrintfQualifierPointer:
693
                size = sizeof(void *);
687
                size = sizeof(void *);
694
                number = (uint64_t)(unsigned long)va_arg(ap,
688
                number = (uint64_t) (unsigned long) va_arg(ap, void *);
695
                    void *);
-
 
696
                break;
-
 
697
            case PrintfQualifierNative:
-
 
698
                size = sizeof(unative_t);
-
 
699
                number = (uint64_t)va_arg(ap, unative_t);
-
 
700
                break;
689
                break;
701
            default: /* Unknown qualifier */
690
            default: /* Unknown qualifier */
702
                counter = -counter;
691
                counter = -counter;
703
                goto out;
692
                goto out;
704
            }
693
            }
Line 742... Line 731...
742
        }
731
        }
743
        counter += retval;
732
        counter += retval;
744
    }
733
    }
745
 
734
 
746
out:
735
out:
747
   
-
 
748
    return counter;
736
    return counter;
749
}
737
}
750
 
738
 
751
/** @}
739
/** @}
752
 */
740
 */