qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Collin L. Walling" <walling@linux.vnet.ibm.com>
To: Thomas Huth <thuth@redhat.com>,
	qemu-s390x@nongnu.org, qemu-devel@nongnu.org
Cc: frankja@linux.vnet.ibm.com, cohuck@redhat.com, david@redhat.com,
	alifm@linux.vnet.ibm.com, mihajlov@linux.vnet.ibm.com,
	borntraeger@de.ibm.com, eblake@redhat.com
Subject: Re: [Qemu-devel] [qemu-s390x] [PATCH v6 04/12] s390-ccw: update libc
Date: Fri, 16 Feb 2018 11:08:31 -0500	[thread overview]
Message-ID: <b7c0b02e-299f-3f8c-61a3-233e45ebfa33@linux.vnet.ibm.com> (raw)
In-Reply-To: <5e2a07bc-6ba4-14c4-96d0-347455ec0997@redhat.com>

On 02/16/2018 11:05 AM, Thomas Huth wrote:
> On 15.02.2018 23:54, Collin L. Walling wrote:
>> Moved:
>>    memcmp from bootmap.h to libc.h (renamed from _memcmp)
>>    strlen from sclp.c to libc.h (renamed from _strlen)
> What happened to the renames of _strlen to strlen and _memcmp to memcmp?
> The hunks now seem to be missing from this patch? Or do I miss something?
>
>   Thomas

