1. 17 8月, 2020 1 次提交
  2. 27 6月, 2018 1 次提交
    • D
      add explicit_bzero implementation · 05ac345f
      David Carlier 提交于
      maintainer's note: past sentiment was that, despite being imperfect
      and unable to force clearing of all possible copies of sensitive data
      (e.g. in registers, register spills, signal contexts left on the
      stack, etc.) this function would be added if major implementations
      agreed on it, which has happened -- several BSDs and glibc all include
      it.
      05ac345f
  3. 05 7月, 2017 1 次提交
  4. 25 11月, 2013 1 次提交
    • R
      restore type of NULL to void * except when used in C++ programs · c8a9c221
      Rich Felker 提交于
      unfortunately this eliminates the ability of the compiler to diagnose
      some dangerous/incorrect usage, but POSIX requires (as an extension to
      the C language, i.e. CX shaded) that NULL have type void *. plain C
      allows it to be defined as any null pointer constant.
      
      the definition 0L is preserved for C++ rather than reverting to plain
      0 to avoid dangerous behavior in non-conforming programs which use
      NULL as a variadic sentinel. (it's impossible to use (void *)0 for C++
      since C++ lacks the proper implicit pointer conversions, and other
      popular alternatives like the GCC __null extension seem non-conforming
      to the standard's requirements.)
      c8a9c221
  5. 19 1月, 2013 1 次提交
    • R
      use a common definition of NULL as 0L for C and C++ · 41d7c77d
      Rich Felker 提交于
      the historical mess of having different definitions for C and C++
      comes from the historical C definition as (void *)0 and the fact that
      (void *)0 can't be used in C++ because it does not convert to other
      pointer types implicitly. however, using plain 0 in C++ exposed bugs
      in C++ programs that call variadic functions with NULL as an argument
      and (wrongly; this is UB) expect it to arrive as a null pointer. on
      64-bit machines, the high bits end up containing junk. glibc dodges
      the issue by using a GCC extension __null to define NULL; this is
      observably non-conforming because a conforming application could
      observe the definition of NULL via stringizing and see that it is
      neither an integer constant expression with value zero nor such an
      expression cast to void.
      
      switching to 0L eliminates the issue and provides compatibility with
      broken applications, since on all musl targets, long and pointers have
      the same size, representation, and argument-passing convention. we
      could maintain separate C and C++ definitions of NULL (i.e. just use
      0L on C++ and use (void *)0 on C) but after careful analysis, it seems
      extremely difficult for a C program to even determine whether NULL has
      integer or pointer type, much less depend in subtle, unintentional
      ways, on whether it does. C89 seems to have no way to make the
      distinction. on C99, the fact that (int)(void *)0 is not an integer
      constant expression, along with subtle VLA/sizeof semantics, can be
      used to make the distinction, but many compilers are non-conforming
      and give the wrong result to this test anyway. on C11, _Generic can
      trivially make the distinction, but it seems unlikely that code
      targetting C11 would be so backwards in caring which definition of
      NULL an implementation uses.
      
      as such, the simplest path of using the same definition for NULL in
      both C and C++ was chosen. the #undef directive was also removed so
      that the compiler can catch and give a warning or error on
      redefinition if buggy programs have defined their own versions of
      NULL prior to inclusion of standard headers.
      41d7c77d
  6. 04 12月, 2012 1 次提交
    • R
      feature test macros: make _GNU_SOURCE enable everything · 769fd4ce
      Rich Felker 提交于
      previously, a few BSD features were enabled only by _BSD_SOURCE, not
      by _GNU_SOURCE. since _BSD_SOURCE is default in the absence of other
      feature test macros, this made adding _GNU_SOURCE to a project not a
      purely additive feature test macro; it actually caused some features
      to be suppressed.
      
      most of the changes made by this patch actually bring musl in closer
      alignment with the glibc behavior for _GNU_SOURCE. the only exceptions
      are the added visibility of functions like strlcpy which were BSD-only
      due to being disliked/rejected by glibc maintainers. here, I feel the
      consistency of having _GNU_SOURCE mean "everything", and especially
      the property of it being purely additive, are more valuable than
      hiding functions which glibc does not have.
      769fd4ce
  7. 16 10月, 2012 1 次提交
  8. 14 9月, 2012 1 次提交
  9. 08 9月, 2012 1 次提交
    • R
      default features: make musl usable without feature test macros · c1a9658b
      Rich Felker 提交于
      the old behavior of exposing nothing except plain ISO C can be
      obtained by defining __STRICT_ANSI__ or using a compiler option (such
      as -std=c99) that predefines it. the new default featureset is POSIX
      with XSI plus _BSD_SOURCE. any explicit feature test macros will
      inhibit the default.
      
      installation docs have also been updated to reflect this change.
      c1a9658b
  10. 07 9月, 2012 1 次提交
    • R
      use restrict everywhere it's required by c99 and/or posix 2008 · 400c5e5c
      Rich Felker 提交于
      to deal with the fact that the public headers may be used with pre-c99
      compilers, __restrict is used in place of restrict, and defined
      appropriately for any supported compiler. we also avoid the form
      [restrict] since older versions of gcc rejected it due to a bug in the
      original c99 standard, and instead use the form *restrict.
      400c5e5c
  11. 23 5月, 2012 1 次提交
  12. 09 5月, 2012 1 次提交
    • R
      omit declaration of basename wrongly interpreted as prototype in C++ · 37bb3cce
      Rich Felker 提交于
      the non-prototype declaration of basename in string.h is an ugly
      compromise to avoid breaking 2 types of broken software:
      
      1. programs which assume basename is declared in string.h and thus
      would suffer from dangerous pointer-truncation if an implicit
      declaration were used.
      
      2. programs which include string.h with _GNU_SOURCE defined but then
      declare their own prototype for basename using the incorrect GNU
      signature for the function (which would clash with a correct
      prototype).
      
      however, since C++ does not have non-prototype declarations and
      interprets them as prototypes for a function with no arguments, we
      must omit it when compiling C++ code. thankfully, all known broken
      apps that suffer from the above issues are written in C, not C++.
      37bb3cce
  13. 25 2月, 2012 1 次提交
    • R
      replace prototype for basename in string.h with non-prototype declaration · 06aec8d7
      Rich Felker 提交于
      GNU programs may expect the GNU version of basename, which has a
      different prototype (argument is const-qualified) and prototype it
      themselves too. of course if they're expecting the GNU behavior for
      the function, they'll still run into problems, but at least this
      eliminates some compile-time failures.
      06aec8d7
  14. 08 2月, 2012 1 次提交
  15. 07 2月, 2012 1 次提交
  16. 12 9月, 2011 1 次提交
    • R
      add dummied strverscmp (obnoxious GNU function) · a6540174
      Rich Felker 提交于
      programs that use this tend to horribly botch international text
      support, so it's questionable whether we want to support it even in
      the long term... for now, it's just a dummy that calls strcmp.
      a6540174
  17. 27 4月, 2011 1 次提交
  18. 26 4月, 2011 2 次提交
  19. 13 4月, 2011 1 次提交
  20. 07 4月, 2011 1 次提交
  21. 31 3月, 2011 1 次提交
  22. 27 2月, 2011 1 次提交
  23. 25 2月, 2011 1 次提交
  24. 16 2月, 2011 1 次提交
  25. 15 2月, 2011 1 次提交
  26. 12 2月, 2011 1 次提交