]> git.saurik.com Git - apple/libc.git/commitdiff
Libc-997.90.3.tar.gz os-x-1092 os-x-1093 os-x-1094 os-x-1095 v997.90.3
authorApple <opensource@apple.com>
Tue, 11 Mar 2014 19:44:14 +0000 (19:44 +0000)
committerApple <opensource@apple.com>
Tue, 11 Mar 2014 19:44:14 +0000 (19:44 +0000)
include/inttypes.h
secure/chk_fail.c
secure/memcpy_chk.c
secure/secure.h
secure/stpcpy_chk.c
secure/stpncpy_chk.c
secure/strcat_chk.c
secure/strcpy_chk.c
secure/strncat_chk.c
secure/strncpy_chk.c
util/mkpath_np.c

index 5e42c17f807afc57502ce412f2136e32fe2fc6e1..c29873da3112d1bfe5dd1769913dd4aaa9d20c53 100644 (file)
@@ -1,23 +1,23 @@
 /*
- * Copyright (c) 2000, 2001, 2002, 2003, 2004 Apple Computer, Inc.
- * All rights reserved.
+ * Copyright (c) 2000-2004, 2013 Apple Inc. All rights reserved.
  *
  * @APPLE_LICENSE_HEADER_START@
- *
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License").  You may not use this file except in compliance with the
- * License.  Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
- *
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * 
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- *
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ * 
  * @APPLE_LICENSE_HEADER_END@
  */
 
 #  define SCNuMAX       __SCN_MAX_LENGTH_MODIFIER__ "u"
 #  define SCNxMAX       __SCN_MAX_LENGTH_MODIFIER__ "x"
 
-#include <sys/cdefs.h>         /* For __BEGIN_DECLS and __END_DECLS */
-#include <_types.h>            /* For __darwin_wchar_t */
-#include <stdint.h>
-
-#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)
-  /* Translator is not ISO/IEC 9899:1999-compliant. */
-#  if !defined(restrict)
-#    define restrict
-#    define __RESTRICT_KEYWORD_DEFINED__
-#  endif
-#endif
-
-__BEGIN_DECLS
-
-  /* 7.8.2.1 */
-  extern intmax_t imaxabs(intmax_t j);
-
-  /* 7.8.2.2 */
-  typedef struct {
-        intmax_t quot;
-        intmax_t rem;
-  } imaxdiv_t;
+#include <sys/cdefs.h>
+#include <Availability.h>
 
-  extern imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom);
+#include <_types.h>
+#include <sys/_types/_wchar_t.h>
 
-  /* 7.8.2.3 */
-  extern intmax_t strtoimax(const char * restrict nptr, char ** restrict endptr, int base);
-  extern uintmax_t strtoumax(const char * restrict nptr, char ** restrict endptr, int base);
+#include <stdint.h>
 
-#include <sys/_types/_wchar_t.h>
+__BEGIN_DECLS
 
-  /* 7.8.2.4 */
-  extern intmax_t wcstoimax(const wchar_t * restrict nptr, wchar_t ** restrict endptr, int base);
-  extern uintmax_t wcstoumax(const wchar_t * restrict nptr, wchar_t ** restrict endptr, int base);
+/* 7.8.2.1 */
+__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0)
+extern intmax_t
+imaxabs(intmax_t j);
+
+/* 7.8.2.2 */
+typedef struct {
+       intmax_t quot;
+       intmax_t rem;
+} imaxdiv_t;
+
+__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0)
+extern imaxdiv_t
+imaxdiv(intmax_t __numer, intmax_t __denom);
+
+/* 7.8.2.3 */
+__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0)
+extern intmax_t
+strtoimax(const char * __restrict __nptr,
+         char ** __restrict __endptr,
+         int __base);
+
+__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0)
+extern uintmax_t
+strtoumax(const char * __restrict __nptr,
+         char ** __restrict __endptr,
+         int __base);
+
+/* 7.8.2.4 */
+__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0)
+extern intmax_t
+wcstoimax(const wchar_t * __restrict __nptr,
+         wchar_t ** __restrict __endptr,
+         int __base);
+
+__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0)
+extern uintmax_t
+wcstoumax(const wchar_t * __restrict __nptr,
+         wchar_t ** __restrict __endptr,
+         int __base);
 
 /* Poison the following routines if -fshort-wchar is set */
 #if !defined(__cplusplus) && defined(__WCHAR_MAX__) && __WCHAR_MAX__ <= 0xffffU
@@ -278,9 +294,4 @@ __END_DECLS
    not where it is #defined.
 */
 
-#if defined(__RESTRICT_KEYWORD_DEFINED__)
-#  undef restrict
-#  undef __RESTRICT_KEYWORD_DEFINED__
-#endif
-
 #endif /* !_INTTYPES_H_ */
index 827321197b94b0d6bd2f0fc6c509ab3783bedbf2..29401b886dafaff4fc867ee335f3a5a9b9e852dd 100644 (file)
@@ -28,6 +28,3 @@
 #include <stdlib.h>
 #include <TargetConditionals.h>
 
