[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