[Mesa-dev] [PATCH] util: implement strndup for WIN32
Samuel Iglesias Gonsálvez
siglesias at igalia.com
Mon Sep 28 23:34:59 PDT 2015
On 28/09/15 18:14, Emil Velikov wrote:
> Hi Samuel,
>
> On 28 September 2015 at 15:19, Samuel Iglesias Gonsalvez
> <siglesias at igalia.com> 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 \
> Please also add strndup.h.
>
OK
>> 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));
> Personally I would use calloc and (must) check if allocation fails.
> The former will handle the (extremely unlikely) overflow, plus you can
> drop the explicit null character. Come to think of it one can even
> inline this into the header.
>
OK, I'll use calloc here, check if allocation fails and delete the null
character at the end of the string.
Thanks,
Sam
> It's up-to you really, just my 2c.
> -Emil
>
More information about the mesa-dev
mailing list