]> git.saurik.com Git - apple/libpthread.git/blobdiff - private/private.h
libpthread-330.250.2.tar.gz
[apple/libpthread.git] / private / private.h
index d59f161ae9ab950a08881fb1963fdd975048d33c..b321442be2f0e9fe0f65c0a3d8c12ab6b6e32762 100644 (file)
@@ -42,7 +42,7 @@ _pthread_set_errno_direct(int value)
        *((int*)_pthread_getspecific_direct(_PTHREAD_TSD_SLOT_ERRNO)) = value;
 }
 
        *((int*)_pthread_getspecific_direct(_PTHREAD_TSD_SLOT_ERRNO)) = value;
 }
 
-__OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0)
+__API_AVAILABLE(macos(10.9), ios(7.0))
 pthread_t pthread_main_thread_np(void);
 
 struct _libpthread_functions {
 pthread_t pthread_main_thread_np(void);
 
 struct _libpthread_functions {
@@ -52,4 +52,76 @@ struct _libpthread_functions {
        void (*free)(void *); // added with version=2
 };
 
        void (*free)(void *); // added with version=2
 };
 
+/*!
+ * @function pthread_chdir_np
+ *
+ * @abstract
+ * Sets the per-thread current working directory.
+ *
+ * @discussion
+ * This will set the per-thread current working directory to the provided path.
+ * If this is used on a workqueue (dispatch) thread, it MUST be unset with
+ * pthread_fchdir_np(-1) before returning.
+ *
+ * @param path
+ * The path of the new working directory.
+ *
+ * @result
+ * 0 upon success, -1 upon error and errno is set.
+ */
+__API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0), watchos(3.0))
+int pthread_chdir_np(char *path);
+
+/*!
+ * @function pthread_fchdir_np
+ *
+ * @abstract
+ * Sets the per-thread current working directory.
+ *
+ * @discussion
+ * This will set the per-thread current working directory to the provided
+ * directory fd.  If this is used on a workqueue (dispatch) thread, it MUST be
+ * unset with pthread_fchdir_np(-1) before returning.
+ *
+ * @param fd
+ * A file descriptor to the new working directory.  Pass -1 to unset the
+ * per-thread working directory.
+ *
+ * @result
+ * 0 upon success, -1 upon error and errno is set.
+ */
+__API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0), watchos(3.0))
+int pthread_fchdir_np(int fd);
+
+__API_AVAILABLE(macos(10.14), ios(12.0), tvos(12.0), watchos(5.0))
+int pthread_attr_setcpupercent_np(pthread_attr_t * __restrict, int, unsigned long);
+
+#ifdef _os_tsd_get_base
+
+#ifdef __LP64__
+#define _PTHREAD_STRUCT_DIRECT_THREADID_OFFSET -8
+#else
+#define _PTHREAD_STRUCT_DIRECT_THREADID_OFFSET -16
+#endif
+
+/* N.B. DO NOT USE UNLESS YOU ARE REBUILT AS PART OF AN OS TRAIN WORLDBUILD */
+__header_always_inline uint64_t
+_pthread_threadid_self_np_direct(void)
+{
+#ifndef __i386__
+       if (_pthread_has_direct_tsd()) {
+#ifdef OS_GS_RELATIVE
+               return *(uint64_t OS_GS_RELATIVE *)(_PTHREAD_STRUCT_DIRECT_THREADID_OFFSET);
+#else
+               return *(uint64_t*)((char *)_os_tsd_get_base() + _PTHREAD_STRUCT_DIRECT_THREADID_OFFSET);
+#endif
+       }
+#endif
+       uint64_t threadid = 0;
+       pthread_threadid_np(NULL, &threadid);
+       return threadid;
+}
+
+#endif // _os_tsd_get_base
+
 #endif // __PTHREAD_PRIVATE_H__
 #endif // __PTHREAD_PRIVATE_H__