Oh shoot... yeah, the _* functions didn't seem to get removed...
sorry about that. Odd rebasing failure on my end :(

>
>
>> Added C standard functions:
>>    isdigit
>>
>> Added non C-standard function:
>>    uitoa
>>    atoui
>>
>> Signed-off-by: Collin L. Walling <walling@linux.vnet.ibm.com>
>> Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
>> Reviewed-by: Janosch Frank <frankja@linux.vnet.ibm.com>
>> ---
>>   pc-bios/s390-ccw/Makefile |  2 +-
>>   pc-bios/s390-ccw/libc.c   | 89 +++++++++++++++++++++++++++++++++++++++++++++++
>>   pc-bios/s390-ccw/libc.h   | 37 ++++++++++++++++++--
>>   pc-bios/s390-ccw/main.c   | 17 +--------
>>   4 files changed, 126 insertions(+), 19 deletions(-)
>>   create mode 100644 pc-bios/s390-ccw/libc.c
>>
>> diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile
>> index 6d0c2ee..9f7904f 100644
>> --- a/pc-bios/s390-ccw/Makefile
>> +++ b/pc-bios/s390-ccw/Makefile
>> @@ -9,7 +9,7 @@ $(call set-vpath, $(SRC_PATH)/pc-bios/s390-ccw)
>>   
>>   .PHONY : all clean build-all
>>   
>> -OBJECTS = start.o main.o bootmap.o sclp.o virtio.o virtio-scsi.o virtio-blkdev.o
>> +OBJECTS = start.o main.o bootmap.o sclp.o virtio.o virtio-scsi.o virtio-blkdev.o libc.o
>>   QEMU_CFLAGS := $(filter -W%, $(QEMU_CFLAGS))
>>   QEMU_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -msoft-float
>>   QEMU_CFLAGS += -march=z900 -fPIE -fno-strict-aliasing
>> diff --git a/pc-bios/s390-ccw/libc.c b/pc-bios/s390-ccw/libc.c
>> new file mode 100644
>> index 0000000..a144388
>> --- /dev/null
>> +++ b/pc-bios/s390-ccw/libc.c
>> @@ -0,0 +1,89 @@
>> +/*
>> + * libc-style definitions and functions
>> + *
>> + * Copyright 2018 IBM Corp.
>> + * Author(s): Collin L. Walling <walling@linux.vnet.ibm.com>
>> + *
>> + * This code is free software; you can redistribute it and/or modify it
>> + * under the terms of the GNU General Public License as published by the
>> + * Free Software Foundation; either version 2 of the License, or (at your
>> + * option) any later version.
>> + */
>> +
>> +#include "libc.h"
>> +#include "s390-ccw.h"
>> +
>> +/**
>> + * atoui:
>> + * @str: the string to be converted.
>> + *
>> + * Given a string @str, convert it to an integer. Leading spaces are
>> + * ignored. Any other non-numerical value will terminate the conversion
>> + * and return 0. This function only handles numbers between 0 and
>> + * UINT64_MAX inclusive.
>> + *
>> + * Returns: an integer converted from the string @str, or the number 0
>> + * if an error occurred.
>> + */
>> +uint64_t atoui(const char *str)
>> +{
>> +    int val = 0;
>> +
>> +    if (!str || !str[0]) {
>> +        return 0;
>> +    }
>> +
>> +    while (*str == ' ') {
>> +        str++;
>> +    }
>> +
>> +    while (*str) {
>> +        if (!isdigit(*str)) {
>> +            break;
>> +        }
>> +        val = val * 10 + *str - '0';
>> +        str++;
>> +    }
>> +
>> +    return val;
>> +}
>> +
>> +/**
>> + * uitoa:
>> + * @num: an integer (base 10) to be converted.
>> + * @str: a pointer to a string to store the conversion.
>> + * @len: the length of the passed string.
>> + *
>> + * Given an integer @num, convert it to a string. The string @str must be
>> + * allocated beforehand. The resulting string will be null terminated and
>> + * returned. This function only handles numbers between 0 and UINT64_MAX
>> + * inclusive.
>> + *
>> + * Returns: the string @str of the converted integer @num
>> + */
>> +char *uitoa(uint64_t num, char *str, size_t len)
>> +{
>> +    size_t num_idx = 0;
>> +    uint64_t tmp = num;
>> +
>> +    IPL_assert(str != NULL, "uitoa: no space allocated to store string");
>> +
>> +    /* Get index to ones place */
>> +    while ((tmp /= 10) != 0) {
>> +        num_idx++;
>> +    }
>> +
>> +    /* Check if we have enough space for num and null */
>> +    IPL_assert(len > num_idx, "uitoa: array too small for conversion");
>> +
>> +    str[num_idx + 1] = '\0';
>> +
>> +    /* Convert int to string */
>> +    while (num_idx >= 0) {
>> +        str[num_idx] = num % 10 + '0';
>> +        num /= 10;
>> +        num_idx--;
>> +    }
>> +
>> +    return str;
>> +}
>> diff --git a/pc-bios/s390-ccw/libc.h b/pc-bios/s390-ccw/libc.h
>> index 0142ea8..63ece70 100644
>> --- a/pc-bios/s390-ccw/libc.h
>> +++ b/pc-bios/s390-ccw/libc.h
>> @@ -1,6 +1,8 @@
>>   /*
>>    * libc-style definitions and functions
>>    *
>> + * Copyright (c) 2013 Alexander Graf <agraf@suse.de>
>> + *
>>    * This code is free software; you can redistribute it and/or modify it
>>    * under the terms of the GNU General Public License as published by the
>>    * Free Software Foundation; either version 2 of the License, or (at your
>> @@ -19,7 +21,7 @@ typedef unsigned long long uint64_t;
>>   
>>   static inline void *memset(void *s, int c, size_t n)
>>   {
>> -    int i;
>> +    size_t i;
>>       unsigned char *p = s;
>>   
>>       for (i = 0; i < n; i++) {
>> @@ -33,7 +35,7 @@ static inline void *memcpy(void *s1, const void *s2, size_t n)
>>   {
>>       uint8_t *dest = s1;
>>       const uint8_t *src = s2;
>> -    int i;
>> +    size_t i;
>>   
>>       for (i = 0; i < n; i++) {
>>           dest[i] = src[i];
>> @@ -42,4 +44,35 @@ static inline void *memcpy(void *s1, const void *s2, size_t n)
>>       return s1;
>>   }
>>   
>> +static inline int memcmp(const void *s1, const void *s2, size_t n)
>> +{
>> +    size_t i;
>> +    const uint8_t *p1 = s1, *p2 = s2;
>> +
>> +    for (i = 0; i < n; i++) {
>> +        if (p1[i] != p2[i]) {
>> +            return p1[i] > p2[i] ? 1 : -1;
>> +        }
>> +    }
>> +
>> +    return 0;
>> +}
>> +
>> +static inline size_t strlen(const char *str)
>> +{
>> +    size_t i;
>> +    for (i = 0; *str; i++) {
>> +        str++;
>> +    }
>> +    return i;
>> +}
>> +
>> +static inline int isdigit(int c)
>> +{
>> +    return (c >= '0') && (c <= '9');
>> +}
>> +
>> +uint64_t atoui(const char *str);
>> +char *uitoa(uint64_t num, char *str, size_t len);
>> +
>>   #endif
>> diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
>> index 401e9db..e857ce4 100644
>> --- a/pc-bios/s390-ccw/main.c
>> +++ b/pc-bios/s390-ccw/main.c
>> @@ -40,22 +40,7 @@ void panic(const char *string)
>>   
>>   unsigned int get_loadparm_index(void)
>>   {
>> -    const char *lp = loadparm;
>> -    int i;
>> -    unsigned int idx = 0;
>> -
>> -    for (i = 0; i < 8; i++) {
>> -        char c = lp[i];
>> -
>> -        if (c < '0' || c > '9') {
>> -            break;
>> -        }
>> -
>> -        idx *= 10;
>> -        idx += c - '0';
>> -    }
>> -
>> -    return idx;
>> +    return atoui(loadparm);
>>   }
>>   
>>   static bool find_dev(Schib *schib, int dev_no)
>>
>


-- 
- Collin L Walling

  reply	other threads:[~2018-02-16 16:08 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-15 22:54 [Qemu-devel] [PATCH v6 00/12] Interactive Boot Menu for DASD and SCSI Guests on s390x Collin L. Walling
2018-02-15 22:54 ` [Qemu-devel] [PATCH v6 01/12] s390-ccw: refactor boot map table code Collin L. Walling
2018-02-16 10:42   ` [Qemu-devel] [qemu-s390x] " Thomas Huth
2018-02-16 12:19     ` Viktor Mihajlovski
2018-02-16 14:57       ` Collin L. Walling
2018-02-16 15:54         ` Thomas Huth
2018-02-15 22:54 ` [Qemu-devel] [PATCH v6 02/12] s390-ccw: refactor eckd_block_num to use CHS Collin L. Walling
2018-02-16 10:44   ` [Qemu-devel] [qemu-s390x] " Thomas Huth
2018-02-15 22:54 ` [Qemu-devel] [PATCH v6 03/12] s390-ccw: refactor IPL structs Collin L. Walling
2018-02-15 22:54 ` [Qemu-devel] [PATCH v6 04/12] s390-ccw: update libc Collin L. Walling
2018-02-16 16:05   ` [Qemu-devel] [qemu-s390x] " Thomas Huth
2018-02-16 16:08     ` Collin L. Walling [this message]
2018-02-15 22:54 ` [Qemu-devel] [PATCH v6 05/12] s390-ccw: move auxiliary IPL data to separate location Collin L. Walling
2018-02-16 12:25   ` Viktor Mihajlovski
2018-02-15 22:54 ` [Qemu-devel] [PATCH v6 06/12] s390-ccw: parse and set boot menu options Collin L. Walling
2018-02-16 16:20   ` [Qemu-devel] [qemu-s390x] " Thomas Huth
2018-02-16 16:25     ` Collin L. Walling
2018-02-16 16:36     ` Viktor Mihajlovski
2018-02-16 16:44       ` Collin L. Walling
2018-02-16 16:54         ` Viktor Mihajlovski
2018-02-15 22:54 ` [Qemu-devel] [PATCH v6 07/12] s390-ccw: set up interactive boot menu parameters Collin L. Walling
2018-02-15 22:54 ` [Qemu-devel] [PATCH v6 08/12] s390-ccw: read stage2 boot loader data to find menu Collin L. Walling
2018-02-15 22:54 ` [Qemu-devel] [PATCH v6 09/12] s390-ccw: print zipl boot menu Collin L. Walling
2018-02-15 22:54 ` [Qemu-devel] [PATCH v6 10/12] s390-ccw: read user input for boot index via the SCLP console Collin L. Walling
2018-02-16 15:03   ` David Hildenbrand
2018-02-16 15:13     ` Collin L. Walling
2018-02-15 22:54 ` [Qemu-devel] [PATCH v6 11/12] s390-ccw: set cp_receive mask only when needed and consume pending service irqs Collin L. Walling
2018-02-15 22:54 ` [Qemu-devel] [PATCH v6 12/12] s390-ccw: interactive boot menu for scsi Collin L. Walling

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b7c0b02e-299f-3f8c-61a3-233e45ebfa33@linux.vnet.ibm.com \
    --to=walling@linux.vnet.ibm.com \
    --cc=alifm@linux.vnet.ibm.com \
    --cc=borntraeger@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=eblake@redhat.com \
    --cc=frankja@linux.vnet.ibm.com \
    --cc=mihajlov@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-s390x@nongnu.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).