-__attribute__ ((visibility ("hidden")))
-int __chk_assert_no_overlap = 1;
-
index bb286fad9fe7f2691469f655fb79e5d0fabfbc07..fcc562221e1d712bd59aae8c7ce8558da8d64083 100644 (file)
@@ -33,7 +33,7 @@ __memcpy_chk (void *dest, const void *src, size_t len, size_t dstlen)
 
   /* On OS X, memcpy has supported overlapping buffers for many years.
    * While technically, this will catch buggy code, we should not abort.
-   * if (__chk_assert_no_overlap)
+   * if (__builtin_expect (__chk_assert_no_overlap != 0, 1))
    *   __chk_overlap(dest, len, src, len);
    */
 
index 07bafc6143298ffab5debac0d9cb71222ad4f444..669b3435a3acda4d3ab7c9b5ce452b59d8aea223 100644 (file)
@@ -34,6 +34,6 @@ extern void __chk_fail_overlap (void) __attribute__((__noreturn__));
 extern void __chk_overlap (const void *a, size_t an, const void *b, size_t bn);
 
 /* Do we avoid the overlap check for older APIs? */
-extern int __chk_assert_no_overlap;
+extern uint32_t __chk_assert_no_overlap;
 
 #endif
index ad09eca755bba2f86de332ad0fdf6fcb38ff46e2..c4527216765a8ac4c0a9bed9915b8ec50e081cfa 100644 (file)
@@ -34,7 +34,7 @@ __stpcpy_chk (char *dest, const char *src, size_t dstlen)
   if (__builtin_expect (dstlen < len, 0))
     __chk_fail_overflow ();
 
-  if (__builtin_expect (__chk_assert_no_overlap, 1))
+  if (__builtin_expect (__chk_assert_no_overlap != 0, 1))
     __chk_overlap(dest, len, src, len);
 
   return retval;
index a440551d3ae650cab52a0e69551d3486e1f7ad20..5ad321f3fdf81571e50c2f219dd5bcf95c6b4379 100644 (file)
@@ -42,7 +42,7 @@ __stpncpy_chk (char *restrict dest, char *restrict src,
   if (n == len + 1)
     n--;
 
-  if (__builtin_expect (__chk_assert_no_overlap, 1))
+  if (__builtin_expect (__chk_assert_no_overlap != 0, 1))
     __chk_overlap(dest, n, src, n);
 
   return retval;
index c6be25ccbbc3d7c2a7f6b96e91b94a25cc8a0fc7..7445ab3babc6bee11eb94e4be2adbccf77502ad6 100644 (file)
@@ -36,7 +36,7 @@ __strcat_chk (char *__restrict dest, const char *__restrict append,
   if (__builtin_expect (dstlen < len1 + len2 + 1, 0))
     __chk_fail_overflow ();
 
-  if (__builtin_expect (__chk_assert_no_overlap, 1))
+  if (__builtin_expect (__chk_assert_no_overlap != 0, 1))
     __chk_overlap(dest, len1 + len2 + 1, append, len2 + 1);
 
   memcpy(dest + len1, append, len2 + 1);
index 71872e1663188b2699ecde73f285820400239fee..9b15f226ad05aab8c29d5bdd47d6ef95da6b8750 100644 (file)
@@ -34,7 +34,7 @@ __strcpy_chk (char *restrict dest, char *restrict src, size_t dstlen)
   if (__builtin_expect (dstlen < len, 0))
     __chk_fail_overflow ();
 
-  if (__builtin_expect (__chk_assert_no_overlap, 1))
+  if (__builtin_expect (__chk_assert_no_overlap != 0, 1))
     __chk_overlap(dest, len, src, len);
 
   return dest;
index e1865d0737998b75026f9bbdfaace509693da297..184023cf3b397c2c4e9a36110dda2046bc6297d2 100644 (file)
@@ -35,7 +35,7 @@ __strncat_chk (char *restrict dest, const char *restrict append,
   if (__builtin_expect (dstlen < len1 + len2 + 1, 0))
     __chk_fail_overflow ();
 
-  if (__builtin_expect (__chk_assert_no_overlap, 1))
+  if (__builtin_expect (__chk_assert_no_overlap != 0, 1))
     __chk_overlap(dest, len1 + len2 + 1, append, len2 + 1);
 
   /* memmove() all but the NUL, since it might not actually be NUL */
index fb2e6f0294b17a14fb2742023745eafa2ec0197f..e8f70053dc233f820315e2f1d95d7f75b4986633 100644 (file)
@@ -41,7 +41,7 @@ __strncpy_chk (char *restrict dest, char *restrict src,
   if (n == len + 1)
     n--;
 
-  if (__builtin_expect (__chk_assert_no_overlap, 1))
+  if (__builtin_expect (__chk_assert_no_overlap != 0, 1))
     __chk_overlap(dest, n, src, n);
 
   return dest;
index 77a1853cdba5114806be26f6637f36c552d44422..fb02297278e1346d02d1250df992d007f0176e65 100644 (file)
@@ -106,6 +106,14 @@ _mkpath_np(const char *path, mode_t omode, const char ** firstdir)
                }
        }
 
+       /* Retry the trivial case after having stripped of trailing /. <rdar://problem/14351794> */
+       if (0 == mkdir(path, omode)) {
+               if (firstdir) {
+                       *firstdir = strdup(path);
+               }
+               goto mkpath_exit;
+       }
+
        while (1) {
                /* Increase our depth and try making that directory */
                s = strrchr(apath, '/');