[Mesa-dev] [PATCH] util: implement strndup for WIN32
Samuel Iglesias Gonsálvez
siglesias at igalia.com
Mon Sep 28 23:40:30 PDT 2015
On 28/09/15 21:44, Jose Fonseca wrote:
> Looks great Samuel.
>
> Just minor suggestions.
>
> Either way:
>
> Reviewed-by: Jose Fonseca <jfonseca at vmware.com>
>
Thanks!
>
> On 28/09/15 15:19, Samuel Iglesias Gonsalvez wrote:
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92124
>> Cc: Jose Fonseca <jfonseca at vmware.com>
>> ---
>>
>> I tested it on MSVC but not MinGW. I hope I did not something wrong.
>>
>> src/mesa/main/shader_query.cpp | 1 +
>> src/util/Makefile.sources | 1 +
>> src/util/strndup.c | 47
>> ++++++++++++++++++++++++++++++++++++++++++
>> src/util/strndup.h | 28 +++++++++++++++++++++++++
>> 4 files changed, 77 insertions(+)
>> create mode 100644 src/util/strndup.c
>> create mode 100644 src/util/strndup.h
>>
>> diff --git a/src/mesa/main/shader_query.cpp
>> b/src/mesa/main/shader_query.cpp
>> index e020dce..0cada50 100644
>> --- a/src/mesa/main/shader_query.cpp
>> +++ b/src/mesa/main/shader_query.cpp
>> @@ -37,6 +37,7 @@
>> #include "../glsl/program.h"
>> #include "uniforms.h"
>> #include "main/enums.h"
>> +#include "util/strndup.h"
>>
>> extern "C" {
>> #include "shaderapi.h"
>> diff --git a/src/util/Makefile.sources b/src/util/Makefile.sources
>> index afdd0cb..10f2c02 100644
>> --- a/src/util/Makefile.sources
>> +++ b/src/util/Makefile.sources
>> @@ -17,6 +17,7 @@ MESA_UTIL_FILES := \
>> set.c \
>> set.h \
>> simple_list.h \
>> + strndup.c \
>> strtod.c \
>> strtod.h \
>> texcompress_rgtc_tmp.h \
>> diff --git a/src/util/strndup.c b/src/util/strndup.c
>> new file mode 100644
>> index 0000000..6e5bb22
>> --- /dev/null
>> +++ b/src/util/strndup.c
>> @@ -0,0 +1,47 @@
>> +/*
>> + * Copyright (c) 2015 Intel Corporation
>> + *
>> + * Permission is hereby granted, free of charge, to any person
>> obtaining a
>> + * copy of this software and associated documentation files (the
>> "Software"),
>> + * to deal in the Software without restriction, including without
>> limitation
>> + * the rights to use, copy, modify, merge, publish, distribute,
>> sublicense,
>> + * and/or sell copies of the Software, and to permit persons to whom the
>> + * Software is furnished to do so, subject to the following conditions:
>> + *
>> + * The above copyright notice and this permission notice (including
>> the next
>> + * paragraph) shall be included in all copies or substantial portions
>> of the
>> + * Software.
>> + *
>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>> EXPRESS OR
>> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>> MERCHANTABILITY,
>> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
>> SHALL
>> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
>> OR OTHER
>> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
>> ARISING
>> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
>> OTHER DEALINGS
>> + * IN THE SOFTWARE.
>> + */
>> +
>> +#if defined(_WIN32)
>> +#include <stdlib.h>
>> +#include "strndup.h"
>> +
>> +char *
>> +strndup(const char *str, size_t max)
>> +{
>> + size_t n;
>> + char *ptr;
>> +
>> + if (str == NULL)
>> + return NULL;
>> +
>> + n = strlen(str);
>> + if (n > max)
>> + n = max;
>> +
>> + ptr = (char *) malloc((n + 1) * sizeof(char));
>
> Probably never happens, but still good idea to add
>
> if (!ptr) return NULL;
>
> just in case
>
OK, Emil said the same thing. I'll check if the allocation fails.
>> + memcpy(ptr, str, n);
>> + ptr[n] = '\0';
>> + return ptr;
>> +}
>> +
>> +#endif
>> diff --git a/src/util/strndup.h b/src/util/strndup.h
>> new file mode 100644
>> index 0000000..dc8cdd2
>> --- /dev/null
>> +++ b/src/util/strndup.h
>> @@ -0,0 +1,28 @@
>> +/*
>> + * Copyright (c) 2015 Intel Corporation
>> + *
>> + * Permission is hereby granted, free of charge, to any person
>> obtaining a
>> + * copy of this software and associated documentation files (the
>> "Software"),
>> + * to deal in the Software without restriction, including without
>> limitation
>> + * the rights to use, copy, modify, merge, publish, distribute,
>> sublicense,
>> + * and/or sell copies of the Software, and to permit persons to whom the
>> + * Software is furnished to do so, subject to the following conditions:
>> + *
>> + * The above copyright notice and this permission notice (including
>> the next
>> + * paragraph) shall be included in all copies or substantial portions
>> of the
>> + * Software.
>> + *
>> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
>> EXPRESS OR
>> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>> MERCHANTABILITY,
>> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
>> SHALL
>> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
>> OR OTHER
>> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
>> ARISING
>> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
>> OTHER DEALINGS
>> + * IN THE SOFTWARE.
>> + */
>
> #pragma once
>
> #include <stdlib.h> // size_t
>
OK.
Sam
>> +
>> +#if defined(_WIN32)
>> +
>> +extern char *strndup(const char *str, size_t max);
>> +
>> +#endif
>>
>
>
More information about the mesa-dev
mailing list