Changeset 7bd0dbc in rtems


Ignore:
Timestamp:
May 15, 2009, 3:02:43 PM (11 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, master
Children:
4f67befd
Parents:
4a6d160
Message:

2009-05-15 Joel Sherrill <joel.sherrill@…>

  • libcsupport/Makefile.am, libcsupport/src/printk.c: Restructure to make analysis and coverage easier. Now 100% covered.
  • libcsupport/src/vprintk.c: New file.
Location:
cpukit
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • cpukit/ChangeLog

    r4a6d160 r7bd0dbc  
     12009-05-15      Joel Sherrill <joel.sherrill@OARcorp.com>
     2
     3        * libcsupport/Makefile.am, libcsupport/src/printk.c: Restructure to
     4        make analysis and coverage easier. Now 100% covered.
     5        * libcsupport/src/vprintk.c: New file.
     6
    172009-05-13      Joel Sherrill <joel.sherrill@OARcorp.com>
    28
  • cpukit/libcsupport/Makefile.am

    r4a6d160 r7bd0dbc  
    110110
    111111libcsupport_a_SOURCES = src/gxx_wrappers.c src/getchark.c src/printk.c \
    112     src/printk_plugin.c \
     112    src/printk_plugin.c src/vprintk.c \
    113113    $(BSD_LIBC_C_FILES) $(BASE_FS_C_FILES) $(MALLOC_C_FILES) \
    114114    $(ERROR_C_FILES) $(ASSOCIATION_C_FILES)
  • cpukit/libcsupport/src/printk.c

    r4a6d160 r7bd0dbc  
    2626
    2727/*
    28  * printNum - print number in a given base.
    29  * Arguments
    30  *    num - number to print
    31  *    base - base used to print the number.
    32  */
    33 static void printNum(
    34   long unsigned int num,
    35   int               base,
    36   int               sign,
    37   int               maxwidth,
    38   int               lead
    39 )
    40 {
    41   long unsigned int n;
    42   int               count;
    43   char              toPrint[20];
    44 
    45   if ( (sign == 1) && ((long)num <  0) ) {
    46     BSP_output_char('-');
    47     num = -num;
    48     if (maxwidth) maxwidth--;
    49   }
    50 
    51   count = 0;
    52   while ((n = num / base) > 0) {
    53     toPrint[count++] = (num - (n*base));
    54     num = n;
    55   }
    56   toPrint[count++] = num;
    57 
    58   for (n=maxwidth ; n > count; n-- )
    59     BSP_output_char(lead);
    60 
    61   for (n = 0; n < count; n++) {
    62     BSP_output_char("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]);
    63   }
    64 }
    65 
    66 /*
    67  *  vprintk
    68  *
    69  *  A simplified version of printf intended for use when the
    70  *  console is not yet initialized or in ISR's.
    71  *
    72  * Arguments:
    73  *    as in printf: fmt - format string, ... - unnamed arguments.
    74  */
    75 void vprintk(
    76   const char *fmt,
    77   va_list     ap
    78 )
    79 {
    80   char     c, *str;
    81   int      lflag, base, sign, width, lead, minus;
    82 
    83   for (; *fmt != '\0'; fmt++) {
    84     lflag = 0;
    85     base  = 0;
    86     sign = 0;
    87     width = 0;
    88     minus = 0;
    89     lead = ' ';
    90     if (*fmt == '%') {
    91       fmt++;
    92       if (*fmt == '0' ) {
    93         lead = '0';
    94         fmt++;
    95       }
    96       if (*fmt == '-' ) {
    97         minus = 1;
    98         fmt++;
    99       }
    100       while (*fmt >= '0' && *fmt <= '9' ) {
    101         width *= 10;
    102         width += (*fmt - '0');
    103         fmt++;
    104       }
    105 
    106       if ((c = *fmt) == 'l') {
    107         lflag = 1;
    108         c = *++fmt;
    109       }
    110       switch (c) {
    111         case 'o': case 'O': base = 8; sign = 0; break;
    112         case 'i': case 'I':
    113         case 'd': case 'D': base = 10; sign = 1; break;
    114         case 'u': case 'U': base = 10; sign = 0; break;
    115         case 'x': case 'X': base = 16; sign = 0; break;
    116         case 'p':           base = 16; sign = 0; lflag = 1; break;
    117         case 's':
    118           { int i, len;
    119             char *s;
    120 
    121             str = va_arg(ap, char *);
    122 
    123             /* calculate length of string */
    124             for ( len=0, s=str ; *s ; len++, s++ )
    125               ;
    126 
    127             /* leading spaces */
    128             if ( !minus )
    129               for ( i=len ; i<width ; i++ )
    130                 BSP_output_char(' ');
    131 
    132             /* no width option */
    133             if (width == 0) {
    134                     width = len;
    135             }
    136 
    137             /* output the string */
    138             for ( i=0 ; i<width && *str ; str++ )
    139               BSP_output_char(*str);
    140 
    141             /* trailing spaces */
    142             if ( minus )
    143               for ( i=len ; i<width ; i++ )
    144                 BSP_output_char(' ');
    145           }
    146           break;
    147         case 'c':
    148           BSP_output_char(va_arg(ap, int));
    149           break;
    150         default:
    151           BSP_output_char(c);
    152           break;
    153       } /* switch*/
    154 
    155       if (base)
    156         printNum(lflag ? va_arg(ap, long int) : (long int)va_arg(ap, int),
    157                  base, sign, width, lead);
    158     } else {
    159       BSP_output_char(*fmt);
    160     }
    161   }
    162 }
    163 
    164 /*
    16528 * printk
    16629 *
Note: See TracChangeset for help on using the changeset viewer.