<html><head></head><body>There are no reasons why Windows Vista or later cannot run compiled C11 or C++11. This is purely a deficiency of your SDK(s) if you prefer that name over "toolchain(s)". To the extreme, the SDK could use aligned allocations for every thing and it would work. Considering the increasing popularity of C++11, it is even odd that it has hypothetically not already been fixed.<br>
<br>
(Even 2000/XP/2003 but threads support is a bit of a problem there.)<br><br><div class="gmail_quote">Le 20 juin 2017 13:44:23 GMT+03:00, Steve Lhomme <robux4@gmail.com> a écrit :<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<pre class="k9mail">On Tue, Jun 20, 2017 at 12:34 PM,  <remi@remlab.net> wrote:<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;"> The OS kernel allocates memory at page level. Depending where the line is<br /> drawn between OS and the C & C++ runtimes, there may be some higher level<br /></blockquote><br />Yes, the line where to draw the limit can be thin. But here you rely<br />on functions that do not match anything in the Windows OS and that<br />exist in no Windows toolchain. So either we decide to drop Windows<br />support because all we want is pure C11 code. Or we do things<br />differently.<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #729fcf; padding-left: 1ex;"> function provided by the OS.<br /><br /> Still, fact is that standard allocation functions and free() are toolchain<br /> responsibility to provide on top of the OS specifics (Windows has its own<br /> heap management...). Another fact is that aligned_alloc() does not require<br /> any OS functionality that malloc() wouldn't also. And last fact is that VLC<br /> is written in ISO C and C++ which require all the functions above.<br /><br /><br /> Le 20 juin 2017 13:18:22 GMT+03:00, Steve Lhomme <robux4@gmail.com> a écrit<br /> :<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ad7fa8; padding-left: 1ex;"><br /> On Tue, Jun 20, 2017 at 12:14 PM,  <remi@remlab.net> wrote:<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;"><br />  It has everything to do with the toolchain. The toolchain provides the<br />  hosted ISO C library.<br /></blockquote><br /><br /> The toolchain doesn't do the allocation, the OS does. And it also<br /> imposes how this memory needs to be free'd.<br /><br /> But you can argue endlessly on what part is broken, the fact is the<br /> core is currently unusable on Windows due to your patches. And your<br /> best answer is "I don't care".<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #8ae234; padding-left: 1ex;">  Le 20 juin 2017 13:05:49 GMT+03:00, Steve Lhomme <robux4@gmail.com> a<br /> écrit<br />  :<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #fcaf3e; padding-left: 1ex;"><br /><br />  On Tue, Jun 20, 2017 at 11:53 AM,  <remi@remlab.net> wrote:<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #e9b96e; padding-left: 1ex;"><br /><br />   Repeating myself but this patch does not change the fallback logic,<br /> so<br />  it<br />   can't break anything.<br /><br />   And to paraphrase other devs "I don't care" about non-ISO toolchains.<br /></blockquote><br /><br /><br />  The fact on Windows the aligned malloc needs to be freed with an<br />  aligned version of free() has nothing to do with the toolchain.<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #e9b96e; padding-left: 1ex;"><br />   Le 20 juin 2017 12:40:41 GMT+03:00, Steve Lhomme <robux4@gmail.com> a<br />  écrit<br />   :<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ccc; padding-left: 1ex;"><br /><br /><br />   On Tue, Jun 20, 2017 at 11:35 AM, Steve Lhomme <robux4@gmail.com><br />  wrote:<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ccc; padding-left: 1ex;"><br /><br /><br />    On Tue, Jun 20, 2017 at 11:28 AM,  <remi@remlab.net> wrote:<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ccc; padding-left: 1ex;"><br /><br /><br />    The goal is to use aligned_alloc() instead of posix_memalign()<br /> since<br />   the<br />    earlier is required by ISO C and C++ (and slightly simpler to<br /> use).<br /><br />    This patch only changes the behaviour on supported non-POSIX<br />  toolchains<br />   by<br />    removing the need for POSIX emulation code. If the toolchain is<br />  broken,<br />   then<br />    the fallback logic is unchanged: posix_memalign(), else<br /> memalign()<br />  else<br />    screw-you.<br /></blockquote><br /><br /><br /><br />    There is no posix_memalign() or memalign() on Windows. So right<br /> now<br />    VLC and libvlc cannot be used at all.<br /><br />    Proper support requires using __mingw_aligned_malloc() or<br />    _aligned_malloc(). But that means using __mingw_aligned_free() and<br />    _aligned_free() as well.<br /></blockquote><br /><br /><br /><br />   For the record, calling free() instead of these aligned free<br /> functions<br />   results in a crash.<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ccc; padding-left: 1ex;">    Next time you may break the core, please submit patches for review<br />   first.<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ccc; padding-left: 1ex;">    Le 20 juin 2017 12:07:38 GMT+03:00, Steve Lhomme<br /> <robux4@gmail.com><br />  a<br />   écrit<br />    :<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ccc; padding-left: 1ex;"><br /><br /><br /><br />    On Sat, Jun 17, 2017 at 2:35 PM, Rémi Denis-Courmont<br />   <git@videolan.org><br />    wrote:<br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ccc; padding-left: 1ex;"><br /><br /><br /><br />     vlc | branch: master | Rémi Denis-Courmont <remi@remlab.net> |<br />  Sat<br />   Jun<br />    17 15:27:16 2017 +0300|<br /> [34cd965645cb0246f3d74515bbd5e55367f7d884]<br />  |<br />    committer: Rémi Denis-Courmont<br /><br />     compat: replace aligned_alloc() rather than posix_memalign()<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ccc; padding-left: 1ex;"><br /><br /><br /><br /> <a href="http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=34cd965645cb0246f3d74515bbd5e55367f7d884">http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=34cd965645cb0246f3d74515bbd5e55367f7d884</a><br /></blockquote><br /><br /><br /><br />     ---<br /><br />      compat/{posix_memalign.c => aligned_alloc.c} | 62<br />    ++++++++++++++--------------<br />      <a href="http://configure.ac">configure.ac</a>                                 |  4 +-<br />      include/vlc_common.h                         |  8 +---<br />      include/vlc_fixups.h                         |  6 +--<br />      4 files changed, 36 insertions(+), 44 deletions(-)<br /><br />     diff --git a/compat/posix_memalign.c b/compat/aligned_alloc.c<br />     similarity index 55%<br />     rename from compat/posix_memalign.c<br />     rename to compat/aligned_alloc.c<br />     index 3c6ffdfe28..9a61c0010f 100644<br />     --- a/compat/posix_memalign.c<br />     +++ b/compat/aligned_alloc.c<br />     @@ -1,7 +1,7 @@<br /><br /><br /><br /><br /> /*****************************************************************************<br />     - * posix_memalign.c: POSIX posix_memalign() replacement<br />     + * aligned_alloc.c: C11 aligned_alloc() replacement<br /><br /><br /><br /><br /> *****************************************************************************<br />     - * Copyright © 2012 Rémi Denis-Courmont<br />     + * Copyright © 2012, 2017 Rémi Denis-Courmont<br />       *<br />       * This program is free software; you can redistribute it<br /> and/or<br />   modify<br />    it<br />       * under the terms of the GNU Lesser General Public License<br /> as<br />    published by<br />     @@ -22,46 +22,44 @@<br />      # include <config.h><br />      #endif<br /><br />     +#include <assert.h><br />      #include <stdlib.h><br />      #include <errno.h><br />     +#if !defined (HAVE_POSIX_MEMALIGN) && !defined (_WIN32) &&<br />  !defined<br />    (__APPLE__)<br />     +# include <malloc.h><br />     +#endif<br /><br />     -static int check_align (size_t align)<br />     +void *aligned_alloc(size_t align, size_t size)<br />      {<br />     -    for (size_t i = sizeof (void *); i != 0; i *= 2)<br />     -        if (align == i)<br />     -            return 0;<br />     -    return EINVAL;<br />     -}<br />     -<br />     -#if !defined (_WIN32) && !defined (__APPLE__)<br />     -#include <malloc.h><br />     +    /* align must be a power of 2 */<br />     +    /* size must be a multiple of align */<br />     +    if ((align & (align - 1)) || (size & (align - 1)))<br />     +    {<br />     +        errno = EINVAL;<br />     +        return NULL;<br />     +    }<br /><br />     -int posix_memalign (void **ptr, size_t align, size_t size)<br />     -{<br />     -    if (check_align (align))<br />     -        return EINVAL;<br />     +#ifdef HAVE_POSIX_MEMALIGN<br />     +    if (align < sizeof (void *)) /* POSIX does not allow<br /> small<br />    alignment */<br />     +        align = sizeof (void *);<br /><br />     -    int saved_errno = errno;<br />     -    void *p = memalign (align, size);<br />     -    if (p == NULL)<br />     +    void *ptr;<br />     +    int err = posix_memalign(&ptr, align, size);<br />     +    if (err)<br />          {<br />     -        errno = saved_errno;<br />     -        return ENOMEM;<br />     +        errno = err;<br />     +        ptr = NULL;<br />          }<br />     +    return ptr;<br /><br />     -    *ptr = p;<br />     -    return 0;<br />     -}<br />     +#elif !defined (_WIN32) && !defined (__APPLE__)<br /><br />     -#else<br />     -<br />     -int posix_memalign (void **ptr, size_t align, size_t size)<br />     -{<br />     -    if (check_align (align))<br />     -        return EINVAL;<br />     +   return memalign(align, size);<br /></blockquote><br /><br /><br /><br /><br />    Is the goal that this code is never called for Windows and Apple<br />  OSes<br />    ? Because it worked and this function always return NULL.<br /><br /><blockquote class="gmail_quote" style="margin: 0pt 0pt 1ex 0.8ex; border-left: 1px solid #ccc; padding-left: 1ex;">     -    *ptr = NULL;<br />     -    return size ? ENOMEM : 0;<br />     -}<br />     +#else<br /><br />     +   if (size > 0)<br />     +       errno = ENOMEM;<br />     +   return NULL;<br />      #endif<br />     +}<br />     diff --git a/<a href="http://configure.ac">configure.ac</a> b/<a href="http://configure.ac">configure.ac</a><br />     index b1883a18b7..67fc7deb1a 100644<br />     --- a/<a href="http://configure.ac">configure.ac</a><br />     +++ b/<a href="http://configure.ac">configure.ac</a><br />     @@ -597,8 +597,8 @@ dnl Check for system libs needed<br />      need_libc=false<br /><br />      dnl Check for usual libc functions<br />     -AC_CHECK_FUNCS([daemon fcntl flock fstatvfs fork getenv<br />  getpwuid_r<br />    isatty lstat memalign mkostemp mmap open_memstream openat pread<br />    posix_fadvise posix_madvise setlocale stricmp strnicmp strptime<br />   tdestroy<br />    uselocale])<br />     -AC_REPLACE_FUNCS([atof atoll dirfd fdopendir ffsll flockfile<br />  fsync<br />    getdelim getpid lldiv memrchr nrand48 poll posix_memalign<br /> recvmsg<br />   rewind<br />    sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup<br />  strnlen<br />   strnstr<br />    strsep strtof strtok_r strtoll swab tfind timegm timespec_get<br />   strverscmp<br />    pathconf])<br />     +AC_CHECK_FUNCS([daemon fcntl flock fstatvfs fork getenv<br />  getpwuid_r<br />    isatty lstat memalign mkostemp mmap open_memstream openat pread<br />    posix_fadvise posix_madvise posix_memalign setlocale stricmp<br />  strnicmp<br />    strptime tdestroy uselocale])<br />     +AC_REPLACE_FUNCS([aligned_alloc atof atoll dirfd fdopendir<br /> ffsll<br />    flockfile fsync getdelim getpid lldiv memrchr nrand48 poll<br /> recvmsg<br />   rewind<br />    sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup<br />  strnlen<br />   strnstr<br />    strsep strtof strtok_r strtoll swab tfind timegm timespec_get<br />   strverscmp<br />    pathconf])<br />      AC_REPLACE_FUNCS([gettimeofday])<br />      AC_CHECK_FUNC(fdatasync,,<br />        [AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync()<br /> if<br />    missing.])<br />     diff --git a/include/vlc_common.h b/include/vlc_common.h<br />     index e1cf885379..0bfb1b9b04 100644<br />     --- a/include/vlc_common.h<br />     +++ b/include/vlc_common.h<br />     @@ -854,13 +854,7 @@ VLC_API bool vlc_ureduce( unsigned *,<br />  unsigned<br />   *,<br />    uint64_t, uint64_t, uint64_t )<br />      # define vlc_memalign(align, size) (_aligned_malloc(size,<br />  align))<br />      # define vlc_free(base)            (_aligned_free(base))<br />      #else<br />     -static inline void *vlc_memalign(size_t align, size_t size)<br />     -{<br />     -    void *base;<br />     -    if (unlikely(posix_memalign(&base, align, size)))<br />     -        base = NULL;<br />     -    return base;<br />     -}<br />     +# define vlc_memalign(align, size) aligned_alloc(align, size)<br />      # define vlc_free(base) free(base)<br />      #endif<br /><br />     diff --git a/include/vlc_fixups.h b/include/vlc_fixups.h<br />     index 8bfb76888f..44b8426f2c 100644<br />     --- a/include/vlc_fixups.h<br />     +++ b/include/vlc_fixups.h<br />     @@ -88,7 +88,7 @@ typedef struct<br />      # include <stdio.h> /* FILE */<br />      #endif<br /><br />     -#if !defined (HAVE_POSIX_MEMALIGN) || \<br />     +#if !defined (HAVE_ALIGNED_ALLOC) || \<br />          !defined (HAVE_MEMRCHR) || \<br />          !defined (HAVE_STRLCPY) || \<br />          !defined (HAVE_STRNDUP) || \<br />     @@ -302,8 +302,8 @@ int setenv (const char *, const char *,<br /> int);<br />      int unsetenv (const char *);<br />      #endif<br /><br />     -#ifndef HAVE_POSIX_MEMALIGN<br />     -int posix_memalign (void **, size_t, size_t);<br />     +#ifndef HAVE_ALIGNED_ALLOC<br />     +void *aligned_alloc(size_t, size_t);<br />      #endif<br /><br />      #if defined(__native_client__) && defined(__cplusplus)<br /><br /><hr /><br /><br /><br /><br /><br />     vlc-commits mailing list<br />     vlc-commits@videolan.org<br />     <a href="https://mailman.videolan.org/listinfo/vlc-commits">https://mailman.videolan.org/listinfo/vlc-commits</a><br /></blockquote><br /><br /><br /><br /><hr /><br /><br /><br /><br /><br />    vlc-devel mailing list<br />    To unsubscribe or modify your subscription options:<br />    <a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a><br /></blockquote><br /><br /><br /><br /><br />    --<br />    Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez<br />  excuser<br />   ma<br />    brièveté.<br /><br /><hr /><br /><br /><br /><br />    vlc-devel mailing list<br />    To unsubscribe or modify your subscription options:<br />    <a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a><br /></blockquote></blockquote><br /><br /><br /><hr /><br /><br /><br /><br />   vlc-devel mailing list<br />   To unsubscribe or modify your subscription options:<br />   <a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a><br /></blockquote><br /><br /><br /><br />   --<br />   Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez<br /> excuser<br />  ma<br />   brièveté.<br /><br /><hr /><br /><br /><br />   vlc-devel mailing list<br />   To unsubscribe or modify your subscription options:<br />   <a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a><br /></blockquote><br /><br /><hr /><br /><br /><br />  vlc-devel mailing list<br />  To unsubscribe or modify your subscription options:<br />  <a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a><br /></blockquote><br /><br /><br />  --<br />  Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser<br /> ma<br />  brièveté.<br /><br /><hr /><br /><br />  vlc-devel mailing list<br />  To unsubscribe or modify your subscription options:<br />  <a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a><br /></blockquote><br /><hr /><br /><br /> vlc-devel mailing list<br /> To unsubscribe or modify your subscription options:<br /> <a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a><br /></blockquote><br /><br /> --<br /> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma<br /> brièveté.<br /><br /><hr /><br /> vlc-devel mailing list<br /> To unsubscribe or modify your subscription options:<br /> <a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a><br /></blockquote><hr /><br />vlc-devel mailing list<br />To unsubscribe or modify your subscription options:<br /><a href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a></pre></blockquote></div><br>
-- <br>
Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.</body></html>