[PATCH 1/2] lib: sbi: Make console_puts/console_putc interchangeable

Xiang W wxjstz at 126.com
Wed Oct 25 00:28:52 PDT 2023


在 2023-10-25星期三的 14:53 +0800,Guo Ren写道:
> On Wed, Oct 25, 2023 at 12:32 PM Xiang W <wxjstz at 126.com> wrote:
> > 
> > console_puts/console_putc should replace each other, but the previous
> > sbi_putc can only use console_putc. This patch improves this problem.
> > 
> > Signed-off-by: Xiang W <wxjstz at 126.com>
> > ---
> >  lib/sbi/sbi_console.c | 35 +++++++++++++++++------------------
> >  1 file changed, 17 insertions(+), 18 deletions(-)
> > 
> > diff --git a/lib/sbi/sbi_console.c b/lib/sbi/sbi_console.c
> > index 2b3b0a3..ab09a5c 100644
> > --- a/lib/sbi/sbi_console.c
> > +++ b/lib/sbi/sbi_console.c
> > @@ -37,28 +37,22 @@ int sbi_getc(void)
> >         return -1;
> >  }
> > 
> > -void sbi_putc(char ch)
> > -{
> > -       if (console_dev && console_dev->console_putc) {
> > -               if (ch == '\n')
> > -                       console_dev->console_putc('\r');
> > -               console_dev->console_putc(ch);
> > -       }
> > -}
> > -
> >  static unsigned long nputs(const char *str, unsigned long len)
> >  {
> > -       unsigned long i, ret;
> > +       unsigned long i;
> > 
> > -       if (console_dev && console_dev->console_puts) {
> > -               ret = console_dev->console_puts(str, len);
> > -       } else {
> > -               for (i = 0; i < len; i++)
> > -                       sbi_putc(str[i]);
> > -               ret = len;
> > +       if (console_dev) {
> > +               if (console_dev->console_puts)
> > +                       return console_dev->console_puts(str, len);
> > +               else if (console_dev->console_putc) {
> > +                       for (i = 0; i < len; i++) {
> > +                               if (str[i] == '\n')
> > +                                       console_dev->console_putc('\r');
> > +                               console_dev->console_putc(str[i]);
> > +                       }
> > +               }
> >         }
> > -
> > -       return ret;
> > +       return len;
> The return becomes meaningless, right?
Even if console_dev is NULL, it cannot return 0, otherwise it will cause nputs_all
to fall into an infinite loop.

Regards,
Xiang W
> 
> >  }
> > 
> >  static void nputs_all(const char *str, unsigned long len)
> > @@ -69,6 +63,11 @@ static void nputs_all(const char *str, unsigned long len)
> >                 p += nputs(&str[p], len - p);
> >  }
> > 
> > +void sbi_putc(char ch)
> > +{
> > +       nputs_all(&ch, 1);
> > +}
> > +
> >  void sbi_puts(const char *str)
> >  {
> >         unsigned long len = sbi_strlen(str);
> > --
> > 2.42.0
> > 
> > 
> > --
> > opensbi mailing list
> > opensbi at lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/opensbi
> 
> 
> 



More information about the opensbi mailing list