|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v2 02/10] lib/nolibc: Add strdup function
Hey,
that would be incorrect behavior of strdup. There is no mention about
any length limit in the "man strdup". I checked the musl's
implementation - it does not have any limitation either.
So in case of improbable event that the source string is longer then
SIZE_MAX, the duplicate will be a truncated copy. Happy debugging :)
- Yuri
Simon Kuenzer <simon.kuenzer@xxxxxxxxx> writes:
> Hey,
>
> On 23.08.2018 12:59, Costin Lupu wrote:
>> Shamelessly taken from Mini-OS.
>>
>> Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
>> ---
>> lib/nolibc/include/string.h | 1 +
>> lib/nolibc/string.c | 17 +++++++++++++++++
>> 2 files changed, 18 insertions(+)
>>
>> diff --git a/lib/nolibc/include/string.h b/lib/nolibc/include/string.h
>> index 677f528..8674c77 100644
>> --- a/lib/nolibc/include/string.h
>> +++ b/lib/nolibc/include/string.h
>> @@ -57,6 +57,7 @@ size_t strlen(const char *str);
>> const char *strchr(const char *str, int c);
>> int strncmp(const char *str1, const char *str2, size_t len);
>> int strcmp(const char *str1, const char *str2);
>> +char *strdup(const char *str);
>>
>> #ifdef __cplusplus
>> }
>> diff --git a/lib/nolibc/string.c b/lib/nolibc/string.c
>> index bf89106..bf4ab50 100644
>> --- a/lib/nolibc/string.c
>> +++ b/lib/nolibc/string.c
>> @@ -33,6 +33,7 @@
>> * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY.
>> */
>>
>> +#include <stdlib.h>
>> #include <stdint.h>
>> #include <string.h>
>> #include <limits.h>
>> @@ -166,3 +167,19 @@ int strcmp(const char *str1, const char *str2)
>>
>> return __res;
>> }
>> +
>> +char *strdup(const char *str)
>> +{
>> + char *__res;
>> + int __len;
>> +
>> + __len = strlen(str);
>> +
>> + __res = malloc(__len + 1);
>> + if (!__res)
>> + return NULL;
>> +
>> + memcpy(__res, str, __len + 1);
>> +
>> + return __res;
>> +}
>>
>
> Could you provide an strndup() instead and make strdup() use it? This
> way we would cover both libc variants with one patch.
>
> I mean, you would do something like:
>
> char *strdup(const char *str)
> {
> return strndup(str, SIZE_MAX);
> }
>
> Cheers,
>
> Simon
--
Yuri Volchkov
Software Specialist
NEC Europe Ltd
Kurfürsten-Anlage 36
D-69115 Heidelberg
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |