diff --git a/OAT.xml b/OAT.xml new file mode 100644 index 0000000000000000000000000000000000000000..48e62cd383b443053035574d65df33793f93c3fa --- /dev/null +++ b/OAT.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ai/neural_network_runtime/BUILD.gn b/ai/neural_network_runtime/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..db9a140e4019dfb32452c3fc342692f682b24166 --- /dev/null +++ b/ai/neural_network_runtime/BUILD.gn @@ -0,0 +1,34 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +ohos_ndk_library("libneural_network_runtime_ndk") { + output_name = "neural_network_runtime.z" + output_extension = "so" + ndk_description_file = "libneural_network_runtime.ndk.json" + min_compact_version = "9" + system_capability = "SystemCapability.AI.NeuralNetworkRuntime" + system_capability_headers = [ + "neural_network_runtime.h", + "neural_network_runtime_type.h", + ] +} + +ohos_ndk_headers("libneural_network_runtime_header") { + dest_dir = "$ndk_headers_out_dir/neural_network_runtime" + sources = [ + "neural_network_runtime.h", + "neural_network_runtime_type.h", + ] +} \ No newline at end of file diff --git a/ai/neural_network_runtime/libneural_network_runtime.ndk.json b/ai/neural_network_runtime/libneural_network_runtime.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..0d58444cb13d1d058014fcf82380c03675ff81da --- /dev/null +++ b/ai/neural_network_runtime/libneural_network_runtime.ndk.json @@ -0,0 +1,95 @@ +[ + { + "name": "OH_NNModel_Construct" + }, + { + "name": "OH_NNModel_AddTensor" + }, + { + "name": "OH_NNModel_SetTensorData" + }, + { + "name": "OH_NNModel_AddOperation" + }, + { + "name": "OH_NNModel_SpecifyInputsAndOutputs" + }, + { + "name": "OH_NNModel_Finish" + }, + { + "name": "OH_NNModel_Destroy" + }, + { + "name": "OH_NNModel_GetAvailableOperations" + }, + { + "name": "OH_NNCompilation_Construct" + }, + { + "name": "OH_NNCompilation_SetDevice" + }, + { + "name": "OH_NNCompilation_SetCache" + }, + { + "name": "OH_NNCompilation_SetPerformanceMode" + }, + { + "name": "OH_NNCompilation_SetPriority" + }, + { + "name": "OH_NNCompilation_EnableFloat16" + }, + { + "name": "OH_NNCompilation_Build" + }, + { + "name": "OH_NNCompilation_Destroy" + }, + { + "name": "OH_NNExecutor_Construct" + }, + { + "name": "OH_NNExecutor_SetInput" + }, + { + "name": "OH_NNExecutor_SetOutput" + }, + { + "name": "OH_NNExecutor_GetOutputShape" + }, + { + "name": "OH_NNExecutor_Run" + }, + { + "name": "OH_NNExecutor_AllocateInputMemory" + }, + { + "name": "OH_NNExecutor_AllocateOutputMemory" + }, + { + "name": "OH_NNExecutor_DestroyInputMemory" + }, + { + "name": "OH_NNExecutor_DestroyOutputMemory" + }, + { + "name": "OH_NNExecutor_SetInputWithMemory" + }, + { + "name": "OH_NNExecutor_SetOutputWithMemory" + }, + { + "name": "OH_NNExecutor_Destroy" + }, + { + "name": "OH_NNDevice_GetAllDevicesID" + }, + { + "name": "OH_NNDevice_GetName" + }, + { + "name": "OH_NNDevice_GetType" + } +] \ No newline at end of file diff --git a/ai/neural_network_runtime/neural_network_runtime.h b/ai/neural_network_runtime/neural_network_runtime.h new file mode 100644 index 0000000000000000000000000000000000000000..b5cc5e2fbe56aecd45b3f22abec414b80cd5bdd9 --- /dev/null +++ b/ai/neural_network_runtime/neural_network_runtime.h @@ -0,0 +1,690 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup NeuralNeworkRuntime + * @{ + * + * @brief Provides APIs of Neural Network Runtime for accelerating the model inference. + * + * @Syscap SystemCapability.Ai.NeuralNetworkRuntime + * @since 9 + * @version 1.0 + */ + +/** + * @file neural_network_runtime.h + * + * @brief Defines the Neural Network Runtime APIs. The AI inference framework uses the Native APIs provided by Neural Network Runtime + * to construct and compile models and perform inference and computing on acceleration hardware. + * Note: Currently, the APIs of Neural Network Runtime do not support multi-thread calling. \n + * + * @since 9 + * @version 1.0 + */ + +#ifndef NEURAL_NETWORK_RUNTIME_H +#define NEURAL_NETWORK_RUNTIME_H + +#include "neural_network_runtime_type.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Creates a model instance of the {@link OH_NNModel} type and uses other APIs provided by OH_NNModel to construct the model instance. + * + * Before composition, call {@link OH_NNModel_Construct} to create a model instance. Based on the model topology, + * call the {@link OH_NNModel_AddTensor}, {@link OH_NNModel_AddOperation}, and {@link OH_NNModel_SetTensorData} methods + * to fill in the data and operator nodes of the model, and then call {@link OH_NNModel_SpecifyInputsAndOutputs} to specify the inputs and outputs of the model. + * After the model topology is constructed, call {@link OH_NNModel_Finish} to build the model. \n + * + * After a model instance is used, you need to destroy it by calling {@link OH_NNModel_Destroy} to avoid memory leak. \n + * + * @return Returns the pointer to a {@link OH_NNModel} instance. + * @since 9 + * @version 1.0 + */ +OH_NNModel *OH_NNModel_Construct(void); + +/** + * @brief Adds a tensor to a model instance. + * + * The data node and operator parameters in the Neural Network Runtime model are composed of tensors of the model. + * This method is used to add tensors to a model instance based on the tensor parameter. + * The sequence of adding tensors is specified by the index value recorded in the model. The {@link OH_NNModel_SetTensorData}, {@link OH_NNModel_AddOperation}, + * and {@link OH_NNModel_SpecifyInputsAndOutputs} methods specifies tensors based on the index value. \n + * + * Neural Network Runtime supports inputs and outputs of the dynamic shape. When adding a data node with a dynamic shape, + * you need to set the dimensions that support dynamic changes in tensor.dimensions to -1. + * For example, if tensor.dimensions of a four-dimensional tensor is set to [1, -1, 2, 2], the second dimension supports dynamic changes. \n + * + * @param model Pointer to the {@link OH_NNModel} instance. + * @param tensor Pointer to the {@link OH_NN_Tensor} tensor. The tensor specifies the attributes of the tensor added to the model instance. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. + * If the operation fails, an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNModel_AddTensor(OH_NNModel *model, const OH_NN_Tensor *tensor); + +/** + * @brief Sets the tensor value. + * + * For tensors with constant values (such as model weights), you need to use this method in the composition phase. + * The index value of a tensor is determined by the sequence in which the tensor is added to the model. + * For details about how to add a tensor, see {@link OH_NNModel_AddTensor}. \n + * + * @param model Pointer to the {@link OH_NNModel} instance. + * @param index Index value of a tensor. + * @param dataBuffer Pointer to real data. + * @param length Length of the data buffer. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. + * If the operation fails, an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNModel_SetTensorData(OH_NNModel *model, uint32_t index, const void *dataBuffer, size_t length); + +/** + * @brief Adds an operator to a model instance. + * + * This method is used to add an operator to a model instance. The operator type is specified by op, and + * the operator parameters, inputs, and outputs are specified by paramIndices, inputIndices, and outputIndices respectively. + * This method verifies the attributes of operator parameters and the number of input and output parameters. + * These attributes must be correctly set when {@link OH_NNModel_AddTensor} is called to add tensors. + * For details about the expected parameters, input attributes, and output attributes of each operator, see {@link OH_NN_OperationType}. \n + * + * paramIndices, inputIndices, and outputIndices store index values of tensors. + * Index values are determined by the sequence in which tensors are added to the model. + * For details about how to add a tensor, see {@link OH_NNModel_AddTensor}. \n + * + * If unnecessary parameters are added for adding an operator, this method returns {@link OH_NN_INVALID_PARAMETER}. + * If no operator parameter is set, the operator uses the default parameter value. + * For details about the default values, see {@link OH_NN_OperationType}. \n + * + * @param model Pointer to the {@link OH_NNModel} instance. + * @param op Specifies the type of an operator to be added. For details, see the enumerated values of {@link OH_NN_OperationType}. + * @param paramIndices Pointer to the OH_NN_UInt32Array instance, which is used to set operator parameters. + * @param inputIndices Pointer to the OH_NN_UInt32Array instance, which is used to set the operator input. + * @param outputIndices Pointer to the OH_NN_UInt32Array instance, which is used to set the operator output. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. + * If the operation fails, an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNModel_AddOperation(OH_NNModel *model, + OH_NN_OperationType op, + const OH_NN_UInt32Array *paramIndices, + const OH_NN_UInt32Array *inputIndices, + const OH_NN_UInt32Array *outputIndices); + +/** + * @brief Specifies the inputs and outputs of a model. + * + * A tensor must be specified as the end-to-end inputs and outputs of a model instance. This type of tensor cannot be set + * using {@link OH_NNModel_SetTensorData}. The OH_NNExecutor method needs to be called in the execution phase to set the input and output data. \n + * + * The index value of a tensor is determined by the sequence in which the tensor is added to the model. + * For details about how to add a tensor, see {@link OH_NNModel_AddTensor}. \n + * + * Currently, the model inputs and outputs cannot be set asynchronously. \n + * + * @param model Pointer to the {@link OH_NNModel} instance. + * @param inputIndices Pointer to the OH_NN_UInt32Array instance, which is used to set the operator input. + * @param outputIndices Pointer to the OH_NN_UInt32Array instance, which is used to set the operator output. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. + * If the operation fails, an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNModel_SpecifyInputsAndOutputs(OH_NNModel *model, + const OH_NN_UInt32Array *inputIndices, + const OH_NN_UInt32Array *outputIndices); + +/** + * @brief Completes model composition. + * + * After the model topology is set up, call this method to indicate that the composition is complete. After this method is called, + * additional composition operations cannot be performed. If {@link OH_NNModel_AddTensor}, {@link OH_NNModel_AddOperation}, + * {@link OH_NNModel_SetTensorData}, and {@link OH_NNModel_SpecifyInputsAndOutputs} are called, + * {@link OH_NN_OPERATION_FORBIDDEN} is returned. \n + * + * Before calling {@link OH_NNModel_GetAvailableOperations} and {@link OH_NNCompilation_Construct}, + * you must call this method to complete composition. \n + * + * @param model Pointer to the {@link OH_NNModel} instance. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. + * If the operation fails, an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNModel_Finish(OH_NNModel *model); + +/** + * @brief Releases a model instance. + * + * This method needs to be called to release the model instance created by calling {@link OH_NNModel_Construct}. Otherwise, memory leak will occur. \n + * + * If model or *model is a null pointer, this method only prints warning logs and does not execute the release logic. \n + * + * @param model Level-2 pointer to the {@link OH_NNModel} instance. After a model instance is destroyed, this method sets *model to a null pointer. + * @since 9 + * @version 1.0 + */ +void OH_NNModel_Destroy(OH_NNModel **model); + +/** + * @brief Queries whether the device supports operators in the model. The support status is indicated by the Boolean value. + * + * Queries whether underlying device supports operators in a model instance. The device is specified by deviceID, + * and the result is represented by the array pointed by isSupported. If the ith operator is supported, + * the value of (*isSupported)[i] is true. Otherwise, the value is false. \n + * + * After this method is successfully executed, (*isSupported) points to the bool array that records the operator support status. + * The operator quantity for the array length is the same as that for the model instance. The memory corresponding to this array is + * managed by Neural Network Runtime and is automatically destroyed after the model instance is destroyed or this method is called again. \n + * + * @param model Pointer to the {@link OH_NNModel} instance. + * @param deviceID Device ID to be queried, which can be obtained by using {@link OH_NNDevice_GetAllDevicesID}. + * @param isSupported Pointer to the bool array. When this method is called, (*isSupported) must be a null pointer. + * Otherwise, {@link OH_NN_INVALID_PARAMETER} is returned. + * + * @param opCount Number of operators in a model instance, corresponding to the length of the (*isSupported) array. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. + * If the operation fails, an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNModel_GetAvailableOperations(OH_NNModel *model, + size_t deviceID, + const bool **isSupported, + uint32_t *opCount); + + +/** + * @brief Creates a compilation instance of the {@link OH_NNCompilation} type. + * + * After the OH_NNModel module completes model construction, APIs provided by the OH_NNCompilation module pass the model + * to underlying device for compilation. This method creates a {@link OH_NNCompilation} instance + * based on the passed {@link OH_NNModel} instance. The {@link OH_NNCompilation_SetDevice} method is called + * to set the device to compile on, and {@link OH_NNCompilation_Build} is then called to complete compilation.\n + * + * In addition to computing device selection, the OH_NNCompilation module supports features such as model caching, performance preference, + * priority setting, and float16 computing, which can be implemented by the following methods: + * - {@link OH_NNCompilation_SetCache} + * - {@link OH_NNCompilation_SetPerformanceMode} + * - {@link OH_NNCompilation_SetPriority} + * - {@link OH_NNCompilation_EnableFloat16} \n + * + * After {@link OH_NNCompilation} is created by calling this method, the {@link OH_NNModel} instance can be released. \n + * + * @param model Pointer to the {@link OH_NNModel} instance. + * @return Returns the pointer to a {@link OH_NNCompilation} instance. + * @since 9 + * @version 1.0 + */ +OH_NNCompilation *OH_NNCompilation_Construct(const OH_NNModel *model); + +/** + * @brief Specifies the device for model compilation and computing. + * + * In the compilation phase, you need to specify the device for model compilation and computing. Call {@link OH_NNDevice_GetAllDevicesID} + * to obtain available device IDs. Call {@link OH_NNDevice_GetType} and {@link OH_NNDevice_GetName} to obtain device information + * and pass target device IDs to this method for setting. \n + * + * @param compilation Pointer to the {@link OH_NNCompilation} instance. + * @param deviceID Device ID. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. + * If the operation fails, an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNCompilation_SetDevice(OH_NNCompilation *compilation, size_t deviceID); + +/** + * @brief Set the cache directory and version of the compiled model. + * + * On the device that supports caching, a model can be saved as a cache file after being compiled at the device driver layer. + * The model can be directly read from the cache file in the next compilation, saving recompilation time. + * This method performs different operations based on the passed cache directory and version:\n + * + * - No file exists in the cache directory: + * Caches the compiled model to the directory and sets the cache version to version. \n + * + * - A complete cache file exists in the cache directory, and its version is version: + * Reads the cache file in the path and passes the data to the underlying device for conversion into executable model instances. \n + * + * - A complete cache file exists in the cache directory, and its version is earlier than version: + * When model compilation is complete on the underlying device, overwrites the cache file and changes the version number to version. \n + * + * - A complete cache file exists in the cache directory, and its version is later than version: + * Returns the {@link OH_NN_INVALID_PARAMETER} error code without reading the cache file. \n + * + * - The cache file in the cache directory is incomplete or you do not have the permission to access the cache file. + * Returns the {@link OH_NN_INVALID_FILE} error code. \n + * + * - The cache directory does not exist or you do not have the access permission. + * Returns the {@link OH_NN_INVALID_PATH} error code. \n + * + * @param compilation Pointer to the {@link OH_NNCompilation} instance. + * @param cachePath Directory for storing model cache files. This method creates directories for different devices in the cachePath directory. + * You are advised to use a separate cache directory for each model. + * @param version Cache version. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. If the operation fails, + * an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNCompilation_SetCache(OH_NNCompilation *compilation, const char *cachePath, uint32_t version); + +/** + * @brief Sets the performance mode for model computing. + * + * Neural Network Runtime allows you to set the performance mode for model computing to meet the requirements of low power consumption + * and ultimate performance. If this method is not called to set the performance mode in the compilation phase, the compilation instance assigns + * the {@link OH_NN_PERFORMANCE_NONE} mode for the model by default. In this case, the device performs computing in the default performance mode. \n + * + * If this method is called on the device that does not support the setting of the performance mode, the {@link OH_NN_UNAVALIDABLE_DEVICE} error code is returned. \n + * + * @param compilation Pointer to the {@link OH_NNCompilation} instance. + * @param performanceMode Performance mode. For details about the available performance modes, see {@link OH_NN_PerformanceMode}. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. If the operation fails, + * an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNCompilation_SetPerformanceMode(OH_NNCompilation *compilation, + OH_NN_PerformanceMode performanceMode); + +/** + * @brief Sets the model computing priority. + * + * Neural Network Runtime allows you to set computing priorities for models. + * The priorities apply only to models created by the process with the same UID. + * The settings will not affect models created by processes with different UIDs on different devices. \n + * + * If this method is called on the device that does not support the priority setting, the {@link OH_NN_UNAVALIDABLE_DEVICE} error code is returned. \n + * + * @param compilation Pointer to the {@link OH_NNCompilation} instance. + * @param priority Priority. For details about the optional priorities, see {@link OH_NN_Priority}. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. If the operation fails, + * an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNCompilation_SetPriority(OH_NNCompilation *compilation, OH_NN_Priority priority); + +/** + * @brief Enables float16 for computing. + * + * Currently, Neural Network Runtime supports only float32 and int8. If this method is called on a device that supports float16, + * float16 will be used for computing the float32 model to reduce memory usage and execution time. \n + * + * If this method is called on the device that does not support float16, the {@link OH_NN_UNAVALIDABLE_DEVICE} error code is returned. \n + * + * @param compilation Pointer to the {@link OH_NNCompilation} instance. + * @param enableFloat16 Indicates whether to enable float16. If this parameter is set to true, float16 inference is performed. + * If this parameter is set to false, float32 inference is performed. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. If the operation fails, an error code is returned. + * For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNCompilation_EnableFloat16(OH_NNCompilation *compilation, bool enableFloat16); + +/** + * @brief Compiles a model. + * + * After the compilation configuration is complete, call this method to return the compilation result. The compilation instance pushes the model and + * compilation options to the device for compilation. After this method is called, additional compilation operations cannot be performed. + * If the {@link OH_NNCompilation_SetDevice}, {@link OH_NNCompilation_SetCache}, {@link OH_NNCompilation_SetPerformanceMode}, + * {@link OH_NNCompilation_SetPriority}, and {@link OH_NNCompilation_EnableFloat16} methods are called, {@link OH_NN_OPERATION_FORBIDDEN} is returned. \n + * + * @param compilation Pointer to the {@link OH_NNCompilation} instance. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. + * If the operation fails, an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNCompilation_Build(OH_NNCompilation *compilation); + +/** + * @brief Releases the Compilation object. + * + * This method needs to be called to release the compilation instance created by calling {@link OH_NNCompilation_Construct}. Otherwise, memory leak will occur. \n + * + * If compilation or *compilation is a null pointer, this method only prints warning logs and does not execute the release logic. \n + * + * @param compilation Level-2 pointer to the {@link OH_NNCompilation} instance. After a compilation instance is destroyed, + * this method sets *compilation to a null pointer. + * @since 9 + * @version 1.0 + */ +void OH_NNCompilation_Destroy(OH_NNCompilation **compilation); + + +/** + * @brief Creates an executor instance of the {@link OH_NNExecutor} type. + * + * This method constructs a model inference executor associated with the device based on the passed compiler. Use {@link OH_NNExecutor_SetInput} + * to set the model input data. After the input data is set, call {@link OH_NNExecutor_Run} to perform inference and then call + * {@link OH_NNExecutor_SetOutput} to obtain the computing result. \n + * + * After calling this method to create the {@link OH_NNExecutor} instance, you can release the {@link OH_NNCompilation} + * instance if you do not need to create any other executors. \n + * + * @param compilation Pointer to the {@link OH_NNCompilation} instance. + * @return Pointer to a {@link OH_NNExecutor} instance. + * @since 9 + * @version 1.0 + */ +OH_NNExecutor *OH_NNExecutor_Construct(OH_NNCompilation *compilation); + +/** + * @brief Sets the single input data for a model. + * + * This method copies the data whose length is specified by length (in bytes) in dataBuffer to the shared memory + * of the underlying device. inputIndex specifies the input to be set and tensor sets information such as the input shape, + * type, and quantization parameters. \n + * + * Neural Network Runtime supports models with dynamical shape input. For fixed shape input and dynamic shape input scenarios, + * this method uses different processing policies. + * + * - Fixed shape input: The attributes of tensor must be the same as those of the tensor added by calling + * {@link OH_NNModel_AddTensor} in the composition phase. + * - Dynamic shape input: In the composition phase, because the shape is not fixed, each value in tensor.dimensions must be greater than + * 0 in the method calls to determine the shape input in the calculation phase. When setting the shape, you can modify + * only the dimension whose value is -1. Assume that [-1, 224, 224, 3] is input as the the dimension of A in the composition phase. + * When this method is called, only the size of the first dimension can be modified, for example, to [3, 224, 224, 3]. + * If other dimensions are adjusted, {@link OH_NN_INVALID_PARAMETER} is returned. \n + * + * @param executor Pointer to the {@link OH_NNExecutor} instance. + * @param inputIndex Input index value, which is in the same sequence of the data input when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * Assume that the value of inputIndices is {1, 5, 9} when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * In input settings, the index value for the three inputs is {0, 1, 2}. \n + * + * @param tensor Sets the tensor corresponding to the input data. + * @param dataBuffer Pointer to the input data. + * @param length Length of the data buffer, in bytes. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. If the operation fails, + * an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNExecutor_SetInput(OH_NNExecutor *executor, + uint32_t inputIndex, + const OH_NN_Tensor *tensor, + const void *dataBuffer, + size_t length); + +/** + * @brief Sets the buffer for a single output of a model. + * + * This method binds the buffer to which dataBuffer points to the output specified by outputIndex. + * The length of the buffer is specified by length. \n + * + * After {@link OH_NNExecutor_Run} is called to complete a single model inference, Neural Network Runtime compares + * the length of the buffer to which dataBuffer points with the length of the output data and returns different results + * based on the actual situation. \n + * + * - If the buffer length is greater than or equal to the data length, the inference result is copied to the buffer and + * {@link OH_NN_SUCCESS} is returned. You can read the inference result from dataBuffer. + * - If the buffer length is smaller than the data length, {@link OH_NNExecutor_Run} returns {@link OH_NN_INVALID_PARAMETER} + * and generates a log indicating that the buffer is too small. \n + * + * @param executor Pointer to the {@link OH_NNExecutor} instance. + * @param outputIndex Output Index value, which is in the same sequence of the data output when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * Assume that the value of outputIndices is {4, 6, 8} when {@link OH_NNModel_SpecifyInputsAndOutputs} + * is called. In output buffer settings, the index value for the three outputs is {0, 1, 2}. + * @param dataBuffer Pointer to the output data. + * @param length Length of the data buffer, in bytes. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. If the operation fails, + * an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNExecutor_SetOutput(OH_NNExecutor *executor, + uint32_t outputIndex, + void *dataBuffer, + size_t length); + +/** + * @brief Obtains the dimension information about the output tensor. + * + * After {@link OH_NNExecutor_Run} is called to complete a single inference, call this method to obtain the specified output dimension + * information and number of dimensions. It is commonly used in dynamic shape input and output scenarios. \n + * + * @param executor Pointer to the {@link OH_NNExecutor} instance. + * @param outputIndex Output Index value, which is in the same sequence of the data output when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * Assume that outputIndices is {4, 6, 8} when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * When {@link OH_NNExecutor_GetOutputShape} is called to obtain dimension information about the output tensor, + * outputIndices is {0, 1, 2}. + * + * @param shape Pointer to the int32_t array. The value of each element in the array is the length of the output tensor in each dimension. + * @param shapeLength Pointer to the uint32_t type. The number of output dimensions is returned. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. If the operation fails, + * an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNExecutor_GetOutputShape(OH_NNExecutor *executor, + uint32_t outputIndex, + int32_t **shape, + uint32_t *shapeLength); + +/** + * @brief Performs inference. + * + * Performs end-to-end inference and computing of the model on the device associated with the executor. \n + * + * @param executor Pointer to the {@link OH_NNExecutor} instance. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. If the operation fails, + * an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNExecutor_Run(OH_NNExecutor *executor); + +/** + * @brief Allocates shared memory to a single input on a device. + * + * Neural Network Runtime provides a method for proactively allocating shared memory on a device. By specifying the executor and input index value, + * this method allocates shared memory whose size is specified by length on the device associated with a single input and returns the + * operation result through the {@link OH_NN_Memory} instance. \n + * + * @param executor Pointer to the {@link OH_NNExecutor} instance. + * @param inputIndex Input index value, which is in the same sequence of the data input when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * Assume that the value of inputIndices is {1, 5, 9} when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * In the memory input application, the index value for the three inputs is {0, 1, 2}. + * @param length Memory size to be applied for, in bytes. + * @return Pointer to a {@link OH_NN_Memory} instance. + * @since 9 + * @version 1.0 + */ +OH_NN_Memory *OH_NNExecutor_AllocateInputMemory(OH_NNExecutor *executor, uint32_t inputIndex, size_t length); + +/** + * @brief Allocates shared memory to a single output on a device. + * + * Neural Network Runtime provides a method for proactively allocating shared memory on a device. By specifying the executor and + * output index value, this method allocates shared memory whose size is specified by length on the device associated with + * a single output and returns the operation result through the {@link OH_NN_Memory} instance. \n + * + * @param executor Pointer to the {@link OH_NNExecutor} instance. + * @param outputIndex Output Index value, which is in the same sequence of the data output when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * Assume that the value of outputIndices is {4, 6, 8} when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * In output memory application, the index value for the three outputs is {0, 1, 2}. + * @param length Memory size to be applied for, in bytes. + * @return Pointer to a {@link OH_NN_Memory} instance. + * @since 9 + * @version 1.0 + */ +OH_NN_Memory *OH_NNExecutor_AllocateOutputMemory(OH_NNExecutor *executor, uint32_t outputIndex, size_t length); + +/** + * @brief Releases the input memory to which the {@link OH_NN_Memory} instance points. + * + * This method needs to be called to release the memory instance created by calling {@link OH_NNExecutor_AllocateInputMemory}. + * Otherwise, memory leak will occur. + * The mapping between inputIndex and memory must be the same as that in memory instance creation. \n + * + * If memory or *memory is a null pointer, this method only prints warning logs and does not execute the release logic. \n + * + * @param executor Pointer to the {@link OH_NNExecutor} instance. + * @param inputIndex Input index value, which is in the same sequence of the data input when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * Assume that the value of inputIndices is {1, 5, 9} when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * In memory input release, the index value for the three inputs is {0, 1, 2}. + * @param memory Level-2 pointer to the {@link OH_NN_Memory} instance. After shared memory is destroyed, this method sets *memory to a null pointer. + * @since 9 + * @version 1.0 + */ +void OH_NNExecutor_DestroyInputMemory(OH_NNExecutor *executor, uint32_t inputIndex, OH_NN_Memory **memory); + +/** + * @brief Releases the output memory to which the {@link OH_NN_Memory} instance points. + * + * This method needs to be called to release the memory instance created by calling {@link OH_NNExecutor_AllocateOutputMemory}. Otherwise, memory leak will occur. + * The mapping between outputIndex and memory must be the same as that in memory instance creation. \n + * + * If memory or *memory is a null pointer, this method only prints warning logs and does not execute the release logic. \n + * + * @param executor Pointer to the {@link OH_NNExecutor} instance. + * @param outputIndex Output Index value, which is in the same sequence of the data output when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * Assume that the value of outputIndices is {4, 6, 8} when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * In output memory release, the index value for the three outputs is {0, 1, 2}. + * @param memory Level-2 pointer to the {@link OH_NN_Memory} instance. After shared memory is destroyed, this method sets *memory to a null pointer. + * @since 9 + * @version 1.0 + */ +void OH_NNExecutor_DestroyOutputMemory(OH_NNExecutor *executor, uint32_t outputIndex, OH_NN_Memory **memory); + +/** + * @brief Specifies the hardware shared memory pointed to by the {@link OH_NN_Memory} instance as the shared memory used by a single input. + * + * In scenarios where memory needs to be managed by yourself, this method binds the execution input to the {@link OH_NN_Memory} memory instance. + * During computing, the underlying device reads the input data from the shared memory pointed to by the memory instance. + * By using this method, concurrent execution of input setting, computing, and read can be implemented to improve inference efficiency of a data flow. \n + * + * @param executor Pointer to the {@link OH_NNExecutor} instance. + * @param inputIndex Input index value, which is in the same sequence of the data input when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * Assume that the value of inputIndices is {1, 5, 9} when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * When the input shared memory is specified, the index value for the three inputs is {0, 1, 2}. + * @param tensor Pointer to {@link OH_NN_Tensor}, used to set the tensor corresponding to a single input. + * @param memory Pointer to {@link OH_NN_Memory}. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. If the operation fails, + * an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNExecutor_SetInputWithMemory(OH_NNExecutor *executor, + uint32_t inputIndex, + const OH_NN_Tensor *tensor, + const OH_NN_Memory *memory); + +/** + * @brief Specifies the hardware shared memory pointed to by the {@link OH_NN_Memory} instance as the shared memory used by a single output. + * + * In scenarios where memory needs to be managed by yourself, this method binds the execution output to the {@link OH_NN_Memory} memory instance. + * When computing is performed, the underlying hardware directly writes the computing result to the shared memory to which the memory instance points. + * By using this method, concurrent execution of input setting, computing, and read can be implemented to improve inference efficiency of a data flow. \n + * + * @param executor Executor. + * @param outputIndex Output Index value, which is in the same sequence of the data output when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * Assume that the value of outputIndices is {4, 6, 8} when {@link OH_NNModel_SpecifyInputsAndOutputs} is called. + * When output shared memory is specified, the index value for the three outputs is {0, 1, 2}. + * @param memory Pointer to {@link OH_NN_Memory}. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. If the operation fails, + * an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNExecutor_SetOutputWithMemory(OH_NNExecutor *executor, + uint32_t outputIndex, + const OH_NN_Memory *memory); + +/** + * @brief Destroys an executor instance to release the memory occupied by the executor. + * + * This method needs to be called to release the executor instance created by calling {@link OH_NNExecutor_Construct}. Otherwise, + * memory leak will occur. \n + * + * If executor or *executor is a null pointer, this method only prints warning logs and does not execute the release logic. \n + * + * @param executor Level-2 pointer to the {@link OH_NNExecutor} instance. + * @since 9 + * @version 1.0 + */ +void OH_NNExecutor_Destroy(OH_NNExecutor **executor); + + +/** + * @brief Obtains the ID of the device connected to Neural Network Runtime. + * + * Each device has a unique and fixed ID in Neural Network Runtime. This method returns device IDs on the current device through the uint32_t array. \n + * + * Device IDs are returned through the size_t array. Each element of the array is the ID of a single device. + * The array memory is managed by Neural Network Runtime. + * The data pointer is valid before this method is called next time. \n + * + * @param allDevicesID Pointer to the size_t array. The input *allDevicesID must be a null pointer. Otherwise, {@link OH_NN_INVALID_PARAMETER} is returned. + * @param deviceCount Pointer of the uint32_t type, which is used to return the length of (*allDevicesID). + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. + * If the operation fails, an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNDevice_GetAllDevicesID(const size_t **allDevicesID, uint32_t *deviceCount); + +/** + * @brief Obtains the name of the specified device. + * + * deviceID specifies the device whose name will be obtained. The device ID needs to be obtained by calling {@link OH_NNDevice_GetAllDevicesID}. \n + * + * @param deviceID Device ID. + * @param name Pointer to the char array. The passed (*char) must be a null pointer. Otherwise, {@link OH_NN_INVALID_PARAMETER} is returned. + * The value of (*name) is a C-style string ended with '\0'. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. If the operation fails, + * an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNDevice_GetName(size_t deviceID, const char **name); + +/** + * @brief Obtains the type information of the specified device. + * + * deviceID specifies the device whose type will be obtained. Currently, Neural Network Runtime supports the following device types: + * - OH_NN_CPU: CPU device. + * - OH_NN_GPU: GPU device. + * - OH_NN_ACCELERATOR: machine learning dedicated accelerator. + * - OH_NN_OTHERS: other hardware types. \n + * + * @param deviceID Device ID. + * @param deviceType Pointer to the {@link OH_NN_DeviceType} instance. The device type information is returned. + * @return Execution result of the function. If the operation is successful, OH_NN_SUCCESS is returned. If the operation fails, + * an error code is returned. For details about the error codes, see {@link OH_NN_ReturnCode}. + * @since 9 + * @version 1.0 + */ +OH_NN_ReturnCode OH_NNDevice_GetType(size_t deviceID, OH_NN_DeviceType *deviceType); + +#ifdef __cplusplus +} +#endif // __cplusplus + +/** @} */ +#endif // NEURAL_NETWORK_RUNTIME_H diff --git a/ai/neural_network_runtime/neural_network_runtime_type.h b/ai/neural_network_runtime/neural_network_runtime_type.h new file mode 100644 index 0000000000000000000000000000000000000000..3bbbb4c528ffe81b10f8c8e73a8fd0c6980d2088 --- /dev/null +++ b/ai/neural_network_runtime/neural_network_runtime_type.h @@ -0,0 +1,1783 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup NeuralNeworkRuntime + * @{ + * + * @brief Provides APIs for accelerating the Neural Network Runtime model inference. + * + * @Syscap SystemCapability.Ai.NeuralNetworkRuntime + * @since 9 + * @version 1.0 + */ + +/** + * @file neural_network_runtime_type.h + * + * @brief Defines the structure and enumeration for Neural Network Runtime. + * + * @since 9 + * @version 1.0 + */ + +#ifndef NEURAL_NETWORK_RUNTIME_TYPE_H +#define NEURAL_NETWORK_RUNTIME_TYPE_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Defines the handles of models for Neural Network Runtime. + * + * @since 9 + * @version 1.0 + */ +typedef struct OH_NNModel OH_NNModel; + +/** + * @brief Defines the compiler handle for Neural Network Runtime. + * + * @since 9 + * @version 1.0 + */ +typedef struct OH_NNCompilation OH_NNCompilation; + +/** + * @brief Defines the executor handle for Neural Network Runtime. + * + * @since 9 + * @version 1.0 + */ +typedef struct OH_NNExecutor OH_NNExecutor; + +/** + * @brief Defines the hardware performance mode. + * + * @since 9 + * @version 1.0 + */ +typedef enum { + /** No performance mode preference */ + OH_NN_PERFORMANCE_NONE = 0, + /** Low power consumption mode*/ + OH_NN_PERFORMANCE_LOW = 1, + /** Medium performance mode */ + OH_NN_PERFORMANCE_MEDIUM = 2, + /** High performance mode */ + OH_NN_PERFORMANCE_HIGH = 3, + /** Ultimate performance mode */ + OH_NN_PERFORMANCE_EXTREME = 4 +} OH_NN_PerformanceMode; + +/** + * @brief Defines the model inference task priority. + * + * @since 9 + * @version 1.0 + */ +typedef enum { + /** No priority preference */ + OH_NN_PRIORITY_NONE = 0, + /** Low priority */ + OH_NN_PRIORITY_LOW = 1, + /** Medium priority */ + OH_NN_PRIORITY_MEDIUM = 2, + /** High priority */ + OH_NN_PRIORITY_HIGH = 3 +} OH_NN_Priority; + +/** + * @brief Defines error codes for Neural Network Runtime. + * + * @since 9 + * @version 1.0 + */ +typedef enum { + /** The operation is successful. */ + OH_NN_SUCCESS = 0, + /** The operation failed. */ + OH_NN_FAILED = 1, + /** Invalid parameter. */ + OH_NN_INVALID_PARAMETER = 2, + /** Memory-related error, for example, insufficient memory, memory data copy failure, or memory application failure. */ + OH_NN_MEMORY_ERROR = 3, + /** Invalid operation. */ + OH_NN_OPERATION_FORBIDDEN = 4, + /** Null pointer exception */ + OH_NN_NULL_PTR = 5, + /** Invalid file. */ + OH_NN_INVALID_FILE = 6, + /** A hardware error occurs, for example, HDL service crash. */ + OH_NN_UNAVALIDABLE_DEVICE = 7, + /** Invalid path. */ + OH_NN_INVALID_PATH = 8 +} OH_NN_ReturnCode; + +/** + * @brief Defines activation function types in the fusion operator for Neural Network Runtime. + * + * @since 9 + * @version 1.0 + */ +typedef enum : int8_t { + /** The fusion activation function is not specified. */ + OH_NN_FUSED_NONE = 0, + /** Fusion relu activation function */ + OH_NN_FUSED_RELU = 1, + /** Fusion relu6 activation function */ + OH_NN_FUSED_RELU6 = 2 +} OH_NN_FuseType; + +/** + * @brief Defines the layout type of tensor data. + * + * @since 9 + * @version 1.0 + */ +typedef enum { + /** The tensor does not have a specific layout type (such as scalar or vector). */ + OH_NN_FORMAT_NONE = 0, + /** The tensor arranges data in NCHW format.*/ + OH_NN_FORMAT_NCHW = 1, + /** The tensor arranges data in NHWC format.*/ + OH_NN_FORMAT_NHWC = 2 +} OH_NN_Format; + +/** + * @brief Defines device types supported by Neural Network Runtime. + * + * @since 9 + * @version 1.0 + */ +typedef enum { + /** Devices that are not CPU, GPU, or dedicated accelerator*/ + OH_NN_OTHERS = 0, + /** CPU device */ + OH_NN_CPU = 1, + /** GPU device */ + OH_NN_GPU = 2, + /** Dedicated hardware accelerator */ + OH_NN_ACCELERATOR = 3, +} OH_NN_DeviceType; + +/** + * @brief Defines tensor data types supported by Neural Network Runtime. + * + * @since 9 + * @version 1.0 + */ +typedef enum { + /** Unknown type */ + OH_NN_UNKNOWN = 0, + /** bool */ + OH_NN_BOOL = 1, + /** int8 */ + OH_NN_INT8 = 2, + /** int16 */ + OH_NN_INT16 = 3, + /** int32 */ + OH_NN_INT32 = 4, + /** int64 */ + OH_NN_INT64 = 5, + /** uint8 */ + OH_NN_UINT8 = 6, + /** uint16 */ + OH_NN_UINT16 = 7, + /** uint32 */ + OH_NN_UINT32 = 8, + /** uint64 */ + OH_NN_UINT64 = 9, + /** float16 */ + OH_NN_FLOAT16 = 10, + /** float32 */ + OH_NN_FLOAT32 = 11, + /** float64 */ + OH_NN_FLOAT64 = 12 +} OH_NN_DataType; + + +/** + * @brief Defines operator types supported by Neural Network Runtime. + * + * @since 9 + * @version 1.0 + */ +typedef enum { + /** + * Returns the tensor of the sum of the elements corresponding to two input tensors. + * + * Inputs: + * + * * input1: first input tensor, of the Boolean or number type. + * * input2: second input tensor, whose data type must be the same as that of the first tensor. + * + * Parameters: + * + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * Outputs: + * + * * output: sum of input1 and input2. + * The data shape is the same as that of the input after broadcasting, + * and the data type is the same as that of the input with a higher precision. + */ + OH_NN_OPS_ADD = 1, + + /** + * Apply 2D average pooling to the input tensor, which now must be in NHWC format. The int8 quantization input is supported. + * + * If the input contains the padMode parameter: + * + * Inputs: + * + * * input: tensor. + * + * Parameters: + * + * * kernelSize indicates the kernel size used to obtain the average value. It is an int array [kernel_height, kernel_width]. + * The first number indicates the kernel height, and the second number indicates the kernel width. + * * strides indicates the distance of kernel moving. The value is an int array [stride_height, stride_width]. + * The first number indicates the moving step in height, and the second number indicates the moving step in width. + * * padMode: padding mode, which is optional. The value is of the int type and can be 0 (same) or 1 (valid). + * The nearest neighbor value is used for padding. + * 0 (same): The height and width of the output are the same as those of the input. + * The total padding quantity is calculated horizontally and vertically and evenly distributed to the top, bottom, left, and right if possible. + * Otherwise, the last additional padding will be completed from the bottom and right. + * 1 (valid): The possible maximum height and width of the output will be returned in case of no padding. Excessive pixels will be discarded. + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * If the input contains the padList parameter: + * + * Inputs: + * + * * input: tensor. + * + * Parameters: + * + * * kernelSize indicates the kernel size used to obtain the average value. It is an int array [kernel_height, kernel_width]. + * The first number indicates the kernel height, and the second number indicates the kernel width. + * * strides indicates the distance of kernel moving. The value is an int array [stride_height, stride_width]. + * The first number indicates the moving step in height, and the second number indicates the moving step in width. + * * padList: padding around input. It is an int array [top, bottom, left, right], and the nearest neighbor values are used for padding. + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * Outputs: + * + * * output: average pooling result of the input. + */ + OH_NN_OPS_AVG_POOL = 2, + + /** + * Batch normalization is performed on a tensor to scale and shift tensor elements, relieving potential covariate shift in a batch of data. + * + * Inputs: + * + * * input: n-dimensional tensor of shape [N, ..., C]. The nth dimension is the number of channels. + * * scale: 1D tensor of the scaling factor used to scale the first normalized tensor. + * * offset: 1D tensor used to move to the first normalized tensor. + * * mean: 1D tensor of the overall mean value. It is used only for inference. In case of training, this parameter must be left empty. + * * variance: 1D tensor used for the overall variance. It is used only for inference. In case of training, this parameter must be left empty. + * + * Parameters: + * + * * epsilon: fixed small additional value. + * + * Outputs: + * + * * output: n-dimensional output tensor whose shape and data type are the same as those of the input. + */ + OH_NN_OPS_BATCH_NORM = 3, + + /** + * Divides the batch dimension of a 4D tensor into small blocks by block_shape, and interleaves these blocks back into the spatial dimension. + * + * Parameters: + * + * * input: input tensor. The dimension will be divided into small blocks, and these blocks will be interleaved into the spatial dimension. + * + * Outputs: + * + * * blockSize: size of each block to be interleaved into the spatial dimension. The value is an array [height_block, width_block]. + * * crops: elements truncated from the spatial dimension of the output. The value is a 2D array [[crop0_start, crop0_end], + * [crop1_start, crop1_end]] with the shape of (2, 2). + * + * + * Outputs: + * + * * output. Assume that the shape of input is (n,h,w,c) and the shape of output is (n',h',w',c'): + * n' = n / (block_shape[0] * block_shape[1]) + * h' = h * block_shape[0] - crops[0][0] - crops[0][1] + * w' = w * block_shape[1] - crops[1][0] - crops[1][1] + * c'= c + */ + OH_NN_OPS_BATCH_TO_SPACE_ND = 4, + + /** + * Offsets the data in each dimension of the input tensor. + * + * Inputs: + * + * * input: input tensor, which can have two to five dimensions. + * * bias: offset of the number of input dimensions. + * + * Outputs: + * + * * output: sum of the input tensor and the bias in each dimension. + */ + OH_NN_OPS_BIAS_ADD = 5, + + /** + * Converts the data type in the input tensor. + * + * Inputs: + * + * * input: input tensor. + * * type: converted data type. + * + * Outputs: + * + * * output: converted tensor. + */ + OH_NN_OPS_CAST = 6, + + /** + * Connects tensors in a specified dimension. + * + * Inputs: + * + * * input: N input tensors. + * + * Parameters: + * + * * axis: dimension for connecting tensors. + * + * Outputs: + * + * * output: result of connecting N tensors along the axis. + */ + OH_NN_OPS_CONCAT = 7, + + /** + * 2D convolutional layer. + * + * If the input contains the padMode parameter: + * + * Inputs: + * + * * input: input tensor. + * * weight: convolution weight in [outChannel, kernelHeight, kernelWidth, inChannel/group] format. + * The value of inChannel must be exactly divided by the value of group. + * + * * bias: bias of the convolution. It is an array with a length of [outChannel]. + * In quantization scenarios, the bias parameter does not require quantization parameters. + * The quantization version requires data input of the OH_NN_INT32 type. + * The actual quantization parameters are determined by input and weight. + * + * Parameters: + * + * * stride: movement stride of the convolution kernel in height and width. It is an int array [strideHeight, strideWidth]. + * * dilation: dilation size of the convolution kernel in height and width. It is an int array [dilationHeight, dilationWidth]. + * The value must be greater than or equal to 1 and cannot exceed the height and width of input. + * + * * padMode: padding mode of input. The value is of the int type and can be 0 (same) or 1 (valid). + * 0 (same): The height and width of the output are the same as those of the input. + * The total padding quantity is calculated horizontally and vertically and evenly distributed to the top, bottom, left, and right if possible. + * Otherwise, the last additional padding will be completed from the bottom and right. + * + * 1 (valid): The possible maximum height and width of the output will be returned in case of no padding. The excessive pixels will be discarded. + * * group: number of groups in which the input is divided by in_channel. The value is of the int type. + * If group is 1, it is a conventional convolution. If group is greater than 1 and + * less than or equal to in_channel, it is a group convolution. + * * activationType is an integer constant which is contained in FuseType. The specified activation function is called before output. + * + * If the input contains the padList parameter: + * + * Inputs: + * + * * input: input tensor. + * * weight: convolution weight in [outChannel, kernelHeight, kernelWidth, inChannel/group] format. + * The value of inChannel must be exactly divided by the value of group. + * + * * bias: bias of the convolution. It is an array with a length of [outChannel]. + * In quantization scenarios, the bias parameter does not require quantization parameters. + * The quantization version requires data input of the OH_NN_INT32 type. + * The actual quantization parameters are determined by input and weight. + * + * Parameters: + * + * * stride: movement stride of the convolution kernel in height and width. It is an int array [strideHeight, strideWidth]. + * * dilation: dilation size of the convolution kernel in height and width. It is an int array [dilationHeight, dilationWidth]. + * The value must be greater than or equal to 1 and cannot exceed the height and width of input. + * * padList: padding around input. It is an int array [top, bottom, left, right]. + * * group: number of groups in which the input is divided by in_channel. The value is of the int type. + * If group is 1, it is a conventional convolution. + * If group is in_channel, it is depthwiseConv2d. In this case, group==in_channel==out_channel. + * If group is greater than 1 and less than in_channel, it is a group convolution. In this case, out_channel==group. + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * Outputs: + * + * * output: convolution computing result. + */ + OH_NN_OPS_CONV2D = 8, + + /** + * 2D convolution transposition. + * + * If the input contains the padMode parameter: + * + * Inputs: + * + * * input: input tensor. + * * weight: convolution weight in [outChannel, kernelHeight, kernelWidth, inChannel/group] format. + * The value of inChannel must be exactly divided by the value of group. + * + * * bias: bias of the convolution. It is an array with a length of [outChannel]. + * In quantization scenarios, the bias parameter does not require quantization parameters. + * The quantization version requires data input of the OH_NN_INT32 type. + * The actual quantization parameters are determined by input and weight. + * + * * stride: movement stride of the convolution kernel in height and width. It is an int array [strideHeight, strideWidth]. + * + * Parameters: + * + * * dilation: dilation size of the convolution kernel in height and width. It is an int array [dilationHeight, dilationWidth]. + * The value must be greater than or equal to 1 and cannot exceed the height and width of input. + * * padMode: padding mode of input. The value is of the int type and can be 0 (same) or 1 (valid). + * 0 (same): The height and width of the output are the same as those of the input. + * The total padding quantity is calculated horizontally and vertically and evenly distributed to the top, bottom, left, and right if possible. + * Otherwise, the last additional padding will be completed from the bottom and right. + * 1 (valid): The possible maximum height and width of the output will be returned in case of no padding. The excessive pixels will be discarded. + * * group: number of groups in which the input is divided by in_channel. The value is of the int type. + * If group is 1, it is a conventional convolution. If group is greater than 1 and + * less than or equal to in_channel, it is a group convolution. + * * outputPads: padding along the height and width of the output tensor. The value is an int or a tuple. + * It can be a single integer to specify the same value for all spatial dimensions. The amount of output + * padding along a dimension must be less than the stride along this dimension. + * + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * If the input contains the padList parameter: + * + * Inputs: + * + * * input: input tensor. + * * weight: convolution weight in [outChannel, kernelHeight, kernelWidth, inChannel/group] format. + * The value of inChannel must be exactly divided by the value of group. + * * bias: bias of the convolution. It is an array with a length of [outChannel]. + * In quantization scenarios, the bias parameter does not require quantization parameters. + * The quantization version requires data input of the OH_NN_INT32 type. + * The actual quantization parameters are determined by input and weight. + * + * Parameters: + * + * * stride: movement stride of the convolution kernel in height and width. It is an int array [strideHeight, strideWidth]. + * * dilation: dilation size of the convolution kernel in height and width. It is an int array [dilationHeight, dilationWidth]. + * The value must be greater than or equal to 1 and cannot exceed the height and width of input. + * * padList: padding around input. It is an int array [top, bottom, left, right]. + * * group: number of groups in which the input is divided by in_channel. The value is of the int type. + * If group is 1, it is a conventional convolution. If group is greater than 1 + * and less than or equal to in_channel, it is a group convolution. + * * outputPads: padding along the height and width of the output tensor. The value is an int or a tuple. + * It can be a single integer to specify the same value for all spatial dimensions. The amount of output padding + * along a dimension must be less than the stride along this dimension. + * + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * Outputs: + * + * * output: computing result after convolution and transposition. + */ + OH_NN_OPS_CONV2D_TRANSPOSE = 9, + + /** + * 2D depthwise separable convolution. + * + * If the input contains the padMode parameter: + * + * Inputs: + * + * * input: input tensor. + * * weight: convolution weight in [outChannel, kernelHeight, kernelWidth, 1] format. + * outChannel is equal to channelMultiplier multiplied by inChannel. + * * bias: bias of the convolution. It is an array with a length of [outChannel]. + * In quantization scenarios, the bias parameter does not require quantization parameters. + * The quantization version requires data input of the OH_NN_INT32 type. + * The actual quantization parameters are determined by input and weight. + * + * Parameters: + * + * * stride: movement stride of the convolution kernel in height and width. It is an int array [strideHeight, strideWidth]. + * * dilation: dilation size of the convolution kernel in height and width. It is an int array [dilationHeight, dilationWidth]. + * The value must be greater than or equal to 1 and cannot exceed the height and width of input. + * * padMode: padding mode of input. The value is of the int type and can be 0 (same) or 1 (valid). + * 0 (same): The height and width of the output are the same as those of the input. + * The total padding quantity is calculated horizontally and vertically and evenly distributed to the top, bottom, left, and right if possible. + * Otherwise, the last additional padding will be completed from the bottom and right. + * + * 1 (valid): The possible maximum height and width of the output will be returned in case of no padding. The excessive pixels will be discarded. + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * If the input contains the padList parameter: + * + * Inputs: + * + * * input: input tensor. + * * weight: convolution weight in [outChannel, kernelHeight, kernelWidth, 1] format. + * outChannel is equal to channelMultiplier multiplied by inChannel. + * * bias: bias of the convolution. It is an array with a length of [outChannel]. + * In quantization scenarios, the bias parameter does not require quantization parameters. + * The quantization version requires data input of the OH_NN_INT32 type. + * The actual quantization parameters are determined by input and weight. + * + * Parameters: + * + * * stride: movement stride of the convolution kernel in height and width. It is an int array [strideHeight, strideWidth]. + * * dilation: dilation size of the convolution kernel in height and width. It is an int array [dilationHeight, dilationWidth]. + * The value must be greater than or equal to 1 and cannot exceed the height and width of input. + * * padList: padding around input. It is an int array [top, bottom, left, right]. + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * Outputs: + * + * * output: convolution computing result. + */ + OH_NN_OPS_DEPTHWISE_CONV2D_NATIVE = 10, + + /** + * Divides two input scalars or tensors. + * + * Inputs: + * + * * input1: first input, which is a number, a bool, or a tensor whose data type is number or Boolean. + * * input2: second input, which must meet the following requirements: + * If the first input is a tensor, the second input can be a real number, a Boolean value, or a tensor whose data type is real number or Boolean value. + * If the first input is a real number or Boolean value, the second input must be a tensor whose data type is real number or Boolean value. + * + * Parameters: + * + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * Outputs: + * + * * output: result of dividing input1 by input2. + */ + OH_NN_OPS_DIV = 11, + + /** + * Sets parameters to perform product (dot product), sum (addition and subtraction), or max (larger value) on the input. + * + * Inputs: + * + * * input1: first input tensor. + * * input2: second input tensor. + * + * Parameters: + * + * * mode: operation mode. The value is an enumerated value. + * + * Outputs: + * + * * output: computing result, which has the same data type and shape of output and input1. + */ + OH_NN_OPS_ELTWISE = 12, + + /** + * Adds an additional dimension to a tensor in the given dimension. + * + * Inputs: + * + * * input: input tensor. + * * axis: index of the dimension to be added. The value is of the int32_t type and must be a constant in the range [-dim-1, dim]. + * + * Outputs: + * + * * output: tensor after dimension expansion. + */ + OH_NN_OPS_EXPAND_DIMS = 13, + + /** + * Creates a tensor of the specified dimensions and fills it with a scalar. + * + * Inputs: + * + * * value: scalar used to fill the tensor. + * * shape: dimensions of the tensor to be created. + * + * Outputs: + * + * * output: generated tensor, which has the same data type as value. The tensor shape is specified by the shape parameter. + */ + OH_NN_OPS_FILL = 14, + + /** + * Full connection. The entire input is used as the feature map for feature extraction. + * + * Inputs: + * + * * input: full-connection input tensor. + * * weight: weight tensor for a full connection. + * * bias: full-connection bias. In quantization scenarios, no quantized parameter is required for this parameter. + * If quantization is required, the data must be of the OH_NN_INT32 type. + * The actual quantization parameters are determined by input and weight. + * + * Parameters: + * + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * Outputs: + * + * * output: computed tensor. + * + * If the input contains the axis parameter: + * + * Inputs: + * + * * input: full-connection input tensor. + * * weight: weight tensor for a full connection. + * * bias: full-connection bias. In quantization scenarios, no quantized parameter is required for this parameter. + * If quantization is required, the data must be of the OH_NN_INT32 type. The actual quantization parameters + * are determined by input and weight. + * + * Parameters: + * + * * axis: axis in which the full connection is applied. The specified axis and its following axes are + * converted into a 1D tensor for applying the full connection. + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * Outputs: + * + * * output: computed tensor. + */ + OH_NN_OPS_FULL_CONNECTION = 15, + + /** + * Returns the slice of the input tensor based on the specified index and axis. + * + * Inputs: + * + * * input: tensor to be sliced. + * * inputIndices: indices of the specified input on the axis. The value is an array of the int type + * and must be in the range [0,input.shape[axis]). + * * axis: axis on which input is sliced. The value is an array with one element of the int32_t type. + * + * Outputs: + * + * * output: sliced tensor. + */ + OH_NN_OPS_GATHER = 16, + + /** + * Calculate the Hswish activation value of the input. + * + * Inputs: + * + * * An n-dimensional input tensor. + * + * Outputs: + * + * * output: n-dimensional Hswish activation value. The data type is the same as that of shape and input. + */ + OH_NN_OPS_HSWISH = 17, + + /** + * For input1 and input2, calculate the result of input1[i]<=input2[i] for each pair of elements, + * where i is the index of each element in the input tensor. + * + * Inputs: + * + * * input1, which can be a real number, Boolean value, or tensor whose data type is real number or NN_BOOL. + * * input2, which can be a real number or a Boolean value if input1 is a tensor and must be a tensor + * with the data type of real number or NN_BOOL if input1 is not a tensor. + * + * Outputs: + * + * * A tensor of the data type NN_BOOL. When a quantization model is used, the quantization parameters of the output + * cannot be omitted. However, values of the quantization parameters do not affect the result. + */ + OH_NN_OPS_LESS_EQUAL = 18, + + /** + * Calculate the inner product of input1 and input2. + * + * Inputs: + * + * * input1: n-dimensional input tensor. + * * input2: n-dimensional input tensor. + * + * Parameters: + * + * * TransposeX: Boolean value indicating whether to transpose input1. + * * TransposeY: Boolean value indicating whether to transpose input2. + * + * Outputs: + * + * * output: inner product obtained after calculation. In case of type!=NN_UNKNOWN, the output data type is + * determined by type. In case of type==NN_UNKNOWN, the output data type depends on the data type + * converted during computing of inputX and inputY. + * + */ + OH_NN_OPS_MATMUL = 19, + + /** + * Calculates the maximum of input1 and input2 element-wise. The inputs of input1 and input2 + * comply with the implicit type conversion rules to make the data types consistent. * The inputs must be two tensors or one tensor and one scalar. + * When the inputs are two tensors, their data types cannot be both NN_BOOL. Their shapes can be broadcast to the same size. + * When the inputs are one tensor and one scalar, the scalar must be a constant. + * + * Inputs: + * + * * input1: n-dimensional input tensor of the real number or NN_BOOL type. + * * input2: n-dimensional input tensor of the real number or NN_BOOL type. + * + * Outputs: + * + * * output: n-dimensional output tensor. The shape and data type of + * output are the same as those of the two inputs with a higher precision. + */ + OH_NN_OPS_MAXIMUM = 20, + + /** + * Applies 2D maximum pooling to the input tensor. + * + * If the input contains the padMode parameter: + * + * Inputs: + * + * * input: tensor. + * + * Parameters: + * + * * kernelSize: kernel size used to obtain the maximum. It is an int array [kernel_height, kernel_width]. + * The first number indicates the kernel height, and the second number indicates the kernel width. + * * strides indicates the distance of kernel moving. The value is an int array [stride_height, stride_width]. + * The first number indicates the moving step in height, and the second number indicates the moving step in width. + * * padMode: padding mode, which is optional. The value is of the int type and can be 0 (same) + * or 1 (valid). The nearest neighbor value is used for padding. + * 0 (same): The height and width of the output are the same as those of the input. + * The total padding quantity is calculated horizontally and vertically and evenly distributed to the top, bottom, left, and right if possible. + * Otherwise, the last additional padding will be completed from the bottom and right. + * 1 (valid): The possible maximum height and width of the output will be returned in case of no padding. The excessive pixels will be discarded. + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * If the input contains the padList parameter: + * + * Inputs: + * + * * input: tensor. + * + * Parameters: + * + * * kernelSize: kernel size used to obtain the maximum. It is an int array [kernel_height, kernel_width]. + * The first number indicates the kernel height, and the second number indicates the kernel width. + * * strides indicates the distance of kernel moving. The value is an int array [stride_height, stride_width]. + * The first number indicates the moving step in height, and the second number indicates the moving step in width. + * * padList: padding around input. It is an int array [top, bottom, left, right], + * and the nearest neighbor values are used for padding. + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * Outputs: + * + * * output: tensor obtained after maximum pooling is applied to the input. + */ + OH_NN_OPS_MAX_POOL = 21, + + /** + * Multiplies elements in the same positions of inputX and inputY to obtain the output. + * If inputX and inputY have different shapes, expand them to the same shape + * through broadcast and then perform multiplication. + * + * Inputs: + * + * * input1: n-dimensional tensor. + * * input2: n-dimensional tensor. + * + * Parameters: + * + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * Outputs: + * + * * Product of each element of input1 and input2. + */ + OH_NN_OPS_MUL = 22, + + /** + * Generates a one-hot tensor based on the positions specified by indices. The positions specified by indices + * are determined by on_value, and other positions are determined by off_value. + * + * Inputs: + * + * * indices: n-dimensional tensor. Each element in indices determines the position of + * on_value in each one-hot vector. + * * depth: integer scalar that determines the depth of the one-hot vector. The value of depth + * must be greater than 0. + * * on_value: scalar that specifies a valid value in the one-hot vector. + * * off_value: scalar that specifies the values of other posistions in the one-hot vector except the valid value. + * + * Parameters: + * + * * axis: integer scalar that specifies the dimension for inserting the one-hot. Assume that the shape + * of indices is [N, C], and the value of depth is D. + * When axis is 0, the shape of the output is [D, N, C]. + * When axis is -1, the shape of the output is [N, C, D]. + * When axis is 1, the shape of the output is [N, D, C]. + * + * Outputs: + * + * * output: (n+1)-dimensional tensor if indices is an n-dimensional tensor. + * The output shape is determined by indices and axis. + */ + OH_NN_OPS_ONE_HOT = 23, + + /** + * Pads inputX in the specified dimensions. + * + * Inputs: + * + * * inputX: n-dimensional tensor in [BatchSize, ...] format. + * * paddings: 2D tensor that specifies the length to pad in each dimension. The shape is [n, 2]. + * For example, paddings[i][0] indicates the number of paddings to be added preceding inputX in the ith dimension. + * paddings[i][1] indicates the number of paddings to be added following inputX in the ith dimension. + * + * Parameters: + * + * * padValues: value to be added to the pad operation. The value is a constant with the same data type as inputX. + * + * Outputs: + * + * * output: n-dimensional tensor after padding, with the same dimensions and data type as inputX. + * The shape is determined by inputX and paddings. + * output.shape[i] = input.shape[i] + paddings[i][0]+paddings[i][1] + */ + OH_NN_OPS_PAD = 24, + + /** + * Calculates the y power of each element in input. The inputs must be two tensors or one tensor and one scalar. + * When the inputs are two tensors, their data types cannot be both NN_BOOL, and their shapes must be the same. + * When the inputs are one tensor and one scalar, the scalar must be a constant. + * + * Inputs: + * + * * input: real number, Boolean value, or tensor whose data type is real number or NN_BOOL. + * * y: real number, Boolean value, or tensor whose data type is real number or NN_BOOL. + * + * Outputs: + * + * * output: tensor, whose shape is determined by the shape of input and y after broadcasting. + */ + OH_NN_OPS_POW = 25, + + /** + * Scales a tensor. + * + * Inputs: + * + * * input: n-dimensional tensor. + * * scale: scaling tensor. + * * bias: bias tensor. + * + * Parameters: + * + * * axis: dimensions to be scaled. + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * Outputs: + * + * * output: scaled n-dimensional tensor, whose data type is the same as that of input and + * shape is determined by axis. + */ + OH_NN_OPS_SCALE = 26, + + /** + * Calculates the shape of the input tensor. + * + * Inputs: + * + * * input: n-dimensional tensor. + * + * Outputs: + * + * * output: integer array representing the dimensions of the input tensor. + */ + OH_NN_OPS_SHAPE = 27, + + /** + * Applies the sigmoid operation to the input tensor. + * + * Inputs: + * + * * input: n-dimensional tensor. + * + * Outputs: + * + * * output: result of the sigmoid operation. It is an n-dimensional tensor + * with the same data type and shape as input. + */ + OH_NN_OPS_SIGMOID = 28, + + /** + * Slices a tensor of the specified size from the input in each dimension. + * + * Inputs: + * + * * input: n-dimensional input tensor. + * * begin: start of the slice, which is an array of integers greater than or equal to 0. + * * size: slice length, which is an array of integers greater than or equal to 0. + * Assume that a dimension is i and 1<=size[i]<=input.shape[i]-begin[i]. + * + * Outputs: + * + * * output: n-dimensional tensor obtained by slicing. + * The TensorType, shape, and size of the output are the same as those of the input. + */ + OH_NN_OPS_SLICE = 29, + + /** + * Applies the softmax operation to the input tensor. + * + * Inputs: + * + * * input: n-dimensional input tensor. + * + * Parameters: + * + * * axis: dimension in which the softmax operation is performed. + * The value is of the int64 type. It is an integer in the range [-n, n). + * + * Outputs: + * + * * output: result of the softmax operation. It is an n-dimensional tensor with + * the same data type and shape as input. + */ + OH_NN_OPS_SOFTMAX = 30, + + /** + * Divides a 4D tensor into small blocks and combines these blocks in the original batch. + * The number of blocks is blockShape[0] multiplied by blockShape[1]. + * + * Inputs: + * + * * input: 4D tensor. + * + * Parameters: + * + * * blockShape: a pair of integers. Each of them is greater than or equal to 1. + * * paddings: a pair of arrays. Each of them consists of two integers. The four integers that form paddings + * must be greater than or equal to 0. paddings[0][0] and paddings[0][1] + * specify the number of paddings in the third dimension, and paddings[1][0] and paddings[1][1] + * specify the number of paddings in the fourth dimension. + * + * Outputs: + * + * * output: 4D tensor with the same data type as input. The shape is determined by input, + * blockShape, and paddings. Assume that the input shape is [n,c,h,w], then: + * output.shape[0] = n * blockShape[0] * blockShape[1] + * output.shape[1] = c + * output.shape[2] = (h + paddings[0][0] + paddings[0][1]) / blockShape[0] + * output.shape[3] = (w + paddings[1][0] + paddings[1][1]) / blockShape[1] + * (h + paddings[0][0] + paddings[0][1]) and (w + paddings[1][0] + paddings[1][1]) is exactly divisible by + * (h + paddings[0][0] + paddings[0][1]) and (w + paddings[1][0] + paddings[1][1]). + * + */ + OH_NN_OPS_SPACE_TO_BATCH_ND = 31, + + /** + * Splits the input into multiple tensors along the axis dimension. The number of tensors is specified by outputNum. + * + * Inputs: + * + * * input: n-dimensional tensor. + * + * Parameters: + * + * * outputNum: number of output tensors. The data type is long. + * * size_splits: size of each tensor split from the input. The value is a 1D tensor of the int type. + * If size_splits is empty, the input will be evenly split into tensors of the same size. In this case, + * input.shape[axis] can be exactly divisible by outputNum. + * If size_splits is not empty, the sum of all its elements must be equal to input.shape[axis]. + * * axis: splitting dimension of the int type. + * + * Outputs: + * + * * outputs: array of n-dimensional tensors, with the same data type and dimensions. + * The data type of each tensor is the same as that of input. + */ + OH_NN_OPS_SPLIT = 32, + + /** + * Calculates the square root of a tensor. + * + * Inputs: + * + * * input: n-dimensional tensor. + * + * Outputs: + * + * * output: square root of the input. It is an n-dimensional tensor with the same data type and shape as input. + */ + OH_NN_OPS_SQRT = 33, + + /** + * Calculates the square of the difference between two tensors. The SquaredDifference operator supports tensor and tensor subtraction. + * If two tensors have different TensorTypes, the Sub operator converts the low-precision tensor to a high-precision one. + * If two tensors have different shapes, the two tensors can be extended to tensors with the same shape through broadcast. + * + * Inputs: + * + * * input1: minuend, which is a tensor of the NN_FLOAT16, NN_FLOAT32, NN_INT32, or NN_BOOL type. + * * input2: subtrahend, which is a tensor of the NN_FLOAT16, NN_FLOAT32, NN_INT32, or NN_BOOL type. + * + * Outputs: + * + * * output: square of the difference between two inputs. The output shape is determined + * byinput1 and input2. If they have the same shape, the output tensor has the same shape as them. + * If they have different shapes, perform the broadcast operation on input1 and input2 and perform subtraction. + * TensorType of the output is the same as that of the input tensor with higher precision. + */ + OH_NN_OPS_SQUARED_DIFFERENCE = 34, + + /** + * Removes the dimension with a length of 1 from the specified axis. The int8 quantization input is supported. + * Assume that the input shape is [2, 1, 1, 2, 2] and axis is [0,1], the output shape is [2, 1, 2, 2], + * which means the dimension whose length is 0 between dimensions 0 and dimension 1 is removed. + * + * Inputs: + * + * * input: n-dimensional tensor. + * + * Parameters: + * + * * axis: dimension to be removed. The value is of int64_t type and can be an integer in the range [-n, n) or an array. + * + * Outputs: + * + * * output: output tensor. + */ + OH_NN_OPS_SQUEEZE = 35, + + /** + * Stacks multiple tensors along the specified axis. If each tensor has n dimensions before stacking, + * the output tensor will have n+1 dimensions. + * + * Inputs: + * + * * input: input for stacking, which can contain multiple n-dimensional tensors. + * Each of them must have the same shape and type. + * + * Parameters: + * + * * axis: dimension for tensor stacking, which is an integer. The value range is [-(n+1),(n+1)), + * which means a negative number is allowed. + * + * Outputs: + * + * * output: stacking result of the input along the axis dimension. The value is an n+1-dimensional tensor + * and has the same TensorType as the input. + */ + OH_NN_OPS_STACK = 36, + + /** + * Slices a tensor with the specified stride. + * + * Inputs: + * + * * input: n-dimensional input tensor. + * * begin: start of slicing, which is a 1D tensor. The length of begin is n. + * begin[i] specifies the start of slicing in the ith dimension. + * * end: end of slicing, which is a 1D tensor. The length of end is n. + * end[i] specifies the end of slicing in the ith dimension. + * * strides: slicing stride, which is a 1D tensor. The length of strides is n. + * strides[i] specifies the stride at which the tensor is sliced in the ith dimension. + * + * Parameters: + * + * * beginMask: an integer used to mask begin. beginMask is represented in binary code. + * In case of binary(beginMask)[i]==1, for the ith dimension, elements are sliced from the first element + * at strides[i] until the end[i]-1 element. + * + * * endMask: an integer used to mask end. endMask is represented in binary code. + * In case of binary(endMask)[i]==1, elements are sliced from the element at the begin[i] position + * in the ith dimension until the tensor boundary at strides[i]. + * + * * ellipsisMask: integer used to mask begin and end. ellipsisMask is represented in binary code. + * In case of binary(ellipsisMask)[i]==1, elements are sliced from the first element at strides[i] in the ith dimension + * until the tensor boundary. Only one bit of binary(ellipsisMask) can be a non-zero value. + * + * * newAxisMask: new dimension, which is an integer. newAxisMask is represented in binary code. + * In case of binary(newAxisMask)[i]==1, a new dimension whose length is 1 is inserted into the ith dimension. + * * shrinkAxisMask: shrinking dimension, which is an integer. * shrinkAxisMask is represented in binary code. + * In the case of binary(shrinkAxisMask)[i]==1, all elements in the ith dimension will be discarded, + * and the length of the ith dimension is shrunk to 1. + * + * Outputs: + * + * * A tensor, with the same data type as input. The number of dimensions of the output tensor is rank(input[0])+1. + */ + OH_NN_OPS_STRIDED_SLICE = 37, + + /** + * Calculates the difference between two tensors. + * + * Inputs: + * + * * input1: minuend, which is a tensor. + * * input2: subtrahend, which is a tensor. + * + * Parameters: + * + * * activationType is an integer constant which is contained in FuseType. + * The specified activation function is called before output. + * + * Outputs: + * + * * output: difference between the two tensors. The output shape is determined byinput1 and input2. + * If they have the same shape, the output tensor has the same shape as them. + * If they have different shapes, perform the broadcast operation on input1 and input2 and perform subtraction. + * TensorType of the output is the same as that of the input tensor with higher precision. + */ + OH_NN_OPS_SUB = 38, + + /** + * Computes hyperbolic tangent of the input tensor. + * + * Inputs: + * + * * input: n-dimensional tensor. + * + * Outputs: + * + * * output: hyperbolic tangent of the input. The TensorType and tensor shape are the same as those of the input. + */ + OH_NN_OPS_TANH = 39, + + /** + * Copies a tensor the specified times. + * + * Inputs: + * * input: n-dimensional tensor. + * * multiples: number of times that the input tensor is copied in each dimension. The value is a 1D tensor. + * The length m is not less than the number of dimensions, that is, n. + * + * Outputs: + * * An m-dimensional tensor whose TensorType is the same as that of the input. If input and + * multiples have the same length, input and output have the same number of dimensions. + * If the length of multiples is greater than n, 1 is used to fill the input dimension, + * and then the input is copied in each dimension the specified times to obtain the m-dimensional tensor. + */ + OH_NN_OPS_TILE = 40, + + /** + * Transposes data of input 0 based on permutation. + * + * Inputs: + * + * * input: n-dimensional tensor to be transposed. + * * permutation: The value is a 1D tensor whose length is the same as the number of dimensions of input 0. + * + * Outputs: + * + * * output: n-dimensional tensor. TensorType of output 0 is the same as that of input 0, + * and the output shape is determined by the shape and permutation of input 0. + */ + OH_NN_OPS_TRANSPOSE = 41, + + /** + * Calculates the average value in the specified dimension. If keepDims is set to false, the number of dimensions + * is reduced for the input; if keepDims is set to true, the number of dimensions is retained. + * + * Inputs: + * + * * input: n-dimensional input tensor, where n is less than 8. + * * axis: dimension used to calculate the average value. The value is a 1D tensor. The value range of each element in axis is [–n, n). + * + * Parameters: + * + * * keepDims: indicates whether to retain the dimension. The value is a Boolean value. + * + * Outputs: + * + * * output: m-dimensional output tensor whose data type is the same as that of the input. If keepDims is + * false, m==n. If keepDims is true, minput: 4D input tensor. Each element in the input cannot be less than 0. The input layout must be [batchSize, height, width, channels]. + * + * Parameters: + * + * * newHeight: resized height of the 4D tensor. + * * newWidth: resized width of the 4D tensor. + * * preserveAspectRatio: indicates whether to maintain the height/width ratio of input after resizing. + * * coordinateTransformMode: coordinate transformation method used by the resize operation. The value is an int32 integer. + * Currently, the following methods are supported: + * * excludeOutside: an int64 floating point number. When its value is 1, the sampling weight of the part that + * exceeds the boundary of input is set to 0, and other weights are normalized. + * + * Outputs: + * + * * output: n-dimensional tensor, with the same shape and data type as input. + */ + OH_NN_OPS_RESIZE_BILINEAR = 43, + + /** + * Calculates the reciprocal of the square root of a tensor. + * + * Inputs: + * + * * input: n-dimensional tensor, where n is less than 8. Each element of the tensor cannot be less than 0. + * + * Outputs: + * + * * output: n-dimensional tensor, with the same shape and data type as input. + */ + OH_NN_OPS_RSQRT = 44, + + /** + * Reshapes a tensor. + * + * Inputs: + * + * * input: n-dimensional input tensor. + * * InputShape: shape of the output tensor. The value is a 1D constant tensor. + * + * Outputs: + * + * * output: tensor whose data type is the same as that of input and shape is determined by InputShape. + */ + OH_NN_OPS_RESHAPE = 45, + + /** + * Calculates the PReLU activation value of input and weight. + * + * Inputs: + * + * * input: n-dimensional tensor. If n is greater than or equal to 2, inputX must be [BatchSize, ..., Channels]. + * The second dimension is the number of channels. + * * weight: 1D tensor. The length of weight must be 1 or equal to the number of channels. If the length of weight is 1, + * all channels share the same weight. + * If the length of weight is equal to the number of channels, each channel exclusively has a weight. + * If n is less than 2 for inputX, the weight length must be 1. + * + * Outputs: + * + * * output: PReLU activation value of x, with the same shape and data type as inputX. + */ + OH_NN_OPS_PRELU = 46, + + /** + * Calculates the Relu activation value of input. + * + * Inputs: + * + * * input: n-dimensional input tensor. + * + * Outputs: + * + * * output: n-dimensional tensor, with the same data type and shape as the input tensor. + */ + OH_NN_OPS_RELU = 47, + + /** + * Calculates the Relu6 activation value of the input, that is, calculate min(max(x, 0), 6) for each element x in the input. + * + * Inputs: + * + * * input: n-dimensional input tensor. + * + * Outputs: + * + * * output: n-dimensional Relu6 tensor, with the same data type and shape as the input tensor. + */ + OH_NN_OPS_RELU6 = 48, + + /** + * Applies layer normalization for a tensor from the specified axis. + * + * Inputs: + * + * * input: n-dimensional input tensor. + * * gamma: m-dimensional tensor. The dimensions of gamma must be the same as + * the shape of the part of the input tensor to normalize. + * * beta: m-dimensional tensor with the same shape as gamma. + * + * Parameters: + * + * * beginAxis is an NN_INT32 scalar that specifies the axis from which normalization starts. The value range is [1, rank(input)). + * * epsilon is a scalar of NN_FLOAT32. It is a tiny amount in the normalization formula. The common value is 1e-7. + * + * Outputs: + * + * * output: n-dimensional tensor, with the same data type and shape as the input tensor. + */ + OH_NN_OPS_LAYER_NORM = 49, + + /** + * Calculates the accumulated value for a tensor along the specified dimension. + * + * Inputs: + * + * * input: n-dimensional input tensor, where n is less than 8. + * * axis: dimension used to calculate the product. The value is a 1D tensor. The value range of each element in axis is [–n, n). + * + * Parameters: + * + * * keepDims: indicates whether to retain the dimension. The value is a Boolean value. + * When its value is true, the number of output dimensions is the same as that of the input. + * When its value is false, the number of output dimensions is reduced. + * + * Outputs: + * + * * output: m-dimensional output tensor whose data type is the same as that of the input. + * If keepDims is false, m==n. If keepDims is true, mkeepDims is set to false, + * the number of dimensions is reduced for the input; if keepDims is set to true, the number of dimensions is retained. + * + * Inputs: + * + * * A n-dimensional input tensor, where n is less than 8. + * * A 1D tensor specifying the dimension used to operate the logical OR. The value range of each element in axis is [–n, n). + * + * Parameters: + * + * * keepDims: indicates whether to retain the dimension. The value is a Boolean value. + * + * Outputs: + * * output: m-dimensional output tensor whose data type is the same as that of the input. + * If keepDims is false, m==n. If keepDims is true, minput: n-dimensional tensor. + * + * Parameters: + * + * * src_t: data type of the input. + * * dst_t: data type of the output. + * + * Outputs: + * + * * output: n-dimensional tensor. The data type is determined by input2. + * The output shape is the same as the input shape. + */ + OH_NN_OPS_QUANT_DTYPE_CAST = 52, + + /** + * Obtains the values and indices of the largest k entries in the last dimension. + * + * Inputs: + * + * * input: n-dimensional tensor. + * * input k: first k records of data and their indices. + * + * Parameters: + * + * * sorted: order of sorting. The value true means descending and false means ascending. + * + * Outputs: + * + * * output0: largest k elements in each slice of the last dimension. + * * output1: index of the value in the last dimension of the input. + */ + OH_NN_OPS_TOP_K = 53, + + /** + * Returns the index of the maximum tensor value across axes. + * + * Inputs: + * + * * input: n-dimensional tensor (N, ∗), where ∗ means any number of additional dimensions. + * + * Parameters: + * + * * axis: dimension for calculating the index of the maximum. + * * keep_dims: indicates whether to maintain the input tensor dimension. The value is a Boolean value. + * + * Outputs: + * * output: index of the maximum input tensor on the axis. The value is a tensor. + */ + OH_NN_OPS_ARG_MAX = 54, + + /** + * Adds a dimension based on the value of axis. + * + * Inputs: + * * input: n-dimensional tensor. + * + * Parameters: + * + * * axis: dimension to be added. The value of axis can be an integer or an array of integers. + * The value range of the integer is [-n, n). + * + * Outputs: + * * output: output tensor. + */ + OH_NN_OPS_UNSQUEEZE = 55, + + /** + * Gaussian error linear unit activation function. The int quantization input is not supported. output=0.5∗input∗(1+tanh(input/2)) + * + * Inputs: + * * An n-dimensional input tensor. + * + * Outputs: + * * output: n-dimensional tensor, with the same data type and shape as the input tensor. + */ + OH_NN_OPS_GELU = 56, +} OH_NN_OperationType; + +/** + * @brief Enumerates the tensor data types. + * + * Tensors are usually used to set the input, output, and operator parameters of a model. When a tensor is used + * as the input or output of a model (or operator), set the tensor type to {@link OH_NN_TENSOR}. + * When the tensor is used as an operator parameter, select an enumerated value other than {@link OH_NN_TENSOR} as the tensor type. + * Assume that the pad parameter of the {@link OH_NN_OPS_CONV2D} operator is being set. + * You need to set the type attribute of the {@link OH_NN_Tensor} instance to {@link OH_NN_CONV2D_PAD}. + * The settings of other operator parameters are similar. The enumerated values are named + * in the format OH_NN_{Operator name}_{Attribute name}. + * + * @since 9 + * @version 1.0 + */ +typedef enum { + /** This enumerated value is used when the tensor is used as the input or output of a model (or operator). */ + OH_NN_TENSOR = 0, + + /** This enumerated value is used when the tensor is used as the activationType parameter of the Add operator. */ + OH_NN_ADD_ACTIVATIONTYPE = 1, + + /** This enumerated value is used when the tensor is used as the kernel_size parameter of the AvgPool operator. */ + OH_NN_AVG_POOL_KERNEL_SIZE = 2, + /** This enumerated value is used when the tensor is used as the stride parameter of the AvgPool operator. */ + OH_NN_AVG_POOL_STRIDE = 3, + /** This enumerated value is used when the tensor is used as the pad_mode parameter of the AvgPool operator. */ + OH_NN_AVG_POOL_PAD_MODE = 4, + /** This enumerated value is used when the tensor is used as the pad parameter of the AvgPool operator. */ + OH_NN_AVG_POOL_PAD = 5, + /** This enumerated value is used when the tensor is used as the activation_type parameter of the AvgPool operator. */ + OH_NN_AVG_POOL_ACTIVATION_TYPE = 6, + + /** This enumerated value is used when the tensor is used as the eosilon parameter of the BatchNorm operator. */ + OH_NN_BATCH_NORM_EPSILON = 7, + + /** This enumerated value is used when the tensor is used as the blockSize parameter of the BatchToSpaceND operator. */ + OH_NN_BATCH_TO_SPACE_ND_BLOCKSIZE = 8, + /** This enumerated value is used when the tensor is used as the crops parameter of the BatchToSpaceND operator. */ + OH_NN_BATCH_TO_SPACE_ND_CROPS = 9, + + /** This enumerated value is used when the tensor is used as the axis parameter of the Concat operator. */ + OH_NN_CONCAT_AXIS = 10, + + /** This enumerated value is used when the tensor is used as the strides parameter of the Conv2D operator. */ + OH_NN_CONV2D_STRIDES = 11, + /** This enumerated value is used when the tensor is used as the pad parameter of the Conv2D operator. */ + OH_NN_CONV2D_PAD = 12, + /** This enumerated value is used when the tensor is used as the dilation parameter of the Conv2D operator. */ + OH_NN_CONV2D_DILATION = 13, + /** This enumerated value is used when the tensor is used as the padMode parameter of the Conv2D operator. */ + OH_NN_CONV2D_PAD_MODE = 14, + /** This enumerated value is used when the tensor is used as the activationType parameter of the Conv2D operator. */ + OH_NN_CONV2D_ACTIVATION_TYPE = 15, + /** This enumerated value is used when the tensor is used as the group parameter of the Conv2D operator. */ + OH_NN_CONV2D_GROUP = 16, + + /** This enumerated value is used when the tensor is used as the strides parameter of the Conv2DTranspose operator. */ + OH_NN_CONV2D_TRANSPOSE_STRIDES = 17, + /** This enumerated value is used when the tensor is used as the pad parameter of the Conv2DTranspose operator. */ + OH_NN_CONV2D_TRANSPOSE_PAD = 18, + /** This enumerated value is used when the tensor is used as the dilation parameter of the Conv2DTranspose operator. */ + OH_NN_CONV2D_TRANSPOSE_DILATION = 19, + /** This enumerated value is used when the tensor is used as the outputPaddings parameter of the Conv2DTranspose operator. */ + OH_NN_CONV2D_TRANSPOSE_OUTPUT_PADDINGS = 20, + /** This enumerated value is used when the tensor is used as the padMode parameter of the Conv2DTranspose operator. */ + OH_NN_CONV2D_TRANSPOSE_PAD_MODE = 21, + /** This enumerated value is used when the tensor is used as the activationType parameter of the Conv2DTranspose operator. */ + OH_NN_CONV2D_TRANSPOSE_ACTIVATION_TYPE = 22, + /** This enumerated value is used when the tensor is used as the group parameter of the Conv2DTranspose operator. */ + OH_NN_CONV2D_TRANSPOSE_GROUP = 23, + + /** This enumerated value is used when the tensor is used as the strides parameter of the DepthwiseConv2dNative operator. */ + OH_NN_DEPTHWISE_CONV2D_NATIVE_STRIDES = 24, + /** This enumerated value is used when the tensor is used as the pad parameter of the DepthwiseConv2dNative operator. */ + OH_NN_DEPTHWISE_CONV2D_NATIVE_PAD = 25, + /** This enumerated value is used when the tensor is used as the dilation parameter of the DepthwiseConv2dNative operator. */ + OH_NN_DEPTHWISE_CONV2D_NATIVE_DILATION = 26, + /** This enumerated value is used when the tensor is used as the padMode parameter of the DepthwiseConv2dNative operator. */ + OH_NN_DEPTHWISE_CONV2D_NATIVE_PAD_MODE = 27, + /** This enumerated value is used when the tensor is used as the activationType parameter of the DepthwiseConv2dNative operator. */ + OH_NN_DEPTHWISE_CONV2D_NATIVE_ACTIVATION_TYPE = 28, + + /** This enumerated value is used when the tensor is used as the activationType parameter of the Div operator. */ + OH_NN_DIV_ACTIVATIONTYPE = 29, + + /** This enumerated value is used when the tensor is used as the mode parameter of the Eltwise operator. */ + OH_NN_ELTWISE_MODE = 30, + + /** This enumerated value is used when the tensor is used as the axis parameter of the FullConnection operator. */ + OH_NN_FULL_CONNECTION_AXIS = 31, + /** This enumerated value is used when the tensor is used as the activationType parameter of the FullConnection operator. */ + OH_NN_FULL_CONNECTION_ACTIVATIONTYPE = 32, + + /** This enumerated value is used when the tensor is used as the transposeA parameter of the Matmul operator. */ + OH_NN_MATMUL_TRANSPOSE_A = 33, + /** This enumerated value is used when the tensor is used as the transposeB parameter of the Matmul operator. */ + OH_NN_MATMUL_TRANSPOSE_B = 34, + /** This enumerated value is used when the tensor is used as the activationType parameter of the Matmul operator. */ + OH_NN_MATMUL_ACTIVATION_TYPE = 35, + + /** This enumerated value is used when the tensor is used as the kernel_size parameter of the MaxPool operator. */ + OH_NN_MAX_POOL_KERNEL_SIZE = 36, + /** This enumerated value is used when the tensor is used as the stride parameter of the MaxPool operator. */ + OH_NN_MAX_POOL_STRIDE = 37, + /** This enumerated value is used when the tensor is used as the pad_mode parameter of the MaxPool operator. */ + OH_NN_MAX_POOL_PAD_MODE = 38, + /** This enumerated value is used when the tensor is used as the pad parameter of the MaxPool operator. */ + OH_NN_MAX_POOL_PAD = 39, + /** This enumerated value is used when the tensor is used as the activation_type parameter of the MaxPool operator. */ + OH_NN_MAX_POOL_ACTIVATION_TYPE = 40, + + /** This enumerated value is used when the tensor is used as the activationType parameter of the Mul operator. */ + OH_NN_MUL_ACTIVATION_TYPE = 41, + + /** This enumerated value is used when the tensor is used as the axis parameter of the OneHot operator. */ + OH_NN_ONE_HOT_AXIS = 42, + + /** This enumerated value is used when the tensor is used as the constant_value parameter of the Pad operator. */ + OH_NN_PAD_CONSTANT_VALUE = 43, + + /** This enumerated value is used when the tensor is used as the activationType parameter of the Scale operator. */ + OH_NN_SCALE_ACTIVATIONTYPE = 44, + /** This enumerated value is used when the tensor is used as the axis parameter of the Scale operator. */ + OH_NN_SCALE_AXIS = 45, + + /** This enumerated value is used when the tensor is used as the axis parameter of the Softmax operator. */ + OH_NN_SOFTMAX_AXIS = 46, + + /** This enumerated value is used when the tensor is used as the BlockShape parameter of the SpaceToBatchND operator. */ + OH_NN_SPACE_TO_BATCH_ND_BLOCK_SHAPE = 47, + /** This enumerated value is used when the tensor is used as the Paddings parameter of the SpaceToBatchND operator. */ + OH_NN_SPACE_TO_BATCH_ND_PADDINGS = 48, + + /** This enumerated value is used when the tensor is used as the Axis parameter of the Split operator. */ + OH_NN_SPLIT_AXIS = 49, + /** This enumerated value is used when the tensor is used as the OutputNum parameter of the Split operator. */ + OH_NN_SPLIT_OUTPUT_NUM = 50, + /** This enumerated value is used when the tensor is used as the SizeSplits parameter of the Split operator. */ + OH_NN_SPLIT_SIZE_SPLITS = 51, + + /** This enumerated value is used when the tensor is used as the Axis parameter of the Squeeze operator. */ + OH_NN_SQUEEZE_AXIS = 52, + + /** This enumerated value is used when the tensor is used as the Axis parameter of the Stack operator. */ + OH_NN_STACK_AXIS = 53, + + /** This enumerated value is used when the tensor is used as the BeginMask parameter of the StridedSlice operator. */ + OH_NN_STRIDED_SLICE_BEGIN_MASK = 54, + /** This enumerated value is used when the tensor is used as the EndMask parameter of the StridedSlice operator. */ + OH_NN_STRIDED_SLICE_END_MASK = 55, + /** This enumerated value is used when the tensor is used as the EllipsisMask parameter of the StridedSlice operator. */ + OH_NN_STRIDED_SLICE_ELLIPSIS_MASK = 56, + /** This enumerated value is used when the tensor is used as the NewAxisMask parameter of the StridedSlice operator. */ + OH_NN_STRIDED_SLICE_NEW_AXIS_MASK = 57, + /** This enumerated value is used when the tensor is used as the ShrinkAxisMask parameter of the StridedSlice operator. */ + OH_NN_STRIDED_SLICE_SHRINK_AXIS_MASK = 58, + + /** This enumerated value is used when the tensor is used as the ActivationType parameter of the Sub operator. */ + OH_NN_SUB_ACTIVATIONTYPE = 59, + + /** This enumerated value is used when the tensor is used as the keep_dims parameter of the ReduceMean operator. */ + OH_NN_REDUCE_MEAN_KEEP_DIMS = 60, + + /** This enumerated value is used when the tensor is used as the new_height parameter of the ResizeBilinear operator. */ + OH_NN_RESIZE_BILINEAR_NEW_HEIGHT = 61, + /** This enumerated value is used when the tensor is used as the new_width parameter of the ResizeBilinear operator. */ + OH_NN_RESIZE_BILINEAR_NEW_WIDTH = 62, + /** This enumerated value is used when the tensor is used as the preserve_aspect_ratio parameter of the ResizeBilinear operator. */ + OH_NN_RESIZE_BILINEAR_PRESERVE_ASPECT_RATIO = 63, + /** This enumerated value is used when the tensor is used as the coordinate_transform_mode parameter of the ResizeBilinear operator. */ + OH_NN_RESIZE_BILINEAR_COORDINATE_TRANSFORM_MODE = 64, + /** This enumerated value is used when the tensor is used as the exclude_outside parameter of the ResizeBilinear operator. */ + OH_NN_RESIZE_BILINEAR_EXCLUDE_OUTSIDE = 65, + + /** This enumerated value is used when the tensor is used as the beginNormAxis parameter of the LayerNorm operator. */ + OH_NN_LAYER_NORM_BEGIN_NORM_AXIS = 66, + /** This enumerated value is used when the tensor is used as the epsilon parameter of the LayerNorm operator. */ + OH_NN_LAYER_NORM_EPSILON = 67, + /** This enumerated value is used when the tensor is used as the beginParamsAxis parameter of the LayerNorm operator. */ + OH_NN_LAYER_NORM_BEGIN_PARAM_AXIS = 68, + /** This enumerated value is used when the tensor is used as the elementwiseAffine parameter of the LayerNorm operator. */ + OH_NN_LAYER_NORM_ELEMENTWISE_AFFINE = 69, + + /** This enumerated value is used when the tensor is used as the keep_dims parameter of the ReduceProd operator. */ + OH_NN_REDUCE_PROD_KEEP_DIMS = 70, + + /** This enumerated value is used when the tensor is used as the keep_dims parameter of the ReduceAll operator. */ + OH_NN_REDUCE_ALL_KEEP_DIMS = 71, + + /** This enumerated value is used when the tensor is used as the src_t parameter of the QuantDTypeCast operator. */ + OH_NN_QUANT_DTYPE_CAST_SRC_T = 72, + /** This enumerated value is used when the tensor is used as the dst_t parameter of the QuantDTypeCast operator. */ + OH_NN_QUANT_DTYPE_CAST_DST_T = 73, + + /** This enumerated value is used when the tensor is used as the Sorted parameter of the Topk operator. */ + OH_NN_TOP_K_SORTED = 74, + + /** This enumerated value is used when the tensor is used as the axis parameter of the ArgMax operator. */ + OH_NN_ARG_MAX_AXIS = 75, + /** This enumerated value is used when the tensor is used as the keepDims parameter of the ArgMax operator. */ + OH_NN_ARG_MAX_KEEPDIMS = 76, + + /** This enumerated value is used when the tensor is used as the Axis parameter of the Unsqueeze operator. */ + OH_NN_UNSQUEEZE_AXIS = 77, +} OH_NN_TensorType; + +/** + * @brief This structure is used to store a 32-bit unsigned integer array. + * + * @since 9 + * @version 1.0 + */ +typedef struct OH_NN_UInt32Array { + /** Pointer to the unsigned integer array */ + uint32_t *data; + /** Array length */ + uint32_t size; +} OH_NN_UInt32Array; + +/** + * @brief Quantization information. + * + * In quantization scenarios, the 32-bit floating-point data type is quantized into the fixed-point data type according to the following formula: + \f[ + q = clamp(round(\frac{r}{s}+z), q_{min}, q_{max}) + \f] + * s and z are quantization parameters, which are stored by scale and zeroPoint in {@link OH_NN_QuantParam}. + * r is a floating point number, q is the quantization result, q_min is the lower bound of the quantization result, and + * q_max is an upper bound of a quantization result. The calculation method is as follows: + * + \f[ + \text{clamp}(x,min,max) = + \begin{cases} + q_{min} = -(1 << (numBits - 1)) \\ + q_{max} = (1 << (numBits - 1)) \\ + \end{cases} + \f] + * The clamp function is defined as follows: + \f[ + \text{clamp}(x,min,max) = + \begin{cases} + \text{max} & \text{ if } x > \text{ max } \\ + \text{min} & \text{ if } x < \text{ min } \\ + x & \text{ otherwise } \\ + \end{cases} + \f] + * + * @since 9 + * @version 1.0 + */ +typedef struct OH_NN_QuantParam { + /** Specifies the length of the numBits, scale, and zeroPoint arrays. In the per-layer quantization scenario, + * quantCount is usually set to 1. That is, all channels of a tensor share a set of quantization parameters. + * In the per-channel quantization scenario, quantCount is usually the same as the number of tensor channels, + * and each channel uses its own quantization parameters. + */ + uint32_t quantCount; + /** Number of quantization bits */ + const uint32_t *numBits; + /** Pointer to the scale data in the quantization formula */ + const double *scale; + /** Pointer to the zero point data in the quantization formula */ + const int32_t *zeroPoint; +} OH_NN_QuantParam; + +/** + * @brief Defines the tensor structure. + * + * It is usually used to construct data nodes and operator parameters in a model graph. When constructing a tensor, + * you need to specify the data type, number of dimensions, dimension information, and quantization information. + * + * @since 9 + * @version 1.0 + */ +typedef struct OH_NN_Tensor { + /** Data type of the specified tensor. The value must be an enumerated value of {@link OH_NN_DataType}. */ + OH_NN_DataType dataType; + /** Number of dimensions of the specified tensor */ + uint32_t dimensionCount; + /** Dimension information (shape) of the specified tensor*/ + const int32_t *dimensions; + /** Quantization information of the specified tensor. The data type must be {@link OH_NN_QuantParam}. */ + const OH_NN_QuantParam *quantParam; + /** Specifies the tensor type. The value of type is related to the tensor usage. + * When the tensor is used as the input or output of the model, set type to {@link OH_NN_TENSOR}. + * When a tensor is used as an operator parameter, select any enumerated value except {@link OH_NN_TENSOR} from {@link OH_NN_TensorType}. + */ + OH_NN_TensorType type; +} OH_NN_Tensor; + +/** + * @brief Defines the memory structure. + * + * @since 9 + * @version 1.0 + */ +typedef struct OH_NN_Memory { + /** Pointer to the shared memory. The shared memory is usually allocated by the underlying hardware driver. */ + void * const data; + /** Records the length of the shared memory, in bytes. */ + const size_t length; +} OH_NN_Memory; + +#ifdef __cplusplus +} +#endif // __cplusplus + +/** @} */ +#endif // NEURAL_NETWORK_RUNTIME_TYPE_H diff --git a/arkui/ace_engine/native/BUILD.gn b/arkui/ace_engine/native/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..6ce3291ac1b3c486c315adb56c202139c6eabefd --- /dev/null +++ b/arkui/ace_engine/native/BUILD.gn @@ -0,0 +1,74 @@ +# Copyright (c) 2021-2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/arkui/ace_engine/ace_config.gni") + +if (!is_cross_platform_build) { + ohos_ndk_headers("ace_header") { + dest_dir = "$ndk_headers_out_dir/ace/xcomponent/" + sources = [ + "native_interface_xcomponent.h", + "native_xcomponent_key_event.h", + ] + } + + ohos_ndk_library("libace_ndk") { + ndk_description_file = "./libace.ndk.json" + min_compact_version = "7" + output_name = "ace_ndk" + } +} + +ohos_shared_library("ace_ndk") { + if (current_os == "ohos") { + sanitize = { + integer_overflow = true + boundary_sanitize = true + debug = ace_sanitize_debug + } + } + include_dirs = [ + "//foundation/arkui/ace_engine", + "//foundation/arkui/ace_engine/frameworks", + "//foundation/arkui/ace_engine/interfaces/native", + ] + + sources = [ + "//foundation/arkui/ace_engine/frameworks/core/components/xcomponent/native_interface_xcomponent_impl.cpp", + "native_interface_xcomponent.cpp", + ] + + deps = [ "//third_party/bounds_checking_function:libsec_shared" ] + + cflags_cc = [ "-Wno-missing-braces" ] + + if (target_os == "ohos") { + sources += [ "$ace_root/adapter/ohos/osal/log_wrapper.cpp" ] + deps += [ ":libace_ndk" ] + external_deps = [ "hilog:libhilog" ] + version_script = + get_label_info(":libace_ndk", "target_gen_dir") + "/" + + get_label_info(":libace_ndk", "name") + version_script_suffix + } else if (target_os == "android") { + sources += [ "$ace_root/adapter/android/osal/log_wrapper.cpp" ] + libs = [ "log" ] + } + + subsystem_name = ace_engine_subsystem + part_name = ace_engine_part +} + +group("ace_packages_ndk") { + deps = [ ":ace_ndk" ] +} diff --git a/arkui/ace_engine/native/libace.ndk.json b/arkui/ace_engine/native/libace.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..bcc196abdbfd6fe9b0d5f58c9c01e04d13ac4b67 --- /dev/null +++ b/arkui/ace_engine/native/libace.ndk.json @@ -0,0 +1,82 @@ +[ + { + "first_introduced": "8", + "name": "OH_NativeXComponent_GetXComponentId" + }, + { + "first_introduced": "8", + "name": "OH_NativeXComponent_GetXComponentSize" + }, + { + "first_introduced": "8", + "name": "OH_NativeXComponent_RegisterCallback" + }, + { + "first_introduced": "8", + "name": "OH_NativeXComponent_GetTouchEvent" + }, + { + "first_introduced": "8", + "name": "OH_NativeXComponent_GetXComponentOffset" + }, + { + "first_introduced": "9", + "name": "OH_NativeXComponent_GetMouseEvent" + }, + { + "first_introduced": "9", + "name": "OH_NativeXComponent_RegisterMouseEventCallback" + }, + { + "first_introduced": "9", + "name": "OH_NativeXComponent_GetTouchPointToolType" + }, + { + "first_introduced": "9", + "name": "OH_NativeXComponent_GetTouchPointTiltX" + }, + { + "first_introduced": "9", + "name": "OH_NativeXComponent_GetTouchPointTiltY" + }, + { + "first_introduced": "10", + "name": "OH_NativeXComponent_RegisterFocusEventCallback" + }, + { + "first_introduced": "10", + "name": "OH_NativeXComponent_RegisterKeyEventCallback" + }, + { + "first_introduced": "10", + "name": "OH_NativeXComponent_RegisterBlurEventCallback" + }, + { + "first_introduced": "10", + "name": "OH_NativeXComponent_GetKeyEvent" + }, + { + "first_introduced": "10", + "name": "OH_NativeXComponent_GetKeyEventAction" + }, + { + "first_introduced": "10", + "name": "OH_NativeXComponent_GetKeyEventCode" + }, + { + "first_introduced": "10", + "name": "OH_NativeXComponent_GetKeyEventSourceType" + }, + { + "first_introduced": "10", + "name": "OH_NativeXComponent_GetKeyEventDeviceId" + }, + { + "first_introduced": "10", + "name": "OH_NativeXComponent_GetKeyEventTimestamp" + }, + { + "first_introduced": "10", + "name": "OH_NativeXComponent_GetHistoricalPoints" + } +] \ No newline at end of file diff --git a/arkui/ace_engine/native/native_interface_xcomponent.h b/arkui/ace_engine/native/native_interface_xcomponent.h new file mode 100644 index 0000000000000000000000000000000000000000..fbc9a7f7181f25cc549945e47d48421b7b1fd150 --- /dev/null +++ b/arkui/ace_engine/native/native_interface_xcomponent.h @@ -0,0 +1,579 @@ +/* + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup OH_NativeXComponent Native XComponent + * @{ + * + * @brief Describes the surface and touch event held by the ArkUI XComponent, which can be used for the EGL/OpenGL ES\n + * and media data input and displayed on the ArkUI XComponent. + * + * @since 8 + * @version 1.0 + */ + +/** + * @file native_interface_xcomponent.h + * + * @brief Declares APIs for accessing a Native XComponent. + * + * @since 8 + * @version 1.0 + */ + +#ifndef _NATIVE_INTERFACE_XCOMPONENT_H_ +#define _NATIVE_INTERFACE_XCOMPONENT_H_ + +#include +#include +#include + +#include "native_xcomponent_key_event.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define OH_NATIVE_XCOMPONENT_OBJ ("__NATIVE_XCOMPONENT_OBJ__") + +const uint32_t OH_XCOMPONENT_ID_LEN_MAX = 128; +const uint32_t OH_MAX_TOUCH_POINTS_NUMBER = 10; + +/** + * @brief Enumerates the API access states. + * + * @since 8 + * @version 1.0 + */ +enum { + /** Successful. */ + OH_NATIVEXCOMPONENT_RESULT_SUCCESS = 0, + /** Failed. */ + OH_NATIVEXCOMPONENT_RESULT_FAILED = -1, + /** Invalid parameters. */ + OH_NATIVEXCOMPONENT_RESULT_BAD_PARAMETER = -2, +}; + +typedef enum { + /** Trigger a touch event when a finger is pressed. */ + OH_NATIVEXCOMPONENT_DOWN = 0, + /** Trigger a touch event when a finger is lifted. */ + OH_NATIVEXCOMPONENT_UP, + /** Trigger a touch event when a finger moves on the screen in pressed state. */ + OH_NATIVEXCOMPONENT_MOVE, + /** Trigger an event when a touch event is canceled. */ + OH_NATIVEXCOMPONENT_CANCEL, + /** Invalid touch type. */ + OH_NATIVEXCOMPONENT_UNKNOWN, +} OH_NativeXComponent_TouchEventType; + +/** + * @brief Represents the touch point tool type. + * + * @since 9 + * @version 1.0 + */ +typedef enum { + /** Indicates invalid tool type. */ + OH_NATIVEXCOMPONENT_TOOL_TYPE_UNKNOWN = 0, + /** Indicates a finger. */ + OH_NATIVEXCOMPONENT_TOOL_TYPE_FINGER, + /** Indicates a stylus. */ + OH_NATIVEXCOMPONENT_TOOL_TYPE_PEN, + /** Indicates a eraser. */ + OH_NATIVEXCOMPONENT_TOOL_TYPE_RUBBER, + /** Indicates a brush. */ + OH_NATIVEXCOMPONENT_TOOL_TYPE_BRUSH, + /** Indicates a pencil. */ + OH_NATIVEXCOMPONENT_TOOL_TYPE_PENCIL, + /** Indicates a brush. */ + OH_NATIVEXCOMPONENT_TOOL_TYPE_AIRBRUSH, + /** Indicates a mouse. */ + OH_NATIVEXCOMPONENT_TOOL_TYPE_MOUSE, + /** Indicates a lens. */ + OH_NATIVEXCOMPONENT_TOOL_TYPE_LENS, +} OH_NativeXComponent_TouchPointToolType; + +/** + * @brief Represents the touch event source type. + * + * @since 9 + * @version 1.0 + */ +typedef enum { + /** Indicates an unknown input source type. */ + OH_NATIVEXCOMPONENT_SOURCE_TYPE_UNKNOWN = 0, + /** Indicates that the input source generates a mouse multi-touch event. */ + OH_NATIVEXCOMPONENT_SOURCE_TYPE_MOUSE, + /** Indicates that the input source generates a touchscreen multi-touch event. */ + OH_NATIVEXCOMPONENT_SOURCE_TYPE_TOUCHSCREEN, + /** Indicates that the input source generates a touchpad multi-touch event. */ + OH_NATIVEXCOMPONENT_SOURCE_TYPE_TOUCHPAD, + /** Indicates that the input source generates a joystick multi-touch event. */ + OH_NATIVEXCOMPONENT_SOURCE_TYPE_JOYSTICK, + /** + * @brief Indicates that the input source generates a keyboard event. + * + * @since 10 + * @version 1.0 + */ + OH_NATIVEXCOMPONENT_SOURCE_TYPE_KEYBOARD, +} OH_NativeXComponent_EventSourceType; + +/** + * @brief Represents the mouse event action. + * + * @since 9 + * @version 1.0 + */ +typedef enum { + OH_NATIVEXCOMPONENT_MOUSE_NONE = 0, + OH_NATIVEXCOMPONENT_MOUSE_PRESS, + OH_NATIVEXCOMPONENT_MOUSE_RELEASE, + OH_NATIVEXCOMPONENT_MOUSE_MOVE, +} OH_NativeXComponent_MouseEventAction; + +/** + * @brief Represents the mouse event button. + * + * @since 9 + * @version 1.0 + */ +typedef enum { + OH_NATIVEXCOMPONENT_NONE_BUTTON = 0, + OH_NATIVEXCOMPONENT_LEFT_BUTTON = 0x01, + OH_NATIVEXCOMPONENT_RIGHT_BUTTON = 0x02, + OH_NATIVEXCOMPONENT_MIDDLE_BUTTON = 0x04, + OH_NATIVEXCOMPONENT_BACK_BUTTON = 0x08, + OH_NATIVEXCOMPONENT_FORWARD_BUTTON = 0x10, +} OH_NativeXComponent_MouseEventButton; + +/** + * @brief Represents the source tool type of TouchEvent + * + * @since 10 + * @version 1.0 + */ +typedef enum { + OH_NATIVEXCOMPONENT_SOURCETOOL_UNKNOWN = 0, + OH_NATIVEXCOMPONENT_SOURCETOOL_FINGER = 1, + OH_NATIVEXCOMPONENT_SOURCETOOL_PEN = 2, + OH_NATIVEXCOMPONENT_SOURCETOOL_RUBBER = 3, + OH_NATIVEXCOMPONENT_SOURCETOOL_BRUSH = 4, + OH_NATIVEXCOMPONENT_SOURCETOOL_PENCIL = 5, + OH_NATIVEXCOMPONENT_SOURCETOOL_AIRBRUSH = 6, + OH_NATIVEXCOMPONENT_SOURCETOOL_MOUSE = 7, + OH_NATIVEXCOMPONENT_SOURCETOOL_LENS = 8, + OH_NATIVEXCOMPONENT_SOURCETOOL_TOUCHPAD = 9, +} OH_NativeXComponent_TouchEvent_SourceTool; + +typedef struct { + /** Unique identifier of a finger. */ + int32_t id; + /** X coordinate of the touch point relative to the left edge of the screen. */ + float screenX; + /** Y coordinate of the touch point relative to the upper edge of the screen. */ + float screenY; + /** X coordinate of the touch point relative to the left edge of the element to touch. */ + float x; + /** Y coordinate of the touch point relative to the upper edge of the element to touch. */ + float y; + /** Touch type of the touch event. */ + OH_NativeXComponent_TouchEventType type; + /** Contact area between the finger pad and the screen. */ + double size; + /** Pressure of the current touch event. */ + float force; + /** Timestamp of the current touch event. */ + int64_t timeStamp; + /** The angle betweenprojection on plane-X-Y and axis-Z of the current touch event. */ + float titlX; + /** The angle betweenprojection on plane-Y-Z and axis-Z of the current touch event. */ + float titlY; + /** The sourceTool of the current touch event. */ + OH_NativeXComponent_TouchEvent_SourceTool sourceTool; +} OH_NativeXComponent_HistoricalPoint; + +typedef struct { + /** Unique identifier of a finger. */ + int32_t id; + /** X coordinate of the touch point relative to the left edge of the screen. */ + float screenX; + /** Y coordinate of the touch point relative to the upper edge of the screen. */ + float screenY; + /** X coordinate of the touch point relative to the left edge of the element to touch. */ + float x; + /** Y coordinate of the touch point relative to the upper edge of the element to touch. */ + float y; + /** Touch type of the touch event. */ + OH_NativeXComponent_TouchEventType type; + /** Contact area between the finger pad and the screen. */ + double size; + /** Pressure of the current touch event. */ + float force; + /** Timestamp of the current touch event. */ + int64_t timeStamp; + /** Whether the current point is pressed. */ + bool isPressed; +} OH_NativeXComponent_TouchPoint; + +// Represents the touch point information. +typedef struct { + /** Unique identifier of a finger. */ + int32_t id; + /** X coordinate of the touch point relative to the left edge of the screen. */ + float screenX; + /** Y coordinate of the touch point relative to the upper edge of the screen. */ + float screenY; + /** X coordinate of the touch point relative to the left edge of the element to touch. */ + float x; + /** Y coordinate of the touch point relative to the upper edge of the element to touch. */ + float y; + /** Touch type of the touch event. */ + OH_NativeXComponent_TouchEventType type; + /** Contact area between the finger pad and the screen. */ + double size; + /** Pressure of the current touch event. */ + float force; + /** ID of the device where the current touch event is generated. */ + int64_t deviceId; + /** Timestamp of the current touch event. */ + int64_t timeStamp; + /** Array of the current touch points. */ + OH_NativeXComponent_TouchPoint touchPoints[OH_MAX_TOUCH_POINTS_NUMBER]; + /** Number of current touch points. */ + uint32_t numPoints; +} OH_NativeXComponent_TouchEvent; + +/** + * @brief Represents the mouse event information. + * + * @since 9 + * @version 1.0 + */ +typedef struct { + /** X coordinate of the mouse point relative to the left edge of the element to mouse. */ + float x; + /** Y coordinate of the mouse point relative to the upper edge of the element to mouse. */ + float y; + /** X coordinate of the mouse point relative to the left edge of the screen. */ + float screenX; + /** Y coordinate of the mouse point relative to the upper edge of the screen. */ + float screenY; + /** Timestamp of the current mouse event. */ + int64_t timestamp; + /** Mouse event action. */ + OH_NativeXComponent_MouseEventAction action; + /** Mouse event button. */ + OH_NativeXComponent_MouseEventButton button; +} OH_NativeXComponent_MouseEvent; + +/** + * @brief Provides an encapsulated OH_NativeXComponent instance. + * + * @since 8 + * @version 1.0 + */ +typedef struct OH_NativeXComponent OH_NativeXComponent; + +/** + * @brief Registers the surface lifecycle and touch event callbacks. + * + * @since 8 + * @version 1.0 + */ +typedef struct OH_NativeXComponent_Callback { + /** Called when the surface is created. */ + void (*OnSurfaceCreated)(OH_NativeXComponent* component, void* window); + /** Called when the surface is changed. */ + void (*OnSurfaceChanged)(OH_NativeXComponent* component, void* window); + /** Called when the surface is destroyed. */ + void (*OnSurfaceDestroyed)(OH_NativeXComponent* component, void* window); + /** Called when a touch event is triggered. */ + void (*DispatchTouchEvent)(OH_NativeXComponent* component, void* window); +} OH_NativeXComponent_Callback; + +/** + * @brief Registers the mouse event callbacks. + * + * @since 9 + * @version 1.0 + */ +typedef struct OH_NativeXComponent_MouseEvent_Callback { + /** Called when a mouse event is triggered. */ + void (*DispatchMouseEvent)(OH_NativeXComponent* component, void* window); + /** Called when a hover event is triggered. */ + void (*DispatchHoverEvent)(OH_NativeXComponent* component, bool isHover); +} OH_NativeXComponent_MouseEvent_Callback; + +struct OH_NativeXComponent_KeyEvent; +/** + * @brief Provides an encapsulated OH_NativeXComponent_KeyEvent instance. + * + * @since 10 + * @version 1.0 + */ +typedef struct OH_NativeXComponent_KeyEvent OH_NativeXComponent_KeyEvent; + +/** + * @brief Obtains the ID of the ArkUI XComponent. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param id Indicates the char buffer to keep the ID of this OH_NativeXComponent instance.\n + * Notice that a null-terminator will be appended to the char buffer, so the size of the\n + * char buffer should be at least as large as the size of the real id length plus 1.\n + * It is recommended that the size of the char buffer be [OH_XCOMPONENT_ID_LEN_MAX + 1]. + * @param size Indicates the pointer to the length of id, which you can set and receive. + * @return Returns the status code of the execution. + * @since 8 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetXComponentId(OH_NativeXComponent* component, char* id, uint64_t* size); + +/** + * @brief Obtains the size of the surface held by the ArkUI XComponent. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param window Indicates the native window handler. + * @param width Indicates the pointer to the width of the current surface. + * @param height Indicates the pointer to the height of the current surface. + * @return Returns the status code of the execution. + * @since 8 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetXComponentSize( + OH_NativeXComponent* component, const void* window, uint64_t* width, uint64_t* height); + +/** + * @brief Obtains the offset of the surface held by the ArkUI XComponent. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param window Indicates the native window handler. + * @param x Indicates the pointer to the x coordinate of the current surface. + * @param y Indicates the pointer to the y coordinate of the current surface. + * @return Returns the status code of the execution. + * @since 8 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetXComponentOffset( + OH_NativeXComponent* component, const void* window, double* x, double* y); + +/** + * @brief Obtains the touch event dispatched by the ArkUI XComponent. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param window Indicates the native window handler. + * @param touchEvent Indicates the pointer to the current touch event. + * @return Returns the status code of the execution. + * @since 8 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetTouchEvent( + OH_NativeXComponent* component, const void* window, OH_NativeXComponent_TouchEvent* touchEvent); + +/** + * @brief Obtains the touch pointer tool type by the ArkUI XComponent. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param pointIndex Indicates the pointer index in the touchPoints. + * @param toolType Indicates the tool Type of the pointer. + * @return Returns the status code of the execution. + * @since 9 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetTouchPointToolType( + OH_NativeXComponent* component, uint32_t pointIndex, OH_NativeXComponent_TouchPointToolType* toolType); + +/** + * @brief Obtains the touch pointer tiltX by the ArkUI XComponent. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param pointIndex Indicates the pointer index in the touchPoints. + * @param tiltX Indicates the x tilt of the pointer. + * @return Returns the status code of the execution. + * @since 9 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetTouchPointTiltX(OH_NativeXComponent* component, uint32_t pointIndex, float* tiltX); + +/** + * @brief Obtains the touch pointer tiltX by the ArkUI XComponent. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param pointIndex Indicates the pointer index in the touchPoints. + * @param tiltY Indicates the y tilt of the pointer. + * @return Returns the status code of the execution. + * @since 9 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetTouchPointTiltY(OH_NativeXComponent* component, uint32_t pointIndex, float* tiltY); + +/** + * @brief Obtains the touch event dispatched by the ArkUI XComponent. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param window Indicates the native window handler. + * @param historicalPoints Indicates the pointer to the current historicalPoints. + * @return Returns the status code of the execution. + * @since 10 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetHistoricalPoints(OH_NativeXComponent* component, const void* window, + int32_t* size, OH_NativeXComponent_HistoricalPoint** historicalPoints); + +/** + * @brief Obtains the mouse event dispatched by the ArkUI XComponent. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param window Indicates the native window handler. + * @param mouseEvent Indicates the pointer to the current mouse event. + * @return Returns the status code of the execution. + * @since 9 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetMouseEvent( + OH_NativeXComponent* component, const void* window, OH_NativeXComponent_MouseEvent* mouseEvent); + +/** + * @brief Registers a callback for this OH_NativeXComponent instance. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param callback Indicates the pointer to a surface lifecycle and touch event callback. + * @return Returns the status code of the execution. + * @since 8 + * @version 1.0 + */ +int32_t OH_NativeXComponent_RegisterCallback(OH_NativeXComponent* component, OH_NativeXComponent_Callback* callback); + +/** + * @brief Registers a callback for this OH_NativeXComponent instance. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param callback Indicates the pointer to a mouse event callback. + * @return Returns the status code of the execution. + * @since 9 + * @version 1.0 + */ +int32_t OH_NativeXComponent_RegisterMouseEventCallback( + OH_NativeXComponent* component, OH_NativeXComponent_MouseEvent_Callback* callback); + +/** + * @brief Registers a callback for this OH_NativeXComponent instance. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param callback Indicates the pointer to a focus event callback. + * @return Returns the status code of the execution. + * @since 10 + * @version 1.0 + */ +int32_t OH_NativeXComponent_RegisterFocusEventCallback( + OH_NativeXComponent* component, void (*callback)(OH_NativeXComponent* component, void* window)); + +/** + * @brief Registers a callback for this OH_NativeXComponent instance. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param callback Indicates the pointer to a key event callback. + * @return Returns the status code of the execution. + * @since 10 + * @version 1.0 + */ +int32_t OH_NativeXComponent_RegisterKeyEventCallback( + OH_NativeXComponent* component, void (*callback)(OH_NativeXComponent* component, void* window)); + +/** + * @brief Registers a callback for this OH_NativeXComponent instance. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param callback Indicates the pointer to a blur event callback. + * @return Returns the status code of the execution. + * @since 10 + * @version 1.0 + */ +int32_t OH_NativeXComponent_RegisterBlurEventCallback( + OH_NativeXComponent* component, void (*callback)(OH_NativeXComponent* component, void* window)); + +/** + * @brief Obtains the key event dispatched by the ArkUI XComponent. + * + * @param component Indicates the pointer to this OH_NativeXComponent instance. + * @param keyEvent Indicates the pointer to pointer of OH_NativeXComponent_KeyEvent instance. + * @return Returns the status code of the execution. + * @since 10 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetKeyEvent(OH_NativeXComponent* component, OH_NativeXComponent_KeyEvent** keyEvent); + +/** + * @brief Obtains the action of the key event. + * + * @param keyEvent Indicates the pointer to this OH_NativeXComponent_KeyEvent instance. + * @param action Indicates the action of the OH_NativeXComponent_KeyEvent instance. + * @return Returns the status code of the execution. + * @since 10 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetKeyEventAction( + OH_NativeXComponent_KeyEvent* keyEvent, OH_NativeXComponent_KeyAction* action); + +/** + * @brief Obtains the keyCode of the key event. + * + * @param keyEvent Indicates the pointer to this OH_NativeXComponent_KeyEvent instance. + * @param code Indicates the keyCode of the OH_NativeXComponent_KeyEvent instance. + * @return Returns the status code of the execution. + * @since 10 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetKeyEventCode(OH_NativeXComponent_KeyEvent* keyEvent, OH_NativeXComponent_KeyCode* code); + +/** + * @brief Obtains the sourceType of the key event. + * + * @param keyEvent Indicates the pointer to this OH_NativeXComponent_KeyEvent instance. + * @param sourceType Indicates the sourceType of the OH_NativeXComponent_KeyEvent instance. + * @return Returns the status code of the execution. + * @since 10 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetKeyEventSourceType( + OH_NativeXComponent_KeyEvent* keyEvent, OH_NativeXComponent_EventSourceType* sourceType); + +/** + * @brief Obtains the deviceId of the key event. + * + * @param keyEvent Indicates the pointer to this OH_NativeXComponent_KeyEvent instance. + * @param deviceId Indicates the deviceId of the OH_NativeXComponent_KeyEvent instance. + * @return Returns the status code of the execution. + * @since 10 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetKeyEventDeviceId(OH_NativeXComponent_KeyEvent* keyEvent, int64_t* deviceId); + +/** + * @brief Obtains the timestamp of the key event. + * + * @param keyEvent Indicates the pointer to this OH_NativeXComponent_KeyEvent instance. + * @param timestamp Indicates the timestamp of the OH_NativeXComponent_KeyEvent instance. + * @return Returns the status code of the execution. + * @since 10 + * @version 1.0 + */ +int32_t OH_NativeXComponent_GetKeyEventTimestamp(OH_NativeXComponent_KeyEvent* keyEvent, int64_t* timestamp); + +#ifdef __cplusplus +}; +#endif +#endif // _NATIVE_INTERFACE_XCOMPONENT_H_ diff --git a/arkui/ace_engine/native/native_xcomponent_key_event.h b/arkui/ace_engine/native/native_xcomponent_key_event.h new file mode 100644 index 0000000000000000000000000000000000000000..5445692b062463188a7cc1e287881200aff978f9 --- /dev/null +++ b/arkui/ace_engine/native/native_xcomponent_key_event.h @@ -0,0 +1,391 @@ +/* + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup OH_NativeXComponent Native XComponent + * @{ + */ + +/** + * @file native_xcomponent_key_event.h + * + * @brief Declares enums for key event of Native XComponent. + * + * @since 10 + * @version 1.0 + */ + +#ifndef _NATIVE_INTERFACE_XCOMPONENT_KEY_EVENT_H_ +#define _NATIVE_INTERFACE_XCOMPONENT_KEY_EVENT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Represents the key event code. + * + * @since 10 + * @version 1.0 + */ +typedef enum { + KEY_UNKNOWN = -1, + KEY_FN = 0, + KEY_HOME = 1, + KEY_BACK = 2, + KEY_MEDIA_PLAY_PAUSE = 10, + KEY_MEDIA_STOP = 11, + KEY_MEDIA_NEXT = 12, + KEY_MEDIA_PREVIOUS = 13, + KEY_MEDIA_REWIND = 14, + KEY_MEDIA_FAST_FORWARD = 15, + KEY_VOLUME_UP = 16, + KEY_VOLUME_DOWN = 17, + KEY_POWER = 18, + KEY_CAMERA = 19, + KEY_VOLUME_MUTE = 22, + KEY_MUTE = 23, + KEY_BRIGHTNESS_UP = 40, + KEY_BRIGHTNESS_DOWN = 41, + KEY_0 = 2000, + KEY_1 = 2001, + KEY_2 = 2002, + KEY_3 = 2003, + KEY_4 = 2004, + KEY_5 = 2005, + KEY_6 = 2006, + KEY_7 = 2007, + KEY_8 = 2008, + KEY_9 = 2009, + KEY_STAR = 2010, + KEY_POUND = 2011, + KEY_DPAD_UP = 2012, + KEY_DPAD_DOWN = 2013, + KEY_DPAD_LEFT = 2014, + KEY_DPAD_RIGHT = 2015, + KEY_DPAD_CENTER = 2016, + KEY_A = 2017, + KEY_B = 2018, + KEY_C = 2019, + KEY_D = 2020, + KEY_E = 2021, + KEY_F = 2022, + KEY_G = 2023, + KEY_H = 2024, + KEY_I = 2025, + KEY_J = 2026, + KEY_K = 2027, + KEY_L = 2028, + KEY_M = 2029, + KEY_N = 2030, + KEY_O = 2031, + KEY_P = 2032, + KEY_Q = 2033, + KEY_R = 2034, + KEY_S = 2035, + KEY_T = 2036, + KEY_U = 2037, + KEY_V = 2038, + KEY_W = 2039, + KEY_X = 2040, + KEY_Y = 2041, + KEY_Z = 2042, + KEY_COMMA = 2043, + KEY_PERIOD = 2044, + KEY_ALT_LEFT = 2045, + KEY_ALT_RIGHT = 2046, + KEY_SHIFT_LEFT = 2047, + KEY_SHIFT_RIGHT = 2048, + KEY_TAB = 2049, + KEY_SPACE = 2050, + KEY_SYM = 2051, + KEY_EXPLORER = 2052, + KEY_ENVELOPE = 2053, + KEY_ENTER = 2054, + KEY_DEL = 2055, + KEY_GRAVE = 2056, + KEY_MINUS = 2057, + KEY_EQUALS = 2058, + KEY_LEFT_BRACKET = 2059, + KEY_RIGHT_BRACKET = 2060, + KEY_BACKSLASH = 2061, + KEY_SEMICOLON = 2062, + KEY_APOSTROPHE = 2063, + KEY_SLASH = 2064, + KEY_AT = 2065, + KEY_PLUS = 2066, + KEY_MENU = 2067, + KEY_PAGE_UP = 2068, + KEY_PAGE_DOWN = 2069, + KEY_ESCAPE = 2070, + KEY_FORWARD_DEL = 2071, + KEY_CTRL_LEFT = 2072, + KEY_CTRL_RIGHT = 2073, + KEY_CAPS_LOCK = 2074, + KEY_SCROLL_LOCK = 2075, + KEY_META_LEFT = 2076, + KEY_META_RIGHT = 2077, + KEY_FUNCTION = 2078, + KEY_SYSRQ = 2079, + KEY_BREAK = 2080, + KEY_MOVE_HOME = 2081, + KEY_MOVE_END = 2082, + KEY_INSERT = 2083, + KEY_FORWARD = 2084, + KEY_MEDIA_PLAY = 2085, + KEY_MEDIA_PAUSE = 2086, + KEY_MEDIA_CLOSE = 2087, + KEY_MEDIA_EJECT = 2088, + KEY_MEDIA_RECORD = 2089, + KEY_F1 = 2090, + KEY_F2 = 2091, + KEY_F3 = 2092, + KEY_F4 = 2093, + KEY_F5 = 2094, + KEY_F6 = 2095, + KEY_F7 = 2096, + KEY_F8 = 2097, + KEY_F9 = 2098, + KEY_F10 = 2099, + KEY_F11 = 2100, + KEY_F12 = 2101, + KEY_NUM_LOCK = 2102, + KEY_NUMPAD_0 = 2103, + KEY_NUMPAD_1 = 2104, + KEY_NUMPAD_2 = 2105, + KEY_NUMPAD_3 = 2106, + KEY_NUMPAD_4 = 2107, + KEY_NUMPAD_5 = 2108, + KEY_NUMPAD_6 = 2109, + KEY_NUMPAD_7 = 2110, + KEY_NUMPAD_8 = 2111, + KEY_NUMPAD_9 = 2112, + KEY_NUMPAD_DIVIDE = 2113, + KEY_NUMPAD_MULTIPLY = 2114, + KEY_NUMPAD_SUBTRACT = 2115, + KEY_NUMPAD_ADD = 2116, + KEY_NUMPAD_DOT = 2117, + KEY_NUMPAD_COMMA = 2118, + KEY_NUMPAD_ENTER = 2119, + KEY_NUMPAD_EQUALS = 2120, + KEY_NUMPAD_LEFT_PAREN = 2121, + KEY_NUMPAD_RIGHT_PAREN = 2122, + KEY_VIRTUAL_MULTITASK = 2210, + KEY_SLEEP = 2600, + KEY_ZENKAKU_HANKAKU = 2601, + KEY_102ND = 2602, + KEY_RO = 2603, + KEY_KATAKANA = 2604, + KEY_HIRAGANA = 2605, + KEY_HENKAN = 2606, + KEY_KATAKANA_HIRAGANA = 2607, + KEY_MUHENKAN = 2608, + KEY_LINEFEED = 2609, + KEY_MACRO = 2610, + KEY_NUMPAD_PLUSMINUS = 2611, + KEY_SCALE = 2612, + KEY_HANGUEL = 2613, + KEY_HANJA = 2614, + KEY_YEN = 2615, + KEY_STOP = 2616, + KEY_AGAIN = 2617, + KEY_PROPS = 2618, + KEY_UNDO = 2619, + KEY_COPY = 2620, + KEY_OPEN = 2621, + KEY_PASTE = 2622, + KEY_FIND = 2623, + KEY_CUT = 2624, + KEY_HELP = 2625, + KEY_CALC = 2626, + KEY_FILE = 2627, + KEY_BOOKMARKS = 2628, + KEY_NEXT = 2629, + KEY_PLAYPAUSE = 2630, + KEY_PREVIOUS = 2631, + KEY_STOPCD = 2632, + KEY_CONFIG = 2634, + KEY_REFRESH = 2635, + KEY_EXIT = 2636, + KEY_EDIT = 2637, + KEY_SCROLLUP = 2638, + KEY_SCROLLDOWN = 2639, + KEY_NEW = 2640, + KEY_REDO = 2641, + KEY_CLOSE = 2642, + KEY_PLAY = 2643, + KEY_BASSBOOST = 2644, + KEY_PRINT = 2645, + KEY_CHAT = 2646, + KEY_FINANCE = 2647, + KEY_CANCEL = 2648, + KEY_KBDILLUM_TOGGLE = 2649, + KEY_KBDILLUM_DOWN = 2650, + KEY_KBDILLUM_UP = 2651, + KEY_SEND = 2652, + KEY_REPLY = 2653, + KEY_FORWARDMAIL = 2654, + KEY_SAVE = 2655, + KEY_DOCUMENTS = 2656, + KEY_VIDEO_NEXT = 2657, + KEY_VIDEO_PREV = 2658, + KEY_BRIGHTNESS_CYCLE = 2659, + KEY_BRIGHTNESS_ZERO = 2660, + KEY_DISPLAY_OFF = 2661, + KEY_BTN_MISC = 2662, + KEY_GOTO = 2663, + KEY_INFO = 2664, + KEY_PROGRAM = 2665, + KEY_PVR = 2666, + KEY_SUBTITLE = 2667, + KEY_FULL_SCREEN = 2668, + KEY_KEYBOARD = 2669, + KEY_ASPECT_RATIO = 2670, + KEY_PC = 2671, + KEY_TV = 2672, + KEY_TV2 = 2673, + KEY_VCR = 2674, + KEY_VCR2 = 2675, + KEY_SAT = 2676, + KEY_CD = 2677, + KEY_TAPE = 2678, + KEY_TUNER = 2679, + KEY_PLAYER = 2680, + KEY_DVD = 2681, + KEY_AUDIO = 2682, + KEY_VIDEO = 2683, + KEY_MEMO = 2684, + KEY_CALENDAR = 2685, + KEY_RED = 2686, + KEY_GREEN = 2687, + KEY_YELLOW = 2688, + KEY_BLUE = 2689, + KEY_CHANNELUP = 2690, + KEY_CHANNELDOWN = 2691, + KEY_LAST = 2692, + KEY_RESTART = 2693, + KEY_SLOW = 2694, + KEY_SHUFFLE = 2695, + KEY_VIDEOPHONE = 2696, + KEY_GAMES = 2697, + KEY_ZOOMIN = 2698, + KEY_ZOOMOUT = 2699, + KEY_ZOOMRESET = 2700, + KEY_WORDPROCESSOR = 2701, + KEY_EDITOR = 2702, + KEY_SPREADSHEET = 2703, + KEY_GRAPHICSEDITOR = 2704, + KEY_PRESENTATION = 2705, + KEY_DATABASE = 2706, + KEY_NEWS = 2707, + KEY_VOICEMAIL = 2708, + KEY_ADDRESSBOOK = 2709, + KEY_MESSENGER = 2710, + KEY_BRIGHTNESS_TOGGLE = 2711, + KEY_SPELLCHECK = 2712, + KEY_COFFEE = 2713, + KEY_MEDIA_REPEAT = 2714, + KEY_IMAGES = 2715, + KEY_BUTTONCONFIG = 2716, + KEY_TASKMANAGER = 2717, + KEY_JOURNAL = 2718, + KEY_CONTROLPANEL = 2719, + KEY_APPSELECT = 2720, + KEY_SCREENSAVER = 2721, + KEY_ASSISTANT = 2722, + KEY_KBD_LAYOUT_NEXT = 2723, + KEY_BRIGHTNESS_MIN = 2724, + KEY_BRIGHTNESS_MAX = 2725, + KEY_KBDINPUTASSIST_PREV = 2726, + KEY_KBDINPUTASSIST_NEXT = 2727, + KEY_KBDINPUTASSIST_PREVGROUP = 2728, + KEY_KBDINPUTASSIST_NEXTGROUP = 2729, + KEY_KBDINPUTASSIST_ACCEPT = 2730, + KEY_KBDINPUTASSIST_CANCEL = 2731, + KEY_FRONT = 2800, + KEY_SETUP = 2801, + KEY_WAKEUP = 2802, + KEY_SENDFILE = 2803, + KEY_DELETEFILE = 2804, + KEY_XFER = 2805, + KEY_PROG1 = 2806, + KEY_PROG2 = 2807, + KEY_MSDOS = 2808, + KEY_SCREENLOCK = 2809, + KEY_DIRECTION_ROTATE_DISPLAY = 2810, + KEY_CYCLEWINDOWS = 2811, + KEY_COMPUTER = 2812, + KEY_EJECTCLOSECD = 2813, + KEY_ISO = 2814, + KEY_MOVE = 2815, + KEY_F13 = 2816, + KEY_F14 = 2817, + KEY_F15 = 2818, + KEY_F16 = 2819, + KEY_F17 = 2820, + KEY_F18 = 2821, + KEY_F19 = 2822, + KEY_F20 = 2823, + KEY_F21 = 2824, + KEY_F22 = 2825, + KEY_F23 = 2826, + KEY_F24 = 2827, + KEY_PROG3 = 2828, + KEY_PROG4 = 2829, + KEY_DASHBOARD = 2830, + KEY_SUSPEND = 2831, + KEY_HP = 2832, + KEY_SOUND = 2833, + KEY_QUESTION = 2834, + KEY_CONNECT = 2836, + KEY_SPORT = 2837, + KEY_SHOP = 2838, + KEY_ALTERASE = 2839, + KEY_SWITCHVIDEOMODE = 2841, + KEY_BATTERY = 2842, + KEY_BLUETOOTH = 2843, + KEY_WLAN = 2844, + KEY_UWB = 2845, + KEY_WWAN_WIMAX = 2846, + KEY_RFKILL = 2847, + KEY_CHANNEL = 3001, + KEY_BTN_0 = 3100, + KEY_BTN_1 = 3101, + KEY_BTN_2 = 3102, + KEY_BTN_3 = 3103, + KEY_BTN_4 = 3104, + KEY_BTN_5 = 3105, + KEY_BTN_6 = 3106, + KEY_BTN_7 = 3107, + KEY_BTN_8 = 3108, + KEY_BTN_9 = 3109, +} OH_NativeXComponent_KeyCode; + +/** + * @brief Represents the key event action. + * + * @since 10 + * @version 1.0 + */ +typedef enum { + OH_NATIVEXCOMPONENT_KEY_ACTION_UNKNOWN = -1, + OH_NATIVEXCOMPONENT_KEY_ACTION_DOWN = 0, + OH_NATIVEXCOMPONENT_KEY_ACTION_UP, +} OH_NativeXComponent_KeyAction; + +#ifdef __cplusplus +}; +#endif +#endif // _NATIVE_INTERFACE_XCOMPONENT_KEY_EVENT_H_ diff --git a/arkui/napi/BUILD.gn b/arkui/napi/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..eea7bc4512e1bcc3fb6dfc06bac9da94e855a452 --- /dev/null +++ b/arkui/napi/BUILD.gn @@ -0,0 +1,30 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import("//build/ohos.gni") + + +ohos_ndk_library("libnapi_ndk") { + ndk_description_file = "./libnapi.ndk.json" + min_compact_version = "1" + output_name = "ace_napi" +} + +ohos_ndk_headers("napi_header") { + dest_dir = "$ndk_headers_out_dir/napi" + sources = [ + "./common.h", + "./native_api.h", + ] +} \ No newline at end of file diff --git a/arkui/napi/common.h b/arkui/napi/common.h new file mode 100644 index 0000000000000000000000000000000000000000..8b7df91a66735ca3d7554c5927e9f7aa87aa99d3 --- /dev/null +++ b/arkui/napi/common.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_COMMON_H +#define FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_COMMON_H + +typedef enum { + napi_qos_background = 0, + napi_qos_utility = 1, + napi_qos_default = 2, + napi_qos_user_initiated = 3, +} napi_qos_t; + +#endif /* FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_API_H */ \ No newline at end of file diff --git a/arkui/napi/libnapi.ndk.json b/arkui/napi/libnapi.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..dbc43ff837916e50824704cfb9697ce65e90e077 --- /dev/null +++ b/arkui/napi/libnapi.ndk.json @@ -0,0 +1,135 @@ +[ + {"name": "napi_module_register"}, + {"name": "napi_get_last_error_info"}, + {"name": "napi_throw"}, + {"name": "napi_throw_error"}, + {"name": "napi_throw_type_error"}, + {"name": "napi_throw_range_error"}, + {"name": "napi_is_error"}, + {"name": "napi_create_error"}, + {"name": "napi_create_type_error"}, + {"name": "napi_create_range_error"}, + {"name": "napi_get_and_clear_last_exception"}, + {"name": "napi_is_exception_pending"}, + {"name": "napi_fatal_error"}, + {"name": "napi_open_handle_scope"}, + {"name": "napi_close_handle_scope"}, + {"name": "napi_open_escapable_handle_scope"}, + {"name": "napi_close_escapable_handle_scope"}, + {"name": "napi_escape_handle"}, + {"name": "napi_create_reference"}, + {"name": "napi_delete_reference"}, + {"name": "napi_reference_ref"}, + {"name": "napi_reference_unref"}, + {"name": "napi_get_reference_value"}, + {"name": "napi_create_array"}, + {"name": "napi_create_array_with_length"}, + {"name": "napi_create_arraybuffer"}, + {"name": "napi_create_external"}, + {"name": "napi_create_external_arraybuffer"}, + {"name": "napi_create_object"}, + {"name": "napi_create_symbol"}, + {"name": "napi_create_typedarray"}, + {"name": "napi_create_dataview"}, + {"name": "napi_create_int32"}, + {"name": "napi_create_uint32"}, + {"name": "napi_create_int64"}, + {"name": "napi_create_double"}, + {"name": "napi_create_string_latin1"}, + {"name": "napi_create_string_utf8"}, + {"name": "napi_create_string_utf16"}, + {"name": "napi_get_array_length"}, + {"name": "napi_get_arraybuffer_info"}, + {"name": "napi_get_prototype"}, + {"name": "napi_get_typedarray_info"}, + {"name": "napi_get_dataview_info"}, + {"name": "napi_get_value_bool"}, + {"name": "napi_get_value_double"}, + {"name": "napi_get_value_external"}, + {"name": "napi_get_value_int32"}, + {"name": "napi_get_value_int64"}, + {"name": "napi_get_value_string_latin1"}, + {"name": "napi_get_value_string_utf8"}, + {"name": "napi_get_value_string_utf16"}, + {"name": "napi_get_value_uint32"}, + {"name": "napi_get_boolean"}, + {"name": "napi_get_global"}, + {"name": "napi_get_null"}, + {"name": "napi_get_undefined"}, + {"name": "napi_coerce_to_bool"}, + {"name": "napi_coerce_to_number"}, + {"name": "napi_coerce_to_object"}, + {"name": "napi_coerce_to_string"}, + {"name": "napi_typeof"}, + {"name": "napi_instanceof"}, + {"name": "napi_is_array"}, + {"name": "napi_is_arraybuffer"}, + {"name": "napi_is_typedarray"}, + {"name": "napi_is_dataview"}, + {"name": "napi_is_date"}, + {"name": "napi_strict_equals"}, + {"name": "napi_get_property_names"}, + {"name": "napi_get_all_property_names"}, + {"name": "napi_set_property"}, + {"name": "napi_get_property"}, + {"name": "napi_has_property"}, + {"name": "napi_check_object_type_tag"}, + {"name": "napi_type_tag_object"}, + {"name": "napi_delete_property"}, + {"name": "napi_has_own_property"}, + {"name": "napi_set_named_property"}, + {"name": "napi_get_named_property"}, + {"name": "napi_has_named_property"}, + {"name": "napi_set_element"}, + {"name": "napi_get_element"}, + {"name": "napi_has_element"}, + {"name": "napi_delete_element"}, + {"name": "napi_define_properties"}, + {"name": "napi_call_function"}, + {"name": "napi_create_function"}, + {"name": "napi_get_cb_info"}, + {"name": "napi_get_new_target"}, + {"name": "napi_new_instance"}, + {"name": "napi_define_class"}, + {"name": "napi_wrap"}, + {"name": "napi_unwrap"}, + {"name": "napi_remove_wrap"}, + {"name": "napi_create_async_work"}, + {"name": "napi_delete_async_work"}, + {"name": "napi_queue_async_work"}, + {"name": "napi_cancel_async_work"}, + {"name": "napi_get_node_version"}, + {"name": "napi_get_version"}, + {"name": "napi_create_promise"}, + {"name": "napi_resolve_deferred"}, + {"name": "napi_reject_deferred"}, + {"name": "napi_is_promise"}, + {"name": "napi_run_script"}, + {"name": "napi_get_uv_event_loop"}, + {"name": "napi_run_script_path"}, + {"name": "napi_create_threadsafe_function"}, + {"name": "napi_get_threadsafe_function_context"}, + {"name": "napi_call_threadsafe_function"}, + {"name": "napi_acquire_threadsafe_function"}, + {"name": "napi_release_threadsafe_function"}, + {"name": "napi_unref_threadsafe_function"}, + {"name": "napi_ref_threadsafe_function"}, + {"name": "napi_create_date"}, + {"name": "napi_get_date_value"}, + {"name": "napi_create_bigint_int64"}, + {"name": "napi_create_bigint_uint64"}, + {"name": "napi_create_bigint_words"}, + {"name": "napi_get_value_bigint_int64"}, + {"name": "napi_get_value_bigint_uint64"}, + {"name": "napi_get_value_bigint_words"}, + {"name": "napi_object_freeze"}, + {"name": "napi_object_seal"}, + {"name": "napi_detach_arraybuffer"}, + {"name": "napi_is_detached_arraybuffer"}, + {"name": "napi_is_buffer"}, + {"name": "napi_create_buffer"}, + {"name": "napi_create_buffer_copy"}, + {"name": "napi_create_external_buffer"}, + {"name": "napi_get_buffer_info"}, + {"name": "napi_queue_async_work_with_qos"} +] \ No newline at end of file diff --git a/arkui/napi/native_api.h b/arkui/napi/native_api.h new file mode 100644 index 0000000000000000000000000000000000000000..b4f5d1c6b1cb08cf3d596f030c318cade4b4ec8b --- /dev/null +++ b/arkui/napi/native_api.h @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_API_H +#define FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_API_H + +#ifndef NAPI_VERSION +#define NAPI_VERSION 8 +#endif + +#ifndef NAPI_EXPERIMENTAL +#define NAPI_EXPERIMENTAL +#endif + +#include "common.h" +#include "node_api.h" + +#ifdef NAPI_TEST +#ifdef _WIN32 +#define NAPI_INNER_EXTERN __declspec(dllexport) +#else +#define NAPI_INNER_EXTERN __attribute__((visibility("default"))) +#endif +#else +#ifdef _WIN32 +#define NAPI_INNER_EXTERN __declspec(deprecated) +#else +#define NAPI_INNER_EXTERN __attribute__((__deprecated__)) +#endif +#endif + +NAPI_INNER_EXTERN napi_status napi_set_instance_data(napi_env env, + void* data, + napi_finalize finalize_cb, + void* finalize_hint); + +NAPI_INNER_EXTERN napi_status napi_get_instance_data(napi_env env, + void** data); + +NAPI_INNER_EXTERN napi_status napi_fatal_exception(napi_env env, napi_value err); + +NAPI_INNER_EXTERN napi_status napi_add_env_cleanup_hook(napi_env env, + void (*fun)(void* arg), + void* arg); + +NAPI_INNER_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env, + void (*fun)(void* arg), + void* arg); + +NAPI_INNER_EXTERN napi_status napi_add_async_cleanup_hook( + napi_env env, + napi_async_cleanup_hook hook, + void* arg, + napi_async_cleanup_hook_handle* remove_handle); + +NAPI_INNER_EXTERN napi_status napi_remove_async_cleanup_hook( + napi_async_cleanup_hook_handle remove_handle); + +NAPI_EXTERN napi_status napi_create_string_utf16(napi_env env, + const char16_t* str, + size_t length, + napi_value* result); + +NAPI_EXTERN napi_status napi_get_value_string_utf16(napi_env env, + napi_value value, + char16_t* buf, + size_t bufsize, + size_t* result); + +NAPI_EXTERN napi_status napi_type_tag_object(napi_env env, + napi_value value, + const napi_type_tag* type_tag); + +NAPI_EXTERN napi_status napi_check_object_type_tag(napi_env env, + napi_value value, + const napi_type_tag* type_tag, + bool* result); + +NAPI_INNER_EXTERN napi_status napi_add_finalizer(napi_env env, + napi_value js_object, + void* native_object, + napi_finalize finalize_cb, + void* finalize_hint, + napi_ref* result); + +NAPI_INNER_EXTERN napi_status napi_async_init(napi_env env, + napi_value async_resource, + napi_value async_resource_name, + napi_async_context* result); + +NAPI_INNER_EXTERN napi_status napi_async_destroy(napi_env env, + napi_async_context async_context); + +NAPI_INNER_EXTERN napi_status napi_open_callback_scope(napi_env env, + napi_value resource_object, + napi_async_context context, + napi_callback_scope* result); + +NAPI_INNER_EXTERN napi_status napi_close_callback_scope(napi_env env, + napi_callback_scope scope); + +NAPI_INNER_EXTERN napi_status napi_adjust_external_memory(napi_env env, + int64_t change_in_bytes, + int64_t* adjusted_value); + +NAPI_INNER_EXTERN napi_status node_api_get_module_file_name(napi_env env, const char** result); + +#ifdef __cplusplus +extern "C" { +#endif + +NAPI_EXTERN napi_status napi_run_script_path(napi_env env, const char* path, napi_value* result); +NAPI_EXTERN napi_status napi_queue_async_work_with_qos(napi_env env, napi_async_work work, napi_qos_t qos); + +#ifdef __cplusplus +} +#endif +#endif /* FOUNDATION_ACE_NAPI_INTERFACES_KITS_NAPI_NATIVE_API_H */ diff --git a/bundlemanager/bundle_framework/bundle/BUILD.gn b/bundlemanager/bundle_framework/bundle/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..1a834d911ed312dc20a1d64444a5df74e364ac92 --- /dev/null +++ b/bundlemanager/bundle_framework/bundle/BUILD.gn @@ -0,0 +1,28 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +config("bundle_ndk_config") { + include_dirs = [ "include" ] +} +ohos_ndk_headers("bundle_header") { + dest_dir = "$ndk_headers_out_dir/bundle/" + sources = [ "./include/native_interface_bundle.h" ] +} + +ohos_ndk_library("libbundle_ndk") { + ndk_description_file = "./libbundle.ndk.json" + min_compact_version = "9" + output_name = "bundle_ndk" +} \ No newline at end of file diff --git a/bundlemanager/bundle_framework/bundle/include/bundle_mgr_proxy_native.h b/bundlemanager/bundle_framework/bundle/include/bundle_mgr_proxy_native.h new file mode 100644 index 0000000000000000000000000000000000000000..6cf1c4470816553f9a9ab3905560d93c90a78cb9 --- /dev/null +++ b/bundlemanager/bundle_framework/bundle/include/bundle_mgr_proxy_native.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_APPEXECFWK_KITS_APPKIT_NATIVE_BUNDLE_INCLUDE_BUNDLE_MGR_PROXY_NATIVE_H +#define FOUNDATION_APPEXECFWK_KITS_APPKIT_NATIVE_BUNDLE_INCLUDE_BUNDLE_MGR_PROXY_NATIVE_H + +#include + +#include "application_info.h" +#include "bundle_info.h" +#include "iremote_broker.h" +#include "iremote_object.h" + +namespace OHOS { +namespace AppExecFwk { +class BundleMgrProxyNative { +public: + BundleMgrProxyNative() = default; + virtual ~BundleMgrProxyNative() = default; + + /** + * @brief Obtains the BundleInfo based on calling uid. + * @param bundleName Indicates the application bundle name to be queried. + * @param flags Indicates the information contained in the BundleInfo object to be returned. + * @param bundleInfo Indicates the obtained BundleInfo object. + * @param userId Indicates the user ID. + * @return Returns true if the BundleInfo is successfully obtained; returns false otherwise. + */ + bool GetBundleInfoForSelf(int32_t flags, BundleInfo &bundleInfo); + + enum { + GET_BUNDLE_INFO_FOR_SELF_NATIVE = 98 + }; +private: + sptr GetBmsProxy(); + template + bool GetParcelableInfo(uint32_t code, MessageParcel &data, T &parcelableInfo); + bool SendTransactCmd(uint32_t code, MessageParcel &data, MessageParcel &reply); +}; +} // namespace AppExecFwk +} // namespace OHOS +#endif // FOUNDATION_APPEXECFWK_KITS_APPKIT_NATIVE_BUNDLE_INCLUDE_BUNDLE_MGR_PROXY_NATIVE_H \ No newline at end of file diff --git a/bundlemanager/bundle_framework/bundle/include/native_interface_bundle.h b/bundlemanager/bundle_framework/bundle/include/native_interface_bundle.h new file mode 100644 index 0000000000000000000000000000000000000000..d318f867090aeffc30cd952bb8e75ab3d62e514d --- /dev/null +++ b/bundlemanager/bundle_framework/bundle/include/native_interface_bundle.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup Native_Bundle + * @{ + * + * @brief Describes the Native Bundle. + * + * @since 9 + * @version 1.0 + */ + +/** + * @file native_interface_bundle.h + * + * @brief Declares the Bundle-specific function, including function for obtaining application info. + * + * @since 9 + * @version 1.0 + */ +#ifndef FOUNDATION_APPEXECFWK_STANDARD_KITS_APPKIT_NATIVE_BUNDLE_INCLUDE_NATIVE_INTERFACE_BUNDLE_H +#define FOUNDATION_APPEXECFWK_STANDARD_KITS_APPKIT_NATIVE_BUNDLE_INCLUDE_NATIVE_INTERFACE_BUNDLE_H + +#ifdef __cplusplus +extern "C" { +#endif +struct OH_NativeBundle_ApplicationInfo { + char* bundleName; + + char* fingerprint; +}; + +/** + * @brief Obtains the application info based on the The current bundle. + * + * @return Returns the application info. + * @since 9 + * @version 1.0 + */ +OH_NativeBundle_ApplicationInfo OH_NativeBundle_GetCurrentApplicationInfo(); + +#ifdef __cplusplus +}; +#endif +#endif // FOUNDATION_APPEXECFWK_STANDARD_KITS_APPKIT_NATIVE_BUNDLE_INCLUDE_NATIVE_INTERFACE_BUNDLE_H diff --git a/bundlemanager/bundle_framework/bundle/libbundle.ndk.json b/bundlemanager/bundle_framework/bundle/libbundle.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..c40f8ee411641f2fba9244dcfea736bef87d0daf --- /dev/null +++ b/bundlemanager/bundle_framework/bundle/libbundle.ndk.json @@ -0,0 +1,6 @@ +[ + { + "first_introduced": "9", + "name": "OH_NativeBundle_GetCurrentApplicationInfo" + } +] diff --git a/commonlibrary/memory_utils/libpurgeablemem/BUILD.gn b/commonlibrary/memory_utils/libpurgeablemem/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..6ffd6731c1ec8012832cebebbb184c44e61d3f77 --- /dev/null +++ b/commonlibrary/memory_utils/libpurgeablemem/BUILD.gn @@ -0,0 +1,27 @@ +# Copyright (C) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +ohos_ndk_headers("purgeable_memory_header") { + dest_dir = "$ndk_headers_out_dir/purgeable_memory" + sources = [ "./purgeable_memory.h" ] +} + +ohos_ndk_library("libpurgeable_memory_ndk") { + output_name = "purgeable_memory_ndk" + output_extension = "z.so" + ndk_description_file = "./libpurgeable_memory.ndk.json" + system_capability = "SystemCapability.CommonLibrary.Memory.PurgeableMemory" + system_capability = "purgeable_memory/purgeable_memory.h" +} diff --git a/commonlibrary/memory_utils/libpurgeablemem/libpurgeable_memory.ndk.json b/commonlibrary/memory_utils/libpurgeablemem/libpurgeable_memory.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..02b15f0172891e9779c9a7db92cb4e1f5242addb --- /dev/null +++ b/commonlibrary/memory_utils/libpurgeablemem/libpurgeable_memory.ndk.json @@ -0,0 +1,11 @@ +[ + { "name": "OH_PurgeableMemory_Create" }, + { "name": "OH_PurgeableMemory_Destroy" }, + { "name": "OH_PurgeableMemory_BeginRead" }, + { "name": "OH_PurgeableMemory_EndRead" }, + { "name": "OH_PurgeableMemory_BeginWrite" }, + { "name": "OH_PurgeableMemory_EndWrite" }, + { "name": "OH_PurgeableMemory_GetContent" }, + { "name": "OH_PurgeableMemory_ContentSize" }, + { "name": "OH_PurgeableMemory_AppendModify" } +] \ No newline at end of file diff --git a/commonlibrary/memory_utils/libpurgeablemem/purgeable_memory.h b/commonlibrary/memory_utils/libpurgeablemem/purgeable_memory.h new file mode 100644 index 0000000000000000000000000000000000000000..a228044348e33e324aa8c5df8dbb9378534face3 --- /dev/null +++ b/commonlibrary/memory_utils/libpurgeablemem/purgeable_memory.h @@ -0,0 +1,206 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup memory + * + * @brief provides memory management capabilities + * + * provides features include operations such as memory alloction, memory free, and so on + * + * @since 10 + * @version 1.0 + */ + +/** + * @file purgeable_memory.h + * + * @brief provides memory management capabilities of purgeable memory. + * + * provides features include create, begin read ,end read, begin write, end write, rebuild, and so on. + * when using, it is necessary to link libpurgeable_memory_ndk.z.so + * + * @since 10 + * @version 1.0 + */ + +#ifndef OHOS_UTILS_MEMORY_LIBPURGEABLEMEM_C_INCLUDE_PURGEABLE_MEMORY_H +#define OHOS_UTILS_MEMORY_LIBPURGEABLEMEM_C_INCLUDE_PURGEABLE_MEMORY_H + +#include /* bool */ +#include /* size_t */ + +#ifdef __cplusplus +extern "C" { +#endif /* End of #ifdef __cplusplus */ + +/* + * @brief Purgeable mem struct + * + * @since 10 + * @version 1.0 + */ +typedef struct PurgMem OH_PurgeableMemory; + +/* + * @brief: function pointer, it points to a function which is used to build content of a PurgMem obj. + * + * + * @param void *: data ptr, points to start address of a PurgMem obj's content. + * @param size_t: data size of the content. + * @param void *: other private parameters. + * @return: build content result, true means success, while false is fail. + * + * @since 10 + * @version 1.0 + */ +typedef bool (*OH_PurgeableMemory_ModifyFunc)(void *, size_t, void *); + +/* + * @brief: create a PurgMem obj. + * + * + * @param size: data size of a PurgMem obj's content. + * @param func: function pointer, it is used to recover data when the PurgMem obj's content is purged. + * @param funcPara: parameters used by @func. + * @return: a PurgMem obj. + * + * @since 10 + * @version 1.0 + */ +OH_PurgeableMemory *OH_PurgeableMemory_Create( + size_t size, OH_PurgeableMemory_ModifyFunc func, void *funcPara); + +/* + * @brief: destroy a PurgMem obj. + * + * + * @param purgObj: a PurgMem obj to be destroyed. + * @return: true is success, while false is fail. return true if @purgObj is NULL. + * If return true, @purgObj will be set to NULL to avoid Use-After-Free. + * + * @since 10 + * @version 1.0 + */ +bool OH_PurgeableMemory_Destroy(OH_PurgeableMemory *purgObj); + +/* + * @brief: begin read a PurgMem obj. + * + * + * @param purgObj: a PurgMem obj. + * @return: return true if @purgObj's content is present. + * If content is purged(no present), system will recover its data, + * return false if content is purged and recovered failed. + * While return true if content recover success. + * OS cannot reclaim the memory of @purgObj's content when this + * function return true, until PurgMemEndRead() is called. + * + * @since 10 + * @version 1.0 + */ +bool OH_PurgeableMemory_BeginRead(OH_PurgeableMemory *purgObj); + +/* + * @brief: end read a PurgMem obj. + * + * + * @param purgObj: a PurgMem obj. + * OS may reclaim the memory of @purgObj's content + * at a later time when this function returns. + * + * @since 10 + * @version 1.0 + */ +void OH_PurgeableMemory_EndRead(OH_PurgeableMemory *purgObj); + +/* + * @brief: begin write a PurgMem obj. + * + * + * @param purgObj: a PurgMem obj. + * @return: return true if @purgObj's content is present. + * if content is purged(no present), system will recover its data, + * return false if content is purged and recovered failed. + * While return true if content is successfully recovered. + * OS cannot reclaim the memory of @purgObj's content when this + * function return true, until PurgMemEndWrite() is called. + * + * @since 10 + * @version 1.0 + */ +bool OH_PurgeableMemory_BeginWrite(OH_PurgeableMemory *purgObj); + +/* + * @brief: end write a PurgMem obj. + * + * + * @param purgObj: a PurgMem obj. + * OS may reclaim the memory of @purgObj's content + * at a later time when this function returns. + * + * @since 10 + * @version 1.0 + */ +void OH_PurgeableMemory_EndWrite(OH_PurgeableMemory *purgObj); + +/* + * @brief: get content ptr of a PurgMem obj. + * + * + * @param purgObj: a PurgMem obj. + * @return: return start address of a PurgMem obj's content. + * Return NULL if @purgObj is NULL. + * This function should be protect by PurgMemBeginRead()/PurgMemEndRead() + * or PurgMemBeginWrite()/PurgMemEndWrite() + * + * @since 10 + * @version 1.0 + */ +void *OH_PurgeableMemory_GetContent(OH_PurgeableMemory *purgObj); + +/* + * @brief: get content size of a PurgMem obj. + * + * + * @param purgObj: a PurgMem obj. + * @return: return content size of @purgObj. + * Return 0 if @purgObj is NULL. + * + * @since 10 + * @version 1.0 + */ +size_t OH_PurgeableMemory_ContentSize(OH_PurgeableMemory *purgObj); + +/* + * @brief: append a modify to a PurgMem obj. + * + * + * @param purgObj: a PurgMem obj. + * @param size: data size of a PurgMem obj's content. + * @param func: function pointer, it will modify content of @PurgMem. + * @param funcPara: parameters used by @func. + * @return: append result, true is success, while false is fail. + * + * @since 10 + * @version 1.0 + */ +bool OH_PurgeableMemory_AppendModify(OH_PurgeableMemory *purgObj, + OH_PurgeableMemory_ModifyFunc func, void *funcPara); + +#ifdef __cplusplus +} +#endif /* End of #ifdef __cplusplus */ +#endif /* OHOS_UTILS_MEMORY_LIBPURGEABLEMEM_C_INCLUDE_PURGEABLE_MEMORY_H */ \ No newline at end of file diff --git a/distributeddatamgr/relational_store/BUILD.gn b/distributeddatamgr/relational_store/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..51d6323e4bc53021e4ba858de9d0c67bda776ea3 --- /dev/null +++ b/distributeddatamgr/relational_store/BUILD.gn @@ -0,0 +1,44 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") +import("//foundation/distributeddatamgr/relational_store/relational_store.gni") + +ohos_ndk_headers("native_rdb_ndk_header") { + dest_dir = "$ndk_headers_out_dir/database/rdb/" + sources = [ + "./include/oh_cursor.h", + "./include/oh_predicates.h", + "./include/oh_value_object.h", + "./include/oh_values_bucket.h", + "./include/relational_store.h", + "./include/relational_store_error_code.h", + ] +} + +ohos_ndk_library("libnative_rdb_ndk") { + output_name = "native_rdb_ndk" + system_capability = + "SystemCapability.DistributedDataManager.RelationalStore.Core" + ndk_description_file = "./libnative_rdb.ndk.json" + min_compact_version = "10" + system_capability_headers = [ + "$ndk_headers_out_dir/database/rdb/oh_cursor.h", + "$ndk_headers_out_dir/database/rdb/oh_predicates.h", + "$ndk_headers_out_dir/database/rdb/oh_value_object.h", + "$ndk_headers_out_dir/database/rdb/oh_values_bucket.h", + "$ndk_headers_out_dir/database/rdb/relational_store.h", + "$ndk_headers_out_dir/database/rdb/relational_store_error_code.h", + ] +} diff --git a/distributeddatamgr/relational_store/include/oh_cursor.h b/distributeddatamgr/relational_store/include/oh_cursor.h new file mode 100644 index 0000000000000000000000000000000000000000..165da158ee6c968130b3883150ac7f72b2200b0d --- /dev/null +++ b/distributeddatamgr/relational_store/include/oh_cursor.h @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OH_CURSOR_H +#define OH_CURSOR_H + +/** + * @addtogroup RDB + * @{ + * + * @brief The relational database (RDB) store manages data based on relational models. + * With the underlying SQLite database, the RDB store provides a complete mechanism for managing local databases. + * To satisfy different needs in complicated scenarios, the RDB store offers a series of APIs for performing operations + * such as adding, deleting, modifying, and querying data, and supports direct execution of SQL statements. + * + * @syscap SystemCapability.DistributedDataManager.RelationalStore.Core + * @since 10 + */ + +/** + * @file oh_cursor.h + * + * @brief Provides functions and enumerations related to the resultSet. + * + * @since 10 + */ + +#include +#include +#include +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Indicates the column type. + * + * @since 10 + */ +typedef enum OH_ColumnType { + /** + * Indicates the column type is NULL. + */ + TYPE_NULL = 0, + /** + * Indicates the column type is INT64. + */ + TYPE_INT64, + /** + * Indicates the column type is REAL. + */ + TYPE_REAL, + /** + * Indicates the column type is TEXT. + */ + TYPE_TEXT, + /** + * Indicates the column type is BLOB. + */ + TYPE_BLOB, +} OH_ColumnType; + +/** + * @brief Define the OH_Cursor structure type. + * + * Provides methods for accessing a database result set generated by query the database. + * + * @since 10 + */ +typedef struct OH_Cursor { + /** + * The id used to uniquely identify the OH_Cursor struct. + */ + int64_t id; + /** + * @brief Function pointer. Obtains the total number of columns. + * + * @param cursor Represents a pointer to an {@link OH_Cursor} instance. + * @param count This parameter is the output parameter, and the number of columns is written to this variable. + * @return Returns the status code of the execution. + * @see OH_Cursor. + * @since 10 + */ + int (*getColumnCount)(OH_Cursor *cursor, int *count); + + /** + * @brief Function pointer. Obtains data type of the given column's value. + * + * @param cursor Represents a pointer to an {@link OH_Cursor} instance. + * @param columnIndex Indicates the zero-based index of the target column. + * @param columnType This parameter is the output parameter, and the column value type is written to this variable. + * @return Returns the status code of the execution. + * @see OH_Cursor, OH_ColumnType. + * @since 10 + */ + int (*getColumnType)(OH_Cursor *cursor, int32_t columnIndex, OH_ColumnType *columnType); + + /** + * @brief Function pointer. Obtains the zero-based index for the given column name. + * + * @param cursor Represents a pointer to an {@link OH_Cursor} instance. + * @param name Indicates the name of the column. + * @param columnIndex This parameter is the output parameter, + * and the column index for the given column is written to this variable. + * @return Returns the status code of the execution. + * @see OH_Cursor. + * @since 10 + */ + int (*getColumnIndex)(OH_Cursor *cursor, const char *name, int *columnIndex); + + /** + * @brief Function pointer. Obtains the column name at the given column index. + * + * @param cursor Represents a pointer to an {@link OH_Cursor} instance. + * @param columnIndex Indicates the zero-based column index. + * @param name This parameter is the output parameter, + * and the column name for the given index is written to this variable. + * @param length Indicates the length of the name. + * @return Returns the status code of the execution. + * @see OH_Cursor. + * @since 10 + */ + int (*getColumnName)(OH_Cursor *cursor, int32_t columnIndex, char *name, int length); + + /** + * @brief Function pointer. Obtains the numbers of rows in the result set. + * + * @param cursor Represents a pointer to an {@link OH_Cursor} instance. + * @param count This parameter is the output parameter, + * and the numbers of rows in the result set is written to this variable. + * @return Returns the status code of the execution. + * @see OH_Cursor. + * @since 10 + */ + int (*getRowCount)(OH_Cursor *cursor, int *count); + + /** + * @brief Function pointer. Move the cursor to the next row. + * + * @param cursor Represents a pointer to an {@link OH_Cursor} instance. + * @return Returns the status code of the execution. + * @see OH_Cursor. + * @since 10 + */ + int (*goToNextRow)(OH_Cursor *cursor); + + /** + * @brief Function pointer. Obtains the size of blob or text. + * + * @param cursor Represents a pointer to an {@link OH_Cursor} instance. + * @param columnIndex Indicates the zero-based column index. + * @param size This parameter is the output parameter, + * and the value size of the requested column is written to this variable. + * @return Returns the status code of the execution. + * @see OH_Cursor. + * @since 10 + */ + int (*getSize)(OH_Cursor *cursor, int32_t columnIndex, size_t *size); + + /** + * @brief Function pointer. Obtains the value of the requested column as a string. + * + * @param cursor Represents a pointer to an {@link OH_Cursor} instance. + * @param columnIndex Indicates the zero-based column index. + * @param value This parameter is the output parameter, + * and the value of the requested column as a char * is written to this variable. + * @param length Indicates the length of the value, it can be obtained through the OH_Cursor_GetSize function. + * @return Returns the status code of the execution. + * @see OH_Cursor. + * @since 10 + */ + int (*getText)(OH_Cursor *cursor, int32_t columnIndex, char *value, int length); + + /** + * @brief Function pointer. Obtains the value of the requested column as a int64_t. + * + * @param cursor Represents a pointer to an {@link OH_Cursor} instance. + * @param columnIndex Indicates the zero-based column index. + * @param value This parameter is the output parameter, + * and the value of the requested column as a int64_t is written to this variable. + * @return Returns the status code of the execution. + * @see OH_Cursor. + * @since 10 + */ + int (*getInt64)(OH_Cursor *cursor, int32_t columnIndex, int64_t *value); + + /** + * @brief Function pointer. Obtains the value of the requested column as a double. + * + * @param cursor Represents a pointer to an {@link OH_Cursor} instance. + * @param columnIndex Indicates the zero-based column index. + * @param value This parameter is the output parameter, + * and the value of the requested column as a double is written to this variable. + * @return Returns the status code of the execution. + * @see OH_Cursor. + * @since 10 + */ + int (*getReal)(OH_Cursor *cursor, int32_t columnIndex, double *value); + + /** + * @brief Function pointer. Obtains the value of the requested column as a byte array. + * + * @param cursor Represents a pointer to an {@link OH_Cursor} instance. + * @param columnIndex Indicates the zero-based column index. + * @param value This parameter is the output parameter, + * and the value of the requested column as a byte array is written to this variable. + * @param length Indicates the length of the value, it can be obtained through the OH_Cursor_GetSize function. + * @return Returns the status code of the execution. + * @see OH_Cursor. + * @since 10 + */ + int (*getBlob)(OH_Cursor *cursor, int32_t columnIndex, unsigned char *value, int length); + + /** + * @brief Function pointer. Obtains Whether the value of the requested column is null. + * + * @param cursor Represents a pointer to an {@link OH_Cursor} instance. + * @param columnIndex Indicates the zero-based column index. + * @param isNull This parameter is the output parameter, + * and the value whether the column value is null is written to this variable. + * @return Returns the status code of the execution. + * @see OH_Cursor. + * @since 10 + */ + int (*isNull)(OH_Cursor *cursor, int32_t columnIndex, bool *isNull); + + /** + * @brief Function pointer. Destroy the result set, releasing all of its resources and making it completely invalid. + * + * @param cursor Represents a pointer to an {@link OH_Cursor} instance. + * @return Returns the status code of the execution. + * @see OH_Cursor. + * @since 10 + */ + int (*destroy)(OH_Cursor *cursor); +} OH_Cursor; + +#ifdef __cplusplus +}; +#endif + +#endif // OH_CURSOR_H diff --git a/distributeddatamgr/relational_store/include/oh_predicates.h b/distributeddatamgr/relational_store/include/oh_predicates.h new file mode 100644 index 0000000000000000000000000000000000000000..28808e30ba072bae4ffa1ff8521c7abea8da7bdb --- /dev/null +++ b/distributeddatamgr/relational_store/include/oh_predicates.h @@ -0,0 +1,403 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OH_PREDICATES_H +#define OH_PREDICATES_H + +/** + * @addtogroup RDB + * @{ + * + * @brief The relational database (RDB) store manages data based on relational models. + * With the underlying SQLite database, the RDB store provides a complete mechanism for managing local databases. + * To satisfy different needs in complicated scenarios, the RDB store offers a series of APIs for performing operations + * such as adding, deleting, modifying, and querying data, and supports direct execution of SQL statements. + * + * @syscap SystemCapability.DistributedDataManager.RelationalStore.Core + * @since 10 + */ + +/** + * @file oh_predicates.h + * + * @brief Declared predicate related functions and enumerations. + * + * @since 10 + */ + +#include +#include +#include "oh_value_object.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Result set sort type. + * + * @since 10 + */ +typedef enum OH_OrderType { + /** + * Ascend order. + */ + ASC = 0, + /** + * Descend order. + */ + DESC = 1, +} OH_OrderType; + +/** + * @brief Define the OH_Predicates structure type. + * + * @since 10 + */ +typedef struct OH_Predicates { + /** + * The id used to uniquely identify the OH_Predicates struct. + */ + int64_t id; + + /** + * @brief Function pointer. Restricts the value of the field to be equal to the specified value to the predicates. + * + * This method is similar to = of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param field Indicates the column name in the database table. + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @return Returns the self. + * @see OH_Predicates, OH_VObject. + * @since 10 + */ + OH_Predicates *(*equalTo)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject); + + /** + * @brief Function pointer. + * Restricts the value of the field to be not equal to the specified value to the predicates. + * + * This method is similar to != of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param field Indicates the column name in the database table. + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @return Returns the self. + * @see OH_Predicates, OH_VObject. + * @since 10 + */ + OH_Predicates *(*notEqualTo)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject); + + /** + * @brief Function pointer. Add left parenthesis to predicate. + * + * This method is similar to ( of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @return Returns the self. + * @see OH_Predicates. + * @since 10 + */ + OH_Predicates *(*beginWrap)(OH_Predicates *predicates); + + /** + * @brief Function pointer. Add right parenthesis to predicate. + * + * This method is similar to ) of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @return Returns the self. + * @see OH_Predicates. + * @since 10 + */ + OH_Predicates *(*endWrap)(OH_Predicates *predicates); + + /** + * @brief Function pointer. Adds an or condition to the predicates. + * + * This method is similar to OR of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @return Returns the self. + * @see OH_Predicates. + * @since 10 + */ + OH_Predicates *(*orOperate)(OH_Predicates *predicates); + + /** + * @brief Function pointer. Adds an and condition to the predicates. + * + * This method is similar to AND of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @return Returns the self. + * @see OH_Predicates. + * @since 10 + */ + OH_Predicates *(*andOperate)(OH_Predicates *predicates); + + /** + * @brief Function pointer. Restricts the value of the field which is null to the predicates. + * + * This method is similar to IS NULL of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param field Indicates the column name in the database table. + * @return Returns the self. + * @see OH_Predicates. + * @since 10 + */ + OH_Predicates *(*isNull)(OH_Predicates *predicates, const char *field); + + /** + * @brief Function pointer. Restricts the value of the field which is not null to the predicates. + * + * This method is similar to IS NOT NULL of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param field Indicates the column name in the database table. + * @return Returns the self. + * @see OH_Predicates. + * @since 10 + */ + OH_Predicates *(*isNotNull)(OH_Predicates *predicates, const char *field); + + /** + * @brief Function pointer. Restricts the value of the field to be like the specified value to the predicates. + * + * This method is similar to LIKE of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param field Indicates the column name in the database table. + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @return Returns the self. + * @see OH_Predicates, OH_VObject. + * @since 10 + */ + OH_Predicates *(*like)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject); + + /** + * @brief Function pointer. Restricts the value of the field to be between the specified value to the predicates. + * + * This method is similar to BETWEEN of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param field Indicates the column name in the database table. + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @return Returns the self. + * @see OH_Predicates, OH_VObject. + * @since 10 + */ + OH_Predicates *(*between)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject); + + /** + * @brief Function pointer. + * Restricts the value of the field to be not between the specified value to the predicates. + * + * This method is similar to NOT BETWEEN of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param field Indicates the column name in the database table. + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @return Returns the self. + * @see OH_Predicates, OH_VObject. + * @since 10 + */ + OH_Predicates *(*notBetween)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject); + + /** + * @brief Function pointer. + * Restricts the value of the field to be greater than the specified value to the predicates. + * + * This method is similar to > of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param field Indicates the column name in the database table. + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @return Returns the self. + * @see OH_Predicates, OH_VObject. + * @since 10 + */ + OH_Predicates *(*greaterThan)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject); + + /** + * @brief Function pointer. + * Restricts the value of the field to be less than the specified value to the predicates. + * + * This method is similar to < of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param field Indicates the column name in the database table. + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @return Returns the self. + * @see OH_Predicates, OH_VObject. + * @since 10 + */ + OH_Predicates *(*lessThan)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject); + + /** + * @brief Function pointer. + * Restricts the value of the field to be greater than or equal to the specified value to the predicates. + * + * This method is similar to >= of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param field Indicates the column name in the database table. + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @return Returns the self. + * @see OH_Predicates, OH_VObject. + * @since 10 + */ + OH_Predicates *(*greaterThanOrEqualTo)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject); + + /** + * @brief Function pointer. + * Restricts the value of the field to be less than or equal to the specified value to the predicates. + * + * This method is similar to <= of the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param field Indicates the column name in the database table. + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @return Returns the self. + * @see OH_Predicates, OH_VObject. + * @since 10 + */ + OH_Predicates *(*lessThanOrEqualTo)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject); + + /** + * @brief Function pointer. Restricts the ascending or descending order of the return list. + * When there are several orders, the one close to the head has the highest priority. + * + * This method is similar ORDER BY the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param field Indicates the column name in the database table. + * @param type Indicates the sort {@link OH_OrderType} type. + * @return Returns the self. + * @see OH_Predicates, OH_OrderType. + * @since 10 + */ + OH_Predicates *(*orderBy)(OH_Predicates *predicates, const char *field, OH_OrderType type); + + /** + * @brief Function pointer. Configure predicates to filter duplicate records and retain only one of them. + * + * This method is similar DISTINCT the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @return Returns the self. + * @see OH_Predicates. + * @since 10 + */ + OH_Predicates *(*distinct)(OH_Predicates *predicates); + + /** + * @brief Function pointer. Predicate for setting the maximum number of data records. + * + * This method is similar LIMIT the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param value Indicates the maximum number of records. + * @return Returns the self. + * @see OH_Predicates. + * @since 10 + */ + OH_Predicates *(*limit)(OH_Predicates *predicates, unsigned int value); + + /** + * @brief Function pointer. Configure the predicate to specify the starting position of the returned result. + * + * This method is similar OFFSET the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param rowOffset Indicates the number of rows to offset from the beginning. The value is a positive integer. + * @return Returns the self. + * @see OH_Predicates. + * @since 10 + */ + OH_Predicates *(*offset)(OH_Predicates *predicates, unsigned int rowOffset); + + /** + * @brief Function pointer. Configure predicates to group query results by specified columns. + * + * This method is similar GROUP BY the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param fields Indicates the column names that the grouping depends on. + * @param length Indicates the length of fields. + * @return Returns the self. + * @see OH_Predicates. + * @since 10 + */ + OH_Predicates *(*groupBy)(OH_Predicates *predicates, char const *const *fields, int length); + + /** + * @brief Function pointer. + * Configure the predicate to match the specified field and the value within the given array range. + * + * This method is similar IN the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param field Indicates the column name in the database table. + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @return Returns the self. + * @see OH_Predicates, OH_VObject. + * @since 10 + */ + OH_Predicates *(*in)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject); + + /** + * @brief Function pointer. + * Configure the predicate to match the specified field and the value not within the given array range. + * + * This method is similar NOT IN the SQL statement. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @param field Indicates the column name in the database table. + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @return Returns the self. + * @see OH_Predicates, OH_VObject. + * @since 10 + */ + OH_Predicates *(*notIn)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject); + + /** + * @brief Function pointer. Initialize OH_Predicates object. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @return Returns the self. + * @see OH_Predicates. + * @since 10 + */ + OH_Predicates *(*clear)(OH_Predicates *predicates); + + /** + * @brief Destroy the {@link OH_Predicates} object and reclaim the memory occupied by the object. + * + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * @return Returns the status code of the execution.. + * @see OH_Predicates. + * @since 10 + */ + int (*destroy)(OH_Predicates *predicates); +} OH_Predicates; + +#ifdef __cplusplus +}; +#endif + +#endif // OH_PREDICATES_H diff --git a/distributeddatamgr/relational_store/include/oh_value_object.h b/distributeddatamgr/relational_store/include/oh_value_object.h new file mode 100644 index 0000000000000000000000000000000000000000..f8ddd1a6691917c54514a505cca3a43543df5dad --- /dev/null +++ b/distributeddatamgr/relational_store/include/oh_value_object.h @@ -0,0 +1,120 @@ +/* +* Copyright (c) 2023 Huawei Device Co., Ltd. +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef OH_VALUE_OBJECT_H +#define OH_VALUE_OBJECT_H + +/** + * @addtogroup RDB + * @{ + * + * @brief The relational database (RDB) store manages data based on relational models. + * With the underlying SQLite database, the RDB store provides a complete mechanism for managing local databases. + * To satisfy different needs in complicated scenarios, the RDB store offers a series of APIs for performing operations + * such as adding, deleting, modifying, and querying data, and supports direct execution of SQL statements. + * + * @syscap SystemCapability.DistributedDataManager.RelationalStore.Core + * @since 10 + */ + +/** + * @file oh_value_object.h + * + * @brief Provides numeric type conversion functions. + * + * @since 10 + */ + +#include +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Define the OH_VObject structure type. + * + * @since 10 + */ +typedef struct OH_VObject { + /** + * The id used to uniquely identify the OH_VObject struct. + */ + int64_t id; + + /** + * @brief Convert the int64 input parameter to a value of type {@link OH_VObject}. + * + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @param value Represents a pointer to an int64_t input parameter or the array of type int64_t. + * @param count If value is a pointer to a single numerical value, count = 1; + * if value is a pointer to an array, count is the size of the array. + * @return Returns the status code of the execution. + * @see OH_VObject. + * @since 10 + */ + int (*putInt64)(OH_VObject *valueObject, int64_t *value, uint32_t count); + + /** + * @brief Convert the double input parameter to a value of type {@link OH_VObject}. + * + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @param value Represents a pointer to an double input parameter or the array of type double. + * @param count If value is a pointer to a single numerical value, count = 1; + * if value is a pointer to an array, count is the size of the array. + * @return Returns the status code of the execution. + * @see OH_VObject. + * @since 10 + */ + int (*putDouble)(OH_VObject *valueObject, double *value, uint32_t count); + + /** + * @brief Convert the char input parameter to a value of type {@link OH_VObject}. + * + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @param value Indicates the const char * input parameter. + * @return Returns the status code of the execution. + * @see OH_VObject. + * @since 10 + */ + int (*putText)(OH_VObject *valueObject, const char *value); + + /** + * @brief Convert the char * array input parameter to a value of type {@link OH_VObject}. + * + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @param value Indicates the const char * array input parameter. + * @param count Indicates the size of the value. + * @return Returns the status code of the execution. + * @see OH_VObject. + * @since 10 + */ + int (*putTexts)(OH_VObject *valueObject, const char **value, uint32_t count); + + /** + * @brief Destroy the {@link OH_VObject} object and reclaim the memory occupied by the object. + * + * @param valueObject Represents a pointer to an {@link OH_VObject} instance. + * @return Returns the status code of the execution. + * @see OH_VObject. + * @since 10 + */ + int (*destroy)(OH_VObject *valueObject); +} OH_VObject; + +#ifdef __cplusplus +}; +#endif + +#endif // OH_VALUE_OBJECT_H diff --git a/distributeddatamgr/relational_store/include/oh_values_bucket.h b/distributeddatamgr/relational_store/include/oh_values_bucket.h new file mode 100644 index 0000000000000000000000000000000000000000..e966956b68a49fc04e7adda371c2c57cd10ef29c --- /dev/null +++ b/distributeddatamgr/relational_store/include/oh_values_bucket.h @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OH_VALUES_BUCKET_H +#define OH_VALUES_BUCKET_H + +/** + * @addtogroup RDB + * @{ + * + * @brief The relational database (RDB) store manages data based on relational models. + * With the underlying SQLite database, the RDB store provides a complete mechanism for managing local databases. + * To satisfy different needs in complicated scenarios, the RDB store offers a series of APIs for performing operations + * such as adding, deleting, modifying, and querying data, and supports direct execution of SQL statements. + * + * @syscap SystemCapability.DistributedDataManager.RelationalStore.Core + * @since 10 + */ + +/** + * @file oh_values_bucket.h + * + * @brief Define the type of stored key value pairs. + * + * @since 10 + */ + +#include +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Define the OH_VBucket structure type. + * + * @since 10 + */ +typedef struct OH_VBucket { + /** + * The id used to uniquely identify the OH_VBucket struct. + */ + int64_t id; + + /** + * Indicates the capability of OH_VBucket. + */ + uint16_t capability; + + /** + * @brief Put the const char * value to this {@link OH_VBucket} object for the given column name. + * + * @param bucket Represents a pointer to an {@link OH_VBucket} instance. + * @param field Indicates the name of the column. + * @param value Indicates the const char * value. + * @return Returns the status code of the execution. + * @see OH_VBucket. + * @since 10 + */ + int (*putText)(OH_VBucket *bucket, const char *field, const char *value); + + /** + * @brief Put the int64 value to this {@link OH_VBucket} object for the given column name. + * + * @param bucket Represents a pointer to an {@link OH_VBucket} instance. + * @param field Indicates the name of the column. + * @param value Indicates the int64 value. + * @return Returns the status code of the execution. + * @see OH_VBucket. + * @since 10 + */ + int (*putInt64)(OH_VBucket *bucket, const char *field, int64_t value); + + /** + * @brief Put the double value to this {@link OH_VBucket} object for the given column name. + * + * @param bucket Represents a pointer to an {@link OH_VBucket} instance. + * @param field Indicates the name of the column. + * @param value Indicates the double value. + * @return Returns the status code of the execution. + * @see OH_VBucket. + * @since 10 + */ + int (*putReal)(OH_VBucket *bucket, const char *field, double value); + + /** + * @brief Put the const uint8_t * value to this {@link OH_VBucket} object for the given column name. + * + * @param bucket Represents a pointer to an {@link OH_VBucket} instance. + * @param field Indicates the name of the column. + * @param value Indicates the const uint8_t * value. + * @param size Indicates the size of value. + * @return Returns the status code of the execution. + * @see OH_VBucket. + * @since 10 + */ + int (*putBlob)(OH_VBucket *bucket, const char *field, const uint8_t *value, uint32_t size); + + /** + * @brief Put NULL to this {@link OH_VBucket} object for the given column name. + * + * @param bucket Represents a pointer to an {@link OH_VBucket} instance. + * @param field Indicates the name of the column. + * @return Returns the status code of the execution. + * @see OH_VBucket. + * @since 10 + */ + int (*putNull)(OH_VBucket *bucket, const char *field); + + /** + * @brief Clear the {@link OH_VBucket} object's values. + * + * @param bucket Represents a pointer to an {@link OH_VBucket} instance. + * @return Returns the status code of the execution. + * @see OH_VBucket. + * @since 10 + */ + int (*clear)(OH_VBucket *bucket); + + /** + * @brief Destroy the {@link OH_VBucket} object and reclaim the memory occupied by the object. + * + * @param bucket Represents a pointer to an {@link OH_VBucket} instance. + * @return Returns the status code of the execution. + * @see OH_VBucket. + * @since 10 + */ + int (*destroy)(OH_VBucket *bucket); +} OH_VBucket; + +#ifdef __cplusplus +}; +#endif + +#endif // OH_VALUES_BUCKET_H diff --git a/distributeddatamgr/relational_store/include/relational_store.h b/distributeddatamgr/relational_store/include/relational_store.h new file mode 100644 index 0000000000000000000000000000000000000000..7b009ec34bb0f750e0d0d61a99ab534409a7f982 --- /dev/null +++ b/distributeddatamgr/relational_store/include/relational_store.h @@ -0,0 +1,350 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RELATIONAL_STORE_H +#define RELATIONAL_STORE_H + +/** + * @addtogroup RDB + * @{ + * + * @brief The relational database (RDB) store manages data based on relational models. + * With the underlying SQLite database, the RDB store provides a complete mechanism for managing local databases. + * To satisfy different needs in complicated scenarios, the RDB store offers a series of APIs for performing operations + * such as adding, deleting, modifying, and querying data, and supports direct execution of SQL statements. + * + * @syscap SystemCapability.DistributedDataManager.RelationalStore.Core + * @since 10 + */ + +/** + * @file relational_store.h + * + * @brief Provides database related functions and enumerations. + * + * @since 10 + */ + +#include "oh_cursor.h" +#include "oh_predicates.h" +#include "oh_value_object.h" +#include "oh_values_bucket.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Describe the security level of the database. + * + * @since 10 + */ +typedef enum OH_Rdb_SecurityLevel { + /** + * @brief Low-level security. Data leaks have a minor impact. + */ + S1 = 1, + /** + * @brief Medium-level security. Data leaks have a major impact. + */ + S2, + /** + * @brief High-level security. Data leaks have a severe impact. + */ + S3, + /** + * @brief Critical-level security. Data leaks have a critical impact. + */ + S4 +} OH_Rdb_SecurityLevel; + +/** + * @brief Manages relational database configurations. + * + * @since 10 + */ +#pragma pack(1) +typedef struct { + /** + * Indicates the size of the {@link OH_Rdb_Config}. It is mandatory. + */ + int selfSize; + /** + * Indicates the directory of the database. + */ + const char *dataBaseDir; + /** + * Indicates the name of the database. + */ + const char *storeName; + /** + * Indicates the bundle name of the application. + */ + const char *bundleName; + /** + * Indicates the module name of the application. + */ + const char *moduleName; + /** + * Indicates whether the database is encrypted. + */ + bool isEncrypt; + /** + * Indicates the security level {@link OH_Rdb_SecurityLevel} of the database. + */ + int securityLevel; +} OH_Rdb_Config; +#pragma pack() + +/** + * @brief Define OH_Rdb_Store type. + * + * @since 10 + */ +typedef struct { + /** + * The id used to uniquely identify the OH_Rdb_Store struct. + */ + int64_t id; +} OH_Rdb_Store; + +/** + * @brief Creates an {@link OH_VObject} instance. + * + * @return If the creation is successful, a pointer to the instance of the @link OH_VObject} structure is returned, + * otherwise NULL is returned. + * @see OH_VObject. + * @since 10 + */ +OH_VObject *OH_Rdb_CreateValueObject(); + +/** + * @brief Creates an {@link OH_VBucket} object. + * + * @return If the creation is successful, a pointer to the instance of the @link OH_VBucket} structure is returned, + * otherwise NULL is returned. + * @see OH_VBucket. + * @since 10 + */ +OH_VBucket *OH_Rdb_CreateValuesBucket(); + +/** + * @brief Creates an {@link OH_Predicates} instance. + * + * @param table Indicates the table name. + * @return If the creation is successful, a pointer to the instance of the @link OH_Predicates} structure is returned, + * otherwise NULL is returned. + * @see OH_Predicates. + * @since 10 + */ +OH_Predicates *OH_Rdb_CreatePredicates(const char *table); + +/** + * @brief Obtains an RDB store. + * + * You can set parameters of the RDB store as required. In general, + * this method is recommended to obtain a rdb store. + * + * @param config Represents a pointer to an {@link OH_Rdb_Config} instance. + * Indicates the configuration of the database related to this RDB store. + * @param errCode This parameter is the output parameter, + * and the execution status of a function is written to this variable. + * @return If the creation is successful, a pointer to the instance of the @link OH_Rdb_Store} structure is returned, + * otherwise NULL is returned. + * @see OH_Rdb_Config, OH_Rdb_Store. + * @since 10 + */ +OH_Rdb_Store *OH_Rdb_GetOrOpen(const OH_Rdb_Config *config, int *errCode); + +/** + * @brief Close the {@link OH_Rdb_Store} object and reclaim the memory occupied by the object. + * + * @param store Represents a pointer to an {@link OH_Rdb_Store} instance. + * @return Returns the status code of the execution. Successful execution returns RDB_OK, + * while failure returns a specific error code. Specific error codes can be referenced {@link OH_Rdb_ErrCode}. + * @see OH_Rdb_Store, OH_Rdb_ErrCode. + * @since 10 + */ +int OH_Rdb_CloseStore(OH_Rdb_Store *store); + +/** + * @brief Deletes the database with a specified path. + * + * @param config Represents a pointer to an {@link OH_Rdb_Config} instance. + * Indicates the configuration of the database related to this RDB store. + * @return Returns the status code of the execution. Successful execution returns RDB_OK, + * while failure returns a specific error code. Specific error codes can be referenced {@link OH_Rdb_ErrCode}. + * @see OH_Rdb_ErrCode. + * @since 10 + */ +int OH_Rdb_DeleteStore(const OH_Rdb_Config *config); + +/** + * @brief Inserts a row of data into the target table. + * + * @param store Represents a pointer to an {@link OH_Rdb_Store} instance. + * @param table Indicates the target table. + * @param valuesBucket Indicates the row of data {@link OH_VBucket} to be inserted into the table. + * @return Returns the rowId if success, returns a specific error code. + * Specific error codes can be referenced {@link OH_Rdb_ErrCode}. + * @see OH_Rdb_Store, OH_VBucket, OH_Rdb_ErrCode. + * @since 10 + */ +int OH_Rdb_Insert(OH_Rdb_Store *store, const char *table, OH_VBucket *valuesBucket); + +/** + * @brief Updates data in the database based on specified conditions. + * + * @param store Represents a pointer to an {@link OH_Rdb_Store} instance. + * @param valuesBucket Indicates the row of data {@link OH__VBucket} to be updated in the database + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * Indicates the specified update condition. + * @return Returns the number of rows changed if success, otherwise, returns a specific error code. + * Specific error codes can be referenced {@link OH_Rdb_ErrCode}. + * @see OH_Rdb_Store, OH_Bucket, OH_Predicates, OH_Rdb_ErrCode. + * @since 10 + */ +int OH_Rdb_Update(OH_Rdb_Store *store, OH_VBucket *valuesBucket, OH_Predicates *predicates); + +/** + * @brief Deletes data from the database based on specified conditions. + * + * @param store Represents a pointer to an {@link OH_Rdb_Store} instance. + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * Indicates the specified delete condition. + * @return Returns the number of rows changed if success, otherwise, returns a specific error code. + * Specific error codes can be referenced {@link OH_Rdb_ErrCode}. + * @see OH_Rdb_Store, OH_Predicates, OH_Rdb_ErrCode. + * @since 10 + */ +int OH_Rdb_Delete(OH_Rdb_Store *store, OH_Predicates *predicates); + +/** + * @brief Queries data in the database based on specified conditions. + * + * @param store Represents a pointer to an {@link OH_Rdb_Store} instance. + * @param predicates Represents a pointer to an {@link OH_Predicates} instance. + * Indicates the specified query condition. + * @param columnNames Indicates the columns to query. If the value is empty array, the query applies to all columns. + * @param length Indicates the length of columnNames. + * @return If the query is successful, a pointer to the instance of the @link OH_Cursor} structure is returned, + * otherwise NULL is returned. + * @see OH_Rdb_Store, OH_Predicates, OH_Cursor. + * @since 10 + */ +OH_Cursor *OH_Rdb_Query(OH_Rdb_Store *store, OH_Predicates *predicates, const char *const *columnNames, int length); + +/** + * @brief Executes an SQL statement. + * + * @param store Represents a pointer to an {@link OH_Rdb_Store} instance. + * @param sql Indicates the SQL statement to execute. + * @return Returns the status code of the execution. + * @see OH_Rdb_Store. + * @since 10 + */ +int OH_Rdb_Execute(OH_Rdb_Store *store, const char *sql); + +/** + * @brief Queries data in the database based on an SQL statement. + * + * @param store Represents a pointer to an {@link OH_Rdb_Store} instance. + * @param sql Indicates the SQL statement to execute. + * @return If the query is successful, a pointer to the instance of the @link OH_Cursor} structure is returned, + * otherwise NULL is returned. + * @see OH_Rdb_Store. + * @since 10 + */ +OH_Cursor *OH_Rdb_ExecuteQuery(OH_Rdb_Store *store, const char *sql); + +/** + * @brief Begins a transaction in EXCLUSIVE mode. + * + * @param store Represents a pointer to an {@link OH_Rdb_Store} instance. + * @return Returns the status code of the execution. + * @see OH_Rdb_Store. + * @since 10 + */ +int OH_Rdb_BeginTransaction(OH_Rdb_Store *store); + +/** + * @brief Rolls back a transaction in EXCLUSIVE mode. + * + * @param store Represents a pointer to an {@link OH_Rdb_Store} instance. + * @return Returns the status code of the execution. + * @see OH_Rdb_Store. + * @since 10 + */ +int OH_Rdb_RollBack(OH_Rdb_Store *store); + +/** + * @brief Commits a transaction in EXCLUSIVE mode. + * + * @param store Represents a pointer to an {@link OH_Rdb_Store} instance. + * @return Returns the status code of the execution. + * @see OH_Rdb_Store. + * @since 10 + */ +int OH_Rdb_Commit(OH_Rdb_Store *store); + +/** + * @brief Backs up a database on specified path. + * + * @param store Represents a pointer to an {@link OH_Rdb_Store} instance. + * @param databasePath Indicates the database file path. + * @return Returns the status code of the execution. + * @see OH_Rdb_Store. + * @since 10 + */ +int OH_Rdb_Backup(OH_Rdb_Store *store, const char *databasePath); + +/** + * @brief Restores a database from a specified database file. + * + * @param store Represents a pointer to an {@link OH_Rdb_Store} instance. + * @param databasePath Indicates the database file path. + * @return Returns the status code of the execution. + * @see OH_Rdb_Store. + * @since 10 + */ +int OH_Rdb_Restore(OH_Rdb_Store *store, const char *databasePath); + +/** + * @brief Gets the version of a database. + * + * @param store Represents a pointer to an {@link OH_Rdb_Store} instance. + * @param version Indicates the version number. + * @return Returns the status code of the execution. + * @see OH_Rdb_Store. + * @since 10 + */ +int OH_Rdb_GetVersion(OH_Rdb_Store *store, int *version); + +/** + * @brief Sets the version of a database. + * + * @param store Represents a pointer to an {@link OH_Rdb_Store} instance. + * @param version Indicates the version number. + * @return Returns the status code of the execution. + * @see OH_Rdb_Store. + * @since 10 + */ +int OH_Rdb_SetVersion(OH_Rdb_Store *store, int version); + +#ifdef __cplusplus +}; +#endif + +#endif // RELATIONAL_STORE_H diff --git a/distributeddatamgr/relational_store/include/relational_store_error_code.h b/distributeddatamgr/relational_store/include/relational_store_error_code.h new file mode 100644 index 0000000000000000000000000000000000000000..6efa0ee28ba89eb3ff30936133eecb2a91578f2e --- /dev/null +++ b/distributeddatamgr/relational_store/include/relational_store_error_code.h @@ -0,0 +1,316 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RELATIONAL_STORE_ERRNO_CODE_H +#define RELATIONAL_STORE_ERRNO_CODE_H + +/** + * @addtogroup RDB + * @{ + * + * @brief The relational database (RDB) store manages data based on relational models. + * With the underlying SQLite database, the RDB store provides a complete mechanism for managing local databases. + * To satisfy different needs in complicated scenarios, the RDB store offers a series of APIs for performing operations + * such as adding, deleting, modifying, and querying data, and supports direct execution of SQL statements. + * + * @syscap SystemCapability.DistributedDataManager.RelationalStore.Core + * @since 10 + */ + + +/** + * @file relational_store_error_code.h + * + * @brief Declaration error code information. + * + * @since 10 + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Indicates the error code information. + * + * @since 10 + */ +typedef enum OH_Rdb_ErrCode { + /** + * Indicates that the function execution exception. + */ + RDB_ERR = -1, + + /** + * The error code in the correct case. + */ + RDB_OK = 0, + + /** + * @brief The base code of the exception error code. + */ + E_BASE = 14800000, + + /** + * @brief The error when the capability not supported. + */ + RDB_E_NOT_SUPPORTED = 801, + + /** + * @brief The error code for common exceptions. + */ + RDB_E_ERROR = E_BASE, + + /** + * @brief The error code for common invalid args. + */ + RDB_E_INVALID_ARGS = (E_BASE + 1), + + /** + * @brief The error code for upgrade the read-only store. + */ + RDB_E_CANNOT_UPDATE_READONLY = (E_BASE + 2), + + /** + * @brief The error code when deleting a file fails. + */ + RDB_E_REMOVE_FILE = (E_BASE + 3), + + /** + * @brief The error code for a table name is empty. + */ + RDB_E_EMPTY_TABLE_NAME = (E_BASE + 5), + + /** + * @brief The error code for a values bucket is empty. + */ + RDB_E_EMPTY_VALUES_BUCKET = (E_BASE + 6), + + /** + * @brief The error code when the sql is not select. + */ + RDB_E_EXECUTE_IN_STEP_QUERY = (E_BASE + 7), + + /** + * @brief The error code for the column index is invalid. + */ + RDB_E_INVALID_COLUMN_INDEX = (E_BASE + 8), + + /** + * @brief The error code for the column type is invalid. + */ + RDB_E_INVALID_COLUMN_TYPE = (E_BASE + 9), + + /** + * @brief The error code for a file name is empty. + */ + RDB_E_EMPTY_FILE_NAME = (E_BASE + 10), + + /** + * @brief The error for the current file path is invalid. + */ + RDB_E_INVALID_FILE_PATH = (E_BASE + 11), + + /** + * @brief The error code when using transactions. + */ + RDB_E_TRANSACTION_IN_EXECUTE = (E_BASE + 12), + + /** + * @brief The error code for the current status is invalid. + */ + RDB_E_INVALID_STATEMENT = (E_BASE + 13), + + /** + * @brief The error code when execute write operation in read connection. + */ + RDB_E_EXECUTE_WRITE_IN_READ_CONNECTION = (E_BASE + 14), + + /** + * @brief The error code for execute begin transaction operation in read connection. + */ + RDB_E_BEGIN_TRANSACTION_IN_READ_CONNECTION = (E_BASE + 15), + + /** + * @brief The error code for there are no transactions in this connection. + */ + RDB_E_NO_TRANSACTION_IN_SESSION = (E_BASE + 16), + + /** + * @brief The error code when begin more step query in one session. + */ + RDB_E_MORE_STEP_QUERY_IN_ONE_SESSION = (E_BASE + 17), + + /** + * @brief The error code when the current statement doesn't contains one row result data. + */ + RDB_E_NO_ROW_IN_QUERY = (E_BASE + 18), + + /** + * @brief The error code for the bind arguments count is invalid. + */ + RDB_E_INVALID_BIND_ARGS_COUNT = (E_BASE + 19), + + /** + * @brief The error code for the object type is invalid. + */ + RDB_E_INVALID_OBJECT_TYPE = (E_BASE + 20), + + /** + * @brief The error code for the conflict flag is invalid. + */ + RDB_E_INVALID_CONFLICT_FLAG = (E_BASE + 21), + + /** + * @brief The error code for having clause not in group. + */ + RDB_E_HAVING_CLAUSE_NOT_IN_GROUP_BY = (E_BASE + 22), + + /** + * @brief The error code for not supported by step result set. + */ + RDB_E_NOT_SUPPORTED_BY_STEP_RESULT_SET = (E_BASE + 23), + + /** + * @brief The error code for step result current tid not equal to object's tid. + */ + RDB_E_STEP_RESULT_SET_CROSS_THREADS = (E_BASE + 24), + + /** + * @brief The error code when the result query was not executed. + */ + RDB_E_STEP_RESULT_QUERY_NOT_EXECUTED = (E_BASE + 25), + + /** + * @brief The error code for the result set cursor is after the last row. + */ + RDB_E_STEP_RESULT_IS_AFTER_LAST = (E_BASE + 26), + + /** + * @brief The error code for the result set query exceeded. + */ + RDB_E_STEP_RESULT_QUERY_EXCEEDED = (E_BASE + 27), + + /** + * @brief The error code for the statement not prepared. + */ + RDB_E_STATEMENT_NOT_PREPARED = (E_BASE + 28), + + /** + * @brief The error code for the result set is incorrect. + */ + RDB_E_EXECUTE_RESULT_INCORRECT = (E_BASE + 29), + + /** + * @brief The error code when the result set is closed. + */ + RDB_E_STEP_RESULT_CLOSED = (E_BASE + 30), + + /** + * @brief The error code when input relative path. + */ + RDB_E_RELATIVE_PATH = (E_BASE + 31), + + /** + * @brief The error code for the new encrypt key is empty. + */ + RDB_E_EMPTY_NEW_ENCRYPT_KEY = (E_BASE + 32), + + /** + * @brief The error code for change unencrypted to encrypted. + */ + RDB_E_CHANGE_UNENCRYPTED_TO_ENCRYPTED = (E_BASE + 33), + + /** + * @brief The error code for change encrypt in busy. + */ + RDB_E_CHANGE_ENCRYPT_KEY_IN_BUSY = (E_BASE + 34), + + /** + * @brief The error code when the statement not initialized. + */ + RDB_E_STEP_STATEMENT_NOT_INIT = (E_BASE + 35), + + /** + * @brief The error code for the attach is not supported in WAL journal mode. + */ + RDB_E_NOT_SUPPORTED_ATTACH_IN_WAL_MODE = (E_BASE + 36), + + /** + * @brief The error code when create folder failed. + */ + RDB_E_CREATE_FOLDER_FAIL = (E_BASE + 37), + + /** + * @brief The error for SQL builder normalize failed. + */ + RDB_E_SQLITE_SQL_BUILDER_NORMALIZE_FAIL = (E_BASE + 38), + + /** + * @brief The error for store session not give connection temporarily. + */ + RDB_E_STORE_SESSION_NOT_GIVE_CONNECTION_TEMPORARILY = (E_BASE + 39), + + /** + * @brief The error for store session not current transaction. + */ + RDB_E_STORE_SESSION_NO_CURRENT_TRANSACTION = (E_BASE + 40), + + /** + * @brief The error for not supported the current operation. + */ + RDB_E_NOT_SUPPORT = (E_BASE + 41), + + /** + * @brief The error for the current parcel is invalid. + */ + RDB_E_INVALID_PARCEL = (E_BASE + 42), + + /** + * @brief The error code when using sqlite3_step function failed. + */ + RDB_E_QUERY_IN_EXECUTE = (E_BASE + 43), + + /** + * @brief The error for set persist WAL. + */ + RDB_E_SET_PERSIST_WAL = (E_BASE + 44), + + /** + * @brief The error when the database does not exist. + */ + RDB_E_DB_NOT_EXIST = (E_BASE + 45), + + /** + * @brief The error when the read connection count is overload. + */ + RDB_E_ARGS_READ_CON_OVERLOAD = (E_BASE + 46), + + /** + * @brief The error when the wal file size over default limit. + */ + RDB_E_WAL_SIZE_OVER_LIMIT = (E_BASE + 47), + + /** + * @brief The error when the connection count is used up. + */ + RDB_E_CON_OVER_LIMIT = (E_BASE + 48) +} OH_Rdb_ErrCode; + +#ifdef __cplusplus +}; +#endif + +#endif // RELATIONAL_STORE_ERRNO_CODE_H \ No newline at end of file diff --git a/distributeddatamgr/relational_store/libnative_rdb.ndk.json b/distributeddatamgr/relational_store/libnative_rdb.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..84901bb5404a0d1dd5886ce860473a2756d7e697 --- /dev/null +++ b/distributeddatamgr/relational_store/libnative_rdb.ndk.json @@ -0,0 +1,21 @@ +[ + {"name":"OH_Rdb_CreatePredicates" }, + {"name":"OH_Rdb_CreateValueObject" }, + {"name":"OH_Rdb_CreateValuesBucket" }, + {"name":"OH_Rdb_GetOrOpen" }, + {"name":"OH_Rdb_CloseStore" }, + {"name":"OH_Rdb_DeleteStore" }, + {"name":"OH_Rdb_Insert" }, + {"name":"OH_Rdb_Update" }, + {"name":"OH_Rdb_Delete" }, + {"name":"OH_Rdb_Query" }, + {"name":"OH_Rdb_Execute" }, + {"name":"OH_Rdb_ExecuteQuery" }, + {"name":"OH_Rdb_BeginTransaction" }, + {"name":"OH_Rdb_RollBack" }, + {"name":"OH_Rdb_Commit" }, + {"name":"OH_Rdb_Backup" }, + {"name":"OH_Rdb_Restore"}, + {"name":"OH_Rdb_GetVersion"}, + {"name":"OH_Rdb_SetVersion"} +] \ No newline at end of file diff --git a/drivers/external_device_manager/usb/BUILD.gn b/drivers/external_device_manager/usb/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..36f24db18b6c23f77e402e9aa1869ef846057c82 --- /dev/null +++ b/drivers/external_device_manager/usb/BUILD.gn @@ -0,0 +1,33 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +ohos_ndk_headers("usb_header") { + dest_dir = "$ndk_headers_out_dir/usb/" + sources = [ + "usb_ddk_api.h", + "usb_ddk_types.h", + ] +} + +ohos_ndk_library("libusb_ndk") { + ndk_description_file = "./libusb.ndk.json" + min_compact_version = "9" + output_name = "usb_ndk" + system_capability = "SystemCapability.Driver.USB.Extension" + system_capability_headers = [ + "usb/usb_ddk_api.h", + "usb/usb_ddk_types.h", + ] +} diff --git a/drivers/external_device_manager/usb/libusb.ndk.json b/drivers/external_device_manager/usb/libusb.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..4cc70335ebfd13b107221726951e4b6fa9a33e06 --- /dev/null +++ b/drivers/external_device_manager/usb/libusb.ndk.json @@ -0,0 +1,44 @@ +[ + { + "name": "OH_Usb_Init" + }, + { + "name": "OH_Usb_Release" + }, + { + "name": "OH_Usb_GetDeviceDescriptor" + }, + { + "name": "OH_Usb_GetConfigDescriptor" + }, + { + "name": "OH_Usb_FreeConfigDescriptor" + }, + { + "name": "OH_Usb_ClaimInterface" + }, + { + "name": "OH_Usb_ReleaseInterface" + }, + { + "name": "OH_Usb_SelectInterfaceSetting" + }, + { + "name": "OH_Usb_GetCurrentInterfaceSetting" + }, + { + "name": "OH_Usb_SendControlReadRequest" + }, + { + "name": "OH_Usb_SendControlWriteRequest" + }, + { + "name": "OH_Usb_SendPipeRequest" + }, + { + "name": "OH_Usb_CreateDeviceMemMap" + }, + { + "name": "OH_Usb_DestroyDeviceMemMap" + } +] \ No newline at end of file diff --git a/drivers/external_device_manager/usb/usb_ddk_api.h b/drivers/external_device_manager/usb/usb_ddk_api.h new file mode 100644 index 0000000000000000000000000000000000000000..e7b08a575f39523ba39cef466e9fd38f7e8463b4 --- /dev/null +++ b/drivers/external_device_manager/usb/usb_ddk_api.h @@ -0,0 +1,215 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef USB_DDK_API_H +#define USB_DDK_API_H + +/** + * @addtogroup UsbDdk + * @{ + * + * @brief Provides USB DDK APIs to open and close USB interfaces, perform non-isochronous and isochronous\n + * data transfer over USB pipes, and implement control transfer and interrupt transfer, etc. + * + * @syscap SystemCapability.Driver.USB.Extension + * @since 10 + * @version 1.0 + */ + +/** + * @file usb_ddk_api.h + * + * @brief Declares the USB DDK APIs used by the USB host to access USB devices. + * + * @since 10 + * @version 1.0 + */ + +#include + +#include "usb_ddk_types.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/** + * @brief Initializes the DDK. + * + * @return 0 if the operation is successful; a negative value otherwise. + * @since 10 + * @version 1.0 + */ +int32_t OH_Usb_Init(void); + +/** + * @brief Releases the DDK. + * + * @since 10 + * @version 1.0 + */ +void OH_Usb_Release(void); + +/** + * @brief Obtains the USB device descriptor. + * + * @param deviceId ID of the device whose descriptor is to be obtained. + * @param desc Standard device descriptor defined in the USB protocol. + * @return 0 if the operation is successful; a negative value otherwise. + * @since 10 + * @version 1.0 + */ +int32_t OH_Usb_GetDeviceDescriptor(uint64_t deviceId, struct UsbDeviceDescriptor *desc); + +/** + * @brief Obtains the configuration descriptor. To avoid memory leakage, use OH_Usb_FreeConfigDescriptor\n + * to release a descriptor after use. + * + * @param deviceId ID of the device whose configuration descriptor is to be obtained. + * @param configIndex Configuration index, which corresponds to bConfigurationValue in the USB protocol. + * @param config Configuration descriptor, which includes the standard configuration descriptor defined in the\n + * USB protocol and the associated interface descriptor and endpoint descriptor. + * @return 0 if the operation is successful; a negative value otherwise. + * @since 10 + * @version 1.0 + */ +int32_t OH_Usb_GetConfigDescriptor( + uint64_t deviceId, uint8_t configIndex, struct UsbDdkConfigDescriptor ** const config); + +/** + * @brief Releases the configuration descriptor. To avoid memory leakage, use OH_Usb_FreeConfigDescriptor\n + * to release a descriptor after use. + * + * @param config Configuration descriptor obtained by calling OH_Usb_GetConfigDescriptor. + * @since 10 + * @version 1.0 + */ +void OH_Usb_FreeConfigDescriptor(struct UsbDdkConfigDescriptor * const config); + +/** + * @brief Claims a USB interface. + * + * @param deviceId ID of the device to be operated. + * @param interfaceIndex Interface index, which corresponds to bInterfaceNumber in the USB protocol. + * @param interfaceHandle Interface operation handle. After the interface is claimed successfully, a value will be\n + * assigned to this parameter. + * @return 0 if the operation is successful; a negative value otherwise. + * @since 10 + * @version 1.0 + */ +int32_t OH_Usb_ClaimInterface(uint64_t deviceId, uint8_t interfaceIndex, uint64_t *interfaceHandle); + +/** + * @brief Releases a USB interface. + * + * @param interfaceHandle Interface operation handle. + * @return 0 if the operation is successful; a negative value otherwise. + * @since 10 + * @version 1.0 + */ +int32_t OH_Usb_ReleaseInterface(uint64_t interfaceHandle); + +/** + * @brief Activates the alternate setting of the USB interface. + * + * @param interfaceHandle Interface operation handle. + * @param settingIndex Index of the alternate setting, which corresponds to bAlternateSetting\n + * in the USB protocol. + * @return 0 if the operation is successful; a negative value otherwise. + * @since 10 + * @version 1.0 + */ +int32_t OH_Usb_SelectInterfaceSetting(uint64_t interfaceHandle, uint8_t settingIndex); + +/** + * @brief Obtains the activated alternate setting of the USB interface. + * + * @param interfaceHandle Interface operation handle. + * @param settingIndex Index of the alternate setting, which corresponds to bAlternateSetting\n + * in the USB protocol. + * @return 0 if the operation is successful; a negative value otherwise. + * @since 10 + * @version 1.0 + */ +int32_t OH_Usb_GetCurrentInterfaceSetting(uint64_t interfaceHandle, uint8_t *settingIndex); + +/** + * @brief Sends a control read transfer request. This API works in a synchronous manner. + * + * @param interfaceHandle Interface operation handle. + * @param setup Request data, which corresponds to Setup Data in the USB protocol. + * @param timeout Timeout duration, in milliseconds. + * @param data Data to be transferred. + * @param dataLen Data length. The return value indicates the length of the actually read data. + * @return 0 if the operation is successful; a negative value otherwise. + * @since 10 + * @version 1.0 + */ +int32_t OH_Usb_SendControlReadRequest(uint64_t interfaceHandle, const struct UsbControlRequestSetup *setup, + uint32_t timeout, uint8_t *data, uint32_t *dataLen); + +/** + * @brief Sends a control write transfer request. This API works in a synchronous manner. + * + * @param interfaceHandle Interface operation handle. + * @param setup Request data, which corresponds to Setup Data in the USB protocol. + * @param timeout Timeout duration, in milliseconds. + * @param data Data to be transferred. + * @param dataLen Data length. + * @return 0 if the operation is successful; a negative value otherwise. + * @since 10 + * @version 1.0 + */ +int32_t OH_Usb_SendControlWriteRequest(uint64_t interfaceHandle, const struct UsbControlRequestSetup *setup, + uint32_t timeout, const uint8_t *data, uint32_t dataLen); + +/** + * @brief Sends a pipe request. This API works in a synchronous manner. This API applies to interrupt transfer\n + * and bulk transfer. + * + * @param pipe Pipe used to transfer data. + * @param devMmap Device memory map, which can be obtained by calling OH_Usb_CreateDeviceMemMap. + * @return 0 if the operation is successful; a negative value otherwise. + * @since 10 + * @version 1.0 + */ +int32_t OH_Usb_SendPipeRequest(const struct UsbRequestPipe *pipe, UsbDeviceMemMap *devMmap); + +/** + * @brief Creates a buffer. To avoid resource leakage, destroy a buffer by calling\n + * OH_Usb_DestroyDeviceMemMap after use. + * + * @param deviceId ID of the device for which the buffer is to be created. + * @param size Buffer size. + * @param devMmap Data memory map, through which the created buffer is returned to the caller. + * @return 0 if the operation is successful; a negative value otherwise. + * @since 10 + * @version 1.0 + */ +int32_t OH_Usb_CreateDeviceMemMap(uint64_t deviceId, size_t size, UsbDeviceMemMap **devMmap); + +/** + * @brief Destroys a buffer. To avoid resource leakage, destroy a buffer in time after use. + * + * @param devMmap Device memory map created by calling OH_Usb_CreateDeviceMemMap. + * @since 10 + * @version 1.0 + */ +void OH_Usb_DestroyDeviceMemMap(UsbDeviceMemMap *devMmap); +/** @} */ +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif // USB_DDK_API_H \ No newline at end of file diff --git a/drivers/external_device_manager/usb/usb_ddk_types.h b/drivers/external_device_manager/usb/usb_ddk_types.h new file mode 100644 index 0000000000000000000000000000000000000000..db511e0641fb2780ec44faa03311a78cd0da4d60 --- /dev/null +++ b/drivers/external_device_manager/usb/usb_ddk_types.h @@ -0,0 +1,316 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef USB_DDK_TYPES_H +#define USB_DDK_TYPES_H +/** + * @addtogroup UsbDdk + * @{ + * + * @brief Provides USB DDK types and declares the macros, enumerated variables, and\n + * data structures required by the USB DDK APIs. + * + * @syscap SystemCapability.Driver.USB.Extension + * @since 10 + * @version 1.0 + */ + +/** + * @file usb_ddk_types.h + * + * @brief Provides the enumerated variables, structures, and macros used in USB DDK APIs. + * + * @since 10 + * @version 1.0 + */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ +/** + * @brief Setup data for control transfer. It corresponds to Setup Data in the USB protocol. + * + * @since 10 + * @version 1.0 + */ +typedef struct UsbControlRequestSetup { + /** Request type. */ + uint8_t bmRequestType; + /** Request command. */ + uint8_t bRequest; + /** Its meaning varies according to the request. */ + uint16_t wValue; + /** It is usually used to transfer the index or offset.\n + * Its meaning varies according to the request. + */ + uint16_t wIndex; + /** Data length. If data is transferred,\n + * this field indicates the number of transferred bytes. + */ + uint16_t wLength; +} __attribute__((aligned(8))) UsbControlRequestSetup; + +/** + * @brief Standard device descriptor, corresponding to Standard Device Descriptor in the USB protocol. + * + * @since 10 + * @version 1.0 + */ +typedef struct UsbDeviceDescriptor { + /** Size of the descriptor, in bytes. */ + uint8_t bLength; + /** Descriptor type. */ + uint8_t bDescriptorType; + /** USB protocol release number. */ + uint16_t bcdUSB; + /** Device class code allocated by the USB-IF. */ + uint8_t bDeviceClass; + /** Device subclass code allocated by USB-IF. The value is limited by that of bDeviceClass. */ + uint8_t bDeviceSubClass; + /** Protocol code allocated by USB-IF. The value is limited by that of bDeviceClass and bDeviceSubClass. */ + uint8_t bDeviceProtocol; + /** Maximum packet size of endpoint 0. Only values 8, 16, 32, and 64 are valid. */ + uint8_t bMaxPacketSize0; + /** Vendor ID allocated by USB-IF. */ + uint16_t idVendor; + /** Product ID allocated by the vendor. */ + uint16_t idProduct; + /** Device release number. */ + uint16_t bcdDevice; + /** Index of the string descriptor that describes the vendor. */ + uint8_t iManufacturer; + /** Index of the string descriptor that describes the product. */ + uint8_t iProduct; + /** Index of the string descriptor that describes the device SN. */ + uint8_t iSerialNumber; + /** Configuration quantity. */ + uint8_t bNumConfigurations; +} __attribute__((aligned(8))) UsbDeviceDescriptor; + +/** + * @brief Standard configuration descriptor, corresponding to Standard Configuration Descriptor\n + * in the USB protocol. + * + * @since 10 + * @version 1.0 + */ +typedef struct UsbConfigDescriptor { + /** Size of the descriptor, in bytes. */ + uint8_t bLength; + /** Descriptor type. */ + uint8_t bDescriptorType; + /** Total length of the configuration descriptor, including the configuration, interface, endpoint,\n + * and class- or vendor-specific descriptors. + */ + uint16_t wTotalLength; + /** Number of interfaces supported by the configuration. */ + uint8_t bNumInterfaces; + /** Configuration index, which is used to select the configuration. */ + uint8_t bConfigurationValue; + /** Index of the string descriptor that describes the configuration. */ + uint8_t iConfiguration; + /** Configuration attributes, including the power mode and remote wakeup. */ + uint8_t bmAttributes; + /** Maximum power consumption of the bus-powered USB device, in 2 mA. */ + uint8_t bMaxPower; +} __attribute__((packed)) UsbConfigDescriptor; + +/** + * @brief Standard interface descriptor, corresponding to Standard Interface Descriptor + * in the USB protocol. + * + * @since 10 + * @version 1.0 + */ +typedef struct UsbInterfaceDescriptor { + /** Size of the descriptor, in bytes. */ + uint8_t bLength; + /** Descriptor type. */ + uint8_t bDescriptorType; + /** Interface number. */ + uint8_t bInterfaceNumber; + /** Value used to select the alternate setting of the interface. */ + uint8_t bAlternateSetting; + /** Number of endpoints (excluding endpoint 0) used by the interface. */ + uint8_t bNumEndpoints; + /** Interface class code allocated by the USB-IF. */ + uint8_t bInterfaceClass; + /** Interface subclass code allocated by USB-IF. The value is limited by that of bInterfaceClass. */ + uint8_t bInterfaceSubClass; + /** Protocol code allocated by USB-IF. The value is limited by that of bInterfaceClass and bInterfaceSubClass. */ + uint8_t bInterfaceProtocol; + /** Index of the string descriptor that describes the interface. */ + uint8_t iInterface; +} __attribute__((packed)) UsbInterfaceDescriptor; + +/** + * @brief Standard endpoint descriptor, corresponding to Standard Endpoint Descriptor in the USB protocol. + * + * @since 10 + * @version 1.0 + */ +typedef struct UsbEndpointDescriptor { + /** Size of the descriptor, in bytes. */ + uint8_t bLength; + /** Descriptor type. */ + uint8_t bDescriptorType; + /** Endpoint address, including the endpoint number and endpoint direction. */ + uint8_t bEndpointAddress; + /** Endpoint attributes, including the transfer type, synchronization type, and usage type. */ + uint8_t bmAttributes; + /** Maximum packet size supported by an endpoint. */ + uint16_t wMaxPacketSize; + /** Interval for polling endpoints for data transfer. */ + uint8_t bInterval; + /** Refresh rate for audio devices. */ + uint8_t bRefresh; + /** Endpoint synchronization address for audio devices. */ + uint8_t bSynchAddress; +} __attribute__((packed)) UsbEndpointDescriptor; + +/** + * @brief Endpoint descriptor. + * + * @since 10 + * @version 1.0 + */ +typedef struct UsbDdkEndpointDescriptor { + /** Standard endpoint descriptor. */ + struct UsbEndpointDescriptor endpointDescriptor; + /** Unresolved descriptor, including class- or vendor-specific descriptors. */ + const uint8_t *extra; + /** Length of the unresolved descriptor. */ + uint32_t extraLength; +} UsbDdkEndpointDescriptor; + +/** + * @brief Interface descriptor. + * + * @since 10 + * @version 1.0 + */ +typedef struct UsbDdkInterfaceDescriptor { + /** Standard interface descriptor. */ + struct UsbInterfaceDescriptor interfaceDescriptor; + /** Endpoint descriptor contained in the interface. */ + struct UsbDdkEndpointDescriptor *endPoint; + /** Unresolved descriptor, including class- or vendor-specific descriptors. */ + const uint8_t *extra; + /** Length of the unresolved descriptor. */ + uint32_t extraLength; +} UsbDdkInterfaceDescriptor; + +/** + * @brief USB interface. + * + * @since 10 + * @version 1.0 + */ +typedef struct UsbDdkInterface { + /** Number of alternate settings of the interface. */ + uint8_t numAltsetting; + /** Alternate setting of the interface. */ + struct UsbDdkInterfaceDescriptor *altsetting; +} UsbDdkInterface; + +/** + * @brief Configuration descriptor. + * + * @since 10 + * @version 1.0 + */ +typedef struct UsbDdkConfigDescriptor { + /** Standard configuration descriptor. */ + struct UsbConfigDescriptor configDescriptor; + /** Interfaces contained in the configuration. */ + struct UsbDdkInterface *interface; + /** Unresolved descriptor, including class- or vendor-specific descriptors. */ + const uint8_t *extra; + /** Length of the unresolved descriptor. */ + uint32_t extraLength; +} UsbDdkConfigDescriptor; + +/** + * @brief Request pipe. + * + * @since 10 + * @version 1.0 + */ +typedef struct UsbRequestPipe { + /** Interface operation handle. */ + uint64_t interfaceHandle; + /** Timeout duration, in milliseconds. */ + uint32_t timeout; + /** Endpoint address. */ + uint8_t endpoint; +} __attribute__((aligned(8))) UsbRequestPipe; + +/** + * @brief Device memory map created by calling OH_Usb_CreateDeviceMemMap.\n + * A buffer using the device memory map can provide better performance. + * + * @since 10 + * @version 1.0 + */ +typedef struct UsbDeviceMemMap { + /** Buffer address. */ + uint8_t * const address; + /** Buffer size. */ + const size_t size; + /** Offset of the used buffer. The default value is 0, indicating that there is no offset\n + * and the buffer starts from the specified address. + */ + uint32_t offset; + /** Length of the used buffer. By default, the value is equal to the size, indicating that\n + * the entire buffer is used. + */ + uint32_t bufferLength; + /** Length of the transferred data. */ + uint32_t transferedLength; +} UsbDeviceMemMap; + +/** + * @brief Defines error codes for USB DDK. + * + * @since 10 + * @version 1.0 + */ +typedef enum { + /** The operation is successful. */ + USB_DDK_SUCCESS = 0, + /** The operation failed. */ + USB_DDK_FAILED = -1, + /** Invalid parameter. */ + USB_DDK_INVALID_PARAMETER = -2, + /** Memory-related error, for example, insufficient memory, memory data copy failure, or memory application failure. + */ + USB_DDK_MEMORY_ERROR = -3, + /** Invalid operation. */ + USB_DDK_INVALID_OPERATION = -4, + /** Null pointer exception */ + USB_DDK_NULL_PTR = -5, + /** Device busy. */ + USB_DDK_DEVICE_BUSY = -6, + /** Transmission timeout. */ + USB_DDK_TIMEOUT = -7 +} UsbDdkErrCode; +#ifdef __cplusplus +} +/** @} */ +#endif /* __cplusplus */ +#endif // USB_DDK_TYPES_H \ No newline at end of file diff --git a/global/resource_management/BUILD.gn b/global/resource_management/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..d5c9057ab122f1b8cc518c93dd92d85d06be1241 --- /dev/null +++ b/global/resource_management/BUILD.gn @@ -0,0 +1,29 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +ohos_ndk_library("librawfile_ndk") { + ndk_description_file = "./librawfile.ndk.json" + min_compact_version = "1" + output_name = "rawfile" +} + +ohos_ndk_headers("rawfile_header") { + dest_dir = "$ndk_headers_out_dir/rawfile" + sources = [ + "./include/raw_dir.h", + "./include/raw_file.h", + "./include/raw_file_manager.h", + ] +} diff --git a/global/resource_management/include/raw_dir.h b/global/resource_management/include/raw_dir.h new file mode 100644 index 0000000000000000000000000000000000000000..76a618ecce38f1c55ee518d7ac1d556e3dc7abaa --- /dev/null +++ b/global/resource_management/include/raw_dir.h @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup rawfile + * @{ + * + * @brief Provides native functions for the resource manager to operate raw file directories and their raw files. + * + * You can use the resource manager to traverse, open, seek, read, and close raw files. + * + * @since 8 + * @version 1.0 + */ + +/** + * @file raw_dir.h + * + * @brief Declares native functions related to raw file directories. + * + * For example, you can use the functions to traverse and close a raw file directory, and reset its index. + * + * @since 8 + * @version 1.0 + */ +#ifndef GLOBAL_RAW_DIR_H +#define GLOBAL_RAW_DIR_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct RawDir; + +/** + * @brief Provides access to a raw file directory. + * + * + * + * @since 8 + * @version 1.0 + */ +typedef struct RawDir RawDir; + +/** + * @brief Obtains the name of the file according to the index. + * + * You can use this method to traverse a raw file directory. + * + * @param rawDir Indicates the pointer to {@link RawDir}. + * @param index Indicates the file index in {@link RawDir}. + * @return Returns the name of the file according to the index, + * which can be passed to {@link OH_ResourceManager_OpenRawFile} as an input parameter; + * returns NULL if all files are returned. + * @see OH_ResourceManager_OpenRawFile + * @since 8 + * @version 1.0 + */ +const char *OH_ResourceManager_GetRawFileName(RawDir *rawDir, int index); + +/** + * @brief get the count of the raw files in {@link RawDir}. + * + * You can use this method to get the valid index of {@link OH_ResourceManager_GetRawFileName}. + * + * @param rawDir Indicates the pointer to {@link RawDir}. + * @see OH_ResourceManager_GetRawFileName + * @since 8 + * @version 1.0 + */ +int OH_ResourceManager_GetRawFileCount(RawDir *rawDir); + +/** + * @brief Closes an opened {@link RawDir} and releases all associated resources. + * + * + * + * @param rawDir Indicates the pointer to {@link RawDir}. + * @see OH_ResourceManager_OpenRawDir + * @since 8 + * @version 1.0 + */ +void OH_ResourceManager_CloseRawDir(RawDir *rawDir); + +#ifdef __cplusplus +}; +#endif + +/** @} */ +#endif // GLOBAL_RAW_DIR_H diff --git a/global/resource_management/include/raw_file.h b/global/resource_management/include/raw_file.h new file mode 100644 index 0000000000000000000000000000000000000000..3b58a7fb07535459a6a6c86389258a552006c1ec --- /dev/null +++ b/global/resource_management/include/raw_file.h @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup rawfile + * @{ + * + * @brief Provides native functions for the resource manager to operate raw file directories and their raw files. + * + * You can use the resource manager to traverse, open, seek, read, and close raw files. + * + * @since 8 + * @version 1.0 + */ + +/** + * @file raw_file.h + * + * @brief Declares native functions related to raw file. + * + * For example, you can use the functions to search for, read, and close raw files. + * + * @since 8 + * @version 1.0 + */ +#ifndef GLOBAL_RAW_FILE_H +#define GLOBAL_RAW_FILE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct RawFile; + +/** + * @brief Provides access to a raw file. + * + * + * + * @since 8 + * @version 1.0 + */ +typedef struct RawFile RawFile; + +/** + * @brief Represent the raw file descriptor's info. + * + * The RawFileDescriptor is an output parameter in the {@link OH_ResourceManager_GetRawFileDescriptor}, + * and describes the raw file's file descriptor, start position and the length in the HAP. + * + * @since 8 + * @version 1.0 + */ +typedef struct { + /** the raw file fd */ + int fd; + + /** the offset from where the raw file starts in the HAP */ + long start; + + /** the length of the raw file in the HAP. */ + long length; +} RawFileDescriptor; + +/** + * @brief Reads a raw file. + * + * This function attempts to read data of length bytes from the current offset. + * + * @param rawFile Indicates the pointer to {@link RawFile}. + * @param buf Indicates the pointer to the buffer for receiving the data read. + * @param length Indicates the number of bytes to read. + * @return Returns the number of bytes read if any; returns 0 if the number reaches the end of file (EOF). + * @since 8 + * @version 1.0 + */ +int OH_ResourceManager_ReadRawFile(const RawFile *rawFile, void *buf, size_t length); + +/** + * @brief Uses the 32-bit data type to seek a data read/write position based on the specified offset within a raw file. + * + * @param rawFile Indicates the pointer to {@link RawFile}. + * @param offset Indicates the specified offset. + * @param whence Indicates the new read/write position, which can be one of the following values: \n + * 0: The new read/write position is set to offset. \n + * 1: The read/write position is set to the current position plus offset. \n + * 2: The read/write position is set to the end of file (EOF) plus offset. + * @return Returns the new read/write position if the operation is successful; returns (long) -1 if an error + * occurs. + * @since 8 + * @version 1.0 + */ +int OH_ResourceManager_SeekRawFile(const RawFile *rawFile, long offset, int whence); + +/** + * @brief Obtains the raw file length represented by an int32_t. + * + * @param rawFile Indicates the pointer to {@link RawFile}. + * @return Returns the total length of the raw file. + * @since 8 + * @version 1.0 + */ +long OH_ResourceManager_GetRawFileSize(RawFile *rawFile); + +/** + * @brief Closes an opened {@link RawFile} and releases all associated resources. + * + * + * + * @param rawFile Indicates the pointer to {@link RawFile}. + * @see OH_ResourceManager_OpenRawFile + * @since 8 + * @version 1.0 + */ +void OH_ResourceManager_CloseRawFile(RawFile *rawFile); + +/** + * @brief Obtains the current offset of a raw file, represented by an int32_t. + * + * The current offset of a raw file. + * + * @param rawFile Indicates the pointer to {@link RawFile}. + * @return Returns the current offset of a raw file. + * @since 8 + * @version 1.0 + */ +long OH_ResourceManager_GetRawFileOffset(const RawFile *rawFile); + +/** + * @brief Opens the file descriptor of a raw file based on the int32_t offset and file length. + * + * The opened raw file descriptor is used to read the raw file. + * + * @param rawFile Indicates the pointer to {@link RawFile}. + * @param descriptor Indicates the raw file's file descriptor, start position and the length in the HAP. + * @return Returns true: open the raw file descriptor successfully, false: the raw file is not allowed to access. + * @since 8 + * @version 1.0 + */ +bool OH_ResourceManager_GetRawFileDescriptor(const RawFile *rawFile, RawFileDescriptor &descriptor); + +/** + * @brief Closes the file descriptor of a raw file. + * + * The opened raw file descriptor must be released after used to avoid the file descriptor leak. + * + * @param descriptor Indicates the raw file's file descriptor, start position and the length in the HAP. + * @return Returns true: closes the raw file descriptor successfully, false: closes the raw file descriptor failed. + * @since 8 + * @version 1.0 + */ +bool OH_ResourceManager_ReleaseRawFileDescriptor(const RawFileDescriptor &descriptor); + +#ifdef __cplusplus +}; +#endif + +/** @} */ +#endif // GLOBAL_RAW_FILE_H diff --git a/global/resource_management/include/raw_file_manager.h b/global/resource_management/include/raw_file_manager.h new file mode 100644 index 0000000000000000000000000000000000000000..f76a9c8cf1b45ab0abfe30f5949a2a0ec14ed120 --- /dev/null +++ b/global/resource_management/include/raw_file_manager.h @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup rawfile + * @{ + * + * @brief Provides native functions for the resource manager to operate raw file directories and their raw files. + * + * You can use the resource manager to traverse, open, seek, read, and close raw files. + * + * @since 8 + * @version 1.0 + */ + +/** + * @file raw_file_manager.h + * + * @brief Declares native functions for the resource manager. + * + * You can use the resource manager to open raw files for subsequent operations, such as seeking and reading. + * + * @since 8 + * @version 1.0 + */ +#ifndef GLOBAL_NATIVE_RESOURCE_MANAGER_H +#define GLOBAL_NATIVE_RESOURCE_MANAGER_H + +#include "napi/native_api.h" +#include "raw_dir.h" +#include "raw_file.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct NativeResourceManager; + +/** + * @brief Presents the resource manager. + * + * This class encapsulates the native implementation of the JavaScript resource manager. The pointer to a + * ResourceManager object can be obtained by calling {@link OH_ResourceManager_InitNativeResourceManager}. + * + * @since 8 + * @version 1.0 + */ +typedef struct NativeResourceManager NativeResourceManager; + +/** + * @brief Obtains the native resource manager based on the JavaScipt resource manager. + * + * You need to obtain the resource manager to process raw files as required. + * + * @param env Indicates the pointer to the JavaScipt Native Interface (napi) environment. + * @param jsResMgr Indicates the JavaScipt resource manager. + * @return Returns the pointer to {@link NativeResourceManager}. + * @since 8 + * @version 1.0 + */ +NativeResourceManager *OH_ResourceManager_InitNativeResourceManager(napi_env env, napi_value jsResMgr); + +/** + * @brief Releases the native resource manager. + * + * + * + * @param resMgr Indicates the pointer to {@link RawDir}. + * @since 8 + * @version 1.0 + */ +void OH_ResourceManager_ReleaseNativeResourceManager(NativeResourceManager *resMgr); + +/** + * @brief Opens a raw file directory. + * + * After it is opened, you can traverse its raw files. + * + * @param mgr Indicates the pointer to {@link NativeResourceManager} obtained by calling + * {@link OH_ResourceManager_InitNativeResourceManager}. + * @param dirName Indicates the name of the raw file directory to open. You can pass an empty string to open the + * top-level raw file directory. + * @return Returns the pointer to {@link RawDir}. After you finish using the pointer, call + * {@link OH_ResourceManager_CloseRawDir} to release it. + * @see OH_ResourceManager_InitNativeResourceManager + * @see OH_ResourceManager_CloseRawDir + * @since 8 + * @version 1.0 + */ +RawDir *OH_ResourceManager_OpenRawDir(const NativeResourceManager *mgr, const char *dirName); + +/** + * @brief Opens a raw file. + * + * After it is opened, you can read its data. + * + * @param mgr Indicates the pointer to {@link NativeResourceManager} obtained by calling + * {@link OH_ResourceManager_InitNativeResourceManager}. + * @param fileName Indicates the file path relative to the top-level raw file directory. + * @return Returns the pointer to {@link RawFile}. After you finish using the pointer, call + * {@link OH_ResourceManager_CloseRawFile} to release it. + * @see OH_ResourceManager_InitNativeResourceManager + * @see OH_ResourceManager_CloseRawFile + * @since 8 + * @version 1.0 + */ +RawFile *OH_ResourceManager_OpenRawFile(const NativeResourceManager *mgr, const char *fileName); + +#ifdef __cplusplus +}; +#endif + +/** @} */ +#endif // GLOBAL_NATIVE_RESOURCE_MANAGER_H diff --git a/global/resource_management/librawfile.ndk.json b/global/resource_management/librawfile.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..411dbc53df47a8de233c51037951b54999958a94 --- /dev/null +++ b/global/resource_management/librawfile.ndk.json @@ -0,0 +1,44 @@ +[ + { + "name": "OH_ResourceManager_InitNativeResourceManager" + }, + { + "name": "OH_ResourceManager_ReleaseNativeResourceManager" + }, + { + "name": "OH_ResourceManager_OpenRawDir" + }, + { + "name": "OH_ResourceManager_OpenRawFile" + }, + { + "name": "OH_ResourceManager_GetRawFileName" + }, + { + "name": "OH_ResourceManager_GetRawFileCount" + }, + { + "name": "OH_ResourceManager_CloseRawDir" + }, + { + "name": "OH_ResourceManager_ReadRawFile" + }, + { + "name": "OH_ResourceManager_SeekRawFile" + }, + { + "name": "OH_ResourceManager_GetRawFileSize" + }, + { + "name": "OH_ResourceManager_CloseRawFile" + }, + { + "name": "OH_ResourceManager_GetRawFileOffset" + }, + { + "name": "OH_ResourceManager_GetRawFileDescriptor" + }, + { + "name": "OH_ResourceManager_ReleaseRawFileDescriptor" + } +] \ No newline at end of file diff --git a/graphic/graphic_2d/EGL/BUILD.gn b/graphic/graphic_2d/EGL/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..eb2e088304492f4b63b08dbbf5858c79c0ce08f3 --- /dev/null +++ b/graphic/graphic_2d/EGL/BUILD.gn @@ -0,0 +1,36 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") + +ohos_ndk_headers("EGL_header") { + dest_dir = "$ndk_headers_out_dir/EGL" + sources = [ + "//third_party/EGL/api/EGL/egl.h", + "//third_party/EGL/api/EGL/eglext.h", + "//third_party/EGL/api/EGL/eglplatform.h", + ] +} + +ohos_ndk_library("libEGL_ndk") { + output_name = "EGL" + output_extension = "so" + ndk_description_file = "./libEGL.ndk.json" + system_capability = "SystemCapability.Graphic.Graphic2D.EGL" + system_capability_headers = [ + "EGL/egl.h", + "EGL/eglext.h", + "EGL/eglplatform.h", + ] +} diff --git a/graphic/graphic_2d/EGL/libEGL.ndk.json b/graphic/graphic_2d/EGL/libEGL.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..5054487784bcdc3ed09f8f0438f8922d8815ffe5 --- /dev/null +++ b/graphic/graphic_2d/EGL/libEGL.ndk.json @@ -0,0 +1,46 @@ +[ + { "name": "eglChooseConfig" }, + { "name": "eglCopyBuffers" }, + { "name": "eglCreateContext" }, + { "name": "eglCreatePbufferSurface" }, + { "name": "eglCreatePixmapSurface" }, + { "name": "eglCreateWindowSurface" }, + { "name": "eglDestroyContext" }, + { "name": "eglDestroySurface" }, + { "name": "eglGetConfigAttrib" }, + { "name": "eglGetConfigs" }, + { "name": "eglGetCurrentDisplay" }, + { "name": "eglGetCurrentSurface" }, + { "name": "eglGetDisplay" }, + { "name": "eglGetError" }, + { "name": "eglGetProcAddress" }, + { "name": "eglInitialize" }, + { "name": "eglMakeCurrent" }, + { "name": "eglQueryContext" }, + { "name": "eglQueryString" }, + { "name": "eglQuerySurface" }, + { "name": "eglSwapBuffers" }, + { "name": "eglTerminate" }, + { "name": "eglWaitGL" }, + { "name": "eglWaitNative" }, + { "name": "eglBindTexImage" }, + { "name": "eglReleaseTexImage" }, + { "name": "eglSurfaceAttrib" }, + { "name": "eglSwapInterval" }, + { "name": "eglBindAPI" }, + { "name": "eglQueryAPI" }, + { "name": "eglCreatePbufferFromClientBuffer" }, + { "name": "eglReleaseThread" }, + { "name": "eglWaitClient" }, + { "name": "eglGetCurrentContext" }, + { "name": "eglCreateSync" }, + { "name": "eglDestroySync" }, + { "name": "eglClientWaitSync" }, + { "name": "eglGetSyncAttrib" }, + { "name": "eglCreateImage" }, + { "name": "eglDestroyImage" }, + { "name": "eglGetPlatformDisplay" }, + { "name": "eglCreatePlatformWindowSurface" }, + { "name": "eglCreatePlatformPixmapSurface" }, + { "name": "eglWaitSync" } +] diff --git a/graphic/graphic_2d/GLES3/BUILD.gn b/graphic/graphic_2d/GLES3/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..a2bbdbd8053891d37ca16daee0139e05cbd19aa4 --- /dev/null +++ b/graphic/graphic_2d/GLES3/BUILD.gn @@ -0,0 +1,38 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") + +ohos_ndk_headers("GLES3_header") { + dest_dir = "$ndk_headers_out_dir/GLES3" + sources = [ + "//third_party/openGLES/api/GLES3/gl3.h", + "//third_party/openGLES/api/GLES3/gl31.h", + "//third_party/openGLES/api/GLES3/gl32.h", + "//third_party/openGLES/api/GLES3/gl3platform.h", + ] +} + +ohos_ndk_library("libGLESv3_ndk") { + output_name = "GLESv3" + output_extension = "so" + ndk_description_file = "./libGLESv3.ndk.json" + system_capability = "SystemCapability.Graphic.Graphic2D.GLES3" + system_capability_headers = [ + "GLES3/gl3.h", + "GLES3/gl31.h", + "GLES3/gl32.h", + "GLES3/gl3platform.h", + ] +} diff --git a/graphic/graphic_2d/GLES3/libGLESv3.ndk.json b/graphic/graphic_2d/GLES3/libGLESv3.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..ee6870afe58a3086048176619427170428086ac3 --- /dev/null +++ b/graphic/graphic_2d/GLES3/libGLESv3.ndk.json @@ -0,0 +1,360 @@ +[ + { "name": "glActiveShaderProgram" }, + { "name": "glActiveTexture" }, + { "name": "glAttachShader" }, + { "name": "glBeginQuery" }, + { "name": "glBeginTransformFeedback" }, + { "name": "glBindAttribLocation" }, + { "name": "glBindBuffer" }, + { "name": "glBindBufferBase" }, + { "name": "glBindBufferRange" }, + { "name": "glBindFramebuffer" }, + { "name": "glBindImageTexture" }, + { "name": "glBindProgramPipeline" }, + { "name": "glBindRenderbuffer" }, + { "name": "glBindSampler" }, + { "name": "glBindTexture" }, + { "name": "glBindTransformFeedback" }, + { "name": "glBindVertexArray" }, + { "name": "glBindVertexBuffer" }, + { "name": "glBlendBarrier" }, + { "name": "glBlendColor" }, + { "name": "glBlendEquation" }, + { "name": "glBlendEquationi" }, + { "name": "glBlendEquationSeparate" }, + { "name": "glBlendEquationSeparatei" }, + { "name": "glBlendFunc" }, + { "name": "glBlendFunci" }, + { "name": "glBlendFuncSeparate" }, + { "name": "glBlendFuncSeparatei" }, + { "name": "glBlitFramebuffer" }, + { "name": "glBufferData" }, + { "name": "glBufferSubData" }, + { "name": "glCheckFramebufferStatus" }, + { "name": "glClear" }, + { "name": "glClearBufferfi" }, + { "name": "glClearBufferfv" }, + { "name": "glClearBufferiv" }, + { "name": "glClearBufferuiv" }, + { "name": "glClearColor" }, + { "name": "glClearDepthf" }, + { "name": "glClearStencil" }, + { "name": "glClientWaitSync" }, + { "name": "glColorMask" }, + { "name": "glColorMaski" }, + { "name": "glCompileShader" }, + { "name": "glCompressedTexImage2D" }, + { "name": "glCompressedTexImage3D" }, + { "name": "glCompressedTexSubImage2D" }, + { "name": "glCompressedTexSubImage3D" }, + { "name": "glCopyBufferSubData" }, + { "name": "glCopyImageSubData" }, + { "name": "glCopyTexImage2D" }, + { "name": "glCopyTexSubImage2D" }, + { "name": "glCopyTexSubImage3D" }, + { "name": "glCreateProgram" }, + { "name": "glCreateShader" }, + { "name": "glCreateShaderProgramv" }, + { "name": "glCullFace" }, + { "name": "glDebugMessageCallback" }, + { "name": "glDebugMessageControl" }, + { "name": "glDebugMessageInsert" }, + { "name": "glDeleteBuffers" }, + { "name": "glDeleteFramebuffers" }, + { "name": "glDeleteProgram" }, + { "name": "glDeleteProgramPipelines" }, + { "name": "glDeleteQueries" }, + { "name": "glDeleteRenderbuffers" }, + { "name": "glDeleteSamplers" }, + { "name": "glDeleteShader" }, + { "name": "glDeleteSync" }, + { "name": "glDeleteTextures" }, + { "name": "glDeleteTransformFeedbacks" }, + { "name": "glDeleteVertexArrays" }, + { "name": "glDepthFunc" }, + { "name": "glDepthMask" }, + { "name": "glDepthRangef" }, + { "name": "glDetachShader" }, + { "name": "glDisable" }, + { "name": "glDisablei" }, + { "name": "glDisableVertexAttribArray" }, + { "name": "glDispatchCompute" }, + { "name": "glDispatchComputeIndirect" }, + { "name": "glDrawArrays" }, + { "name": "glDrawArraysIndirect" }, + { "name": "glDrawArraysInstanced" }, + { "name": "glDrawBuffers" }, + { "name": "glDrawElements" }, + { "name": "glDrawElementsBaseVertex" }, + { "name": "glDrawElementsIndirect" }, + { "name": "glDrawElementsInstanced" }, + { "name": "glDrawElementsInstancedBaseVertex" }, + { "name": "glDrawRangeElements" }, + { "name": "glDrawRangeElementsBaseVertex" }, + { "name": "glEnable" }, + { "name": "glEnablei" }, + { "name": "glEnableVertexAttribArray" }, + { "name": "glEndQuery" }, + { "name": "glEndTransformFeedback" }, + { "name": "glFenceSync" }, + { "name": "glFinish" }, + { "name": "glFlush" }, + { "name": "glFlushMappedBufferRange" }, + { "name": "glFramebufferParameteri" }, + { "name": "glFramebufferRenderbuffer" }, + { "name": "glFramebufferTexture" }, + { "name": "glFramebufferTexture2D" }, + { "name": "glFramebufferTextureLayer" }, + { "name": "glFrontFace" }, + { "name": "glGenBuffers" }, + { "name": "glGenerateMipmap" }, + { "name": "glGenFramebuffers" }, + { "name": "glGenProgramPipelines" }, + { "name": "glGenQueries" }, + { "name": "glGenRenderbuffers" }, + { "name": "glGenSamplers" }, + { "name": "glGenTextures" }, + { "name": "glGenTransformFeedbacks" }, + { "name": "glGenVertexArrays" }, + { "name": "glGetActiveAttrib" }, + { "name": "glGetActiveUniform" }, + { "name": "glGetActiveUniformBlockiv" }, + { "name": "glGetActiveUniformBlockName" }, + { "name": "glGetActiveUniformsiv" }, + { "name": "glGetAttachedShaders" }, + { "name": "glGetAttribLocation" }, + { "name": "glGetBooleani_v" }, + { "name": "glGetBooleanv" }, + { "name": "glGetBufferParameteri64v" }, + { "name": "glGetBufferParameteriv" }, + { "name": "glGetBufferPointerv" }, + { "name": "glGetDebugMessageLog" }, + { "name": "glGetError" }, + { "name": "glGetFloatv" }, + { "name": "glGetFragDataLocation" }, + { "name": "glGetFramebufferAttachmentParameteriv" }, + { "name": "glGetFramebufferParameteriv" }, + { "name": "glGetGraphicsResetStatus" }, + { "name": "glGetInteger64i_v" }, + { "name": "glGetInteger64v" }, + { "name": "glGetIntegeri_v" }, + { "name": "glGetIntegerv" }, + { "name": "glGetInternalformativ" }, + { "name": "glGetMultisamplefv" }, + { "name": "glGetnUniformfv" }, + { "name": "glGetnUniformiv" }, + { "name": "glGetnUniformuiv" }, + { "name": "glGetObjectLabel" }, + { "name": "glGetObjectPtrLabel" }, + { "name": "glGetPointerv" }, + { "name": "glGetProgramBinary" }, + { "name": "glGetProgramInfoLog" }, + { "name": "glGetProgramInterfaceiv" }, + { "name": "glGetProgramiv" }, + { "name": "glGetProgramPipelineInfoLog" }, + { "name": "glGetProgramPipelineiv" }, + { "name": "glGetProgramResourceIndex" }, + { "name": "glGetProgramResourceiv" }, + { "name": "glGetProgramResourceLocation" }, + { "name": "glGetProgramResourceName" }, + { "name": "glGetQueryiv" }, + { "name": "glGetQueryObjectuiv" }, + { "name": "glGetRenderbufferParameteriv" }, + { "name": "glGetSamplerParameterfv" }, + { "name": "glGetSamplerParameterIiv" }, + { "name": "glGetSamplerParameterIuiv" }, + { "name": "glGetSamplerParameteriv" }, + { "name": "glGetShaderInfoLog" }, + { "name": "glGetShaderiv" }, + { "name": "glGetShaderPrecisionFormat" }, + { "name": "glGetShaderSource" }, + { "name": "glGetString" }, + { "name": "glGetStringi" }, + { "name": "glGetSynciv" }, + { "name": "glGetTexLevelParameterfv" }, + { "name": "glGetTexLevelParameteriv" }, + { "name": "glGetTexParameterfv" }, + { "name": "glGetTexParameterIiv" }, + { "name": "glGetTexParameterIuiv" }, + { "name": "glGetTexParameteriv" }, + { "name": "glGetTransformFeedbackVarying" }, + { "name": "glGetUniformBlockIndex" }, + { "name": "glGetUniformfv" }, + { "name": "glGetUniformIndices" }, + { "name": "glGetUniformiv" }, + { "name": "glGetUniformLocation" }, + { "name": "glGetUniformuiv" }, + { "name": "glGetVertexAttribfv" }, + { "name": "glGetVertexAttribIiv" }, + { "name": "glGetVertexAttribIuiv" }, + { "name": "glGetVertexAttribiv" }, + { "name": "glGetVertexAttribPointerv" }, + { "name": "glHint" }, + { "name": "glInvalidateFramebuffer" }, + { "name": "glInvalidateSubFramebuffer" }, + { "name": "glIsBuffer" }, + { "name": "glIsEnabled" }, + { "name": "glIsEnabledi" }, + { "name": "glIsFramebuffer" }, + { "name": "glIsProgram" }, + { "name": "glIsProgramPipeline" }, + { "name": "glIsQuery" }, + { "name": "glIsRenderbuffer" }, + { "name": "glIsSampler" }, + { "name": "glIsShader" }, + { "name": "glIsSync" }, + { "name": "glIsTexture" }, + { "name": "glIsTransformFeedback" }, + { "name": "glIsVertexArray" }, + { "name": "glLineWidth" }, + { "name": "glLinkProgram" }, + { "name": "glMapBufferRange" }, + { "name": "glMemoryBarrier" }, + { "name": "glMemoryBarrierByRegion" }, + { "name": "glMinSampleShading" }, + { "name": "glObjectLabel" }, + { "name": "glObjectPtrLabel" }, + { "name": "glPatchParameteri" }, + { "name": "glPauseTransformFeedback" }, + { "name": "glPixelStorei" }, + { "name": "glPolygonOffset" }, + { "name": "glPopDebugGroup" }, + { "name": "glPrimitiveBoundingBox" }, + { "name": "glProgramBinary" }, + { "name": "glProgramParameteri" }, + { "name": "glProgramUniform1f" }, + { "name": "glProgramUniform1fv" }, + { "name": "glProgramUniform1i" }, + { "name": "glProgramUniform1iv" }, + { "name": "glProgramUniform1ui" }, + { "name": "glProgramUniform1uiv" }, + { "name": "glProgramUniform2f" }, + { "name": "glProgramUniform2fv" }, + { "name": "glProgramUniform2i" }, + { "name": "glProgramUniform2iv" }, + { "name": "glProgramUniform2ui" }, + { "name": "glProgramUniform2uiv" }, + { "name": "glProgramUniform3f" }, + { "name": "glProgramUniform3fv" }, + { "name": "glProgramUniform3i" }, + { "name": "glProgramUniform3iv" }, + { "name": "glProgramUniform3ui" }, + { "name": "glProgramUniform3uiv" }, + { "name": "glProgramUniform4f" }, + { "name": "glProgramUniform4fv" }, + { "name": "glProgramUniform4i" }, + { "name": "glProgramUniform4iv" }, + { "name": "glProgramUniform4ui" }, + { "name": "glProgramUniform4uiv" }, + { "name": "glProgramUniformMatrix2fv" }, + { "name": "glProgramUniformMatrix2x3fv" }, + { "name": "glProgramUniformMatrix2x4fv" }, + { "name": "glProgramUniformMatrix3fv" }, + { "name": "glProgramUniformMatrix3x2fv" }, + { "name": "glProgramUniformMatrix3x4fv" }, + { "name": "glProgramUniformMatrix4fv" }, + { "name": "glProgramUniformMatrix4x2fv" }, + { "name": "glProgramUniformMatrix4x3fv" }, + { "name": "glPushDebugGroup" }, + { "name": "glReadBuffer" }, + { "name": "glReadnPixels" }, + { "name": "glReadPixels" }, + { "name": "glReleaseShaderCompiler" }, + { "name": "glRenderbufferStorage" }, + { "name": "glRenderbufferStorageMultisample" }, + { "name": "glResumeTransformFeedback" }, + { "name": "glSampleCoverage" }, + { "name": "glSampleMaski" }, + { "name": "glSamplerParameterf" }, + { "name": "glSamplerParameterfv" }, + { "name": "glSamplerParameteri" }, + { "name": "glSamplerParameterIiv" }, + { "name": "glSamplerParameterIuiv" }, + { "name": "glSamplerParameteriv" }, + { "name": "glScissor" }, + { "name": "glShaderBinary" }, + { "name": "glShaderSource" }, + { "name": "glStencilFunc" }, + { "name": "glStencilFuncSeparate" }, + { "name": "glStencilMask" }, + { "name": "glStencilMaskSeparate" }, + { "name": "glStencilOp" }, + { "name": "glStencilOpSeparate" }, + { "name": "glTexBuffer" }, + { "name": "glTexBufferRange" }, + { "name": "glTexImage2D" }, + { "name": "glTexImage3D" }, + { "name": "glTexParameterf" }, + { "name": "glTexParameterfv" }, + { "name": "glTexParameteri" }, + { "name": "glTexParameterIiv" }, + { "name": "glTexParameterIuiv" }, + { "name": "glTexParameteriv" }, + { "name": "glTexStorage2D" }, + { "name": "glTexStorage2DMultisample" }, + { "name": "glTexStorage3D" }, + { "name": "glTexStorage3DMultisample" }, + { "name": "glTexSubImage2D" }, + { "name": "glTexSubImage3D" }, + { "name": "glTransformFeedbackVaryings" }, + { "name": "glUniform1f" }, + { "name": "glUniform1fv" }, + { "name": "glUniform1i" }, + { "name": "glUniform1iv" }, + { "name": "glUniform1ui" }, + { "name": "glUniform1uiv" }, + { "name": "glUniform2f" }, + { "name": "glUniform2fv" }, + { "name": "glUniform2i" }, + { "name": "glUniform2iv" }, + { "name": "glUniform2ui" }, + { "name": "glUniform2uiv" }, + { "name": "glUniform3f" }, + { "name": "glUniform3fv" }, + { "name": "glUniform3i" }, + { "name": "glUniform3iv" }, + { "name": "glUniform3ui" }, + { "name": "glUniform3uiv" }, + { "name": "glUniform4f" }, + { "name": "glUniform4fv" }, + { "name": "glUniform4i" }, + { "name": "glUniform4iv" }, + { "name": "glUniform4ui" }, + { "name": "glUniform4uiv" }, + { "name": "glUniformBlockBinding" }, + { "name": "glUniformMatrix2fv" }, + { "name": "glUniformMatrix2x3fv" }, + { "name": "glUniformMatrix2x4fv" }, + { "name": "glUniformMatrix3fv" }, + { "name": "glUniformMatrix3x2fv" }, + { "name": "glUniformMatrix3x4fv" }, + { "name": "glUniformMatrix4fv" }, + { "name": "glUniformMatrix4x2fv" }, + { "name": "glUniformMatrix4x3fv" }, + { "name": "glUnmapBuffer" }, + { "name": "glUseProgram" }, + { "name": "glUseProgramStages" }, + { "name": "glValidateProgram" }, + { "name": "glValidateProgramPipeline" }, + { "name": "glVertexAttrib1f" }, + { "name": "glVertexAttrib1fv" }, + { "name": "glVertexAttrib2f" }, + { "name": "glVertexAttrib2fv" }, + { "name": "glVertexAttrib3f" }, + { "name": "glVertexAttrib3fv" }, + { "name": "glVertexAttrib4f" }, + { "name": "glVertexAttrib4fv" }, + { "name": "glVertexAttribBinding" }, + { "name": "glVertexAttribDivisor" }, + { "name": "glVertexAttribFormat" }, + { "name": "glVertexAttribI4i" }, + { "name": "glVertexAttribI4iv" }, + { "name": "glVertexAttribI4ui" }, + { "name": "glVertexAttribI4uiv" }, + { "name": "glVertexAttribIFormat" }, + { "name": "glVertexAttribIPointer" }, + { "name": "glVertexAttribPointer" }, + { "name": "glVertexBindingDivisor" }, + { "name": "glViewport" }, + { "name": "glWaitSync" } +] \ No newline at end of file diff --git a/graphic/graphic_2d/KHR/BUILD.gn b/graphic/graphic_2d/KHR/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..12f1e02eb00f479dea55877466ad40600a1b5dbb --- /dev/null +++ b/graphic/graphic_2d/KHR/BUILD.gn @@ -0,0 +1,20 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") + +ohos_ndk_headers("KHR_header") { + dest_dir = "$ndk_headers_out_dir/KHR" + sources = [ "//third_party/EGL/api/KHR/khrplatform.h" ] +} diff --git a/graphic/graphic_2d/native_buffer/BUILD.gn b/graphic/graphic_2d/native_buffer/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..85ef1c177f420d4ccb6f1a6c80376f85daa28ef2 --- /dev/null +++ b/graphic/graphic_2d/native_buffer/BUILD.gn @@ -0,0 +1,28 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") + +ohos_ndk_headers("native_buffer_header") { + dest_dir = "$ndk_headers_out_dir/native_buffer" + sources = [ "//foundation/graphic/graphic_2d/interfaces/inner_api/surface/native_buffer.h" ] +} + +ohos_ndk_library("libnative_buffer_ndk") { + output_name = "native_buffer" + output_extension = "so" + ndk_description_file = "./libnative_buffer.ndk.json" + system_capability = "SystemCapability.Graphic.Graphic2D.NativeBuffer" + system_capability_headers = [ "native_buffer/native_buffer.h" ] +} diff --git a/graphic/graphic_2d/native_buffer/libnative_buffer.ndk.json b/graphic/graphic_2d/native_buffer/libnative_buffer.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..722ba7b087bf15793ad22df9dddd015ad13289bd --- /dev/null +++ b/graphic/graphic_2d/native_buffer/libnative_buffer.ndk.json @@ -0,0 +1,9 @@ +[ + { "name": "OH_NativeBuffer_Alloc" }, + { "name": "OH_NativeBuffer_Reference" }, + { "name": "OH_NativeBuffer_Unreference" }, + { "name": "OH_NativeBuffer_GetConfig" }, + { "name": "OH_NativeBuffer_Map" }, + { "name": "OH_NativeBuffer_Unmap" }, + { "name": "OH_NativeBuffer_GetSeqNum" } +] \ No newline at end of file diff --git a/graphic/graphic_2d/native_drawing/BUILD.gn b/graphic/graphic_2d/native_drawing/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..ed5e236e9f0d9ac684298e7c68a0c3b1b2bc1d78 --- /dev/null +++ b/graphic/graphic_2d/native_drawing/BUILD.gn @@ -0,0 +1,50 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") + +ohos_ndk_headers("native_drawing_header") { + dest_dir = "$ndk_headers_out_dir/native_drawing" + sources = [ + "//foundation/graphic/graphic_2d/rosen/modules/2d_graphics/include/c/drawing_bitmap.h", + "//foundation/graphic/graphic_2d/rosen/modules/2d_graphics/include/c/drawing_brush.h", + "//foundation/graphic/graphic_2d/rosen/modules/2d_graphics/include/c/drawing_canvas.h", + "//foundation/graphic/graphic_2d/rosen/modules/2d_graphics/include/c/drawing_color.h", + "//foundation/graphic/graphic_2d/rosen/modules/2d_graphics/include/c/drawing_font_collection.h", + "//foundation/graphic/graphic_2d/rosen/modules/2d_graphics/include/c/drawing_path.h", + "//foundation/graphic/graphic_2d/rosen/modules/2d_graphics/include/c/drawing_pen.h", + "//foundation/graphic/graphic_2d/rosen/modules/2d_graphics/include/c/drawing_text_declaration.h", + "//foundation/graphic/graphic_2d/rosen/modules/2d_graphics/include/c/drawing_text_typography.h", + "//foundation/graphic/graphic_2d/rosen/modules/2d_graphics/include/c/drawing_types.h", + ] +} + +ohos_ndk_library("libnative_drawing_ndk") { + output_name = "native_drawing" + output_extension = "so" + ndk_description_file = "./libnative_drawing.ndk.json" + system_capability = "SystemCapability.Graphic.Graphic2D.NativeDrawing" + system_capability_headers = [ + "native_drawing/drawing_bitmap.h", + "native_drawing/drawing_brush.h", + "native_drawing/drawing_canvas.h", + "native_drawing/drawing_color.h", + "native_drawing/drawing_font_collection.h", + "native_drawing/drawing_path.h", + "native_drawing/drawing_pen.h", + "native_drawing/drawing_text_declaration.h", + "native_drawing/drawing_text_typography.h", + "native_drawing/drawing_types.h", + ] +} diff --git a/graphic/graphic_2d/native_drawing/libnative_drawing.ndk.json b/graphic/graphic_2d/native_drawing/libnative_drawing.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..44c3452f8b5f4a8c66cb058dfbce1e6790cba9c0 --- /dev/null +++ b/graphic/graphic_2d/native_drawing/libnative_drawing.ndk.json @@ -0,0 +1,85 @@ +[ + { "name": "OH_Drawing_BitmapCreate" }, + { "name": "OH_Drawing_BitmapDestroy" }, + { "name": "OH_Drawing_BitmapBuild" }, + { "name": "OH_Drawing_BitmapGetWidth" }, + { "name": "OH_Drawing_BitmapGetHeight" }, + { "name": "OH_Drawing_BitmapGetPixels" }, + { "name": "OH_Drawing_BrushCreate" }, + { "name": "OH_Drawing_BrushDestroy" }, + { "name": "OH_Drawing_BrushIsAntiAlias" }, + { "name": "OH_Drawing_BrushSetAntiAlias" }, + { "name": "OH_Drawing_BrushGetColor" }, + { "name": "OH_Drawing_BrushSetColor" }, + { "name": "OH_Drawing_CanvasCreate" }, + { "name": "OH_Drawing_CanvasDestroy" }, + { "name": "OH_Drawing_CanvasBind" }, + { "name": "OH_Drawing_CanvasAttachPen" }, + { "name": "OH_Drawing_CanvasDetachPen" }, + { "name": "OH_Drawing_CanvasAttachBrush" }, + { "name": "OH_Drawing_CanvasDetachBrush" }, + { "name": "OH_Drawing_CanvasSave" }, + { "name": "OH_Drawing_CanvasRestore" }, + { "name": "OH_Drawing_CanvasDrawLine" }, + { "name": "OH_Drawing_CanvasDrawPath" }, + { "name": "OH_Drawing_CanvasClear" }, + { "name": "OH_Drawing_PathCreate" }, + { "name": "OH_Drawing_PathDestroy" }, + { "name": "OH_Drawing_PathMoveTo" }, + { "name": "OH_Drawing_PathLineTo" }, + { "name": "OH_Drawing_PathArcTo" }, + { "name": "OH_Drawing_PathQuadTo" }, + { "name": "OH_Drawing_PathCubicTo" }, + { "name": "OH_Drawing_PathClose" }, + { "name": "OH_Drawing_PathReset" }, + { "name": "OH_Drawing_PenCreate" }, + { "name": "OH_Drawing_PenDestroy" }, + { "name": "OH_Drawing_PenIsAntiAlias" }, + { "name": "OH_Drawing_PenSetAntiAlias" }, + { "name": "OH_Drawing_PenGetColor" }, + { "name": "OH_Drawing_PenSetColor" }, + { "name": "OH_Drawing_PenGetWidth" }, + { "name": "OH_Drawing_PenSetWidth" }, + { "name": "OH_Drawing_PenGetMiterLimit" }, + { "name": "OH_Drawing_PenSetMiterLimit" }, + { "name": "OH_Drawing_PenGetCap" }, + { "name": "OH_Drawing_PenSetCap" }, + { "name": "OH_Drawing_PenGetJoin" }, + { "name": "OH_Drawing_PenSetJoin" }, + { "name": "OH_Drawing_ColorSetArgb" }, + { "name": "OH_Drawing_CreateFontCollection" }, + { "name": "OH_Drawing_DestroyFontCollection" }, + { "name": "OH_Drawing_CreateTypographyStyle" }, + { "name": "OH_Drawing_DestroyTypographyStyle" }, + { "name": "OH_Drawing_SetTypographyTextDirection" }, + { "name": "OH_Drawing_SetTypographyTextAlign" }, + { "name": "OH_Drawing_SetTypographyTextMaxLines" }, + { "name": "OH_Drawing_CreateTextStyle" }, + { "name": "OH_Drawing_DestroyTextStyle" }, + { "name": "OH_Drawing_SetTextStyleColor" }, + { "name": "OH_Drawing_SetTextStyleFontSize" }, + { "name": "OH_Drawing_SetTextStyleFontWeight" }, + { "name": "OH_Drawing_SetTextStyleBaseLine" }, + { "name": "OH_Drawing_SetTextStyleDecoration" }, + { "name": "OH_Drawing_SetTextStyleDecorationColor" }, + { "name": "OH_Drawing_SetTextStyleFontHeight" }, + { "name": "OH_Drawing_SetTextStyleFontFamilies" }, + { "name": "OH_Drawing_SetTextStyleFontStyle" }, + { "name": "OH_Drawing_SetTextStyleLocale" }, + { "name": "OH_Drawing_CreateTypographyHandler" }, + { "name": "OH_Drawing_DestroyTypographyHandler" }, + { "name": "OH_Drawing_TypographyHandlerPushTextStyle" }, + { "name": "OH_Drawing_TypographyHandlerAddText" }, + { "name": "OH_Drawing_TypographyHandlerPopTextStyle" }, + { "name": "OH_Drawing_CreateTypography" }, + { "name": "OH_Drawing_DestroyTypography" }, + { "name": "OH_Drawing_TypographyLayout" }, + { "name": "OH_Drawing_TypographyPaint" }, + { "name": "OH_Drawing_TypographyGetMaxWidth" }, + { "name": "OH_Drawing_TypographyGetHeight" }, + { "name": "OH_Drawing_TypographyGetLongestLine" }, + { "name": "OH_Drawing_TypographyGetMinIntrinsicWidth" }, + { "name": "OH_Drawing_TypographyGetMaxIntrinsicWidth" }, + { "name": "OH_Drawing_TypographyGetAlphabeticBaseline" }, + { "name": "OH_Drawing_TypographyGetIdeographicBaseline" } +] \ No newline at end of file diff --git a/graphic/graphic_2d/native_image/BUILD.gn b/graphic/graphic_2d/native_image/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..915f8978621c9bcb69f5ed50552e58f75a85d67f --- /dev/null +++ b/graphic/graphic_2d/native_image/BUILD.gn @@ -0,0 +1,28 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") + +ohos_ndk_headers("native_image_header") { + dest_dir = "$ndk_headers_out_dir/native_image" + sources = [ "//foundation/graphic/graphic_2d/interfaces/inner_api/surface/native_image.h" ] +} + +ohos_ndk_library("libnative_image_ndk") { + output_name = "native_image" + output_extension = "so" + ndk_description_file = "./libnative_image.ndk.json" + system_capability = "SystemCapability.Graphic.Graphic2D.NativeImage" + system_capability_headers = [ "native_image/native_image.h" ] +} diff --git a/graphic/graphic_2d/native_image/libnative_image.ndk.json b/graphic/graphic_2d/native_image/libnative_image.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..537d83d3e5ae6942a7818b0f5a252a574840c45d --- /dev/null +++ b/graphic/graphic_2d/native_image/libnative_image.ndk.json @@ -0,0 +1,10 @@ +[ + { "name": "OH_NativeImage_Create" }, + { "name": "OH_NativeImage_AcquireNativeWindow" }, + { "name": "OH_NativeImage_AttachContext" }, + { "name": "OH_NativeImage_DetachContext" }, + { "name": "OH_NativeImage_UpdateSurfaceImage" }, + { "name": "OH_NativeImage_GetTimestamp" }, + { "name": "OH_NativeImage_GetTransformMatrix" }, + { "name": "OH_NativeImage_Destroy" } +] \ No newline at end of file diff --git a/graphic/graphic_2d/native_vsync/BUILD.gn b/graphic/graphic_2d/native_vsync/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..9c903df79d830722079d488f2ebd189de54903bd --- /dev/null +++ b/graphic/graphic_2d/native_vsync/BUILD.gn @@ -0,0 +1,28 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") + +ohos_ndk_headers("native_vsync_header") { + dest_dir = "$ndk_headers_out_dir/native_vsync" + sources = [ "//foundation/graphic/graphic_2d/interfaces/inner_api/composer/native_vsync.h" ] +} + +ohos_ndk_library("libnative_vsync_ndk") { + output_name = "native_vsync" + output_extension = "so" + ndk_description_file = "./libnative_vsync.ndk.json" + system_capability = "SystemCapability.Graphic.Graphic2D.NativeVSync" + system_capability_headers = [ "native_vsync/native_vsync.h" ] +} diff --git a/graphic/graphic_2d/native_vsync/libnative_vsync.ndk.json b/graphic/graphic_2d/native_vsync/libnative_vsync.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..e2c78daa58a279be992ec614bae0a8f928b2ba28 --- /dev/null +++ b/graphic/graphic_2d/native_vsync/libnative_vsync.ndk.json @@ -0,0 +1,5 @@ +[ + { "name": "OH_NativeVSync_Create" }, + { "name": "OH_NativeVSync_Destroy" }, + { "name": "OH_NativeVSync_RequestFrame" } +] \ No newline at end of file diff --git a/graphic/graphic_2d/native_window/BUILD.gn b/graphic/graphic_2d/native_window/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..2d02f1b72ed612a6a3d370453c92ecd1275af3e3 --- /dev/null +++ b/graphic/graphic_2d/native_window/BUILD.gn @@ -0,0 +1,35 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") +import("//foundation/graphic/graphic_2d/graphic_config.gni") + +ohos_ndk_headers("native_window_header") { + dest_dir = "$ndk_headers_out_dir/native_window" + sources = [ + "$graphic_2d_root/frameworks/surface/include/buffer_handle.h", + "$graphic_2d_root/interfaces/inner_api/surface/external_window.h", + ] +} + +ohos_ndk_library("libnative_window_ndk") { + output_name = "native_window" + output_extension = "so" + ndk_description_file = "./libnative_window.ndk.json" + system_capability = "SystemCapability.Graphic.Graphic2D.NativeWindow" + system_capability_headers = [ + "native_window/buffer_handle.h", + "native_window/external_window.h", + ] +} diff --git a/graphic/graphic_2d/native_window/libnative_window.ndk.json b/graphic/graphic_2d/native_window/libnative_window.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..95e138ee2dd64151981ce0003a07f29f6fab3ce4 --- /dev/null +++ b/graphic/graphic_2d/native_window/libnative_window.ndk.json @@ -0,0 +1,18 @@ +[ + { "name": "OH_NativeWindow_CreateNativeWindow" }, + { "name": "OH_NativeWindow_DestroyNativeWindow" }, + { "name": "OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer" }, + { "name": "OH_NativeWindow_DestroyNativeWindowBuffer" }, + { "name": "OH_NativeWindow_NativeWindowRequestBuffer" }, + { "name": "OH_NativeWindow_NativeWindowFlushBuffer" }, + { "name": "OH_NativeWindow_NativeWindowAbortBuffer" }, + { "name": "OH_NativeWindow_NativeWindowHandleOpt" }, + { "name": "OH_NativeWindow_GetBufferHandleFromNative" }, + { "name": "OH_NativeWindow_NativeObjectReference" }, + { "name": "OH_NativeWindow_NativeObjectUnreference" }, + { "name": "OH_NativeWindow_GetNativeObjectMagic" }, + { "name": "OH_NativeWindow_NativeWindowSetScalingMode" }, + { "name": "OH_NativeWindow_NativeWindowSetMetaData" }, + { "name": "OH_NativeWindow_NativeWindowSetMetaDataSet" }, + { "name": "OH_NativeWindow_NativeWindowSetTunnelHandle" } +] \ No newline at end of file diff --git a/graphic/graphic_2d/vulkan/BUILD.gn b/graphic/graphic_2d/vulkan/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..627b3f0ba7087844af17d939cde3e89360b1985b --- /dev/null +++ b/graphic/graphic_2d/vulkan/BUILD.gn @@ -0,0 +1,38 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") + +ohos_ndk_headers("vulkan_header") { + dest_dir = "$ndk_headers_out_dir/vulkan" + sources = [ + "//third_party/vulkan-headers/include/vulkan/vk_platform.h", + "//third_party/vulkan-headers/include/vulkan/vulkan.h", + "//third_party/vulkan-headers/include/vulkan/vulkan_core.h", + "//third_party/vulkan-headers/include/vulkan/vulkan_ohos.h", + ] +} + +ohos_ndk_library("libvulkan_ndk") { + output_name = "vulkan" + output_extension = "so" + ndk_description_file = "./libvulkan.ndk.json" + system_capability = "SystemCapability.Graphic.Vulkan" + system_capability_headers = [ + "vulkan/vk_platform.h", + "vulkan/vulkan.h", + "vulkan/vulkan_core.h", + "vulkan/vulkan_ohos.h", + ] +} diff --git a/graphic/graphic_2d/vulkan/libvulkan.ndk.json b/graphic/graphic_2d/vulkan/libvulkan.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..46896ac1f18e801f8739abf492697c2bf305885c --- /dev/null +++ b/graphic/graphic_2d/vulkan/libvulkan.ndk.json @@ -0,0 +1,248 @@ +[ + { "name": "vkAcquireNextImage2KHR" }, + { "name": "vkAcquireNextImageKHR" }, + { "name": "vkAllocateCommandBuffers" }, + { "name": "vkAllocateDescriptorSets" }, + { "name": "vkAllocateMemory" }, + { "name": "vkBeginCommandBuffer" }, + { "name": "vkBindBufferMemory" }, + { "name": "vkBindBufferMemory2" }, + { "name": "vkBindImageMemory" }, + { "name": "vkBindImageMemory2" }, + { "name": "vkCmdBeginQuery" }, + { "name": "vkCmdBeginRendering" }, + { "name": "vkCmdBeginRenderPass" }, + { "name": "vkCmdBeginRenderPass2" }, + { "name": "vkCmdBindDescriptorSets" }, + { "name": "vkCmdBindIndexBuffer" }, + { "name": "vkCmdBindPipeline" }, + { "name": "vkCmdBindVertexBuffers" }, + { "name": "vkCmdBindVertexBuffers2" }, + { "name": "vkCmdBlitImage" }, + { "name": "vkCmdBlitImage2" }, + { "name": "vkCmdClearAttachments" }, + { "name": "vkCmdClearColorImage" }, + { "name": "vkCmdClearDepthStencilImage" }, + { "name": "vkCmdCopyBuffer" }, + { "name": "vkCmdCopyBuffer2" }, + { "name": "vkCmdCopyBufferToImage" }, + { "name": "vkCmdCopyBufferToImage2" }, + { "name": "vkCmdCopyImage" }, + { "name": "vkCmdCopyImage2" }, + { "name": "vkCmdCopyImageToBuffer" }, + { "name": "vkCmdCopyImageToBuffer2" }, + { "name": "vkCmdCopyQueryPoolResults" }, + { "name": "vkCmdDispatch" }, + { "name": "vkCmdDispatchBase" }, + { "name": "vkCmdDispatchIndirect" }, + { "name": "vkCmdDraw" }, + { "name": "vkCmdDrawIndexed" }, + { "name": "vkCmdDrawIndexedIndirect" }, + { "name": "vkCmdDrawIndexedIndirectCount" }, + { "name": "vkCmdDrawIndirect" }, + { "name": "vkCmdDrawIndirectCount" }, + { "name": "vkCmdEndQuery" }, + { "name": "vkCmdEndRendering" }, + { "name": "vkCmdEndRenderPass" }, + { "name": "vkCmdEndRenderPass2" }, + { "name": "vkCmdExecuteCommands" }, + { "name": "vkCmdFillBuffer" }, + { "name": "vkCmdNextSubpass" }, + { "name": "vkCmdNextSubpass2" }, + { "name": "vkCmdPipelineBarrier" }, + { "name": "vkCmdPipelineBarrier2" }, + { "name": "vkCmdPushConstants" }, + { "name": "vkCmdResetEvent" }, + { "name": "vkCmdResetEvent2" }, + { "name": "vkCmdResetQueryPool" }, + { "name": "vkCmdResolveImage" }, + { "name": "vkCmdResolveImage2" }, + { "name": "vkCmdSetBlendConstants" }, + { "name": "vkCmdSetCullMode" }, + { "name": "vkCmdSetDepthBias" }, + { "name": "vkCmdSetDepthBiasEnable" }, + { "name": "vkCmdSetDepthBounds" }, + { "name": "vkCmdSetDepthBoundsTestEnable" }, + { "name": "vkCmdSetDepthCompareOp" }, + { "name": "vkCmdSetDepthTestEnable" }, + { "name": "vkCmdSetDepthWriteEnable" }, + { "name": "vkCmdSetDeviceMask" }, + { "name": "vkCmdSetEvent" }, + { "name": "vkCmdSetEvent2" }, + { "name": "vkCmdSetFrontFace" }, + { "name": "vkCmdSetLineWidth" }, + { "name": "vkCmdSetPrimitiveRestartEnable" }, + { "name": "vkCmdSetPrimitiveTopology" }, + { "name": "vkCmdSetRasterizerDiscardEnable" }, + { "name": "vkCmdSetScissor" }, + { "name": "vkCmdSetScissorWithCount" }, + { "name": "vkCmdSetStencilCompareMask" }, + { "name": "vkCmdSetStencilOp" }, + { "name": "vkCmdSetStencilReference" }, + { "name": "vkCmdSetStencilTestEnable" }, + { "name": "vkCmdSetStencilWriteMask" }, + { "name": "vkCmdSetViewport" }, + { "name": "vkCmdSetViewportWithCount" }, + { "name": "vkCmdUpdateBuffer" }, + { "name": "vkCmdWaitEvents" }, + { "name": "vkCmdWaitEvents2" }, + { "name": "vkCmdWriteTimestamp" }, + { "name": "vkCmdWriteTimestamp2" }, + { "name": "vkCreateBuffer" }, + { "name": "vkCreateBufferView" }, + { "name": "vkCreateCommandPool" }, + { "name": "vkCreateComputePipelines" }, + { "name": "vkCreateDescriptorPool" }, + { "name": "vkCreateDescriptorSetLayout" }, + { "name": "vkCreateDescriptorUpdateTemplate" }, + { "name": "vkCreateDevice" }, + { "name": "vkCreateDisplayModeKHR" }, + { "name": "vkCreateDisplayPlaneSurfaceKHR" }, + { "name": "vkCreateEvent" }, + { "name": "vkCreateFence" }, + { "name": "vkCreateFramebuffer" }, + { "name": "vkCreateGraphicsPipelines" }, + { "name": "vkCreateImage" }, + { "name": "vkCreateImageView" }, + { "name": "vkCreateInstance" }, + { "name": "vkCreatePipelineCache" }, + { "name": "vkCreatePipelineLayout" }, + { "name": "vkCreatePrivateDataSlot" }, + { "name": "vkCreateQueryPool" }, + { "name": "vkCreateRenderPass" }, + { "name": "vkCreateRenderPass2" }, + { "name": "vkCreateSampler" }, + { "name": "vkCreateSamplerYcbcrConversion" }, + { "name": "vkCreateSemaphore" }, + { "name": "vkCreateShaderModule" }, + { "name": "vkCreateSharedSwapchainsKHR" }, + { "name": "vkCreateSwapchainKHR" }, + { "name": "vkDestroyBuffer" }, + { "name": "vkDestroyBufferView" }, + { "name": "vkDestroyCommandPool" }, + { "name": "vkDestroyDescriptorPool" }, + { "name": "vkDestroyDescriptorSetLayout" }, + { "name": "vkDestroyDescriptorUpdateTemplate" }, + { "name": "vkDestroyDevice" }, + { "name": "vkDestroyEvent" }, + { "name": "vkDestroyFence" }, + { "name": "vkDestroyFramebuffer" }, + { "name": "vkDestroyImage" }, + { "name": "vkDestroyImageView" }, + { "name": "vkDestroyInstance" }, + { "name": "vkDestroyPipeline" }, + { "name": "vkDestroyPipelineCache" }, + { "name": "vkDestroyPipelineLayout" }, + { "name": "vkDestroyPrivateDataSlot" }, + { "name": "vkDestroyQueryPool" }, + { "name": "vkDestroyRenderPass" }, + { "name": "vkDestroySampler" }, + { "name": "vkDestroySamplerYcbcrConversion" }, + { "name": "vkDestroySemaphore" }, + { "name": "vkDestroyShaderModule" }, + { "name": "vkDestroySurfaceKHR" }, + { "name": "vkDestroySwapchainKHR" }, + { "name": "vkDeviceWaitIdle" }, + { "name": "vkEndCommandBuffer" }, + { "name": "vkEnumerateDeviceExtensionProperties" }, + { "name": "vkEnumerateDeviceLayerProperties" }, + { "name": "vkEnumerateInstanceExtensionProperties" }, + { "name": "vkEnumerateInstanceLayerProperties" }, + { "name": "vkEnumerateInstanceVersion" }, + { "name": "vkEnumeratePhysicalDeviceGroups" }, + { "name": "vkEnumeratePhysicalDevices" }, + { "name": "vkFlushMappedMemoryRanges" }, + { "name": "vkFreeCommandBuffers" }, + { "name": "vkFreeDescriptorSets" }, + { "name": "vkFreeMemory" }, + { "name": "vkGetBufferDeviceAddress" }, + { "name": "vkGetBufferMemoryRequirements" }, + { "name": "vkGetBufferMemoryRequirements2" }, + { "name": "vkGetBufferOpaqueCaptureAddress" }, + { "name": "vkGetDescriptorSetLayoutSupport" }, + { "name": "vkGetDeviceBufferMemoryRequirements" }, + { "name": "vkGetDeviceGroupPeerMemoryFeatures" }, + { "name": "vkGetDeviceGroupPresentCapabilitiesKHR" }, + { "name": "vkGetDeviceGroupSurfacePresentModesKHR" }, + { "name": "vkGetDeviceImageMemoryRequirements" }, + { "name": "vkGetDeviceImageSparseMemoryRequirements" }, + { "name": "vkGetDeviceMemoryCommitment" }, + { "name": "vkGetDeviceMemoryOpaqueCaptureAddress" }, + { "name": "vkGetDeviceProcAddr" }, + { "name": "vkGetDeviceQueue" }, + { "name": "vkGetDeviceQueue2" }, + { "name": "vkGetDisplayModeProperties2KHR" }, + { "name": "vkGetDisplayModePropertiesKHR" }, + { "name": "vkGetDisplayPlaneCapabilities2KHR" }, + { "name": "vkGetDisplayPlaneCapabilitiesKHR" }, + { "name": "vkGetDisplayPlaneSupportedDisplaysKHR" }, + { "name": "vkGetEventStatus" }, + { "name": "vkGetFenceStatus" }, + { "name": "vkGetImageMemoryRequirements" }, + { "name": "vkGetImageMemoryRequirements2" }, + { "name": "vkGetImageSparseMemoryRequirements" }, + { "name": "vkGetImageSparseMemoryRequirements2" }, + { "name": "vkGetImageSubresourceLayout" }, + { "name": "vkGetInstanceProcAddr" }, + { "name": "vkGetPhysicalDeviceDisplayPlaneProperties2KHR" }, + { "name": "vkGetPhysicalDeviceDisplayPlanePropertiesKHR" }, + { "name": "vkGetPhysicalDeviceDisplayProperties2KHR" }, + { "name": "vkGetPhysicalDeviceDisplayPropertiesKHR" }, + { "name": "vkGetPhysicalDeviceExternalBufferProperties" }, + { "name": "vkGetPhysicalDeviceExternalFenceProperties" }, + { "name": "vkGetPhysicalDeviceExternalSemaphoreProperties" }, + { "name": "vkGetPhysicalDeviceFeatures" }, + { "name": "vkGetPhysicalDeviceFeatures2" }, + { "name": "vkGetPhysicalDeviceFormatProperties" }, + { "name": "vkGetPhysicalDeviceFormatProperties2" }, + { "name": "vkGetPhysicalDeviceImageFormatProperties" }, + { "name": "vkGetPhysicalDeviceImageFormatProperties2" }, + { "name": "vkGetPhysicalDeviceMemoryProperties" }, + { "name": "vkGetPhysicalDeviceMemoryProperties2" }, + { "name": "vkGetPhysicalDevicePresentRectanglesKHR" }, + { "name": "vkGetPhysicalDeviceProperties" }, + { "name": "vkGetPhysicalDeviceProperties2" }, + { "name": "vkGetPhysicalDeviceQueueFamilyProperties" }, + { "name": "vkGetPhysicalDeviceQueueFamilyProperties2" }, + { "name": "vkGetPhysicalDeviceSparseImageFormatProperties" }, + { "name": "vkGetPhysicalDeviceSparseImageFormatProperties2" }, + { "name": "vkGetPhysicalDeviceSurfaceCapabilities2KHR" }, + { "name": "vkGetPhysicalDeviceSurfaceCapabilitiesKHR" }, + { "name": "vkGetPhysicalDeviceSurfaceFormats2KHR" }, + { "name": "vkGetPhysicalDeviceSurfaceFormatsKHR" }, + { "name": "vkGetPhysicalDeviceSurfacePresentModesKHR" }, + { "name": "vkGetPhysicalDeviceSurfaceSupportKHR" }, + { "name": "vkGetPhysicalDeviceToolProperties" }, + { "name": "vkGetPipelineCacheData" }, + { "name": "vkGetPrivateData" }, + { "name": "vkGetQueryPoolResults" }, + { "name": "vkGetRenderAreaGranularity" }, + { "name": "vkGetSemaphoreCounterValue" }, + { "name": "vkGetSwapchainImagesKHR" }, + { "name": "vkInvalidateMappedMemoryRanges" }, + { "name": "vkMapMemory" }, + { "name": "vkMergePipelineCaches" }, + { "name": "vkQueueBindSparse" }, + { "name": "vkQueuePresentKHR" }, + { "name": "vkQueueSubmit" }, + { "name": "vkQueueSubmit2" }, + { "name": "vkQueueWaitIdle" }, + { "name": "vkResetCommandBuffer" }, + { "name": "vkResetCommandPool" }, + { "name": "vkResetDescriptorPool" }, + { "name": "vkResetEvent" }, + { "name": "vkResetFences" }, + { "name": "vkResetQueryPool" }, + { "name": "vkSetEvent" }, + { "name": "vkSetPrivateData" }, + { "name": "vkSignalSemaphore" }, + { "name": "vkTrimCommandPool" }, + { "name": "vkUnmapMemory" }, + { "name": "vkUpdateDescriptorSets" }, + { "name": "vkUpdateDescriptorSetWithTemplate" }, + { "name": "vkWaitForFences" }, + { "name": "vkWaitSemaphores" }, + { "name": "vkCreateSurfaceOHOS" }, + { "name": "vkGetNativeBufferPropertiesOHOS" }, + { "name": "vkGetMemoryNativeBufferOHOS" } +] \ No newline at end of file diff --git a/hiviewdfx/hiappevent/BUILD.gn b/hiviewdfx/hiappevent/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..9a0c41b0c7f44e1835d9a8d8f3ba241db39e7d75 --- /dev/null +++ b/hiviewdfx/hiappevent/BUILD.gn @@ -0,0 +1,31 @@ +# Copyright (c) 2021-2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +ohos_ndk_library("libhiappevent_ndk") { + output_name = "hiappevent_ndk" + ndk_description_file = "./libhiappevent.ndk.json" + min_compact_version = "1" + system_capability = "SystemCapability.HiviewDFX.HiAppEvent" +} + +ohos_ndk_headers("libhiappevent_header") { + dest_dir = "$ndk_headers_out_dir/hiappevent" + sources = [ + "./include/hiappevent/hiappevent.h", + "./include/hiappevent/hiappevent_cfg.h", + "./include/hiappevent/hiappevent_event.h", + "./include/hiappevent/hiappevent_param.h", + ] +} diff --git a/hiviewdfx/hiappevent/include/hiappevent/hiappevent.h b/hiviewdfx/hiappevent/include/hiappevent/hiappevent.h new file mode 100644 index 0000000000000000000000000000000000000000..2b3d36311742c7e5a5259c8fafa757b3a074c675 --- /dev/null +++ b/hiviewdfx/hiappevent/include/hiappevent/hiappevent.h @@ -0,0 +1,374 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef HIVIEWDFX_HIAPPEVENT_H +#define HIVIEWDFX_HIAPPEVENT_H +/** + * @addtogroup HiAppEvent + * @{ + * + * @brief Provides application event logging functions. + * + * Provides the event logging function for applications to log the fault, statistical, security, and user behavior + * events reported during running. Based on event information, you will be able to analyze the running status of + * applications. + * + * @syscap SystemCapability.HiviewDFX.HiAppEvent + * + * @since 8 + * @version 1.0 + */ + +/** + * @file hiappevent.h + * + * @brief Defines the application event logging functions of the HiAppEvent module. + * + * Before performing application event logging, you must construct a ParamList object to store the input + * event parameters and specify the event domain, event name, and event type. + * + *

Event domain: a string used to identify the domain of event logging. + *

Event name: a string used to identify the event name of event logging. + *

Event type: FAULT, STATISTIC, SECURITY, BEHAVIOR. + *

ParamList: a linked list used to store event parameters, each of which is comprised of the parameter name and + * parameter value. + * + * Sample code: + * 00 Including the header file: + *

+ *     #include "hiappevent/hiappevent.h"
+ * 
+ * 01 create a ParamList pointer. + *
+ *     ParamList list = OH_HiAppEvent_CreateParamList();
+ * 
+ * 02 add params to the ParamList. + *
+ *     bool boolean = true;
+ *     OH_HiAppEvent_AddBoolParam(list, "bool_key", boolean);
+ *     int32_t nums[] = {1, 2, 3};
+ *     OH_HiAppEvent_AddInt32ArrayParam(list, "int32_arr_key", nums, sizeof(nums) / sizeof(nums[0]));
+ * 
+ * 03 performing event logging. + *
+ *     int res = OH_HiAppEvent_Write("test_domain", "test_event", BEHAVIOR, list);
+ * 
+ * 04 destroy the ParamList pointer. + *
+ *     OH_HiAppEvent_DestroyParamList(list);
+ * 
+ * + * @since 8 + * @version 1.0 + */ + +#include +#include + +#include "hiappevent_cfg.h" +#include "hiappevent_event.h" +#include "hiappevent_param.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Event types. + * + * You are advised to select event types based on their respective usage scenarios. + * + * @since 8 + * @version 1.0 + */ +enum EventType { + /* Fault event type */ + FAULT = 1, + + /* Statistic event type */ + STATISTIC = 2, + + /* Security event type */ + SECURITY = 3, + + /* Behavior event type */ + BEHAVIOR = 4 +}; + +/** + * @brief Event param list node. + * + * @since 8 + * @version 1.0 + */ +typedef struct ParamListNode* ParamList; + +/** + * @brief Create a pointer to the ParamList. + * + * @return Pointer to the ParamList. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_CreateParamList(void); + +/** + * @brief Destroy a pointer to the ParamList. + * + * @param list Event param list. + * @since 8 + * @version 1.0 + */ +void OH_HiAppEvent_DestroyParamList(ParamList list); + +/** + * @brief Add bool param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param boolean The bool value of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddBoolParam(ParamList list, const char* name, bool boolean); + +/** + * @brief Add bool array param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param booleans The bool array value of the param to be added. + * @param arrSize The array size of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddBoolArrayParam(ParamList list, const char* name, const bool* booleans, int arrSize); + +/** + * @brief Add int8_t param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param num The int8_t value of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddInt8Param(ParamList list, const char* name, int8_t num); + +/** + * @brief Add int8_t array param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param nums The int8_t array value of the param to be added. + * @param arrSize The array size of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddInt8ArrayParam(ParamList list, const char* name, const int8_t* nums, int arrSize); + +/** + * @brief Add int16_t param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param num The int16_t value of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddInt16Param(ParamList list, const char* name, int16_t num); + +/** + * @brief Add int16_t array param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param nums The int16_t array value of the param to be added. + * @param arrSize The array size of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddInt16ArrayParam(ParamList list, const char* name, const int16_t* nums, int arrSize); + +/** + * @brief Add int32_t param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param num The int32_t value of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddInt32Param(ParamList list, const char* name, int32_t num); + +/** + * @brief Add int32_t array param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param nums The int32_t array value of the param to be added. + * @param arrSize The array size of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddInt32ArrayParam(ParamList list, const char* name, const int32_t* nums, int arrSize); + +/** + * @brief Add int64_t param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param num The int64_t value of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddInt64Param(ParamList list, const char* name, int64_t num); + +/** + * @brief Add int64_t array param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param nums The int64_t array value of the param to be added. + * @param arrSize The array size of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddInt64ArrayParam(ParamList list, const char* name, const int64_t* nums, int arrSize); + +/** + * @brief Add float param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param num The float value of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddFloatParam(ParamList list, const char* name, float num); + +/** + * @brief Add float array param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param nums The float array value of the param to be added. + * @param arrSize The array size of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddFloatArrayParam(ParamList list, const char* name, const float* nums, int arrSize); + +/** + * @brief Add double param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param num The double value of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddDoubleParam(ParamList list, const char* name, double num); + +/** + * @brief Add double array param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param nums The double array value of the param to be added. + * @param arrSize The array size of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddDoubleArrayParam(ParamList list, const char* name, const double* nums, int arrSize); + +/** + * @brief Add string param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param str The string value of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddStringParam(ParamList list, const char* name, const char* str); + +/** + * @brief Add string array param to the ParamList. + * + * @param list The ParamList of params to be added. + * @param name The name of the param to be added. + * @param strs The string array value of the param to be added. + * @param arrSize The array size of the param to be added. + * @return ParamList after the param is added. + * @since 8 + * @version 1.0 + */ +ParamList OH_HiAppEvent_AddStringArrayParam(ParamList list, const char* name, const char * const *strs, int arrSize); + +/** + * @brief Implements logging of application events whose parameters are of the list type. + * + * Before logging an application event, this API will first verify parameters of this event. + * If the verification is successful, the API will write the event to the event file. + * + * @param domain Indicates the event domain. You can customize the event domain as needed. + * @param name Indicates the event name. You can customize the event name as needed. + * @param type Indicates the event type, which is defined in {@link EventType}. + * @param list Indicates a linked list of event parameters, each of which is comprised of the parameter name and + * parameter value. + * @return Returns {@code 0} if the event parameter verification is successful, and the event will be written to + * the event file; returns a positive integer if invalid parameters are present in the event, and + * the event will be written to the event file after the invalid parameters are ignored; returns a + * negative integer if the event parameter verification fails, and the event will not be written to the event file. + * @since 8 + * @version 1.0 + */ +int OH_HiAppEvent_Write(const char* domain, const char* name, enum EventType type, const ParamList list); + +/** + * @brief Implements the configuration function of application events logging. + * + * Application event logging configuration interface, which is used to configure event logging switch, + * event file directory storage quota size and other functions. + * + * @param name Configuration item name. + * @param value Configuration item value. + * @return Configuration result. + * @since 8 + * @version 1.0 + */ +bool OH_HiAppEvent_Configure(const char* name, const char* value); + +#ifdef __cplusplus +} +#endif +/** @} */ +#endif // HIVIEWDFX_HIAPPEVENT_H \ No newline at end of file diff --git a/hiviewdfx/hiappevent/include/hiappevent/hiappevent_cfg.h b/hiviewdfx/hiappevent/include/hiappevent/hiappevent_cfg.h new file mode 100644 index 0000000000000000000000000000000000000000..e2a6fbeaf844c79bf108fe6d3ef91af93429175f --- /dev/null +++ b/hiviewdfx/hiappevent/include/hiappevent/hiappevent_cfg.h @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef HIVIEWDFX_HIAPPEVENT_CONFIG_H +#define HIVIEWDFX_HIAPPEVENT_CONFIG_H + +/** + * @addtogroup HiAppEvent + * @{ + * + * @brief Provides application event logging functions. + * + * Provides the event logging function for applications to log the fault, statistical, security, and user behavior + * events reported during running. Based on event information, you will be able to analyze the running status of + * applications. + * + * @syscap SystemCapability.HiviewDFX.HiAppEvent + * + * @since 8 + * @version 1.0 + */ + +/** + * @file hiappevent_cfg.h + * + * @brief Defines the names of all the configuration items of the event logging configuration function. + * + * If you want to configure the event logging function, you can directly use the configuration item constants. + * + * Sample code: + *
+ *     bool res = OH_HiAppEvent_Configure(MAX_STORAGE, "100M");
+ * 
+ * + * @since 8 + * @version 1.0 + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Event logging switch. + * + * @since 8 + * @version 1.0 + */ +#define DISABLE "disable" + +/** + * @brief Event file directory storage quota size. + * + * @since 8 + * @version 1.0 + */ +#define MAX_STORAGE "max_storage" + +#ifdef __cplusplus +} +#endif +/** @} */ +#endif // HIVIEWDFX_HIAPPEVENT_CONFIG_H \ No newline at end of file diff --git a/hiviewdfx/hiappevent/include/hiappevent/hiappevent_event.h b/hiviewdfx/hiappevent/include/hiappevent/hiappevent_event.h new file mode 100644 index 0000000000000000000000000000000000000000..66aa52061fc8c8fc056437a41b1c22dc9ccf30b1 --- /dev/null +++ b/hiviewdfx/hiappevent/include/hiappevent/hiappevent_event.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef HIVIEWDFX_HIAPPEVENT_EVENT_H +#define HIVIEWDFX_HIAPPEVENT_EVENT_H + +/** + * @addtogroup HiAppEvent + * @{ + * + * @brief Provides application event logging functions. + * + * Provides the event logging function for applications to log the fault, statistical, security, and user behavior + * events reported during running. Based on event information, you will be able to analyze the running status of + * applications. + * + * @syscap SystemCapability.HiviewDFX.HiAppEvent + * + * @since 8 + * @version 1.0 + */ + +/** + * @file hiappevent_event.h + * + * @brief Defines the event names of all predefined events. + * + * In addition to custom events associated with specific apps, you can also use predefined events for logging. + * + * Sample code: + *
+ *     ParamList list = OH_HiAppEvent_CreateParamList();
+ *     OH_HiAppEvent_AddInt32Param(list, PARAM_USER_ID, 123);
+ *     int res = OH_HiAppEvent_Write("user_domain", EVENT_USER_LOGIN, BEHAVIOR, list);
+ *     OH_HiAppEvent_DestroyParamList(list);
+ * 
+ * + * @since 8 + * @version 1.0 + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief user login event. + * + * @since 8 + * @version 1.0 + */ +#define EVENT_USER_LOGIN "hiappevent.user_login" + +/** + * @brief user logout event. + * + * @since 8 + * @version 1.0 + */ +#define EVENT_USER_LOGOUT "hiappevent.user_logout" + +/** + * @brief distributed service event. + * + * @since 8 + * @version 1.0 + */ +#define EVENT_DISTRIBUTED_SERVICE_START "hiappevent.distributed_service_start" + +#ifdef __cplusplus +} +#endif +/** @} */ +#endif // HIVIEWDFX_HIAPPEVENT_EVENT_H \ No newline at end of file diff --git a/hiviewdfx/hiappevent/include/hiappevent/hiappevent_param.h b/hiviewdfx/hiappevent/include/hiappevent/hiappevent_param.h new file mode 100644 index 0000000000000000000000000000000000000000..f47972e8dd625dcc8144157d0c6283982a679135 --- /dev/null +++ b/hiviewdfx/hiappevent/include/hiappevent/hiappevent_param.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef HIVIEWDFX_HIAPPEVENT_PARAM_H +#define HIVIEWDFX_HIAPPEVENT_PARAM_H + +/** + * @addtogroup HiAppEvent + * @{ + * + * @brief Provides application event logging functions. + * + * Provides the event logging function for applications to log the fault, statistical, security, and user behavior + * events reported during running. Based on event information, you will be able to analyze the running status of + * applications. + * + * @syscap SystemCapability.HiviewDFX.HiAppEvent + * + * @since 8 + * @version 1.0 + */ + +/** + * @file hiappevent_param.h + * + * @brief Defines the param names of all predefined events. + * + * In addition to custom events associated with specific apps, you can also use predefined events for logging. + * + * Sample code: + *
+ *     ParamList list = OH_HiAppEvent_CreateParamList();
+ *     OH_HiAppEvent_AddInt32Param(list, PARAM_USER_ID, 123);
+ *     int res = OH_HiAppEvent_Write("user_domain", EVENT_USER_LOGIN, BEHAVIOR, list);
+ *     OH_HiAppEvent_DestroyParamList(list);
+ * 
+ * + * @since 8 + * @version 1.0 + */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Preset param name, user id param. + * + * @since 8 + * @version 1.0 + */ +#define PARAM_USER_ID "user_id" + +/** + * @brief Preset param name, distributed service name param. + * + * @since 8 + * @version 1.0 + */ +#define PARAM_DISTRIBUTED_SERVICE_NAME "ds_name" + +/** + * @brief Preset param name, distributed service instance id param. + * + * @since 8 + * @version 1.0 + */ +#define PARAM_DISTRIBUTED_SERVICE_INSTANCE_ID "ds_instance_id" + +#ifdef __cplusplus +} +#endif +/** @} */ +#endif // HIVIEWDFX_HIAPPEVENT_PARAM_H \ No newline at end of file diff --git a/hiviewdfx/hiappevent/libhiappevent.ndk.json b/hiviewdfx/hiappevent/libhiappevent.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..44d3c6a7430f1a696efb93ecd57b8c4c5da501ee --- /dev/null +++ b/hiviewdfx/hiappevent/libhiappevent.ndk.json @@ -0,0 +1,62 @@ +[ + { + "name": "OH_HiAppEvent_Write" + }, + { + "name": "OH_HiAppEvent_Configure" + }, + { + "name": "OH_HiAppEvent_AddBoolParam" + }, + { + "name": "OH_HiAppEvent_AddBoolArrayParam" + }, + { + "name": "OH_HiAppEvent_AddInt8Param" + }, + { + "name": "OH_HiAppEvent_AddInt8ArrayParam" + }, + { + "name": "OH_HiAppEvent_AddInt16Param" + }, + { + "name": "OH_HiAppEvent_AddInt16ArrayParam" + }, + { + "name": "OH_HiAppEvent_AddInt32Param" + }, + { + "name": "OH_HiAppEvent_AddInt32ArrayParam" + }, + { + "name": "OH_HiAppEvent_AddInt64Param" + }, + { + "name": "OH_HiAppEvent_AddInt64ArrayParam" + }, + { + "name": "OH_HiAppEvent_AddFloatParam" + }, + { + "name": "OH_HiAppEvent_AddFloatArrayParam" + }, + { + "name": "OH_HiAppEvent_AddDoubleParam" + }, + { + "name": "OH_HiAppEvent_AddDoubleArrayParam" + }, + { + "name": "OH_HiAppEvent_AddStringParam" + }, + { + "name": "OH_HiAppEvent_AddStringArrayParam" + }, + { + "name": "OH_HiAppEvent_CreateParamList" + }, + { + "name": "OH_HiAppEvent_DestroyParamList" + } +] diff --git a/hiviewdfx/hilog/BUILD.gn b/hiviewdfx/hilog/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..1d6816c6036a5fb35e626fbc6182821212b68638 --- /dev/null +++ b/hiviewdfx/hilog/BUILD.gn @@ -0,0 +1,26 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +ohos_ndk_library("libhilog_ndk") { + output_name = "hilog_ndk" + ndk_description_file = "./libhilog.ndk.json" + min_compact_version = "1" + system_capability = "SystemCapability.HiviewDFX.HiLog" +} + +ohos_ndk_headers("hilog_header") { + dest_dir = "$ndk_headers_out_dir/hilog" + sources = [ "./include/hilog/log.h" ] +} diff --git a/hiviewdfx/hilog/include/hilog/log.h b/hiviewdfx/hilog/include/hilog/log.h new file mode 100644 index 0000000000000000000000000000000000000000..26049d945ad80c33ee9d3f3d124b3951e4957d2c --- /dev/null +++ b/hiviewdfx/hilog/include/hilog/log.h @@ -0,0 +1,258 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef HIVIEWDFX_HILOG_H +#define HIVIEWDFX_HILOG_H +/** + * @addtogroup HiLog + * @{ + * + * @brief Provides logging functions. + * + * For example, you can use these functions to output logs of the specified log type, service domain, log tag, + * and log level. + * + * @syscap SystemCapability.HiviewDFX.HiLog + * + * @since 8 + */ + +/** + * @file log.h + * + * @brief Defines the logging functions of the HiLog module. + * + * Before outputting logs, you must define the service domain, and log tag, use the function with + * the specified log type and level, and specify the privacy identifier.\n + *
  • Service domain: used to identify the subsystem and module of a service. Its value is a hexadecimal + * integer ranging from 0x0 to 0xFFFF. \n + *
  • Log tag: a string used to identify the class, file, or service.
  • \n + *
  • Log level: DEBUG, INFO, WARN, ERROR, and FATAL
  • \n + *
  • Parameter format: a printf format string that starts with a % character, including format specifiers + * and variable parameters.
  • \n + *
  • Privacy identifier: {public} or {private} added between the % character and the format specifier in + * each parameter. Note that each parameter has a privacy identifier. If no privacy identifier is added, + * the parameter is considered to be private.
\n + * + * Sample code:\n + * Defining the service domain and log tag:\n + * #include \n + * #define LOG_DOMAIN 0x0201\n + * #define LOG_TAG "MY_TAG"\n + * Outputting logs:\n + * HILOG_WARN({@link LOG_APP}, "Failed to visit %{private}s, reason:%{public}d.", url, errno);\n + * Output result:\n + * 05-06 15:01:06.870 1051 1051 W 0201/MY_TAG: Failed to visit , reason:503.\n + * + * @since 8 + */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Defines the service domain for a log file. + * + * The service domain is used to identify the subsystem and module of a service. Its value is a hexadecimal integer + * ranging from 0x0 to 0xFFFF. If the value is beyond the range, its significant bits are automatically truncated. \n + * + * @since 8 + */ +#ifndef LOG_DOMAIN +#define LOG_DOMAIN 0 +#endif + +/** + * @brief Defines a string constant used to identify the class, file, or service. + * + * @since 8 + */ +#ifndef LOG_TAG +#define LOG_TAG NULL +#endif + +/** + * @brief Enumerates log types. + * + * Currently, LOG_APP is available. \n + * + * @since 8 + */ +typedef enum { + /** Third-party application logs */ + LOG_APP = 0, +} LogType; + +/** + * @brief Enumerates log levels. + * + * You are advised to select log levels based on their respective usage scenarios:\n + *
  • DEBUG: used for debugging and disabled from commercial releases
  • \n + *
  • INFO: used for logging important system running status and steps in key processes
  • \n + *
  • WARN: used for logging unexpected exceptions that have little impact on user experience and can + * automatically recover. Logs at this level are generally output when such exceptions are detected and + * captured.
  • \n + *
  • ERROR: used for logging malfunction that affects user experience and cannot automatically + * recover
  • \n + *
  • FATAL: used for logging major exceptions that have severely affected user experience and should + * not occur.
\n + * + * @since 8 + */ +typedef enum { + /** Debug level to be used by {@link OH_LOG_DEBUG} */ + LOG_DEBUG = 3, + /** Informational level to be used by {@link OH_LOG_INFO} */ + LOG_INFO = 4, + /** Warning level to be used by {@link OH_LOG_WARN} */ + LOG_WARN = 5, + /** Error level to be used by {@link OH_LOG_ERROR} */ + LOG_ERROR = 6, + /** Fatal level to be used by {@link OH_LOG_FATAL} */ + LOG_FATAL = 7, +} LogLevel; + +/** + * @brief Outputs logs. + * + * You can use this function to output logs based on the specified log type, log level, service domain, log tag, + * and variable parameters determined by the format specifier and privacy identifier in the printf format. + * + * @param type Indicates the log type. The type for third-party applications is defined by {@link LOG_APP}. + * @param level Indicates the log level, which can be LOG_DEBUG, LOG_INFO, LOG_WARN, + * LOG_ERROR, and LOG_FATAL. + * @param domain Indicates the service domain of logs. Its value is a hexadecimal integer ranging from 0x0 to 0xFFFF. + * @param tag Indicates the log tag, which is a string used to identify the class, file, or service behavior. + * @param fmt Indicates the format string, which is an enhancement of a printf format string and supports the privacy + * identifier. Specifically, {public} or {private} is added between the % character and the format specifier + * in each parameter. \n + * @param ... Indicates a list of parameters. The number and type of parameters must map onto the format specifiers + * in the format string. + * @return Returns 0 or a larger value if the operation is successful; returns a value smaller + * than 0 otherwise. + * @since 8 + */ +int OH_LOG_Print(LogType type, LogLevel level, unsigned int domain, const char *tag, const char *fmt, ...) + __attribute__((__format__(os_log, 5, 6))); + +/** + * @brief Checks whether logs of the specified service domain, log tag, and log level can be output. + * + * @param domain Indicates the service domain of logs. + * @param tag Indicates the log tag. + * @param level Indicates the log level. + * @return Returns true if the specified logs can be output; returns false otherwise. + * @since 8 + */ +bool OH_LOG_IsLoggable(unsigned int domain, const char *tag, LogLevel level); + +/** + * @brief Outputs debug logs. This is a function-like macro. + * + * Before calling this function, define the log service domain and log tag. Generally, you need to define them at + * the beginning of the source file. \n + * + * @param type Indicates the log type. The type for third-party applications is defined by {@link LOG_APP}. + * @param fmt Indicates the format string, which is an enhancement of a printf format string and supports the + * privacy identifier. Specifically, {public} or {private} is added between the % character and the format specifier + * in each parameter. \n + * @param ... Indicates a list of parameters. The number and type of parameters must map onto the format specifiers + * in the format string. + * @see OH_LOG_Print + * @since 8 + */ +#define OH_LOG_DEBUG(type, ...) ((void)OH_LOG_Print((type), LOG_DEBUG, LOG_DOMAIN, LOG_TAG, __VA_ARGS__)) + +/** + * @brief Outputs informational logs. This is a function-like macro. + * + * Before calling this function, define the log service domain and log tag. Generally, you need to define them + * at the beginning of the source file. \n + * + * @param type Indicates the log type. The type for third-party applications is defined by {@link LOG_APP}. + * @param fmt Indicates the format string, which is an enhancement of a printf format string and supports the privacy + * identifier. Specifically, {public} or {private} is added between the % character and the format specifier in + * each parameter. \n + * @param ... Indicates a list of parameters. The number and type of parameters must map onto the format specifiers + * in the format string. + * @see OH_LOG_Print + * @since 8 + */ +#define OH_LOG_INFO(type, ...) ((void)OH_LOG_Print((type), LOG_INFO, LOG_DOMAIN, LOG_TAG, __VA_ARGS__)) + +/** + * @brief Outputs warning logs. This is a function-like macro. + * + * Before calling this function, define the log service domain and log tag. Generally, you need to define them + * at the beginning of the source file. \n + * + * @param type Indicates the log type. The type for third-party applications is defined by {@link LOG_APP}. + * @param fmt Indicates the format string, which is an enhancement of a printf format string and supports the + * privacy identifier. Specifically, {public} or {private} is added between the % character and the format specifier + * in each parameter. \n + * @param ... Indicates a list of parameters. The number and type of parameters must map onto the format specifiers + * in the format string. + * @see OH_LOG_Print + * @since 8 + */ +#define OH_LOG_WARN(type, ...) ((void)OH_LOG_Print((type), LOG_WARN, LOG_DOMAIN, LOG_TAG, __VA_ARGS__)) + +/** + * @brief Outputs error logs. This is a function-like macro. + * + * Before calling this function, define the log service domain and log tag. Generally, you need to define + * them at the beginning of the source file. \n + * + * @param type Indicates the log type. The type for third-party applications is defined by {@link LOG_APP}. + * @param fmt Indicates the format string, which is an enhancement of a printf format string and supports the privacy + * identifier. Specifically, {public} or {private} is added between the % character and the format specifier in each + * parameter. \n + * @param ... Indicates a list of parameters. The number and type of parameters must map onto the format specifiers + * in the format string. + * @see OH_LOG_Print + * @since 8 + */ +#define OH_LOG_ERROR(type, ...) ((void)OH_LOG_Print((type), LOG_ERROR, LOG_DOMAIN, LOG_TAG, __VA_ARGS__)) + +/** + * @brief Outputs fatal logs. This is a function-like macro. + * + * Before calling this function, define the log service domain and log tag. Generally, you need to define them at + * the beginning of the source file. \n + * + * @param type Indicates the log type. The type for third-party applications is defined by {@link LOG_APP}. + * @param fmt Indicates the format string, which is an enhancement of a printf format string and supports the privacy + * identifier. Specifically, {public} or {private} is added between the % character and the format specifier in + * each parameter. \n + * @param ... Indicates a list of parameters. The number and type of parameters must map onto the format specifiers + * in the format string. + * @see OH_LOG_Print + * @since 8 + */ +#define OH_LOG_FATAL(type, ...) ((void)OH_LOG_Print((type), LOG_FATAL, LOG_DOMAIN, LOG_TAG, __VA_ARGS__)) + +#ifdef __cplusplus +} +#endif +/** @} */ + +#ifdef HILOG_RAWFORMAT +#include "hilog/log_inner.h" +#endif + +#endif // HIVIEWDFX_HILOG_C_H diff --git a/hiviewdfx/hilog/libhilog.ndk.json b/hiviewdfx/hilog/libhilog.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..f121a608ef1db5c01429864a05ba6e5dc1bb62e5 --- /dev/null +++ b/hiviewdfx/hilog/libhilog.ndk.json @@ -0,0 +1,8 @@ +[ + { + "name": "OH_LOG_Print" + }, + { + "name": "OH_LOG_IsLoggable" + } +] diff --git a/hiviewdfx/hitrace/BUILD.gn b/hiviewdfx/hitrace/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..00086c79a326f1ae5053b13a3c9fb5ab1bdce92e --- /dev/null +++ b/hiviewdfx/hitrace/BUILD.gn @@ -0,0 +1,26 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +ohos_ndk_library("libhitrace_ndk") { + output_name = "hitrace_ndk" + ndk_description_file = "./libhitrace.ndk.json" + min_compact_version = "1" + system_capability = "SystemCapability.HiviewDFX.HiTrace" +} + +ohos_ndk_headers("hitrace_header") { + dest_dir = "$ndk_headers_out_dir/hitrace" + sources = [ "./include/hitrace/trace.h" ] +} diff --git a/hiviewdfx/hitrace/include/hitrace/trace.h b/hiviewdfx/hitrace/include/hitrace/trace.h new file mode 100644 index 0000000000000000000000000000000000000000..1940d14b18dfb83310b9e2d214a1f098f482e884 --- /dev/null +++ b/hiviewdfx/hitrace/include/hitrace/trace.h @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef HIVIEWDFX_HITRACE_H +#define HIVIEWDFX_HITRACE_H +/** + * @addtogroup Hitrace + * @{ + * + * @brief hiTraceMeter provides APIs for system performance trace. + * + * You can call the APIs provided by hiTraceMeter in your own service logic to effectively + * track service processes and check the system performance. + * + * @syscap SystemCapability.HiviewDFX.HiTrace + * + * @since 10 + */ + +/** + * @file trace.h + * + * @brief Defines APIs of the HiTraceMeter module for performance trace. + * + * Sample code: \n + * Synchronous timeslice trace event: \n + * OH_HiTrace_StartTrace("hitraceTest");\n + * OH_HiTrace_FinishTrace();\n + * Output: \n + * <...>-1668 (-------) [003] .... 135.059377: tracing_mark_write: B|1668|H:hitraceTest \n + * <...>-1668 (-------) [003] .... 135.059415: tracing_mark_write: E|1668| \n + * Asynchronous timeslice trace event:\n + * OH_HiTrace_StartAsyncTrace("hitraceTest", 123); \n + * OH_HiTrace_FinishAsyncTrace("hitraceTest", 123); \n + * Output: \n + * <...>-2477 (-------) [001] .... 396.427165: tracing_mark_write: S|2477|H:hitraceTest 123 \n + * <...>-2477 (-------) [001] .... 396.427196: tracing_mark_write: F|2477|H:hitraceTest 123 \n + * Integer value trace event:\n + * OH_HiTrace_CountTrace("hitraceTest", 500); \n + * Output: \n + * <...>-2638 (-------) [002] .... 458.904382: tracing_mark_write: C|2638|H:hitraceTest 500 \n + * + * @syscap SystemCapability.HiviewDFX.HiTrace + * @since 10 + */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Marks the start of a synchronous trace task. + * + * The OH_HiTrace_StartTrace and OH_HiTrace_FinishTrace APIs must be used in pairs. + * The two APIs can be used in nested mode. The stack data structure is used for matching during trace data parsing. + * + * @param name Name of a trace task. + * + * @syscap SystemCapability.HiviewDFX.HiTrace + * @since 10 + */ +void OH_HiTrace_StartTrace(const char *name); + +/** + * @brief Marks the end of a synchronous trace task. + * + * This API must be used with OH_HiTrace_StartTrace in pairs. During trace data parsing, the system matches + * it with the OH_HiTrace_StartTrace API recently invoked in the service process. + * + * @syscap SystemCapability.HiviewDFX.HiTrace + * @since 10 + */ +void OH_HiTrace_FinishTrace(void); + +/** + * @brief Marks the start of an asynchronous trace task. + * + * This API is called to implement performance trace in asynchronous manner. The start and end of an asynchronous + * trace task do not occur in sequence. Therefore, a unique taskId is required to ensure proper data parsing. + * It is passed as an input parameter for the asynchronous API. + * This API is used with OH_HiTrace_FinishAsyncTrace in pairs. The two APIs that have the same name and + * task ID together form an asynchronous timeslice trace task. + * If multiple trace tasks with the same name need to be performed at the same time or a trace task needs to be + * performed multiple times concurrently, different task IDs must be specified in OH_HiTrace_StartTrace. + * If the trace tasks with the same name are not performed at the same time, the same taskId can be used. + * + * @param name Name of the asynchronous trace task. + * @param taskId ID of the asynchronous trace task. The start and end of an asynchronous trace task do not occur in + * sequence. Therefore, the start and end of an asynchronous trace need to be matched based on the task name and the + * unique task ID together. + * + * @syscap SystemCapability.HiviewDFX.HiTrace + * @since 10 + */ +void OH_HiTrace_StartAsyncTrace(const char *name, int32_t taskId); + +/** + * @brief Marks the end of an asynchronous trace task. + * + * This API is called in the callback function after an asynchronous trace is complete. + * It is used with OH_HiTrace_StartAsyncTrace in pairs. Its name and task ID must be the same as those of + * OH_HiTrace_StartAsyncTrace. + * + * @param name Name of the asynchronous trace task. + * @param taskId ID of the asynchronous trace task. The start and end of an asynchronous trace task do not occur in + * sequence. Therefore, the start and end of an asynchronous trace need to be matched based on the task name and the + * unique task ID together. + * + * @syscap SystemCapability.HiviewDFX.HiTrace + * @since 10 + */ +void OH_HiTrace_FinishAsyncTrace(const char *name, int32_t taskId); + +/** + * @brief Traces the value change of an integer variable based on its name. + * + * This API can be executed for multiple times to trace the value change of a given integer variable at different + * time points. + * + * @param name Name of the integer variable. It does not need to be the same as the real variable name. + * @param count Integer value. Generally, an integer variable can be passed. + * + * @syscap SystemCapability.HiviewDFX.HiTrace + * @since 10 + */ +void OH_HiTrace_CountTrace(const char *name, int64_t count); + +#ifdef __cplusplus +} +#endif +#endif // HIVIEWDFX_HITRACE_H diff --git a/hiviewdfx/hitrace/libhitrace.ndk.json b/hiviewdfx/hitrace/libhitrace.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..accfdcd97b3c4a1e2d9604d9af926090f9fe10dd --- /dev/null +++ b/hiviewdfx/hitrace/libhitrace.ndk.json @@ -0,0 +1,17 @@ +[ + { + "name": "OH_HiTrace_StartTrace" + }, + { + "name": "OH_HiTrace_FinishTrace" + }, + { + "name": "OH_HiTrace_StartAsyncTrace" + }, + { + "name": "OH_HiTrace_FinishAsyncTrace" + }, + { + "name": "OH_HiTrace_CountTrace" + } +] \ No newline at end of file diff --git a/multimedia/audio_framework/BUILD.gn b/multimedia/audio_framework/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..6393654ab656304d1f7c36aad94f1a2289cf0baf --- /dev/null +++ b/multimedia/audio_framework/BUILD.gn @@ -0,0 +1,39 @@ +# Copyright (C) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") +import("//foundation/multimedia/audio_framework/config.gni") + +ohos_ndk_headers("ohaudio_header") { + dest_dir = "$ndk_headers_out_dir/ohaudio" + sources = [ + "audio_capturer/native_audiocapturer.h", + "audio_renderer/native_audiorenderer.h", + "common/native_audiostream_base.h", + "common/native_audiostreambuilder.h", + ] +} + +ohos_ndk_library("libohaudio_ndk") { + output_name = "ohaudio" + output_extension = "so" + ndk_description_file = "./ohaudio.ndk.json" + system_capability = "SystemCapability.Multimedia.Audio.Core" + system_capability_headers = [ + "ohaudio/native_audiostream_base.h", + "ohaudio/native_audiostreambuilder.h", + "ohaudio/native_audiorenderer.h", + "ohaudio/native_audiocapturer.h", + ] +} diff --git a/multimedia/audio_framework/audio_capturer/native_audiocapturer.h b/multimedia/audio_framework/audio_capturer/native_audiocapturer.h new file mode 100644 index 0000000000000000000000000000000000000000..68d5796ca55ec7112c46267dbd91abbd03d174b4 --- /dev/null +++ b/multimedia/audio_framework/audio_capturer/native_audiocapturer.h @@ -0,0 +1,234 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup OHAudio + * @{ + * + * @brief Provide the definition of the C interface for the audio module. + * + * @syscap SystemCapability.Multimedia.Audio.Core + * + * @since 10 + * @version 1.0 + */ + +/** + * @file native_audiocapturer.h + * + * @brief Declare audio stream related interfaces for input type. + * + * @syscap SystemCapability.Multimedia.Audio.Core + * @since 10 + * @version 1.0 + */ + +#ifndef NATIVE_AUDIOCAPTURER_H +#define NATIVE_AUDIOCAPTURER_H + +#include +#include "native_audiostream_base.h" +#ifdef __cplusplus +extern "C" { +#endif +/* + * Request to release the capturer stream. + * + * @since 10 + * @permission ohos.permission.MICROPHONE + * + * @param capturer reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_Release(OH_AudioCapturer* capturer); + +/* + * Request to start the capturer stream. + * + * @since 10 + * @permission ohos.permission.MICROPHONE + * + * @param capturer reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_Start(OH_AudioCapturer* capturer); + +/* + * Request to pause the capturer stream. + * + * @since 10 + * @permission ohos.permission.MICROPHONE + * + * @param capturer reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_Pause(OH_AudioCapturer* capturer); + +/* + * Request to stop the capturer stream. + * + * @since 10 + * @permission ohos.permission.MICROPHONE + * + * @param capturer reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_Stop(OH_AudioCapturer* capturer); + +/* + * Request to flush the capturer stream. + * + * @since 10 + * + * @param capturer reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_Flush(OH_AudioCapturer* capturer); + +/* + * Query the current state of the capturer client. + * + * This function will return the capturer state without updating the state. + * + * @since 10 + * + * @param capturer Reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @param state Pointer to a variable that will be set for the state value. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_GetCurrentState(OH_AudioCapturer* capturer, OH_AudioStream_State* state); + +/* + * Query the latency mode of the capturer client. + * + * @since 10 + * + * @param capturer Reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @param latencyMode Pointer to a variable that will be set for the latency mode. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_GetLatencyMode(OH_AudioCapturer* capturer, + OH_AudioStream_LatencyMode* latencyMode); + +/* + * Query the stream id of the capturer client. + * + * @since 10 + * + * @param capturer Reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @param stramId Pointer to a variable that will be set for the stream id. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_GetStreamId(OH_AudioCapturer* capturer, uint32_t* streamId); + +/* + * Query the sample rate value of the capturer client. + * + * This function will return the capturer sample rate value without updating the state. + * + * @since 10 + * + * @param capturer Reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @param rate The state value to be updated + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_GetSamplingRate(OH_AudioCapturer* capturer, int32_t* rate); + +/* + * Query the channel count of the capturer client. + * + * @since 10 + * + * @param capturer Reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @param channelCount Pointer to a variable that will be set for the channel count. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_GetChannelCount(OH_AudioCapturer* capturer, int32_t* channelCount); + +/* + * Query the sample format of the capturer client. + * + * @since 10 + * + * @param capturer Reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @param sampleFormat Pointer to a variable that will be set for the sample format. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_GetSampleFormat(OH_AudioCapturer* capturer, + OH_AudioStream_SampleFormat* sampleFormat); + +/* + * Query the encoding type of the capturer client. + * + * @since 10 + * + * @param capturer Reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @param encodingType Pointer to a variable that will be set for the encoding type. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_GetEncodingType(OH_AudioCapturer* capturer, + OH_AudioStream_EncodingType* encodingType); + +/* + * Query the capturer info of the capturer client. + * + * @since 10 + * + * @param capturer Reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @param sourceType Pointer to a variable that will be set for the stream sourceType. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_GetCapturerInfo(OH_AudioCapturer* capturer, + OH_AudioStream_SourceType* sourceType); + +/* + * Query the frame size in callback, it is a fixed length of the buffer returned by each callback. + * + * @since 10 + * + * @param capturer Reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @param frameSize Pointer to a variable that will be set for the frame size. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_GetFrameSizeInCallback(OH_AudioCapturer* capturer, int32_t* frameSize); + +/* + * Query the the time at which a particular frame was presented + * + * @since 10 + * + * @param capturer Reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @param clockId {@link #CLOCK_MONOTONIC} + * @param framePosition Pointer to a variable to receive the position + * @param timestamp Pointer to a variable to receive the timestamp + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_GetTimestamp(OH_AudioCapturer* capturer, + clockid_t clockId, int64_t* framePosition, int64_t* timestamp); + +/* + * Query the the number of frames that have been read since the stream was created. + * + * @since 10 + * + * @param capturer Reference created by OH_AudioStreamBuilder_GenerateCapturer() + * @param frames Pointer to a variable that will be set for the frame count number. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioCapturer_GetFramesRead(OH_AudioCapturer* capturer, int64_t* frames); +#ifdef __cplusplus +} +#endif +#endif // NATIVE_AUDIOCAPTURER_H diff --git a/multimedia/audio_framework/audio_renderer/native_audiorenderer.h b/multimedia/audio_framework/audio_renderer/native_audiorenderer.h new file mode 100644 index 0000000000000000000000000000000000000000..8b201d9789ff39032c418d16398d732681438f0b --- /dev/null +++ b/multimedia/audio_framework/audio_renderer/native_audiorenderer.h @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup OHAudio + * @{ + * + * @brief Provide the definition of the C interface for the audio module. + * + * @syscap SystemCapability.Multimedia.Audio.Core + * + * @since 10 + * @version 1.0 + */ + +/** + * @file native_audiorenderer.h + * + * @brief Declare audio stream related interfaces for output type. + * + * @syscap SystemCapability.Multimedia.Audio.Core + * @since 10 + * @version 1.0 + */ + +#ifndef NATIVE_AUDIORENDERER_H +#define NATIVE_AUDIORENDERER_H + +#include +#include "native_audiostream_base.h" +#ifdef __cplusplus +extern "C" { +#endif +/* + * Request to release the renderer stream. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_Release(OH_AudioRenderer* renderer); + +/* + * Request to start the renderer stream. + * + * @since 10 + * + * @param renderer reference created by OH_AudioStreamBuilder + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_Start(OH_AudioRenderer* renderer); + +/* + * Request to pause the renderer stream. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_Pause(OH_AudioRenderer* renderer); + +/* + * Request to stop renderer stream. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_Stop(OH_AudioRenderer* renderer); + +/* + * Request to flush the renderer stream. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_Flush(OH_AudioRenderer* renderer); + +/* + * Query the current state of the renderer client. + * + * This function will return the renderer state without updating the state. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @param state Pointer to a variable that will be set for the state value. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_GetCurrentState(OH_AudioRenderer* renderer, + OH_AudioStream_State* state); + +/* + * Query the sample rate value of the renderer client + * + * This function will return the renderer sample rate value without updating the state. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @param rate The state value to be updated + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_GetSamplingRate(OH_AudioRenderer* renderer, int32_t* rate); + +/* + * Query the stream id of the renderer client. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @param stramId Pointer to a variable that will be set for the stream id. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_GetStreamId(OH_AudioRenderer* renderer, uint32_t* streamId); + +/* + * Query the channel count of the renderer client. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @param channelCount Pointer to a variable that will be set for the channel count. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_GetChannelCount(OH_AudioRenderer* renderer, int32_t* channelCount); + +/* + * Query the sample format of the renderer client. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @param sampleFormat Pointer to a variable that will be set for the sample format. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_GetSampleFormat(OH_AudioRenderer* renderer, + OH_AudioStream_SampleFormat* sampleFormat); + +/* + * Query the latency mode of the renderer client. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @param latencyMode Pointer to a variable that will be set for the latency mode. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_GetLatencyMode(OH_AudioRenderer* renderer, + OH_AudioStream_LatencyMode* latencyMode); +/* + * Query the renderer info of the renderer client. + * + * The rendere info includes {@link OH_AudioStream_Usage} value. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @param usage Pointer to a variable that will be set for the stream usage. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_GetRendererInfo(OH_AudioRenderer* renderer, + OH_AudioStream_Usage* usage); + +/* + * Query the encoding type of the renderer client. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @param encodingType Pointer to a variable that will be set for the encoding type. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_GetEncodingType(OH_AudioRenderer* renderer, + OH_AudioStream_EncodingType* encodingType); + +/* + * Query the the number of frames that have been written since the stream was created. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @param frames Pointer to a variable that will be set for the frame count number. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_GetFramesWritten(OH_AudioRenderer* renderer, int64_t* frames); + +/* + * Query the the time at which a particular frame was presented. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @param clockId {@link #CLOCK_MONOTONIC} + * @param framePosition Pointer to a variable to receive the position + * @param timestamp Pointer to a variable to receive the timestamp + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_GetTimestamp(OH_AudioRenderer* renderer, + clockid_t clockId, int64_t* framePosition, int64_t* timestamp); + +/* + * Query the frame size in callback, it is a fixed length that the stream want to be filled for each callback. + * + * @since 10 + * + * @param renderer Reference created by OH_AudioStreamBuilder_GenerateRenderer() + * @param frameSize Pointer to a variable that will be set for the frame size. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioRenderer_GetFrameSizeInCallback(OH_AudioRenderer* renderer, int32_t* frameSize); +#ifdef __cplusplus +} +#endif +#endif // NATIVE_AUDIORENDERER_H diff --git a/multimedia/audio_framework/common/native_audiostream_base.h b/multimedia/audio_framework/common/native_audiostream_base.h new file mode 100644 index 0000000000000000000000000000000000000000..9270d8437bc7d455310b1df8359bafccd07307b6 --- /dev/null +++ b/multimedia/audio_framework/common/native_audiostream_base.h @@ -0,0 +1,556 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup OHAudio + * @{ + * + * @brief Provide the definition of the C interface for the audio module. + * + * @syscap SystemCapability.Multimedia.Audio.Core + * + * @since 10 + * @version 1.0 + */ + +/** + * @file native_audiostream_base.h + * + * @brief Declare the underlying data structure. + * + * @syscap SystemCapability.Multimedia.Audio.Core + * @since 10 + * @version 1.0 + */ + +#ifndef ST_NATIVE_AUDIOSTREAM_BASE_H +#define ST_NATIVE_AUDIOSTREAM_BASE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Define the result of the function execution. + * + * @since 10 + */ +typedef enum { + /** + * The call was successful. + * + * @since 10 + */ + AUDIOSTREAM_SUCCESS = 0, + + /** + * This means that the function was executed with an invalid input parameter. + * + * @since 10 + */ + AUDIOSTREAM_ERROR_INVALID_PARAM = 1, + + /** + * Execution status exception. + * + * @since 10 + */ + AUDIOSTREAM_ERROR_ILLEGAL_STATE = 2, + + /** + * An system error has occurred. + * + * @since 10 + */ + AUDIOSTREAM_ERROR_SYSTEM = 3 +} OH_AudioStream_Result; + +/** + * Define the audio stream type. + * + * @since 10 + */ +typedef enum { + /** + * The type for audio stream is renderer. + * + * @since 10 + */ + AUDIOSTREAM_TYPE_RENDERER = 1, + + /** + * The type for audio stream is capturer. + * + * @since 10 + */ + AUDIOSTREAM_TYPE_CAPTURER = 2 +} OH_AudioStream_Type; + +/** + * Define the audio stream sample format. + * + * @since 10 + */ +typedef enum { + /** + * Unsigned 8 format. + * + * @since 10 + */ + AUDIOSTREAM_SAMPLE_U8 = 0, + /** + * Signed 16 bit integer, little endian. + * + * @since 10 + */ + AUDIOSTREAM_SAMPLE_S16LE = 1, + /** + * Signed 24 bit integer, little endian. + * + * @since 10 + */ + AUDIOSTREAM_SAMPLE_S24LE = 2, + /** + * Signed 32 bit integer, little endian. + * + * @since 10 + */ + AUDIOSTREAM_SAMPLE_S32LE = 3, +} OH_AudioStream_SampleFormat; + +/** + * Define the audio encoding type. + * + * @since 10 + */ +typedef enum { + /** + * PCM encoding type. + * + * @since 10 + */ + AUDIOSTREAM_ENCODING_TYPE_RAW = 0, +} OH_AudioStream_EncodingType; + +/** + * Define the audio stream usage. + * Audio stream usage is used to describe what work scenario + * the current stream is used for. + * + * @since 10 + */ +typedef enum { + /** + * Unknown usage. + * + * @since 10 + */ + AUDIOSTREAM_USAGE_UNKNOWN = 0, + /** + * Music usage. + * + * @since 10 + */ + AUDIOSTREAM_USAGE_MUSIC = 1, + /** + * Voice communication usage. + * + * @since 10 + */ + AUDIOSTREAM_USAGE_VOICE_COMMUNICATION = 2, + /** + * Voice assistant usage. + * + * @since 10 + */ + AUDIOSTREAM_USAGE_VOICE_ASSISTANT = 3, + /** + * Alarm usage. + * + * @since 10 + */ + AUDIOSTREAM_USAGE_ALARM = 4, + /** + * Voice message usage. + * + * @since 10 + */ + AUDIOSTREAM_USAGE_VOICE_MESSAGE = 5, + /** + * Ringtone usage. + * + * @since 10 + */ + AUDIOSTREAM_USAGE_RINGTONE = 6, + /** + * Notification usage. + * + * @since 10 + */ + AUDIOSTREAM_USAGE_NOTIFICATION = 7, + /** + * Accessibility usage, such as screen reader. + * + * @since 10 + */ + AUDIOSTREAM_USAGE_ACCESSIBILITY = 8, + /** + * Movie or video usage. + * + * @since 10 + */ + AUDIOSTREAM_USAGE_MOVIE = 10, + /** + * Game sound effect usage. + * + * @since 10 + */ + AUDIOSTREAM_USAGE_GAME = 11, + /** + * Audiobook usage. + * + * @since 10 + */ + AUDIOSTREAM_USAGE_AUDIOBOOK = 12, + /** + * Navigation usage. + * + * @since 10 + */ + AUDIOSTREAM_USAGE_NAVIGATION = 13, +} OH_AudioStream_Usage; + +/** + * Define the audio latency mode. + * + * @since 10 + */ +typedef enum { + /** + * This is a normal audio scene. + * + * @since 10 + */ + AUDIOSTREAM_LATENCY_MODE_NORMAL = 0, + /** + * This is a low latency audio scene. + * + * @since 10 + */ + AUDIOSTREAM_LATENCY_MODE_FAST = 1 +} OH_AudioStream_LatencyMode; + +/** + * Define the audio event. + * + * @since 10 + */ +typedef enum { + /** + * The routing of the audio has changed. + * + * @since 10 + */ + AUDIOSTREAM_EVENT_ROUTING_CHANGED = 0 +} OH_AudioStream_Event; + +/** + * The audio stream states + * + * @since 10 + */ +typedef enum { + /** + * The invalid state. + * + * @since 10 + */ + AUDIOSTREAM_STATE_INVALID = -1, + /** + * Create new instance state. + * + * @since 10 + */ + AUDIOSTREAM_STATE_NEW = 0, + /** + * The prepared state. + * + * @since 10 + */ + AUDIOSTREAM_STATE_PREPARED = 1, + /** + * The stream is running. + * + * @since 10 + */ + AUDIOSTREAM_STATE_RUNNING = 2, + /** + * The stream is stopped. + * + * @since 10 + */ + AUDIOSTREAM_STATE_STOPPED = 3, + /** + * The stream is released. + * + * @since 10 + */ + AUDIOSTREAM_STATE_RELEASED = 4, + /** + * The stream is paused. + * + * @since 10 + */ + AUDIOSTREAM_STATE_PAUSED = 5, +} OH_AudioStream_State; + +/** + * Defines the audio interrupt type. + * + * @since 10 + */ +typedef enum { + /** + * Force type, system change audio state. + * + * @since 10 + */ + AUDIOSTREAM_INTERRUPT_FORCE = 0, + /** + * Share type, application change audio state. + * + * @since 10 + */ + AUDIOSTREAM_INTERRUPT_SHARE = 1 +} OH_AudioInterrupt_ForceType; + +/** + * Defines the audio interrupt hint type. + * + * @since 10 + */ +typedef enum { + /** + * None. + * + * @since 10 + */ + AUDIOSTREAM_INTERRUPT_HINT_NONE = 0, + /** + * Resume the stream. + * + * @since 10 + */ + AUDIOSTREAM_INTERRUPT_HINT_RESUME = 1, + /** + * Pause the stream. + * + * @since 10 + */ + AUDIOSTREAM_INTERRUPT_HINT_PAUSE = 2, + /** + * Stop the stream. + * + * @since 10 + */ + AUDIOSTREAM_INTERRUPT_HINT_STOP = 3, + /** + * Ducked the stream. + * + * @since 10 + */ + AUDIOSTREAM_INTERRUPT_HINT_DUCK = 4, + /** + * Unducked the stream. + * + * @since 10 + */ + AUDIOSTREAM_INTERRUPT_HINT_UNDUCK = 5 +} OH_AudioInterrupt_Hint; + +/** + * Defines the audio source type. + * + * @since 10 + */ +typedef enum { + /** + * Invalid type. + * + * @since 10 + */ + AUDIOSTREAM_SOURCE_TYPE_INVALID = -1, + /** + * Mic source type. + * + * @since 10 + */ + AUDIOSTREAM_SOURCE_TYPE_MIC = 0, + /** + * Voice recognition source type. + * + * @since 10 + */ + AUDIOSTREAM_SOURCE_TYPE_VOICE_RECOGNITION = 1, + /** + * Playback capture source type. + * + * @since 10 + */ + AUDIOSTREAM_SOURCE_TYPE_PLAYBACK_CAPTURE = 2, + /** + * Voice communication source type. + * + * @since 10 + */ + AUDIOSTREAM_SOURCE_TYPE_VOICE_COMMUNICATION = 7 +} OH_AudioStream_SourceType; + +/** + * Declaring the audio stream builder. + * The instance of builder is used for creating audio stream. + * + * @since 10 + */ +typedef struct OH_AudioStreamBuilderStruct OH_AudioStreamBuilder; + +/** + * Declaring the audio renderer stream. + * The instance of renderer stream is used for playing audio data. + * + * @since 10 + */ +typedef struct OH_AudioRendererStruct OH_AudioRenderer; + +/** + * Declaring the audio capturer stream. + * The instance of renderer stream is used for capturing audio data. + * + * @since 10 + */ +typedef struct OH_AudioCapturerStruct OH_AudioCapturer; + +/** + * Declaring the callback struct for renderer stream. + * + * @since 10 + */ +typedef struct OH_AudioRenderer_Callbacks_Struct { + /** + * This function pointer will point to the callback function that + * is used to write audio data + * + * @since 10 + */ + int32_t (*OH_AudioRenderer_OnWriteData)( + OH_AudioRenderer* renderer, + void* userData, + void* buffer, + int32_t lenth); + + /** + * This function pointer will point to the callback function that + * is used to handle audio renderer stream events. + * + * @since 10 + */ + int32_t (*OH_AudioRenderer_OnStreamEvent)( + OH_AudioRenderer* renderer, + void* userData, + OH_AudioStream_Event event); + + /** + * This function pointer will point to the callback function that + * is used to handle audio interrupt events. + * + * @since 10 + */ + int32_t (*OH_AudioRenderer_OnInterrptEvent)( + OH_AudioRenderer* renderer, + void* userData, + OH_AudioInterrupt_ForceType type, + OH_AudioInterrupt_Hint hint); + + /** + * This function pointer will point to the callback function that + * is used to handle audio error result. + * + * @since 10 + */ + int32_t (*OH_AudioRenderer_OnError)( + OH_AudioRenderer* renderer, + void* userData, + OH_AudioStream_Result error); +} OH_AudioRenderer_Callbacks; + +/** + * Declaring the callback struct for capturer stream. + * + * @since 10 + */ +typedef struct OH_AudioCapturer_Callbacks_Struct { + /** + * This function pointer will point to the callback function that + * is used to read audio data. + * + * @since 10 + */ + int32_t (*OH_AudioCapturer_OnReadData)( + OH_AudioCapturer* capturer, + void* userData, + void* buffer, + int32_t lenth); + + /** + * This function pointer will point to the callback function that + * is used to handle audio capturer stream events. + * + * @since 10 + */ + int32_t (*OH_AudioCapturer_OnStreamEvent)( + OH_AudioCapturer* capturer, + void* userData, + OH_AudioStream_Event event); + + /** + * This function pointer will point to the callback function that + * is used to handle audio interrupt events. + * + * @since 10 + */ + int32_t (*OH_AudioCapturer_OnInterrptEvent)( + OH_AudioCapturer* renderer, + void* userData, + OH_AudioInterrupt_ForceType type, + OH_AudioInterrupt_Hint hint); + + /** + * This function pointer will point to the callback function that + * is used to handle audio error result. + * + * @since 10 + */ + int32_t (*OH_AudioCapturer_OnError)( + OH_AudioCapturer* capturer, + void* userData, + OH_AudioStream_Result error); +} OH_AudioCapturer_Callbacks; +#ifdef __cplusplus +} +#endif + +#endif // ST_NATIVE_AUDIOSTREAM_BASE_H diff --git a/multimedia/audio_framework/common/native_audiostreambuilder.h b/multimedia/audio_framework/common/native_audiostreambuilder.h new file mode 100644 index 0000000000000000000000000000000000000000..99d94288e42ee0dc85f0b48b05ff81314f47b3e5 --- /dev/null +++ b/multimedia/audio_framework/common/native_audiostreambuilder.h @@ -0,0 +1,206 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup OHAudio + * @{ + * + * @brief Provide the definition of the C interface for the audio module. + * + * @syscap SystemCapability.Multimedia.Audio.Core + * + * @since 10 + * @version 1.0 + */ + +/** + * @file native_audiostreambuilder.h + * + * @brief Declare audio stream builder related interfaces. + * + * @syscap SystemCapability.Multimedia.Audio.Core + * @since 10 + * @version 1.0 + */ + +#ifndef NATIVE_AUDIOSTREAM_BUILDER_H +#define NATIVE_AUDIOSTREAM_BUILDER_H + +#include "native_audiostream_base.h" +#include "native_audiorenderer.h" +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Create a stremBuilder can be used to open a renderer or capturer client. + * + * OH_AudioStreamBuilder_Destroy() must be called when you are done using the builder. + * + * @since 10 + * + * @param builder The builder reference to the created result. + * @param type The stream type to be created. {@link #AUDIOSTREAM_TYPE_RENDERER} or {@link #AUDIOSTREAM_TYPE_CAPTURER} + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioStreamBuilder_Create(OH_AudioStreamBuilder** builder, OH_AudioStream_Type type); + +/** + * Destroy a streamBulder. + * + * This function must be called when you are done using the builder. + * + * @since 10 + * + * @param builder Reference provided by OH_AudioStreamBuilder_Create() + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioStreamBuilder_Destroy(OH_AudioStreamBuilder* builder); + +/* + * Set the channel count of the capturer client + * + * @since 10 + * + * @param capturer Reference created by OH_AudioStreamBuilder + * @param channelCount Pointer to a variable that will be set for the channel count. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioStreamBuilder_SetSamplingRate(OH_AudioStreamBuilder* builder, int32_t rate); + +/* + * Set the channel count of the stream client + * + * @since 10 + * + * @param builder Reference provided by OH_AudioStreamBuilder_Create() + * @param channelCount The channel count. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioStreamBuilder_SetChannelCount(OH_AudioStreamBuilder* builder, int32_t channelCount); + +/* + * Set the sample format of the stream client + * + * @since 10 + * + * @param builder Reference provided by OH_AudioStreamBuilder_Create() + * @param format Sample data format. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioStreamBuilder_SetSampleFormat(OH_AudioStreamBuilder* builder, + OH_AudioStream_SampleFormat format); + +/* + * Set the encoding type of the stream client + * + * @since 10 + * + * @param builder Reference provided by OH_AudioStreamBuilder_Create() + * @param encodingType Encoding type for the stream client, {@link #AUDIOSTREAM_ENCODING_PCM} + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioStreamBuilder_SetEncodingType(OH_AudioStreamBuilder* builder, + OH_AudioStream_EncodingType encodingType); + +/* + * Set the latency mode of the stream client + * + * @since 10 + * + * @param builder Reference provided by OH_AudioStreamBuilder_Create() + * @param latencyMode Latency mode for the stream client. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioStreamBuilder_SetLatencyMode(OH_AudioStreamBuilder* builder, + OH_AudioStream_LatencyMode latencyMode); + +/* + * Set the renderer information of the stream client + * + * @since 10 + * + * @param builder Reference provided by OH_AudioStreamBuilder_Create() + * @param usage Set the stream usage for the renderer client. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioStreamBuilder_SetRendererInfo(OH_AudioStreamBuilder* builder, + OH_AudioStream_Usage usage); + +/* + * Set the capturer information of the stream client + * + * @since 10 + * + * @param builder Reference provided by OH_AudioStreamBuilder_Create() + * @param sourceType Set the source type for the capturer client. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioStreamBuilder_SetCapturerInfo(OH_AudioStreamBuilder* builder, + OH_AudioStream_SourceType sourceType); + +/* + * Set the callbacks for the renderer client + * + * @since 10 + * + * @param builder Reference provided by OH_AudioStreamBuilder_Create() + * @param callbacks Callbacks to the functions that will process renderer stream. + * @param userData Pointer to an application data structure that will be passed to the callback functions. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioStreamBuilder_SetRendererCallback(OH_AudioStreamBuilder* builder, + OH_AudioRenderer_Callbacks callbacks, void* userData); + +/* + * Set the callbacks for the capturer client + * + * @since 10 + * + * @param builder Reference provided by OH_AudioStreamBuilder_Create() + * @param callbacks Callbacks to the functions that will process capturer stream. + * @param userData Pointer to an application data structure that will be passed to the callback functions. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioStreamBuilder_SetCapturerCallback(OH_AudioStreamBuilder* builder, + OH_AudioCapturer_Callbacks callbacks, void* userData); + +/* + * Create the audio renderer client. + * + * @since 10 + * + * @param builder Reference provided by OH_AudioStreamBuilder_Create() + * @param audioRenderer Pointer to a viriable to receive the stream client. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioStreamBuilder_GenerateRenderer(OH_AudioStreamBuilder* builder, + OH_AudioRenderer** audioRenderer); +/* + * Create the audio capturer client. + * + * @since 10 + * + * @param builder Reference provided by OH_AudioStreamBuilder_Create() + * @param audioCapturer Pointer to a viriable to receive the stream client. + * @return {@link #AUDIOSTREAM_SUCCESS} or an undesired error. + */ +OH_AudioStream_Result OH_AudioStreamBuilder_GenerateCapturer(OH_AudioStreamBuilder* builder, + OH_AudioCapturer** audioCapturer); +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AUDIOSTREAM_BUILDER_H diff --git a/multimedia/audio_framework/ohaudio.ndk.json b/multimedia/audio_framework/ohaudio.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..1062c40a8802a22838615f094a4a8cacce7e1006 --- /dev/null +++ b/multimedia/audio_framework/ohaudio.ndk.json @@ -0,0 +1,41 @@ +[ + { "name": "OH_AudioStreamBuilder_Create" }, + { "name": "OH_AudioStreamBuilder_Destroy" }, + { "name": "OH_AudioStreamBuilder_SetSamplingRate" }, + { "name": "OH_AudioStreamBuilder_SetChannelCount" }, + { "name": "OH_AudioStreamBuilder_SetSampleFormat" }, + { "name": "OH_AudioStreamBuilder_SetEncodingType" }, + { "name": "OH_AudioStreamBuilder_SetLatencyMode" }, + { "name": "OH_AudioStreamBuilder_SetRendererInfo" }, + { "name": "OH_AudioStreamBuilder_SetCapturerInfo" }, + { "name": "OH_AudioStreamBuilder_SetRendererCallback" }, + { "name": "OH_AudioStreamBuilder_SetCapturerCallback" }, + { "name": "OH_AudioStreamBuilder_GenerateRenderer" }, + { "name": "OH_AudioStreamBuilder_GenerateCapturer" }, + { "name": "OH_AudioRenderer_Release" }, + { "name": "OH_AudioRenderer_Start" }, + { "name": "OH_AudioRenderer_Pause" }, + { "name": "OH_AudioRenderer_Stop" }, + { "name": "OH_AudioRenderer_Flush" }, + { "name": "OH_AudioRenderer_GetCurrentState" }, + { "name": "OH_AudioRenderer_GetSamplingRate" }, + { "name": "OH_AudioRenderer_GetStreamId" }, + { "name": "OH_AudioRenderer_GetChannelCount" }, + { "name": "OH_AudioRenderer_GetSampleFormat" }, + { "name": "OH_AudioRenderer_GetLatencyMode" }, + { "name": "OH_AudioRenderer_GetRendererInfo" }, + { "name": "OH_AudioRenderer_GetEncodingType" }, + { "name": "OH_AudioCapturer_Release" }, + { "name": "OH_AudioCapturer_Start" }, + { "name": "OH_AudioCapturer_Pause" }, + { "name": "OH_AudioCapturer_Stop" }, + { "name": "OH_AudioCapturer_Flush" }, + { "name": "OH_AudioCapturer_GetCurrentState" }, + { "name": "OH_AudioCapturer_GetLatencyMode" }, + { "name": "OH_AudioCapturer_GetStreamId" }, + { "name": "OH_AudioCapturer_GetSamplingRate" }, + { "name": "OH_AudioCapturer_GetChannelCount" }, + { "name": "OH_AudioCapturer_GetSampleFormat" }, + { "name": "OH_AudioCapturer_GetEncodingType" }, + { "name": "OH_AudioCapturer_GetCapturerInfo" } +] \ No newline at end of file diff --git a/multimedia/av_codec/BUILD.gn b/multimedia/av_codec/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..0f5d4c8395f83cfda956fffd95eb3184ab6e43c6 --- /dev/null +++ b/multimedia/av_codec/BUILD.gn @@ -0,0 +1,274 @@ +# Copyright (C) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/multimedia/av_codec/config.gni") + +group("capi_packages") { + deps = [] + if (av_codec_support_capi) { + deps += [ + "$av_codec_root_dir/interfaces/kits/c:native_media_adec", + "$av_codec_root_dir/interfaces/kits/c:native_media_aenc", + "$av_codec_root_dir/interfaces/kits/c:native_media_avdemuxer", + "$av_codec_root_dir/interfaces/kits/c:native_media_avmuxer", + "$av_codec_root_dir/interfaces/kits/c:native_media_avsource", + "$av_codec_root_dir/interfaces/kits/c:native_media_codecbase", + "$av_codec_root_dir/interfaces/kits/c:native_media_core", + "$av_codec_root_dir/interfaces/kits/c:native_media_vdec", + "$av_codec_root_dir/interfaces/kits/c:native_media_venc", + ] + } +} + +config("av_codec_capi_config") { + include_dirs = [ + "$av_codec_root_dir/frameworks/native/capi/common", + "$av_codec_root_dir/interfaces/inner_api/native", + "$av_codec_root_dir/interfaces/kits/c", + "$av_codec_root_dir/services/dfx/include", + "$av_codec_root_dir/services/utils/include", + "//foundation/graphic/graphic_2d/frameworks/surface/include", + ] + + cflags = [ + "-fno-exceptions", + "-Wall", + "-fno-common", + "-fstack-protector-all", + "-Wshadow", + "-FPIC", + "-FS", + "-O2", + "-D_FORTIFY_SOURCE=2", + "-Wformat=2", + "-Wdate-time", + ] + + cflags_cc = [ + "-std=c++17", + "-fno-rtti", + ] +} + +ohos_shared_library("native_media_core") { + install_enable = true + + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + blocklist = "../../../cfi_blocklist.txt" + } + + configs = [ ":av_codec_capi_config" ] + + sources = [ + "$av_codec_root_dir/frameworks/native/capi/common/native_avformat.cpp", + "$av_codec_root_dir/frameworks/native/capi/common/native_avmemory.cpp", + ] + + if (av_codec_support_codeclist) { + sources += [ "$av_codec_root_dir/frameworks/native/capi/common/native_avcapability.cpp" ] + } + + deps = [ + "$av_codec_root_dir/interfaces/inner_api/native:av_codec_client", + "$av_codec_root_dir/services/utils:av_codec_format", + ] + + external_deps = [ + "graphic_2d:surface", + "hilog:libhilog", + ] + output_extension = "so" + subsystem_name = "multimedia" + part_name = "av_codec" +} + +ohos_shared_library("native_media_avmuxer") { + install_enable = true + sources = [ + "$av_codec_root_dir/frameworks/native/capi/avcodec/native_avcodec_base.cpp", + "$av_codec_root_dir/frameworks/native/capi/avmuxer/native_avmuxer.cpp", + "$av_codec_root_dir/frameworks/native/capi/common/native_avformat.cpp", + "$av_codec_root_dir/frameworks/native/capi/common/native_avmemory.cpp", + ] + + public_configs = [ ":av_codec_capi_config" ] + + deps = [ + "$av_codec_root_dir/interfaces/inner_api/native:av_codec_client", + "$av_codec_root_dir/services/utils:av_codec_format", + ] + + external_deps = [ + "c_utils:utils", + "hilog:libhilog", + ] + output_extension = "so" + subsystem_name = "multimedia" + part_name = "av_codec" +} + +ohos_shared_library("native_media_avdemuxer") { + install_enable = true + sources = [ + "$av_codec_root_dir/frameworks/native/capi/avdemuxer/native_avdemuxer.cpp", + ] + + public_configs = [ ":av_codec_capi_config" ] + + deps = [ + "$av_codec_root_dir/interfaces/inner_api/native:av_codec_client", + "$av_codec_root_dir/interfaces/kits/c:native_media_core", + "$av_codec_root_dir/services/utils:av_codec_format", + ] + + external_deps = [ + "c_utils:utils", + "graphic_2d:surface", + "hilog:libhilog", + ] + output_extension = "so" + subsystem_name = "multimedia" + part_name = "av_codec" +} + +ohos_shared_library("native_media_avsource") { + install_enable = true + sources = [ + "$av_codec_root_dir/frameworks/native/capi/avsource/native_avsource.cpp", + ] + + public_configs = [ ":av_codec_capi_config" ] + + deps = [ + "$av_codec_root_dir/interfaces/inner_api/native:av_codec_client", + "$av_codec_root_dir/interfaces/kits/c:native_media_core", + "$av_codec_root_dir/services/utils:av_codec_format", + ] + + external_deps = [ + "c_utils:utils", + "graphic_2d:surface", + "hilog:libhilog", + ] + output_extension = "so" + subsystem_name = "multimedia" + part_name = "av_codec" +} + +ohos_shared_library("native_media_codecbase") { + install_enable = true + sources = [ + "$av_codec_root_dir/frameworks/native/capi/avcodec/native_avcodec_base.cpp", + ] + + public_configs = [ ":av_codec_capi_config" ] + + external_deps = [ "hilog:libhilog" ] + output_extension = "so" + subsystem_name = "multimedia" + part_name = "av_codec" +} + +ohos_shared_library("native_media_adec") { + install_enable = true + sources = [ "$av_codec_root_dir/frameworks/native/capi/avcodec/native_audio_decoder.cpp" ] + + public_configs = [ ":av_codec_capi_config" ] + + deps = [ + "$av_codec_root_dir/interfaces/inner_api/native:av_codec_client", + "$av_codec_root_dir/interfaces/kits/c:native_media_codecbase", + "$av_codec_root_dir/interfaces/kits/c:native_media_core", + "$av_codec_root_dir/services/dfx:av_codec_service_dfx", + ] + + external_deps = [ + "c_utils:utils", + "hilog:libhilog", + ] + output_extension = "so" + subsystem_name = "multimedia" + part_name = "av_codec" +} + +ohos_shared_library("native_media_aenc") { + install_enable = true + sources = [ "$av_codec_root_dir/frameworks/native/capi/avcodec/native_audio_encoder.cpp" ] + + public_configs = [ ":av_codec_capi_config" ] + + deps = [ + "$av_codec_root_dir/interfaces/inner_api/native:av_codec_client", + "$av_codec_root_dir/interfaces/kits/c:native_media_codecbase", + "$av_codec_root_dir/interfaces/kits/c:native_media_core", + "$av_codec_root_dir/services/dfx:av_codec_service_dfx", + ] + + external_deps = [ + "c_utils:utils", + "hilog:libhilog", + ] + output_extension = "so" + subsystem_name = "multimedia" + part_name = "av_codec" +} + +ohos_shared_library("native_media_vdec") { + install_enable = true + sources = [ "$av_codec_root_dir/frameworks/native/capi/avcodec/native_video_decoder.cpp" ] + + public_configs = [ ":av_codec_capi_config" ] + + deps = [ + "$av_codec_root_dir/interfaces/inner_api/native:av_codec_client", + "$av_codec_root_dir/interfaces/kits/c:native_media_codecbase", + "$av_codec_root_dir/interfaces/kits/c:native_media_core", + "$av_codec_root_dir/services/dfx:av_codec_service_dfx", + ] + + external_deps = [ + "c_utils:utils", + "graphic_2d:surface", + "hilog:libhilog", + ] + output_extension = "so" + subsystem_name = "multimedia" + part_name = "av_codec" +} + +ohos_shared_library("native_media_venc") { + install_enable = true + sources = [ "$av_codec_root_dir/frameworks/native/capi/avcodec/native_video_encoder.cpp" ] + + public_configs = [ ":av_codec_capi_config" ] + + deps = [ + "$av_codec_root_dir/interfaces/inner_api/native:av_codec_client", + "$av_codec_root_dir/interfaces/kits/c:native_media_codecbase", + "$av_codec_root_dir/interfaces/kits/c:native_media_core", + "$av_codec_root_dir/services/dfx:av_codec_service_dfx", + ] + + external_deps = [ + "c_utils:utils", + "graphic_2d:surface", + "hilog:libhilog", + ] + output_extension = "so" + subsystem_name = "multimedia" + part_name = "av_codec" +} diff --git a/multimedia/av_codec/audio_decoder/BUILD.gn b/multimedia/av_codec/audio_decoder/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..94b0a7b9ff06debe75a6e430dcb0220c6c888c99 --- /dev/null +++ b/multimedia/av_codec/audio_decoder/BUILD.gn @@ -0,0 +1,32 @@ +# Copyright (C) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") +import("//foundation/multimedia/av_codec/config.gni") +ohos_ndk_headers("native_media_adec_header") { + dest_dir = "$ndk_headers_out_dir/multimedia/player_framework" + sources = + [ "$av_codec_root_dir/interfaces/kits/c/native_avcodec_audiodecoder.h" ] +} + +ohos_ndk_library("libnative_media_adec") { + ndk_description_file = "./libnative_media_adec.ndk.json" + min_compact_version = "1" + output_name = "native_media_adec" + output_extension = "so" + + system_capability = "SystemCapability.Multimedia.Media.AudioDecoder" + system_capability_headers = + [ "multimedia/player_framework/native_avcodec_audiodecoder.h" ] +} diff --git a/multimedia/av_codec/audio_decoder/libnative_media_adec.ndk.json b/multimedia/av_codec/audio_decoder/libnative_media_adec.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..1b4472c0517b397be1e8af10c67488e46755a04e --- /dev/null +++ b/multimedia/av_codec/audio_decoder/libnative_media_adec.ndk.json @@ -0,0 +1,17 @@ +[ + { "name": "OH_AudioDecoder_CreateByMime" }, + { "name": "OH_AudioDecoder_CreateByName" }, + { "name": "OH_AudioDecoder_Destroy" }, + { "name": "OH_AudioDecoder_SetCallback" }, + { "name": "OH_AudioDecoder_Configure" }, + { "name": "OH_AudioDecoder_Prepare" }, + { "name": "OH_AudioDecoder_Start" }, + { "name": "OH_AudioDecoder_Stop" }, + { "name": "OH_AudioDecoder_Flush" }, + { "name": "OH_AudioDecoder_Reset" }, + { "name": "OH_AudioDecoder_GetOutputDescription" }, + { "name": "OH_AudioDecoder_SetParameter" }, + { "name": "OH_AudioDecoder_PushInputData" }, + { "name": "OH_AudioDecoder_FreeOutputData" }, + { "name": "OH_AudioDecoder_IsValid" } +] diff --git a/multimedia/av_codec/audio_encoder/BUILD.gn b/multimedia/av_codec/audio_encoder/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..5700e2e6ae6911f5304e57028262eb64f0761855 --- /dev/null +++ b/multimedia/av_codec/audio_encoder/BUILD.gn @@ -0,0 +1,32 @@ +# Copyright (C) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") +import("//foundation/multimedia/av_codec/config.gni") +ohos_ndk_headers("native_media_aenc_header") { + dest_dir = "$ndk_headers_out_dir/multimedia/player_framework" + sources = + [ "$av_codec_root_dir/interfaces/kits/c/native_avcodec_audioencoder.h" ] +} + +ohos_ndk_library("libnative_media_aenc") { + ndk_description_file = "./libnative_media_aenc.ndk.json" + min_compact_version = "1" + output_name = "native_media_aenc" + output_extension = "so" + + system_capability = "SystemCapability.Multimedia.Media.AudioEncoder" + system_capability_headers = + [ "multimedia/player_framework/native_avcodec_audioencoder.h" ] +} diff --git a/multimedia/av_codec/audio_encoder/libnative_media_aenc.ndk.json b/multimedia/av_codec/audio_encoder/libnative_media_aenc.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..830a103a7e7ac939b2a96bba8d0215a6038c0f0a --- /dev/null +++ b/multimedia/av_codec/audio_encoder/libnative_media_aenc.ndk.json @@ -0,0 +1,17 @@ +[ + { "name": "OH_AudioEncoder_CreateByMime" }, + { "name": "OH_AudioEncoder_CreateByName" }, + { "name": "OH_AudioEncoder_Destroy" }, + { "name": "OH_AudioEncoder_SetCallback" }, + { "name": "OH_AudioEncoder_Configure" }, + { "name": "OH_AudioEncoder_Prepare" }, + { "name": "OH_AudioEncoder_Start" }, + { "name": "OH_AudioEncoder_Stop" }, + { "name": "OH_AudioEncoder_Flush" }, + { "name": "OH_AudioEncoder_Reset" }, + { "name": "OH_AudioEncoder_GetOutputDescription" }, + { "name": "OH_AudioEncoder_SetParameter" }, + { "name": "OH_AudioEncoder_PushInputData" }, + { "name": "OH_AudioEncoder_FreeOutputData" }, + { "name": "OH_AudioEncoder_IsValid" } +] diff --git a/multimedia/av_codec/avcodec_audio_channel_layout.h b/multimedia/av_codec/avcodec_audio_channel_layout.h new file mode 100644 index 0000000000000000000000000000000000000000..364bd6a12fed0f27b0736e63978809fc5c645ddd --- /dev/null +++ b/multimedia/av_codec/avcodec_audio_channel_layout.h @@ -0,0 +1,161 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef AVCODEC_AUDIO_CHANNEL_LAYOUT_H +#define AVCODEC_AUDIO_CHANNEL_LAYOUT_H +#include +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Audio Channel Set + * A 64-bit integer with bits set for each channel. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +enum AudioChannelSet : uint64_t { + FRONT_LEFT = 1ULL << 0U, + FRONT_RIGHT = 1ULL << 1U, + FRONT_CENTER = 1ULL << 2U, + LOW_FREQUENCY = 1ULL << 3U, + BACK_LEFT = 1ULL << 4U, + BACK_RIGHT = 1ULL << 5U, + FRONT_LEFT_OF_CENTER = 1ULL << 6U, + FRONT_RIGHT_OF_CENTER = 1ULL << 7U, + BACK_CENTER = 1ULL << 8U, + SIDE_LEFT = 1ULL << 9U, + SIDE_RIGHT = 1ULL << 10U, + TOP_CENTER = 1ULL << 11U, + TOP_FRONT_LEFT = 1ULL << 12U, + TOP_FRONT_CENTER = 1ULL << 13U, + TOP_FRONT_RIGHT = 1ULL << 14U, + TOP_BACK_LEFT = 1ULL << 15U, + TOP_BACK_CENTER = 1ULL << 16U, + TOP_BACK_RIGHT = 1ULL << 17U, + STEREO_LEFT = 1ULL << 29U, + STEREO_RIGHT = 1ULL << 30U, + WIDE_LEFT = 1ULL << 31U, + WIDE_RIGHT = 1ULL << 32U, + SURROUND_DIRECT_LEFT = 1ULL << 33U, + SURROUND_DIRECT_RIGHT = 1ULL << 34U, + LOW_FREQUENCY_2 = 1ULL << 35U, + TOP_SIDE_LEFT = 1ULL << 36U, + TOP_SIDE_RIGHT = 1ULL << 37U, + BOTTOM_FRONT_CENTER = 1ULL << 38U, + BOTTOM_FRONT_LEFT = 1ULL << 39U, + BOTTOM_FRONT_RIGHT = 1ULL << 40U, + + // Ambisonics ACN formats + // 0th and first order ambisonics ACN + AMBISONICS_ACN0 = 1ULL << 41U, /** 0th ambisonics channel number 0. */ + AMBISONICS_ACN1 = 1ULL << 42U, /** first-order ambisonics channel number 1. */ + AMBISONICS_ACN2 = 1ULL << 43U, /** first-order ambisonics channel number 2. */ + AMBISONICS_ACN3 = 1ULL << 44U, /** first-order ambisonics channel number 3. */ + AMBISONICS_W = AMBISONICS_ACN0, /** same as 0th ambisonics channel number 0. */ + AMBISONICS_Y = AMBISONICS_ACN1, /** same as first-order ambisonics channel number 1. */ + AMBISONICS_Z = AMBISONICS_ACN2, /** same as first-order ambisonics channel number 2. */ + AMBISONICS_X = AMBISONICS_ACN3, /** same as first-order ambisonics channel number 3. */ + + // second order ambisonics ACN + AMBISONICS_ACN4 = 1ULL << 45U, /** second-order ambisonics channel number 4. */ + AMBISONICS_ACN5 = 1ULL << 46U, /** second-order ambisonics channel number 5. */ + AMBISONICS_ACN6 = 1ULL << 47U, /** second-order ambisonics channel number 6. */ + AMBISONICS_ACN7 = 1ULL << 48U, /** second-order ambisonics channel number 7. */ + AMBISONICS_ACN8 = 1ULL << 49U, /** second-order ambisonics channel number 8. */ + + // third order ambisonics ACN + AMBISONICS_ACN9 = 1ULL << 50U, /** third-order ambisonics channel number 9. */ + AMBISONICS_ACN10 = 1ULL << 51U, /** third-order ambisonics channel number 10. */ + AMBISONICS_ACN11 = 1ULL << 52U, /** third-order ambisonics channel number 11. */ + AMBISONICS_ACN12 = 1ULL << 53U, /** third-order ambisonics channel number 12. */ + AMBISONICS_ACN13 = 1ULL << 54U, /** third-order ambisonics channel number 13. */ + AMBISONICS_ACN14 = 1ULL << 55U, /** third-order ambisonics channel number 14. */ + AMBISONICS_ACN15 = 1ULL << 56U, /** third-order ambisonics channel number 15. */ +}; + +/** + * @brief Audio AudioChannel Layout + * Indicates that the channel order in which the user requests decoder output + * is the native codec channel order. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +enum AudioChannelLayout : uint64_t { + UNKNOWN_CHANNEL_LAYOUT = 0, + MONO = (AudioChannelSet::FRONT_CENTER), + STEREO = (AudioChannelSet::FRONT_LEFT | AudioChannelSet::FRONT_RIGHT), + CH_2POINT1 = (STEREO | AudioChannelSet::LOW_FREQUENCY), + CH_2_1 = (STEREO | AudioChannelSet::BACK_CENTER), + SURROUND = (STEREO | AudioChannelSet::FRONT_CENTER), + CH_3POINT1 = (SURROUND | AudioChannelSet::LOW_FREQUENCY), + CH_4POINT0 = (SURROUND | AudioChannelSet::BACK_CENTER), + CH_4POINT1 = (CH_4POINT0 | AudioChannelSet::LOW_FREQUENCY), + CH_2_2 = (STEREO | AudioChannelSet::SIDE_LEFT | AudioChannelSet::SIDE_RIGHT), + QUAD = (STEREO | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT), + CH_5POINT0 = (SURROUND | AudioChannelSet::SIDE_LEFT | AudioChannelSet::SIDE_RIGHT), + CH_5POINT1 = (CH_5POINT0 | AudioChannelSet::LOW_FREQUENCY), + CH_5POINT0_BACK = (SURROUND | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT), + CH_5POINT1_BACK = (CH_5POINT0_BACK | AudioChannelSet::LOW_FREQUENCY), + CH_6POINT0 = (CH_5POINT0 | AudioChannelSet::BACK_CENTER), + CH_6POINT0_FRONT = (CH_2_2 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER), + HEXAGONAL = (CH_5POINT0_BACK | AudioChannelSet::BACK_CENTER), + CH_6POINT1 = (CH_5POINT1 | AudioChannelSet::BACK_CENTER), + CH_6POINT1_BACK = (CH_5POINT1_BACK | AudioChannelSet::BACK_CENTER), + CH_6POINT1_FRONT = (CH_6POINT0_FRONT | AudioChannelSet::LOW_FREQUENCY), + CH_7POINT0 = (CH_5POINT0 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT), + CH_7POINT0_FRONT = (CH_5POINT0 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER), + CH_7POINT1 = (CH_5POINT1 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT), + CH_7POINT1_WIDE = (CH_5POINT1 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER), + CH_7POINT1_WIDE_BACK = + (CH_5POINT1_BACK | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER), + CH_3POINT1POINT2 = (CH_3POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT), + CH_5POINT1POINT2 = (CH_5POINT1 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT), + CH_5POINT1POINT4 = (CH_5POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT | + AudioChannelSet::TOP_BACK_LEFT | AudioChannelSet::TOP_BACK_RIGHT), + CH_7POINT1POINT2 = (CH_7POINT1 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT), + CH_7POINT1POINT4 = (CH_7POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT | + AudioChannelSet::TOP_BACK_LEFT | AudioChannelSet::TOP_BACK_RIGHT), + CH_9POINT1POINT4 = (CH_7POINT1POINT4 | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT), + CH_9POINT1POINT6 = (CH_9POINT1POINT4 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT), + CH_10POINT2 = (AudioChannelSet::FRONT_LEFT | AudioChannelSet::FRONT_RIGHT | AudioChannelSet::FRONT_CENTER | + AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT | AudioChannelSet::BACK_LEFT | + AudioChannelSet::BACK_RIGHT | AudioChannelSet::BACK_CENTER | AudioChannelSet::SIDE_LEFT | + AudioChannelSet::SIDE_RIGHT | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT), + CH_22POINT2 = (CH_7POINT1POINT4 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER | + AudioChannelSet::BACK_CENTER | AudioChannelSet::TOP_CENTER | AudioChannelSet::TOP_FRONT_CENTER | + AudioChannelSet::TOP_BACK_CENTER | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT | + AudioChannelSet::BOTTOM_FRONT_LEFT | AudioChannelSet::BOTTOM_FRONT_RIGHT | + AudioChannelSet::BOTTOM_FRONT_CENTER | AudioChannelSet::LOW_FREQUENCY_2), + OCTAGONAL = (CH_5POINT0 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_CENTER | AudioChannelSet::BACK_RIGHT), + HEXADECAGONAL = + (OCTAGONAL | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT | AudioChannelSet::TOP_BACK_LEFT | + AudioChannelSet::TOP_BACK_RIGHT | AudioChannelSet::TOP_BACK_CENTER | AudioChannelSet::TOP_FRONT_CENTER | + AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT), + STEREO_DOWNMIX = (AudioChannelSet::STEREO_LEFT | AudioChannelSet::STEREO_RIGHT), + + HOA_FIRST = AudioChannelSet::AMBISONICS_ACN0 | AudioChannelSet::AMBISONICS_ACN1 | AudioChannelSet::AMBISONICS_ACN2 | + AudioChannelSet::AMBISONICS_ACN3, + HOA_SECOND = HOA_FIRST | AudioChannelSet::AMBISONICS_ACN4 | AudioChannelSet::AMBISONICS_ACN5 | + AudioChannelSet::AMBISONICS_ACN6 | AudioChannelSet::AMBISONICS_ACN7 | AudioChannelSet::AMBISONICS_ACN8, + HOA_THIRD = HOA_SECOND | AudioChannelSet::AMBISONICS_ACN9 | AudioChannelSet::AMBISONICS_ACN10 | + AudioChannelSet::AMBISONICS_ACN11 | AudioChannelSet::AMBISONICS_ACN12 | + AudioChannelSet::AMBISONICS_ACN13 | AudioChannelSet::AMBISONICS_ACN14 | + AudioChannelSet::AMBISONICS_ACN15, +}; +#ifdef __cplusplus +} +#endif +#endif \ No newline at end of file diff --git a/multimedia/av_codec/avdemuxer/BUILD.gn b/multimedia/av_codec/avdemuxer/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..2106cb10aca7670170a5fd50c3b82fa12827a961 --- /dev/null +++ b/multimedia/av_codec/avdemuxer/BUILD.gn @@ -0,0 +1,31 @@ +# Copyright (C) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") +import("//foundation/multimedia/av_codec/config.gni") +ohos_ndk_headers("native_media_avdemuxer_header") { + dest_dir = "$ndk_headers_out_dir/multimedia/player_framework" + sources = [ "$av_codec_root_dir/interfaces/kits/c/native_avdemuxer.h" ] +} + +ohos_ndk_library("libnative_media_avdemuxer") { + ndk_description_file = "./libnative_media_avdemuxer.ndk.json" + min_compact_version = "1" + output_name = "native_media_avdemuxer" + output_extension = "so" + + system_capability = "SystemCapability.Multimedia.Media.Spliter" + system_capability_headers = + [ "multimedia/player_framework/native_avdemuxer.h" ] +} diff --git a/multimedia/av_codec/avdemuxer/libnative_media_avdemuxer.ndk.json b/multimedia/av_codec/avdemuxer/libnative_media_avdemuxer.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..bf9ca16b8a9bb96485c6792d7612d5b7eb96b32b --- /dev/null +++ b/multimedia/av_codec/avdemuxer/libnative_media_avdemuxer.ndk.json @@ -0,0 +1,8 @@ +[ + { "name": "OH_AVDemuxer_CreateWithSource" }, + { "name": "OH_AVDemuxer_Destroy" }, + { "name": "OH_AVDemuxer_SelectTrackByID" }, + { "name": "OH_AVDemuxer_UnselectTrackByID" }, + { "name": "OH_AVDemuxer_ReadSample" }, + { "name": "OH_AVDemuxer_SeekToTime" } +] diff --git a/multimedia/av_codec/avmuxer/BUILD.gn b/multimedia/av_codec/avmuxer/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..e70f98cf2a4f6bc70bab53ca44f004ee37f1d7aa --- /dev/null +++ b/multimedia/av_codec/avmuxer/BUILD.gn @@ -0,0 +1,30 @@ +# Copyright (C) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") +import("//foundation/multimedia/av_codec/config.gni") +ohos_ndk_headers("native_media_avmuxer_header") { + dest_dir = "$ndk_headers_out_dir/multimedia/player_framework" + sources = [ "$av_codec_root_dir/interfaces/kits/c/native_avmuxer.h" ] +} + +ohos_ndk_library("libnative_media_avmuxer") { + ndk_description_file = "./libnative_media_avmuxer.ndk.json" + min_compact_version = "1" + output_name = "native_media_avmuxer" + output_extension = "so" + + system_capability = "SystemCapability.Multimedia.Media.Muxer" + system_capability_headers = [ "multimedia/player_framework/native_avmuxer.h" ] +} diff --git a/multimedia/av_codec/avmuxer/libnative_media_avmuxer.ndk.json b/multimedia/av_codec/avmuxer/libnative_media_avmuxer.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..b831c325d1deb250a719021b800aacde98de2f18 --- /dev/null +++ b/multimedia/av_codec/avmuxer/libnative_media_avmuxer.ndk.json @@ -0,0 +1,9 @@ +[ + { "name": "OH_AVMuxer_Create" }, + { "name": "OH_AVMuxer_SetRotation" }, + { "name": "OH_AVMuxer_AddTrack" }, + { "name": "OH_AVMuxer_Start" }, + { "name": "OH_AVMuxer_WriteSample" }, + { "name": "OH_AVMuxer_Stop" }, + { "name": "OH_AVMuxer_Destroy" } +] diff --git a/multimedia/av_codec/avsource/BUILD.gn b/multimedia/av_codec/avsource/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..651ade03e52a88712113ba66601c78bac6ebe756 --- /dev/null +++ b/multimedia/av_codec/avsource/BUILD.gn @@ -0,0 +1,31 @@ +# Copyright (C) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") +import("//foundation/multimedia/av_codec/config.gni") +ohos_ndk_headers("native_media_avsource_header") { + dest_dir = "$ndk_headers_out_dir/multimedia/player_framework" + sources = [ "$av_codec_root_dir/interfaces/kits/c/native_avsource.h" ] +} + +ohos_ndk_library("libnative_media_avsource") { + ndk_description_file = "./libnative_media_avsource.ndk.json" + min_compact_version = "1" + output_name = "native_media_avsource" + output_extension = "so" + + system_capability = "SystemCapability.Multimedia.Media.Spliter" + system_capability_headers = + [ "multimedia/player_framework/native_avsource.h" ] +} diff --git a/multimedia/av_codec/avsource/libnative_media_avsource.ndk.json b/multimedia/av_codec/avsource/libnative_media_avsource.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..3232f28e29b83f4f68bf9a5fd393c0c02bddd393 --- /dev/null +++ b/multimedia/av_codec/avsource/libnative_media_avsource.ndk.json @@ -0,0 +1,7 @@ +[ + { "name": "OH_AVSource_CreateWithURI" }, + { "name": "OH_AVSource_CreateWithFD" }, + { "name": "OH_AVSource_Destroy" }, + { "name": "OH_AVSource_GetSourceFormat" }, + { "name": "OH_AVSource_GetTrackFormat" } +] diff --git a/multimedia/av_codec/codec_base/BUILD.gn b/multimedia/av_codec/codec_base/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..affea0acc52a10b4c8c4f21d2263c38c8db0ad62 --- /dev/null +++ b/multimedia/av_codec/codec_base/BUILD.gn @@ -0,0 +1,38 @@ +# Copyright (C) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") +import("//foundation/multimedia/av_codec/config.gni") +ohos_ndk_headers("native_media_codecbase_header") { + dest_dir = "$ndk_headers_out_dir/multimedia/player_framework" + sources = [ + "$av_codec_root_dir/interfaces/kits/c/avcodec_audio_channel_layout.h", + "$av_codec_root_dir/interfaces/kits/c/native_avcapability.h", + "$av_codec_root_dir/interfaces/kits/c/native_avcodec_base.h", + ] +} + +ohos_ndk_library("libnative_media_codecbase") { + ndk_description_file = "./libnative_media_codecbase.ndk.json" + min_compact_version = "1" + output_name = "native_media_codecbase" + output_extension = "so" + + system_capability = "SystemCapability.Multimedia.Media.CodecBase" + system_capability_headers = [ + "multimedia/player_framework/native_avcodec_base.h", + "multimedia/player_framework/native_avcapability.h", + "multimedia/player_framework/avcodec_audio_channel_layout.h", + ] +} diff --git a/multimedia/av_codec/codec_base/libnative_media_codecbase.ndk.json b/multimedia/av_codec/codec_base/libnative_media_codecbase.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..3e19fb31dd7923688ec3f9485a6312b43ddfbdca --- /dev/null +++ b/multimedia/av_codec/codec_base/libnative_media_codecbase.ndk.json @@ -0,0 +1,83 @@ +[ + { "name": "OH_AVCODEC_MIMETYPE_VIDEO_AVC" }, + { "name": "OH_AVCODEC_MIMETYPE_AUDIO_AAC" }, + { "name": "OH_AVCODEC_MIMETYPE_VIDEO_MPEG4" }, + { "name": "OH_AVCODEC_MIMETYPE_VIDEO_HEVC" }, + { "name": "OH_AVCODEC_MIMETYPE_AUDIO_MPEG" }, + { "name": "OH_AVCODEC_MIMETYPE_IMAGE_JPG" }, + { "name": "OH_AVCODEC_MIMETYPE_IMAGE_PNG" }, + { "name": "OH_AVCODEC_MIMETYPE_IMAGE_BMP" }, + { "name": "OH_AVCODEC_MIMETYPE_AUDIO_FLAC" }, + { "name": "OH_AVCODEC_MIMETYPE_AUDIO_VORBIS" }, + { "name": "OH_ED_KEY_TIME_STAMP" }, + { "name": "OH_ED_KEY_EOS" }, + { "name": "OH_MD_KEY_TRACK_TYPE" }, + { "name": "OH_MD_KEY_CODEC_MIME" }, + { "name": "OH_MD_KEY_DURATION" }, + { "name": "OH_MD_KEY_BITRATE" }, + { "name": "OH_MD_KEY_MAX_INPUT_SIZE" }, + { "name": "OH_MD_KEY_WIDTH" }, + { "name": "OH_MD_KEY_HEIGHT" }, + { "name": "OH_MD_KEY_PIXEL_FORMAT" }, + { "name": "OH_MD_KEY_RANGE_FLAG" }, + { "name": "OH_MD_KEY_COLOR_PRIMARIES" }, + { "name": "OH_MD_KEY_TRANSFER_CHARACTERISTICS" }, + { "name": "OH_MD_KEY_MATRIX_COEFFICIENTS" }, + { "name": "OH_MD_KEY_AUDIO_SAMPLE_FORMAT" }, + { "name": "OH_MD_KEY_FRAME_RATE" }, + { "name": "OH_MD_KEY_VIDEO_ENCODE_BITRATE_MODE" }, + { "name": "OH_MD_KEY_PROFILE" }, + { "name": "OH_MD_KEY_AUD_CHANNEL_COUNT" }, + { "name": "OH_MD_KEY_AUD_SAMPLE_RATE" }, + { "name": "OH_MD_KEY_I_FRAME_INTERVAL" }, + { "name": "OH_MD_KEY_ROTATION" }, + { "name": "OH_MD_KEY_CODEC_CONFIG" }, + { "name": "OH_MD_KEY_REQUEST_I_FRAME" }, + { "name": "OH_MD_KEY_QUALITY" }, + { "name": "OH_MD_KEY_CHANNEL_LAYOUT" }, + { "name": "OH_MD_KEY_BITS_PER_CODED_SAMPLE" }, + { "name": "OH_MD_KEY_AAC_IS_ADTS" }, + { "name": "OH_MD_KEY_SBR" }, + { "name": "OH_MD_KEY_COMPLIANCE_LEVEL" }, + { "name": "OH_MD_KEY_IDENTIFICATION_HEADER" }, + { "name": "OH_MD_KEY_SETUP_HEADER" }, + { "name": "OH_MD_KEY_SCALING_MODE" }, + { "name": "OH_MD_MAX_INPUT_BUFFER_COUNT" }, + { "name": "OH_MD_MAX_OUTPUT_BUFFER_COUNT" }, + { "name": "OH_MD_KEY_TITLE" }, + { "name": "OH_MD_KEY_ARTIST" }, + { "name": "OH_MD_KEY_ALBUM" }, + { "name": "OH_MD_KEY_ALBUM_ARTIST" }, + { "name": "OH_MD_KEY_DATE" }, + { "name": "OH_MD_KEY_COMMENT" }, + { "name": "OH_MD_KEY_GENRE" }, + { "name": "OH_MD_KEY_COPYRIGHT" }, + { "name": "OH_MD_KEY_LANGUAGE" }, + { "name": "OH_MD_KEY_DESCRIPTION" }, + { "name": "OH_MD_KEY_LYRICS" }, + { "name": "OH_MD_KEY_TRACK_COUNT" }, + { "name": "OH_AVCapability_IsHardware" }, + { "name": "OH_AVCapability_GetName" }, + { "name": "OH_AVCapability_GetMaxSupportedInstances" }, + { "name": "OH_AVCapability_GetEncoderBitrateRange" }, + { "name": "OH_AVCapability_IsEncoderBitrateModeSupported" }, + { "name": "OH_AVCapability_GetEncoderQualityRange" }, + { "name": "OH_AVCapability_GetEncoderComplexityRange" }, + { "name": "OH_AVCapability_GetAudioSupportedSampleRates" }, + { "name": "OH_AVCapability_GetAudioChannelCountRange" }, + { "name": "OH_AVCapability_GetVideoWidthAlignment" }, + { "name": "OH_AVCapability_GetVideoHeightAlignment" }, + { "name": "OH_AVCapability_GetVideoWidthRangeForHeight" }, + { "name": "OH_AVCapability_GetVideoHeightRangeForWidth" }, + { "name": "OH_AVCapability_GetVideoWidthRange" }, + { "name": "OH_AVCapability_GetVideoHeightRange" }, + { "name": "OH_AVCapability_IsVideoSizeSupported" }, + { "name": "OH_AVCapability_GetVideoFrameRateRange" }, + { "name": "OH_AVCapability_GetVideoFrameRateRangeForSize" }, + { "name": "OH_AVCapability_AreVideoSizeAndFrameRateSupported" }, + { "name": "OH_AVCapability_GetVideoSupportedPixelFormats" }, + { "name": "OH_AVCapability_GetSupportedProfiles" }, + { "name": "OH_AVCapability_GetSupportedLevelsForProfile" }, + { "name": "OH_AVCapability_AreProfileAndLevelSupported" } +] + diff --git a/multimedia/av_codec/core/BUILD.gn b/multimedia/av_codec/core/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..80cbc267a2196715824b4bdeeea6da6b6727c4fc --- /dev/null +++ b/multimedia/av_codec/core/BUILD.gn @@ -0,0 +1,38 @@ +# Copyright (C) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") +import("//foundation/multimedia/av_codec/config.gni") +ohos_ndk_headers("native_media_core_header") { + dest_dir = "$ndk_headers_out_dir/multimedia/player_framework" + sources = [ + "$av_codec_root_dir/interfaces/kits/c/native_averrors.h", + "$av_codec_root_dir/interfaces/kits/c/native_avformat.h", + "$av_codec_root_dir/interfaces/kits/c/native_avmemory.h", + ] +} + +ohos_ndk_library("libnative_media_core") { + ndk_description_file = "./libnative_media_core.ndk.json" + min_compact_version = "1" + output_name = "native_media_core" + output_extension = "so" + + system_capability = "SystemCapability.Multimedia.Media.Core" + system_capability_headers = [ + "multimedia/player_framework/native_averrors.h", + "multimedia/player_framework/native_avformat.h", + "multimedia/player_framework/native_avmemory.h", + ] +} diff --git a/multimedia/av_codec/core/libnative_media_core.ndk.json b/multimedia/av_codec/core/libnative_media_core.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..f7ceabdb59df7bae0c68124e80913123c8585d48 --- /dev/null +++ b/multimedia/av_codec/core/libnative_media_core.ndk.json @@ -0,0 +1,26 @@ +[ + { "name": "OH_AVFormat_Create" }, + { "name": "OH_AVFormat_CreateAudioFormat" }, + { "name": "OH_AVFormat_CreateVideoFormat" }, + { "name": "OH_AVFormat_Destroy" }, + { "name": "OH_AVFormat_Copy" }, + { "name": "OH_AVFormat_SetIntValue" }, + { "name": "OH_AVFormat_SetLongValue" }, + { "name": "OH_AVFormat_SetFloatValue" }, + { "name": "OH_AVFormat_SetDoubleValue" }, + { "name": "OH_AVFormat_SetStringValue" }, + { "name": "OH_AVFormat_SetBuffer" }, + { "name": "OH_AVFormat_GetIntValue" }, + { "name": "OH_AVFormat_GetLongValue" }, + { "name": "OH_AVFormat_GetFloatValue" }, + { "name": "OH_AVFormat_GetDoubleValue" }, + { "name": "OH_AVFormat_GetStringValue" }, + { "name": "OH_AVFormat_GetBuffer" }, + { "name": "OH_AVFormat_DumpInfo" }, + { "name": "OH_AVMemory_Create" }, + { "name": "OH_AVMemory_GetAddr" }, + { "name": "OH_AVMemory_GetSize" }, + { "name": "OH_AVMemory_Destroy" }, + { "name": "OH_AVCodec_GetCapability" }, + { "name": "OH_AVCodec_GetCapabilityByCategory" } +] diff --git a/multimedia/av_codec/native_avcapability.h b/multimedia/av_codec/native_avcapability.h new file mode 100644 index 0000000000000000000000000000000000000000..043678aab03b8fb3761b663e3a429606921e202b --- /dev/null +++ b/multimedia/av_codec/native_avcapability.h @@ -0,0 +1,356 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVCAPABILITY_H +#define NATIVE_AVCAPABILITY_H + +#include +#include "native_averrors.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OH_AVCapability OH_AVCapability; + +/** + * @brief The bitrate mode of encoder. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +typedef enum OH_BitrateMode { + /* Constant Bit rate mode. */ + BITRATE_MODE_CBR = 0, + /* Variable Bit rate mode. */ + BITRATE_MODE_VBR = 1, + /* Constant Quality mode. */ + BITRATE_MODE_CQ = 2 +} OH_BitrateMode; + +/** + * @brief Range contain min and max value + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +typedef struct OH_AVRange { + int32_t minVal; + int32_t maxVal; +} OH_AVRange; + +/** + * @brief The codec category + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +typedef enum OH_AVCodecCategory { + HARDWARE = 0, + SOFTWARE +} OH_AVCodecCategory; + +/** + * @brief Get a system-recommended codec's capability. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param mime Mime type + * @param isEncoder True for encoder, false for decoder + * @return Returns a capability instance if an existing codec matches, + * if the specified mime type doesn't match any existing codec, returns NULL. + * @since 10 + */ +OH_AVCapability *OH_AVCodec_GetCapability(const char *mime, bool isEncoder); + +/** + * @brief Get a codec's capability within the specified category. By specifying the category, + * the matched codec is limited to either hardware codecs or software codecs. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param mime Mime type + * @param isEncoder True for encoder, false for decoder + * @param category The codec category + * @return Returns a capability instance if an existing codec matches, + * if the specified mime type doesn't match any existing codec, returns NULL + * @since 10 + */ +OH_AVCapability *OH_AVCodec_GetCapabilityByCategory(const char *mime, bool isEncoder, OH_AVCodecCategory category); + +/** + * @brief Check if the capability instance is describing a hardware codec. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Codec capability pointer + * @return Returns true if the capability instance is describing a hardware codec, + * false if the capability instance is describing a software codec + * @since 10 + */ +bool OH_AVCapability_IsHardware(OH_AVCapability *capability); + +/** + * @brief Get the codec name. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Codec capability pointer + * @return Returns codec name string + * @since 10 + */ +const char *OH_AVCapability_GetName(OH_AVCapability *capability); + +/** + * @brief Get the supported max instance number of the codec. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Codec capability pointer + * @return Returns the max supported codec instance number + * @since 10 + */ +int32_t OH_AVCapability_GetMaxSupportedInstances(OH_AVCapability *capability); + +/** + * @brief Get the encoder's supported bitrate range. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Encoder capability pointer. Do not give a decoder capability pointer + * @param bitrateRange Output parameter. Encoder bitrate range + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetEncoderBitrateRange(OH_AVCapability *capability, OH_AVRange *bitrateRange); + +/** + * @brief Check if the encoder supports the specific bitrate mode. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Encoder capability pointer. Do not give a decoder capability pointer + * @param bitrateMode Bitrate mode + * @return Returns true if the bitrate mode is supported, false if the bitrate mode is not supported + * @since 10 + */ +bool OH_AVCapability_IsEncoderBitrateModeSupported(OH_AVCapability *capability, OH_BitrateMode bitrateMode); + +/** + * @brief Get the encoder's supported quality range. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Encoder capability pointer. Do not give a decoder capability pointer + * @param qualityRange Output parameter. Encoder quality range + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetEncoderQualityRange(OH_AVCapability *capability, OH_AVRange *qualityRange); + +/** + * @brief Get the encoder's supported encoder complexity range. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Encoder capability pointer. Do not give a decoder capability pointer + * @param complexityRange Output parameter. Encoder complexity range + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetEncoderComplexityRange(OH_AVCapability *capability, OH_AVRange *complexityRange); + +/** + * @brief Get the audio codec's supported sample rates. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Audio codec capability pointer. Do not give a video codec capability pointer + * @param sampleRates Output parameter. A pointer to the sample rates array + * @param sampleRateNum Output parameter. The element number of the sample rates array + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetAudioSupportedSampleRates(OH_AVCapability *capability, const int32_t **sampleRates, + uint32_t *sampleRateNum); + +/** + * @brief Get the audio codec's supported audio channel count range. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Audio codec capability pointer. Do not give a video codec capability pointer + * @param channelCountRange Output parameter. Audio channel count range + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetAudioChannelCountRange(OH_AVCapability *capability, OH_AVRange *channelCountRange); + +/** + * @brief Get the video codec's supported video width alignment. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Video codec capability pointer. Do not give an audio codec capability pointer + * @param widthAlignment Output parameter. Video width alignment + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetVideoWidthAlignment(OH_AVCapability *capability, int32_t *widthAlignment); + +/** + * @brief Get the video codec's supported video height alignment. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Video codec capability pointer. Do not give an audio codec capability pointer + * @param heightAlignment Output parameter. Video height alignment + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetVideoHeightAlignment(OH_AVCapability *capability, int32_t *heightAlignment); + +/** + * @brief Get the video codec's supported video width range for a specific height. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability video codec capability pointer. Do not give an audio codec capability pointer + * @param height Vertical pixel number of the video + * @param widthRange Output parameter. Video width range + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetVideoWidthRangeForHeight(OH_AVCapability *capability, int32_t height, + OH_AVRange *widthRange); + +/** + * @brief Get the video codec's supported video height range for a specific width. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Video codec capability pointer. Do not give an audio codec capability pointer + * @param width Horizontal pixel number of the video + * @param heightRange Output parameter. Video height range + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetVideoHeightRangeForWidth(OH_AVCapability *capability, int32_t width, + OH_AVRange *heightRange); + +/** + * @brief Get the video codec's supported video width range. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Video codec capability pointer. DO not give an audio codec capability pointer + * @param widthRange Output parameter. Video width range + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetVideoWidthRange(OH_AVCapability *capability, OH_AVRange *widthRange); + +/** + * @brief Get the video codec's supported video height range. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Video codec capability pointer. Do not give an audio codec capability pointer + * @param heightRange Output parameter. Video height range + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetVideoHeightRange(OH_AVCapability *capability, OH_AVRange *heightRange); + +/** + * @brief Check if the video codec supports the specific video size. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Video codec capability pointer. Do not give an audio codec capability pointer + * @param width Horizontal pixel number of the video + * @param height Vertical pixel number of the video + * @return Returns true if the video size is supported, false if the video size is not supported + * @since 10 + */ +bool OH_AVCapability_IsVideoSizeSupported(OH_AVCapability *capability, int32_t width, int32_t height); + +/** + * @brief Get the video codec's supported video frame rate range. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Video codec capability pointer. Do not give an audio codec capability pointer + * @param frameRateRange Output parameter. Video frame rate range + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetVideoFrameRateRange(OH_AVCapability *capability, OH_AVRange *frameRateRange); + +/** + * @brief Get the Video codec's supported video frame rate range for a specified video size. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Video codec capability pointer. Do not give an audio codec capability pointer + * @param width Horizontal pixel number of the video + * @param height Vertical pixel number of the video + * @param frameRateRange Output parameter. Frame rate range + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetVideoFrameRateRangeForSize(OH_AVCapability *capability, int32_t width, int32_t height, + OH_AVRange *frameRateRange); + +/** + * @brief Check if the video codec supports the specific combination of video size and frame rate. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Video codec capability pointer. Do not give an audio codec capability pointer + * @param width Horizontal pixel number of the video + * @param height Vertical pixel number of the video + * @param frameRate Frame number per second + * @return Returns true if the combination of video size and frame rate is supported, + * false if it is not supported + * @since 10 + */ +bool OH_AVCapability_AreVideoSizeAndFrameRateSupported(OH_AVCapability *capability, int32_t width, int32_t height, + int32_t frameRate); + +/** + * @brief Get the video codec's supported video pixel format. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Video codec capability pointer. Do not give an audio codec capability pointer + * @param pixelFormats Output parameter. A pointer to the video pixel format array + * @param pixelFormatNum Output parameter. The element number of the pixel format array + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetVideoSupportedPixelFormats(OH_AVCapability *capability, const int32_t **pixelFormats, + uint32_t *pixelFormatNum); + +/** + * @brief Get the codec's supported profiles. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Codec capability pointer + * @param profiles Output parameter. A pointer to the profile array + * @param profileNum Output parameter. The element number of the profile array + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetSupportedProfiles(OH_AVCapability *capability, const int32_t **profiles, + uint32_t *profileNum); + +/** + * @brief Get codec's supported levels for a specific profile. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Codec capability pointer + * @param profile Codec profile + * @param levels Output parameter. A pointer to the level array + * @param levelNum Output parameter. The element number of the level array + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVCapability_GetSupportedLevelsForProfile(OH_AVCapability *capability, int32_t profile, + const int32_t **levels, uint32_t *levelNum); + +/** + * @brief Check if the codec supports the specific combination of the profile and level. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param capability Codec capability pointer + * @param profile Codec profile + * @param level Codec level + * @return Returns true if the combination of profile and level is supported, + * false if it is not supported + * @since 10 + */ +bool OH_AVCapability_AreProfileAndLevelSupported(OH_AVCapability *capability, int32_t profile, int32_t level); + +#ifdef __cplusplus +} +#endif +#endif // NATIVE_AVCAPABILITY_H \ No newline at end of file diff --git a/multimedia/av_codec/native_avcodec_audiodecoder.h b/multimedia/av_codec/native_avcodec_audiodecoder.h new file mode 100644 index 0000000000000000000000000000000000000000..bb62e8a8c20f4026b1cedd2cb9ffc4ccb7da7030 --- /dev/null +++ b/multimedia/av_codec/native_avcodec_audiodecoder.h @@ -0,0 +1,224 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVCODEC_AUDIODECODER_H +#define NATIVE_AVCODEC_AUDIODECODER_H + +#include +#include +#include "native_averrors.h" +#include "native_avformat.h" +#include "native_avmemory.h" +#include "native_avcodec_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Creates an audio decoder instance from the mime type, which is recommended in most cases. + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param mime mime type description string, refer to {@link AVCODEC_MIME_TYPE} + * @return Returns a Pointer to an OH_AVCodec instance + * @since 9 + * @version 1.0 + */ +OH_AVCodec *OH_AudioDecoder_CreateByMime(const char *mime); + +/** + * @brief Create an audio decoder instance through the audio decoder name. + * The premise of using this interface is to know the exact name of the decoder. + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param name Audio codec name + * @return Returns a Pointer to an OH_AVCodec instance + * @since 9 + * @version 1.0 + */ +OH_AVCodec *OH_AudioDecoder_CreateByName(const char *name); + +/** + * @brief Clear the internal resources of the decoder and destroy the decoder instance + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioDecoder_Destroy(OH_AVCodec *codec); + +/** + * @brief Set the asynchronous callback function so that your application + * can respond to the events generated by the audio decoder. This interface must be called before Prepare is called. + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec Pointer to an OH_AVCodec instance + * @param callback A collection of all callback functions, see {@link OH_AVCodecAsyncCallback} + * @param userData User specific data + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioDecoder_SetCallback(OH_AVCodec *codec, OH_AVCodecAsyncCallback callback, void *userData); + +/** + * @brief To configure the audio decoder, typically, you need to configure the description information of the decoded + * audio track, which can be extracted from the container. This interface must be called before Prepare is called. + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec Pointer to an OH_AVCodec instance + * @param format A pointer to an OH_AVFormat giving a description of the audio track to be decoded + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioDecoder_Configure(OH_AVCodec *codec, OH_AVFormat *format); + +/** + * @brief To prepare the internal resources of the decoder, the Configure interface must be called + * before calling this interface. + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioDecoder_Prepare(OH_AVCodec *codec); + +/** + * @brief Start the decoder, this interface must be called after the Prepare is successful. + * After being successfully started, the decoder will start reporting NeedInputData events. + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioDecoder_Start(OH_AVCodec *codec); + +/** + * @brief Stop the decoder. After stopping, you can re-enter the Started state through Start, + * but it should be noted that need to re-enter if the decoder has been input before + * Codec-Specific-Data. + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioDecoder_Stop(OH_AVCodec *codec); + +/** + * @brief Clear the input and output data buffered in the decoder. After this interface is called, all the Buffer + * indexes previously reported through the asynchronous callback will be invalidated, make sure not to access + * the Buffers corresponding to these indexes. + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioDecoder_Flush(OH_AVCodec *codec); + +/** + * @brief Reset the decoder. To continue decoding, you need to call the Configure interface again to + * configure the decoder instance. + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ + +OH_AVErrCode OH_AudioDecoder_Reset(OH_AVCodec *codec); + +/** + * @brief Get the description information of the output data of the decoder, refer to {@link OH_AVFormat} for details. + * It should be noted that the life cycle of the OH_AVFormat instance pointed to by the return value * needs to + * be manually released by the caller + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns the OH_AVFormat handle pointer, the life cycle is refreshed with the next GetOutputMediaDescription, + * or destroyed with OH_AVCodec; + * @since 9 + * @version 1.0 + */ +OH_AVFormat *OH_AudioDecoder_GetOutputDescription(OH_AVCodec *codec); + +/** + * @brief Set dynamic parameters to the decoder. Note: This interface can only be called after the decoder is started. + * At the same time, incorrect parameter settings may cause decoding failure. + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec Pointer to an OH_AVCodec instance + * @param format OH_AVFormat handle pointer + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioDecoder_SetParameter(OH_AVCodec *codec, OH_AVFormat *format); + +/** + * @brief Submit the input buffer filled with data to the audio decoder. The {@link OH_AVCodecOnNeedInputData} callback + * will report the available input buffer and the corresponding index value. Once the buffer with the specified index + * is submitted to the audio decoder, the buffer cannot be accessed again until the {@link OH_AVCodecOnNeedInputData} + * callback is received again reporting that the buffer with the same index is available. In addition, for some + * decoders, it is required to input Codec-Specific-Data to the decoder at the beginning to initialize the decoding + * process of the decoder. + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec Pointer to an OH_AVCodec instance + * @param index Enter the index value corresponding to the Buffer + * @param attr Information describing the data contained in the Buffer + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioDecoder_PushInputData(OH_AVCodec *codec, uint32_t index, OH_AVCodecBufferAttr attr); + +/** + * @brief Return the processed output Buffer to the decoder. + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec Pointer to an OH_AVCodec instance + * @param index The index value corresponding to the output Buffer + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioDecoder_FreeOutputData(OH_AVCodec *codec, uint32_t index); + +/** + * @brief Check whether the current codec instance is valid. It can be used fault recovery or app + * switchback from the background + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec Pointer to an OH_AVCodec instance + * @param isValid Output Parameter. A pointer to a boolean instance, it is true if the codec instance is valid, + * false if the codec instance is invalid + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AudioDecoder_IsValid(OH_AVCodec *codec, bool *isValid); + +#ifdef __cplusplus +} +#endif +#endif // NATIVE_AVCODEC_AUDIODECODER_H \ No newline at end of file diff --git a/multimedia/av_codec/native_avcodec_audioencoder.h b/multimedia/av_codec/native_avcodec_audioencoder.h new file mode 100644 index 0000000000000000000000000000000000000000..7493f69e06e3727fb2caa7433b8a2d4a116ef774 --- /dev/null +++ b/multimedia/av_codec/native_avcodec_audioencoder.h @@ -0,0 +1,218 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVCODEC_AUDIOENCODER_H +#define NATIVE_AVCODEC_AUDIOENCODER_H + +#include +#include +#include "native_averrors.h" +#include "native_avformat.h" +#include "native_avmemory.h" +#include "native_avcodec_base.h" +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Creates an audio encoder instance from the mime type, this interface is recommended in most cases. + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param mime mime type description string, refer to {@link AVCODEC_MIME_TYPE} + * @return Returns a Pointer to an OH_AVCodec instance + * @since 9 + * @version 1.0 + */ +OH_AVCodec *OH_AudioEncoder_CreateByMime(const char *mime); + +/** + * @brief Create an audio encoder instance through the audio encoder name. + * The premise of using this interface is to know the exact name of the encoder. + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param name Audio encoder name + * @return Returns a Pointer to an OH_AVCodec instance + * @since 9 + * @version 1.0 + */ +OH_AVCodec *OH_AudioEncoder_CreateByName(const char *name); + +/** + * @brief Clear the internal resources of the encoder and destroy the encoder instance + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioEncoder_Destroy(OH_AVCodec *codec); + +/** + * @brief Set the asynchronous callback function so that your application can respond to + * the events generated by the audio encoder. This interface must be called before Prepare is called. + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec Pointer to an OH_AVCodec instance + * @param callback A collection of all callback functions, see {@link OH_AVCodecAsyncCallback} + * @param userData User specific data + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioEncoder_SetCallback(OH_AVCodec *codec, OH_AVCodecAsyncCallback callback, void *userData); + +/** + * @brief To configure the audio encoder, typically, you need to configure the description information of + * the encoded audio track. This interface must be called before Prepare is called. + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec Pointer to an OH_AVCodec instance + * @param format OH_AVFormat handle pointer + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioEncoder_Configure(OH_AVCodec *codec, OH_AVFormat *format); + +/** + * @brief To prepare the internal resources of the encoder, + * the Configure interface must be called before calling this interface. + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioEncoder_Prepare(OH_AVCodec *codec); + +/** + * @brief Start the encoder, this interface must be called after the Prepare is successful. + * After being successfully started, the encoder will start reporting NeedInputData events. + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioEncoder_Start(OH_AVCodec *codec); + +/** + * @brief Stop the encoder. After stopping, you can re-enter the Started state through Start. + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioEncoder_Stop(OH_AVCodec *codec); + +/** + * @brief Clear the input and output data buffered in the encoder. After this interface is called, + * all the Buffer indexes previously reported through the asynchronous callback will be invalidated, + * make sure not to access the Buffers corresponding to these indexes. + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioEncoder_Flush(OH_AVCodec *codec); + +/** + * @brief Reset the encoder. To continue coding, you need to call the Configure interface + * again to configure the encoder instance. + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioEncoder_Reset(OH_AVCodec *codec); + +/** + * @brief Get the description information of the output data of the encoder, refer to {@link OH_AVFormat} for details. + * It should be noted that the life cycle of the OH_AVFormat instance pointed to by the return value * needs to + * be manually released by the caller. + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns the OH_AVFormat handle pointer, the life cycle is refreshed with the next GetOutputMediaDescription, + * or destroyed with OH_AVCodec; + * @since 9 + * @version 1.0 + */ +OH_AVFormat *OH_AudioEncoder_GetOutputDescription(OH_AVCodec *codec); + +/** + * @brief Set dynamic parameters to the encoder. Note: This interface can only be called after the encoder is started. + * At the same time, incorrect parameter settings may cause the encoding to fail. + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec Pointer to an OH_AVCodec instance + * @param format OH_AVFormat handle pointer + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioEncoder_SetParameter(OH_AVCodec *codec, OH_AVFormat *format); + +/** + * @brief Submit the input buffer filled with data to the audio encoder. The {@link OH_AVCodecOnNeedInputData} + * callback will report the available input buffer and the corresponding index value. Once the buffer with the + * specified index is submitted to the audio encoder, the buffer cannot be accessed again until the + * callback is received again reporting that the buffer with the same index is available + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec Pointer to an OH_AVCodec instance + * @param index Enter the index value corresponding to the Buffer + * @param attr Information describing the data contained in the Buffer + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioEncoder_PushInputData(OH_AVCodec *codec, uint32_t index, OH_AVCodecBufferAttr attr); + +/** + * @brief Return the processed output Buffer to the encoder. + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec Pointer to an OH_AVCodec instance + * @param index The index value corresponding to the output Buffer + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_AudioEncoder_FreeOutputData(OH_AVCodec *codec, uint32_t index); + +/** + * @brief Check whether the current codec instance is valid. It can be used fault recovery or app + * switchback from the background + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec Pointer to an OH_AVCodec instance + * @param isValid Output Parameter. A pointer to a boolean instance, it is true if the codec instance is valid, + * false if the codec instance is invalid + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AudioEncoder_IsValid(OH_AVCodec *codec, bool *isValid); + +#ifdef __cplusplus +} +#endif +#endif // NATIVE_AVCODEC_AUDIOENCODER_H \ No newline at end of file diff --git a/multimedia/av_codec/native_avcodec_base.h b/multimedia/av_codec/native_avcodec_base.h new file mode 100644 index 0000000000000000000000000000000000000000..bedee400433dfc650511679824a8af35d9e1868d --- /dev/null +++ b/multimedia/av_codec/native_avcodec_base.h @@ -0,0 +1,450 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVCODEC_BASE_H +#define NATIVE_AVCODEC_BASE_H + +#include +#include +#include "native_averrors.h" +#include "native_avformat.h" +#include "native_avmemory.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct NativeWindow OHNativeWindow; +typedef struct OH_AVCodec OH_AVCodec; + +/** + * @brief Enumerate the categories of OH_AVCodec's Buffer tags + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 9 + * @version 1.0 + */ +typedef enum OH_AVCodecBufferFlags { + AVCODEC_BUFFER_FLAGS_NONE = 0, + /* Indicates that the Buffer is an End-of-Stream frame */ + AVCODEC_BUFFER_FLAGS_EOS = 1 << 0, + /* Indicates that the Buffer contains keyframes */ + AVCODEC_BUFFER_FLAGS_SYNC_FRAME = 1 << 1, + /* Indicates that the data contained in the Buffer is only part of a frame */ + AVCODEC_BUFFER_FLAGS_INCOMPLETE_FRAME = 1 << 2, + /* Indicates that the Buffer contains Codec-Specific-Data */ + AVCODEC_BUFFER_FLAGS_CODEC_DATA = 1 << 3, +} OH_AVCodecBufferFlags; + +/** + * @brief Define the Buffer description information of OH_AVCodec + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 9 + * @version 1.0 + */ +typedef struct OH_AVCodecBufferAttr { + /* Presentation timestamp of this Buffer in microseconds */ + int64_t pts; + /* The size of the data contained in the Buffer in bytes */ + int32_t size; + /* The starting offset of valid data in this Buffer */ + int32_t offset; + /* The flags this Buffer has, which is also a combination of multiple {@link OH_AVCodecBufferFlags}. */ + uint32_t flags; +} OH_AVCodecBufferAttr; + +/** + * @brief When an error occurs in the running of the OH_AVCodec instance, the function pointer will be called + * to report specific error information. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param codec OH_AVCodec instance + * @param errorCode specific error code + * @param userData User specific data + * @since 9 + * @version 1.0 + */ +typedef void (*OH_AVCodecOnError)(OH_AVCodec *codec, int32_t errorCode, void *userData); + +/** + * @brief When the output stream changes, the function pointer will be called to report the new stream description + * information. It should be noted that the life cycle of the OH_AVFormat pointer + * is only valid when the function pointer is called, and it is forbidden to continue to access after the call ends. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param codec OH_AVCodec instance + * @param format New output stream description information + * @param userData User specific data + * @since 9 + * @version 1.0 + */ +typedef void (*OH_AVCodecOnStreamChanged)(OH_AVCodec *codec, OH_AVFormat *format, void *userData); + +/** + * @brief When OH_AVCodec needs new input data during the running process, + * the function pointer will be called and carry an available Buffer to fill in the new input data. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param codec OH_AVCodec instance + * @param index The index corresponding to the newly available input buffer. + * @param data New available input buffer. + * @param userData User specific data + * @since 9 + * @version 1.0 + */ +typedef void (*OH_AVCodecOnNeedInputData)(OH_AVCodec *codec, uint32_t index, OH_AVMemory *data, void *userData); + +/** + * @brief When new output data is generated during the operation of OH_AVCodec, the function pointer will be + * called and carry a Buffer containing the new output data. It should be noted that the life cycle of the + * OH_AVCodecBufferAttr pointer is only valid when the function pointer is called. , which prohibits continued + * access after the call ends. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param codec OH_AVCodec instance + * @param index The index corresponding to the new output Buffer. + * @param data Buffer containing the new output data + * @param attr The description of the new output Buffer, please refer to {@link OH_AVCodecBufferAttr} + * @param userData specified data + * @since 9 + * @version 1.0 + */ +typedef void (*OH_AVCodecOnNewOutputData)(OH_AVCodec *codec, uint32_t index, OH_AVMemory *data, + OH_AVCodecBufferAttr *attr, void *userData); + +/** + * @brief A collection of all asynchronous callback function pointers in OH_AVCodec. Register an instance of this + * structure to the OH_AVCodec instance, and process the information reported through the callback to ensure the + * normal operation of OH_AVCodec. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param onError Monitor OH_AVCodec operation errors, refer to {@link OH_AVCodecOnError} + * @param onStreamChanged Monitor codec stream information, refer to {@link OH_AVCodecOnStreamChanged} + * @param onNeedInputData Monitoring codec requires input data, refer to {@link OH_AVCodecOnNeedInputData} + * @param onNeedInputData Monitor codec to generate output data, refer to {@link onNeedInputData} + * @since 9 + * @version 1.0 + */ +typedef struct OH_AVCodecAsyncCallback { + OH_AVCodecOnError onError; + OH_AVCodecOnStreamChanged onStreamChanged; + OH_AVCodecOnNeedInputData onNeedInputData; + OH_AVCodecOnNewOutputData onNeedOutputData; +} OH_AVCodecAsyncCallback; + +/** + * @brief Enumerates the MIME types of audio and video codecs + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 9 + * @version 1.0 + */ +extern const char *OH_AVCODEC_MIMETYPE_VIDEO_AVC; +extern const char *OH_AVCODEC_MIMETYPE_AUDIO_AAC; + +/** + * @brief Enumerates the MIME types of audio and video codecs + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +extern const char *OH_AVCODEC_MIMETYPE_AUDIO_FLAC; +extern const char *OH_AVCODEC_MIMETYPE_AUDIO_VORBIS; +extern const char *OH_AVCODEC_MIMETYPE_AUDIO_MPEG; +extern const char *OH_AVCODEC_MIMETYPE_VIDEO_HEVC; +extern const char *OH_AVCODEC_MIMETYPE_VIDEO_MPEG4; +extern const char *OH_AVCODEC_MIMETYPE_IMAGE_JPG; +extern const char *OH_AVCODEC_MIMETYPE_IMAGE_PNG; +extern const char *OH_AVCODEC_MIMETYPE_IMAGE_BMP; + +/** + * @brief The extra data's key of surface Buffer + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 9 + * @version 1.0 + */ +/* Key for timeStamp in surface's extraData, value type is int64 */ +extern const char *OH_ED_KEY_TIME_STAMP; +/* Key for endOfStream in surface's extraData, value type is bool */ +extern const char *OH_ED_KEY_EOS; + +/** + * @brief Provides the uniform container for storing the media description. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 9 + * @version 1.0 + */ +/* Key for track type, value type is uint8_t, see @OH_MediaType. */ +extern const char *OH_MD_KEY_TRACK_TYPE; +/* Key for codec mime type, value type is string. */ +extern const char *OH_MD_KEY_CODEC_MIME; +/* Key for duration, value type is int64_t. */ +extern const char *OH_MD_KEY_DURATION; +/* Key for bitrate, value type is uint32_t. */ +extern const char *OH_MD_KEY_BITRATE; +/* Key for max input size, value type is uint32_t */ +extern const char *OH_MD_KEY_MAX_INPUT_SIZE; +/* Key for video width, value type is uint32_t */ +extern const char *OH_MD_KEY_WIDTH; +/* Key for video height, value type is uint32_t */ +extern const char *OH_MD_KEY_HEIGHT; +/* Key for video pixel format, value type is int32_t, see @OH_AVPixelFormat */ +extern const char *OH_MD_KEY_PIXEL_FORMAT; +/* key for audio raw format, value type is uint32_t , see @AudioSampleFormat */ +extern const char *OH_MD_KEY_AUDIO_SAMPLE_FORMAT; +/* Key for video frame rate, value type is double. */ +extern const char *OH_MD_KEY_FRAME_RATE; +/* video encode bitrate mode, the value type is int32_t, see @OH_VideoEncodeBitrateMode */ +extern const char *OH_MD_KEY_VIDEO_ENCODE_BITRATE_MODE; +/* encode profile, the value type is number. see @OH_AVCProfile, OH_HEVCProfile, OH_AACProfile. */ +extern const char *OH_MD_KEY_PROFILE; +/* Key for audio channel count, value type is uint32_t */ +extern const char *OH_MD_KEY_AUD_CHANNEL_COUNT; +/* Key for audio sample rate, value type is uint32_t */ +extern const char *OH_MD_KEY_AUD_SAMPLE_RATE; +/* Key for the interval of key frame. value type is int32_t, the unit is milliseconds. */ +extern const char *OH_MD_KEY_I_FRAME_INTERVAL; +/* Key of the surface rotation angle. value type is int32_t: should be {0, 90, 180, 270}, default is 0. */ +extern const char *OH_MD_KEY_ROTATION; + +/** + * @brief Provides the uniform container for storing the media description. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +/* Key for video YUV value range flag, value type is boolean */ +extern const char *OH_MD_KEY_RANGE_FLAG; +/* Key for video color primaries, value type is int32_t, see @OH_ColorPrimary */ +extern const char *OH_MD_KEY_COLOR_PRIMARIES; +/* Key for video transfer characteristics, value type is int32_t, see @OH_TransferCharacteristic */ +extern const char *OH_MD_KEY_TRANSFER_CHARACTERISTICS; +/* Key for video matrix coefficients, value type is int32_t, see @OH_MatrixCoefficient */ +extern const char *OH_MD_KEY_MATRIX_COEFFICIENTS; +/* Key for the request an I-Frame immediately, value type is boolean */ +extern const char *OH_MD_KEY_REQUEST_I_FRAME; +/* Key for the desired encoding quality, value type is uint32_t, this key is only + * supported for encoders that are configured in constant quality mode */ +extern const char *OH_MD_KEY_QUALITY; +/* Key of the codec specific data. value type is a uint8_t pointer */ +extern const char *OH_MD_KEY_CODEC_CONFIG; +/* source format Key for title, value type is string */ +extern const char *OH_MD_KEY_TITLE; +/* source format Key for artist, value type is string */ +extern const char *OH_MD_KEY_ARTIST; +/* source format Key for album, value type is string */ +extern const char *OH_MD_KEY_ALBUM; +/* source format Key for album artist, value type is string */ +extern const char *OH_MD_KEY_ALBUM_ARTIST; +/* source format Key for date, value type is string */ +extern const char *OH_MD_KEY_DATE; +/* source format Key for comment, value type is string */ +extern const char *OH_MD_KEY_COMMENT; +/* source format Key for genre, value type is string */ +extern const char *OH_MD_KEY_GENRE; +/* source format Key for copyright, value type is string */ +extern const char *OH_MD_KEY_COPYRIGHT; +/* source format Key for language, value type is string */ +extern const char *OH_MD_KEY_LANGUAGE; +/* source format Key for description, value type is string */ +extern const char *OH_MD_KEY_DESCRIPTION; +/* source format Key for lyrics, value type is string */ +extern const char *OH_MD_KEY_LYRICS; +/* source format Key for track count, value type is uint32_t */ +extern const char *OH_MD_KEY_TRACK_COUNT; +/* Key for the desired encoding channel layout, value type is int64_t, this key is only supported for encoders */ +extern const char *OH_MD_KEY_CHANNEL_LAYOUT; +/* Key for bits per coded sample, value type is uint32_t, supported for flac encoder, see @OH_BitsPerSample */ +extern const char *OH_MD_KEY_BITS_PER_CODED_SAMPLE; +/* Key for the aac format, value type is uint32_t, supported for aac decoder */ +extern const char *OH_MD_KEY_AAC_IS_ADTS; +/* Key for aac sbr mode, value type is uint32_t, supported for aac encoder */ +extern const char *OH_MD_KEY_SBR; +/* Key for flac compliance level, value type is int32_t */ +extern const char *OH_MD_KEY_COMPLIANCE_LEVEL; +/* Key for vorbis identification header, value type is a uint8_t pointer, supported only for vorbis decoder */ +extern const char *OH_MD_KEY_IDENTIFICATION_HEADER; +/* Key for vorbis setup header, value type is a uint8_t pointer, supported only for vorbis decoder */ +extern const char *OH_MD_KEY_SETUP_HEADER; +/* Key for video scale type, value type is int32_t, see @OH_ScalingMode */ +extern const char *OH_MD_KEY_SCALING_MODE; +/* Key for max input buffer count, value type is int32_t */ +extern const char *OH_MD_MAX_INPUT_BUFFER_COUNT; +/* Key for max output buffer count, value type is int32_t */ +extern const char *OH_MD_MAX_OUTPUT_BUFFER_COUNT; + +/** + * @brief Media type. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 9 + * @version 1.0 + */ +typedef enum OH_MediaType { + /* track is audio. */ + MEDIA_TYPE_AUD = 0, + /* track is video. */ + MEDIA_TYPE_VID = 1, +} OH_MediaType; + +/** + * @brief AAC Profile + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 9 + * @version 1.0 + */ +typedef enum OH_AACProfile { + AAC_PROFILE_LC = 0, +} OH_AACProfile; + +/** + * @brief AVC Profile + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 9 + * @version 1.0 + */ +typedef enum OH_AVCProfile { + AVC_PROFILE_BASELINE = 0, + AVC_PROFILE_HIGH = 4, + AVC_PROFILE_MAIN = 8, +} OH_AVCProfile; + +/** + * @brief Enumerates the muxer output file format + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +typedef enum OH_AVOutputFormat { + AV_OUTPUT_FORMAT_DEFAULT = 0, + AV_OUTPUT_FORMAT_MPEG_4 = 2, + AV_OUTPUT_FORMAT_M4A = 6, +} OH_AVOutputFormat; + +/** + * @brief Seek Mode + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +typedef enum OH_AVSeekMode { + /* seek to sync sample after the time */ + SEEK_MODE_NEXT_SYNC = 0, + /* seek to sync sample before the time */ + SEEK_MODE_PREVIOUS_SYNC, + /* seek to sync sample closest to time */ + SEEK_MODE_CLOSEST_SYNC, +} OH_AVSeekMode; + +/** + * @brief HEVC Profile + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +typedef enum OH_HEVCProfile { + HEVC_PROFILE_MAIN = 0, + HEVC_PROFILE_MAIN_10 = 1, + HEVC_PROFILE_MAIN_STILL = 2, + HEVC_PROFILE_MAIN_10_HDR10 = 3, + HEVC_PROFILE_MAIN_10_HDR10_PLUS = 4, +} OH_HEVCProfile; + +/** + * @brief Color Primary + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +typedef enum OH_ColorPrimary { + COLOR_PRIMARY_BT709 = 1, + COLOR_PRIMARY_UNSPECIFIED = 2, + COLOR_PRIMARY_BT470_M = 4, + COLOR_PRIMARY_BT601_625 = 5, + COLOR_PRIMARY_BT601_525 = 6, + COLOR_PRIMARY_SMPTE_ST240 = 7, + COLOR_PRIMARY_GENERIC_FILM = 8, + COLOR_PRIMARY_BT2020 = 9, + COLOR_PRIMARY_SMPTE_ST428 = 10, + COLOR_PRIMARY_P3DCI = 11, + COLOR_PRIMARY_P3D65 = 12, +} OH_ColorPrimary; + +/** + * @brief Transfer Characteristic + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +typedef enum OH_TransferCharacteristic { + TRANSFER_CHARACTERISTIC_BT709 = 1, + TRANSFER_CHARACTERISTIC_UNSPECIFIED = 2, + TRANSFER_CHARACTERISTIC_GAMMA_2_2 = 4, + TRANSFER_CHARACTERISTIC_GAMMA_2_8 = 5, + TRANSFER_CHARACTERISTIC_BT601 = 6, + TRANSFER_CHARACTERISTIC_SMPTE_ST240 = 7, + TRANSFER_CHARACTERISTIC_LINEAR = 8, + TRANSFER_CHARACTERISTIC_LOG = 9, + TRANSFER_CHARACTERISTIC_LOG_SQRT = 10, + TRANSFER_CHARACTERISTIC_IEC_61966_2_4 = 11, + TRANSFER_CHARACTERISTIC_BT1361 = 12, + TRANSFER_CHARACTERISTIC_IEC_61966_2_1 = 13, + TRANSFER_CHARACTERISTIC_BT2020_10BIT = 14, + TRANSFER_CHARACTERISTIC_BT2020_12BIT = 15, + TRANSFER_CHARACTERISTIC_PQ = 16, + TRANSFER_CHARACTERISTIC_SMPTE_ST428 = 17, + TRANSFER_CHARACTERISTIC_HLG = 18, +} OH_TransferCharacteristic; + +/** + * @brief Matrix Coefficient + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +typedef enum OH_MatrixCoefficient { + MATRIX_COEFFICIENT_IDENTITY = 0, + MATRIX_COEFFICIENT_BT709 = 1, + MATRIX_COEFFICIENT_UNSPECIFIED = 2, + MATRIX_COEFFICIENT_FCC = 4, + MATRIX_COEFFICIENT_BT601_625 = 5, + MATRIX_COEFFICIENT_BT601_525 = 6, + MATRIX_COEFFICIENT_SMPTE_ST240 = 7, + MATRIX_COEFFICIENT_YCGCO = 8, + MATRIX_COEFFICIENT_BT2020_NCL = 9, + MATRIX_COEFFICIENT_BT2020_CL = 10, + MATRIX_COEFFICIENT_SMPTE_ST2085 = 11, + MATRIX_COEFFICIENT_CHROMATICITY_NCL = 12, + MATRIX_COEFFICIENT_CHROMATICITY_CL = 13, + MATRIX_COEFFICIENT_ICTCP = 14, +} OH_MatrixCoefficient; + +/** + * @brief Scaling Mode + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +typedef enum OH_ScalingMode { + SCALING_MODE_SCALE_TO_WINDOW = 1, + SCALING_MODE_SCALE_CROP = 2, +} OH_ScalingMode; + +/** + * @brief enum Audio Bits Per Coded Sample + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 10 + */ +typedef enum OH_BitsPerSample { + SAMPLE_U8 = 0, + SAMPLE_S16LE = 1, + SAMPLE_S24LE = 2, + SAMPLE_S32LE = 3, + SAMPLE_F32LE = 4, + SAMPLE_U8P = 5, + SAMPLE_S16P = 6, + SAMPLE_S24P = 7, + SAMPLE_S32P = 8, + SAMPLE_F32P = 9, + INVALID_WIDTH = -1 +} OH_BitsPerSample; +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVCODEC_BASE_H diff --git a/multimedia/av_codec/native_avcodec_videodecoder.h b/multimedia/av_codec/native_avcodec_videodecoder.h new file mode 100644 index 0000000000000000000000000000000000000000..3bc557751bb5aef040fedc6c4651f7c988315fc3 --- /dev/null +++ b/multimedia/av_codec/native_avcodec_videodecoder.h @@ -0,0 +1,249 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVCODEC_VIDEODECODER_H +#define NATIVE_AVCODEC_VIDEODECODER_H + +#include +#include +#include "native_averrors.h" +#include "native_avformat.h" +#include "native_avmemory.h" +#include "native_avcodec_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Creates a video decoder instance from the mime type, which is recommended in most cases. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param mime mime type description string, refer to {@link AVCODEC_MIME_TYPE} + * @return Returns a Pointer to an OH_AVCodec instance + * @since 9 + * @version 1.0 + */ +OH_AVCodec *OH_VideoDecoder_CreateByMime(const char *mime); + +/** + * @brief Create a video decoder instance through the video decoder name. + * The premise of using this interface is to know the exact name of the decoder. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param name video codec name + * @return Returns a Pointer to an OH_AVCodec instance + * @since 9 + * @version 1.0 + */ +OH_AVCodec *OH_VideoDecoder_CreateByName(const char *name); + +/** + * @brief Clear the internal resources of the decoder and destroy the decoder instance + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoDecoder_Destroy(OH_AVCodec *codec); + +/** + * @brief Set the asynchronous callback function so that your application can respond to the events + * generated by the video decoder. This interface must be called before Prepare is called. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @param callback A collection of all callback functions, see {@link OH_AVCodecAsyncCallback} + * @param userData User specific data + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoDecoder_SetCallback(OH_AVCodec *codec, OH_AVCodecAsyncCallback callback, void *userData); + +/** + * @brief Specify the output Surface to provide video decoding output, + * this interface must be called before Prepare is called + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @param window A pointer to a OHNativeWindow instance, see {@link OHNativeWindow} + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoDecoder_SetSurface(OH_AVCodec *codec, OHNativeWindow *window); + +/** + * @brief To configure the video decoder, typically, you need to configure the description information of the decoded + * video track, which can be extracted from the container. This interface must be called before Prepare is called. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @param format A pointer to an OH_AVFormat to give the description of the video track to be decoded + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoDecoder_Configure(OH_AVCodec *codec, OH_AVFormat *format); + +/** + * @brief To prepare the internal resources of the decoder, the Configure interface must be called before + * calling this interface. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoDecoder_Prepare(OH_AVCodec *codec); + +/** + * @brief Start the decoder, this interface must be called after the Prepare is successful. + * After being successfully started, the decoder will start reporting NeedInputData events. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoDecoder_Start(OH_AVCodec *codec); + +/** + * @brief Stop the decoder. After stopping, you can re-enter the Started state through Start, + * but it should be noted that if Codec-Specific-Data has been input to the decoder before, it needs to be input again. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoDecoder_Stop(OH_AVCodec *codec); + +/** + * @brief Clear the input and output data buffered in the decoder. After this interface is called, all the Buffer + * indexes previously reported through the asynchronous callback will be invalidated, make sure not to access + * the Buffers corresponding to these indexes. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoDecoder_Flush(OH_AVCodec *codec); + +/** + * @brief Reset the decoder. To continue decoding, you need to call the Configure interface again + * to configure the decoder instance. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoDecoder_Reset(OH_AVCodec *codec); + +/** + * @brief Get the description information of the output data of the decoder, refer to {@link OH_AVFormat} + * It should be noted that the life cycle of the OH_AVFormat instance pointed to by the return value * needs + * to be manually released by the caller. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns a pointer to an OH_AVFormat instance + * @since 9 + * @version 1.0 + */ +OH_AVFormat *OH_VideoDecoder_GetOutputDescription(OH_AVCodec *codec); + +/** + * @brief Set dynamic parameters to the decoder. Note: This interface can only be called after the decoder is started. + * At the same time, incorrect parameter settings may cause decoding failure. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @param format pointer to an OH_AVFormat instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoDecoder_SetParameter(OH_AVCodec *codec, OH_AVFormat *format); + +/** + * @brief Submit the input buffer filled with data to the video decoder. The {@link OH_AVCodecOnNeedInputData} callback + * will report the available input buffer and the corresponding index value. Once the buffer with the specified index + * is submitted to the video decoder, the buffer cannot be accessed again until the {@link OH_AVCodecOnNeedInputData} + * callback is received again reporting that the buffer with the same index is available. In addition, for some + * decoders, it is required to input Codec-Specific-Data to the decoder at the beginning to initialize the decoding + * process of the decoder, such as PPS/SPS data in H264 format. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @param index Enter the index value corresponding to the Buffer + * @param attr Information describing the data contained in the Buffer + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoDecoder_PushInputData(OH_AVCodec *codec, uint32_t index, OH_AVCodecBufferAttr attr); + +/** + * @brief Return the processed output Buffer to the decoder, and notify the decoder to finish rendering the + * decoded data contained in the Buffer on the output Surface. If the output surface is not configured before, + * calling this interface only returns the output buffer corresponding to the specified index to the decoder. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @param index The index value corresponding to the output Buffer + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoDecoder_RenderOutputData(OH_AVCodec *codec, uint32_t index); + +/** + * @brief Return the processed output Buffer to the decoder. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @param index The index value corresponding to the output Buffer + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoDecoder_FreeOutputData(OH_AVCodec *codec, uint32_t index); + +/** + * @brief Check whether the current codec instance is valid. It can be used fault recovery or app + * switchback from the background. + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec Pointer to an OH_AVCodec instance + * @param isValid Output parameter. A pointer to a boolean instance, it is true if the codec instance is valid, + * false if the codec instance is invalid + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_VideoDecoder_IsValid(OH_AVCodec *codec, bool *isValid); + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVCODEC_VIDEODECODER_H \ No newline at end of file diff --git a/multimedia/av_codec/native_avcodec_videoencoder.h b/multimedia/av_codec/native_avcodec_videoencoder.h new file mode 100644 index 0000000000000000000000000000000000000000..86b8750d6ac28000baec2147aebe6e1ebe581d6c --- /dev/null +++ b/multimedia/av_codec/native_avcodec_videoencoder.h @@ -0,0 +1,265 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVCODEC_VIDEOENCODER_H +#define NATIVE_AVCODEC_VIDEOENCODER_H + +#include +#include +#include "native_averrors.h" +#include "native_avformat.h" +#include "native_avmemory.h" +#include "native_avcodec_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Creates a video encoder instance from the mime type, which is recommended in most cases. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param mime mime type description string, refer to {@link AVCODEC_MIME_TYPE} + * @return Returns a Pointer to an OH_AVCodec instance + * @since 9 + * @version 1.0 + */ +OH_AVCodec *OH_VideoEncoder_CreateByMime(const char *mime); + +/** + * @brief Create a video encoder instance through the video encoder name. The premise of using this interface is to + * know the exact name of the encoder. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param name Video encoder name + * @return Returns a Pointer to an OH_AVCodec instance + * @since 9 + * @version 1.0 + */ +OH_AVCodec *OH_VideoEncoder_CreateByName(const char *name); + +/** + * @brief Clear the internal resources of the encoder and destroy the encoder instance + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoEncoder_Destroy(OH_AVCodec *codec); + +/** + * @brief Set the asynchronous callback function so that your application can respond to the events generated by the + * video encoder. This interface must be called before Prepare is called + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @param callback A collection of all callback functions, see {@link OH_AVCodecAsyncCallback} + * @param userData User specific data + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoEncoder_SetCallback(OH_AVCodec *codec, OH_AVCodecAsyncCallback callback, void *userData); + +/** + * @brief To configure the video encoder, typically, you need to configure the description information of the + * encoded video track. This interface must be called before Prepare is called. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @param format A pointer to an OH_AVFormat that gives the description of the video track to be encoded + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoEncoder_Configure(OH_AVCodec *codec, OH_AVFormat *format); + +/** + * @brief To prepare the internal resources of the encoder, the Configure interface must be called before + * calling this interface. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoEncoder_Prepare(OH_AVCodec *codec); + +/** + * @brief Start the encoder, this interface must be called after the Prepare is successful. After being + * successfully started, the encoder will start reporting NeedInputData events. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoEncoder_Start(OH_AVCodec *codec); + +/** + * @brief Stop the encoder. After stopping, you can re-enter the Started state through Start. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoEncoder_Stop(OH_AVCodec *codec); + +/** + * @brief Clear the input and output data buffered in the encoder. After this interface is called, all the Buffer + * indexes previously reported through the asynchronous callback will be invalidated, make sure not to access the + * Buffers corresponding to these indexes. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoEncoder_Flush(OH_AVCodec *codec); + +/** + * @brief Reset the encoder. To continue coding, you need to call the Configure interface again to + * configure the encoder instance. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoEncoder_Reset(OH_AVCodec *codec); + +/** + * @brief Get the description information of the output data of the encoder, refer to {@link OH_AVFormat} for details. + * It should be noted that the life cycle of the OH_AVFormat instance pointed to by the return value * needs to + * be manually released by the caller. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns a pointer to an OH_AVFormat instance + * @since 9 + * @version 1.0 + */ +OH_AVFormat *OH_VideoEncoder_GetOutputDescription(OH_AVCodec *codec); + +/** + * @brief Set dynamic parameters to the encoder. Note: This interface can only be called after the encoder is started. + * At the same time, incorrect parameter settings may cause the encoding to fail. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @param format OH_AVFormat handle pointer + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoEncoder_SetParameter(OH_AVCodec *codec, OH_AVFormat *format); + +/** + * @brief Get the input Surface from the video encoder, this interface must be called before Prepare is called. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @param window A pointer to a OHNativeWindow instance, see {@link OHNativeWindow} + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoEncoder_GetSurface(OH_AVCodec *codec, OHNativeWindow **window); + +/** + * @brief Return the processed output Buffer to the encoder. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @param index The index value corresponding to the output Buffer + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoEncoder_FreeOutputData(OH_AVCodec *codec, uint32_t index); + +/** + * @brief Notifies the video encoder that the input stream has ended. It is recommended to use this interface to notify + * the encoder of the end of the stream in surface mode + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 9 + * @version 1.0 + */ +OH_AVErrCode OH_VideoEncoder_NotifyEndOfStream(OH_AVCodec *codec); + +/** + * @brief Submit the input buffer filled with data to the video encoder. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @param index Enter the index value corresponding to the Buffer + * @param attr Information describing the data contained in the Buffer + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_VideoEncoder_PushInputData(OH_AVCodec *codec, uint32_t index, OH_AVCodecBufferAttr attr); + +/** + * @brief Get the input data description of the encoder after call {@OH_VideoEncoder_Configure}, + * refer to {@link OH_AVFormat} for details. It should be noted that the life cycle of the OH_AVFormat + * instance pointed to by the return value needs to be manually released by the caller. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @return Returns a pointer to an OH_AVFormat instance + * @since 10 + */ +OH_AVFormat *OH_VideoEncoder_GetInputDescription(OH_AVCodec *codec); + +/** + * @brief Check whether the current codec instance is valid. It can be used fault recovery or app + * switchback from the background + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec Pointer to an OH_AVCodec instance + * @param isValid Output Parameter. A pointer to a boolean instance, it is true if the codec instance is valid, + * false if the codec instance is invalid + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_VideoEncoder_IsValid(OH_AVCodec *codec, bool *isValid); + +/** + * @brief The bitrate mode of video encoder. + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @since 9 + * @version 1.0 + */ +typedef enum OH_VideoEncodeBitrateMode { + /* constant bit rate mode. */ + CBR = 0, + /* variable bit rate mode. */ + VBR = 1, + /* constant quality mode. */ + CQ = 2, +} OH_VideoEncodeBitrateMode; + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVCODEC_VIDEOENCODER_H \ No newline at end of file diff --git a/multimedia/av_codec/native_avdemuxer.h b/multimedia/av_codec/native_avdemuxer.h new file mode 100644 index 0000000000000000000000000000000000000000..cdcff091443aa49dcd6b8b6a1565143afcab8a26 --- /dev/null +++ b/multimedia/av_codec/native_avdemuxer.h @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVDEMUXER_H +#define NATIVE_AVDEMUXER_H + +#include +#include "native_avcodec_base.h" +#include "native_averrors.h" +#include "native_avmemory.h" +#include "native_avsource.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OH_AVDemuxer OH_AVDemuxer; + +/** + * @brief Creates an OH_AVDemuxer instance for getting samples from source. + * Free the resources of the instance by calling OH_AVDemuxer_Destroy. + * @syscap SystemCapability.Multimedia.Media.Spliter + * @param source Pointer to an OH_AVSource instance. + * @return Returns a pointer to an OH_AVDemuxer instance + * @since 10 +*/ +OH_AVDemuxer *OH_AVDemuxer_CreateWithSource(OH_AVSource *source); + +/** + * @brief Destroy the OH_AVDemuxer instance and free the internal resources. + * The same instance can only be destroyed once. The destroyed instance + * should not be used before it is created again. It is recommended setting + * the instance pointer to NULL right after the instance is destroyed successfully. + * @syscap SystemCapability.Multimedia.Media.Spliter + * @param demuxer Pointer to an OH_AVDemuxer instance. + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 +*/ +OH_AVErrCode OH_AVDemuxer_Destroy(OH_AVDemuxer *demuxer); + +/** + * @brief The specified track is selected and the demuxer will read samples from + * this track. Multiple tracks are selected by calling this interface multiple times + * with different track indexes. Only the selected tracks are valid when calling + * OH_AVDemuxer_ReadSample to read samples. The interface returns AV_ERR_OK and the + * track is selected only once if the same track is selected multiple times. + * @syscap SystemCapability.Multimedia.Media.Spliter + * @param demuxer Pointer to an OH_AVDemuxer instance. + * @param trackIndex The index of the selected track. + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 +*/ +OH_AVErrCode OH_AVDemuxer_SelectTrackByID(OH_AVDemuxer *demuxer, uint32_t trackIndex); + +/** + * @brief The specified selected track is unselected. The unselected track's sample + * can not be read from demuxer. Multiple selected tracks are unselected by calling + * this interface multiple times with different track indexes. The interface returns + * AV_ERR_OK and the track is unselected only once if the same track is unselected + * multiple times. + * @syscap SystemCapability.Multimedia.Media.Spliter + * @param demuxer Pointer to an OH_AVDemuxer instance. + * @param trackIndex The index of the unselected track. + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 +*/ +OH_AVErrCode OH_AVDemuxer_UnselectTrackByID(OH_AVDemuxer *demuxer, uint32_t trackIndex); + +/** + * @brief Get the current encoded sample and sample-related information from the specified + * track. The track index must be selected before reading sample. The demuxer will advance + * automatically after calling this interface. + * @syscap SystemCapability.Multimedia.Media.Spliter + * @param demuxer Pointer to an OH_AVDemuxer instance. + * @param trackIndex The index of the track from which read an encoded sample. + * @param sample The OH_AVMemory handle pointer to the buffer storing the sample data. + * @param info The OH_AVCodecBufferAttr handle pointer to the buffer storing sample information. + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 +*/ +OH_AVErrCode OH_AVDemuxer_ReadSample(OH_AVDemuxer *demuxer, uint32_t trackIndex, + OH_AVMemory *sample, OH_AVCodecBufferAttr *info); + +/** + * @brief All selected tracks seek near to the requested time according to the seek mode. + * @syscap SystemCapability.Multimedia.Media.Spliter + * @param demuxer Pointer to an OH_AVDemuxer instance. + * @param millisecond The millisecond for seeking, the timestamp is the position of + * the file relative to the start of the file. + * @param mode The mode for seeking. See {@link OH_AVSeekMode}. + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 +*/ +OH_AVErrCode OH_AVDemuxer_SeekToTime(OH_AVDemuxer *demuxer, int64_t millisecond, OH_AVSeekMode mode); + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVDEMUXER_H diff --git a/multimedia/av_codec/native_averrors.h b/multimedia/av_codec/native_averrors.h new file mode 100644 index 0000000000000000000000000000000000000000..fe02f4aeeaa604db25429623e85dd8bbcc44a3a7 --- /dev/null +++ b/multimedia/av_codec/native_averrors.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef NATIVE_AVERRORS_H +#define NATIVE_AVERRORS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief AV error code + * @syscap SystemCapability.Multimedia.Media.Core + * @since 9 + * @version 1.0 + */ +typedef enum OH_AVErrCode { + /** + * the operation completed successfully. + */ + AV_ERR_OK = 0, + /** + * no memory. + */ + AV_ERR_NO_MEMORY = 1, + /** + * opertation not be permitted. + */ + AV_ERR_OPERATE_NOT_PERMIT = 2, + /** + * invalid argument. + */ + AV_ERR_INVALID_VAL = 3, + /** + * IO error. + */ + AV_ERR_IO = 4, + /** + * network timeout. + */ + AV_ERR_TIMEOUT = 5, + /** + * unknown error. + */ + AV_ERR_UNKNOWN = 6, + /** + * media service died. + */ + AV_ERR_SERVICE_DIED = 7, + /** + * the state is not support this operation. + */ + AV_ERR_INVALID_STATE = 8, + /** + * unsupport interface. + */ + AV_ERR_UNSUPPORT = 9, + /** + * extend err start. + */ + AV_ERR_EXTEND_START = 100, +} OH_AVErrCode; + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVERRORS_H diff --git a/multimedia/av_codec/native_avformat.h b/multimedia/av_codec/native_avformat.h new file mode 100644 index 0000000000000000000000000000000000000000..4335cee3370160b09cf5cf5d9b866ed699bc82c7 --- /dev/null +++ b/multimedia/av_codec/native_avformat.h @@ -0,0 +1,278 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVFORMAT_H +#define NATIVE_AVFORMAT_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OH_AVFormat OH_AVFormat; + +/** + * @brief Enumerates AVPixel Format. + * @syscap SystemCapability.Multimedia.Media.Core + * @since 9 + * @version 1.0 + */ +typedef enum OH_AVPixelFormat { + /** + * yuv 420 planar. + */ + AV_PIXEL_FORMAT_YUVI420 = 1, + /** + * NV12. yuv 420 semiplanar. + */ + AV_PIXEL_FORMAT_NV12 = 2, + /** + * NV21. yvu 420 semiplanar. + */ + AV_PIXEL_FORMAT_NV21 = 3, + /** + * format from surface. + */ + AV_PIXEL_FORMAT_SURFACE_FORMAT = 4, + /** + * RGBA8888 + */ + AV_PIXEL_FORMAT_RGBA = 5, +} OH_AVPixelFormat; + +/** + * @briefCreate an OH_AVFormat handle pointer to read and write data + * @syscap SystemCapability.Multimedia.Media.Core + * @return Returns a pointer to an OH_AVFormat instance + * @since 9 + * @version 1.0 + */ +struct OH_AVFormat *OH_AVFormat_Create(void); + +/** + * @briefCreate an audio OH_AVFormat handle pointer to read and write data + * @syscap SystemCapability.Multimedia.Media.Core + * @param mimeType mime type + * @param sampleRate sample rate + * @param channelCount channel count + * @return Returns a pointer to an OH_AVFormat instance + * @since 10 + * @version 1.0 + */ +struct OH_AVFormat *OH_AVFormat_CreateAudioFormat(const char *mimeType, + int32_t sampleRate, + int32_t channelCount); + +/** + * @briefCreate an video OH_AVFormat handle pointer to read and write data + * @syscap SystemCapability.Multimedia.Media.Core + * @param mimeType mime type + * @param width width + * @param height height + * @return Returns a pointer to an OH_AVFormat instance + * @since 10 + * @version 1.0 + */ +struct OH_AVFormat *OH_AVFormat_CreateVideoFormat(const char *mimeType, + int32_t width, + int32_t height); + +/** + * @brief Destroy the specified OH_AVFormat handle resource + * @syscap SystemCapability.Multimedia.Media.Core + * @param format pointer to an OH_AVFormat instance + * @return void + * @since 9 + * @version 1.0 + */ +void OH_AVFormat_Destroy(struct OH_AVFormat *format); + +/** + * @brief Copy OH_AVFormat handle resource + * @syscap SystemCapability.Multimedia.Media.Core + * @param to OH_AVFormat handle pointer to receive data + * @param from pointer to the OH_AVFormat handle of the copied data + * @return The return value is TRUE for success, FALSE for failure + * @since 9 + * @version 1.0 + */ +bool OH_AVFormat_Copy(struct OH_AVFormat *to, struct OH_AVFormat *from); + +/** + * @brief Write Int data to OH_AVFormat + * @syscap SystemCapability.Multimedia.Media.Core + * @param format pointer to an OH_AVFormat instance + * @param key key to write data + * @param value written data + * @return The return value is TRUE for success, FALSE for failure + * @since 9 + * @version 1.0 + */ +bool OH_AVFormat_SetIntValue(struct OH_AVFormat *format, const char *key, int32_t value); + +/** + * @brief Write Long data to OH_AVFormat + * @syscap SystemCapability.Multimedia.Media.Core + * @param format pointer to an OH_AVFormat instance + * @param key key to write data + * @param value written data + * @return The return value is TRUE for success, FALSE for failure + * @since 9 + * @version 1.0 + */ +bool OH_AVFormat_SetLongValue(struct OH_AVFormat *format, const char *key, int64_t value); + +/** + * @brief Write Float data to OH_AVFormat + * @syscap SystemCapability.Multimedia.Media.Core + * @param format pointer to an OH_AVFormat instance + * @param key key to write data + * @param value written data + * @return The return value is TRUE for success, FALSE for failure + * @since 9 + * @version 1.0 + */ +bool OH_AVFormat_SetFloatValue(struct OH_AVFormat *format, const char *key, float value); + +/** + * @brief Write Double data to OH_AVFormat + * @syscap SystemCapability.Multimedia.Media.Core + * @param format pointer to an OH_AVFormat instance + * @param key key to write data + * @param value written data + * @return The return value is TRUE for success, FALSE for failure + * @since 9 + * @version 1.0 + */ +bool OH_AVFormat_SetDoubleValue(struct OH_AVFormat *format, const char *key, double value); + +/** + * @brief Write String data to OH_AVFormat + * @syscap SystemCapability.Multimedia.Media.Core + * @param format pointer to an OH_AVFormat instance + * @param key key to write data + * @param value written data + * @return The return value is TRUE for success, FALSE for failure + * @since 9 + * @version 1.0 + */ +bool OH_AVFormat_SetStringValue(struct OH_AVFormat *format, const char *key, const char *value); + +/** + * @brief Write a block of data of a specified length to OH_AVFormat + * @syscap SystemCapability.Multimedia.Media.Core + * @param format pointer to an OH_AVFormat instance + * @param key key to write data + * @param addr written data addr + * @param size written data length + * @return The return value is TRUE for success, FALSE for failure + * @since 9 + * @version 1.0 + */ +bool OH_AVFormat_SetBuffer(struct OH_AVFormat *format, const char *key, const uint8_t *addr, size_t size); + +/** + * @brief Read Int data from OH_AVFormat + * @syscap SystemCapability.Multimedia.Media.Core + * @param format pointer to an OH_AVFormat instance + * @param key read key value + * @param out read data + * @return The return value is TRUE for success, FALSE for failure + * @since 9 + * @version 1.0 + */ +bool OH_AVFormat_GetIntValue(struct OH_AVFormat *format, const char *key, int32_t *out); + +/** + * @brief Read Long data from OH_AVFormat + * @syscap SystemCapability.Multimedia.Media.Core + * @param format pointer to an OH_AVFormat instance + * @param key read key value + * @param out read data + * @return The return value is TRUE for success, FALSE for failure + * @since 9 + * @version 1.0 + */ +bool OH_AVFormat_GetLongValue(struct OH_AVFormat *format, const char *key, int64_t *out); + +/** + * @brief Read Float data from OH_AVFormat + * @syscap SystemCapability.Multimedia.Media.Core + * @param format pointer to an OH_AVFormat instance + * @param key read key value + * @param out read data + * @return The return value is TRUE for success, FALSE for failure + * @since 9 + * @version 1.0 + */ +bool OH_AVFormat_GetFloatValue(struct OH_AVFormat *format, const char *key, float *out); + +/** + * @brief Read Double data from OH_AVFormat + * @syscap SystemCapability.Multimedia.Media.Core + * @param format pointer to an OH_AVFormat instance + * @param key read key value + * @param out read data + * @return The return value is TRUE for success, FALSE for failure + * @since 9 + * @version 1.0 + */ +bool OH_AVFormat_GetDoubleValue(struct OH_AVFormat *format, const char *key, double *out); + +/** + * @brief Read String data from OH_AVFormat + * @syscap SystemCapability.Multimedia.Media.Core + * @param format pointer to an OH_AVFormat instance + * @param key read key value + * @param out The read string pointer, the data life cycle pointed to is updated with GetString, + * and Format is destroyed. If the caller needs to hold it for a long time, it must copy the memory + * @return The return value is TRUE for success, FALSE for failure + * @since 9 + * @version 1.0 + */ +bool OH_AVFormat_GetStringValue(struct OH_AVFormat *format, const char *key, const char **out); + +/** + * @brief Read a block of data of specified length from OH_AVFormat + * @syscap SystemCapability.Multimedia.Media.Core + * @param format pointer to an OH_AVFormat instance + * @param key Key value for reading and writing data + * @param addr The life cycle is held by the format, with the destruction of the format, + * if the caller needs to hold it for a long time, it must copy the memory + * @param size Length of read and write data + * @return The return value is TRUE for success, FALSE for failure + * @since 9 + * @version 1.0 + */ +bool OH_AVFormat_GetBuffer(struct OH_AVFormat *format, const char *key, uint8_t **addr, size_t *size); + +/** + * @brief Output the information contained in OH_AVFormat as a string. + * @syscap SystemCapability.Multimedia.Media.Core + * @param format pointer to an OH_AVFormat instance + * @return Returns a string consisting of key and data + * @since 9 + * @version 1.0 + */ +const char *OH_AVFormat_DumpInfo(struct OH_AVFormat *format); + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVFORMAT_H \ No newline at end of file diff --git a/multimedia/av_codec/native_avmemory.h b/multimedia/av_codec/native_avmemory.h new file mode 100644 index 0000000000000000000000000000000000000000..a165d290a0a8048f3eefd92b111ab5385f4f49fc --- /dev/null +++ b/multimedia/av_codec/native_avmemory.h @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVMEMORY_H +#define NATIVE_AVMEMORY_H + +#include +#include "native_averrors.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OH_AVMemory OH_AVMemory; + +/** + * @brief Create an OH_AVMemory instance + * @syscap SystemCapability.Multimedia.Media.Core + * @param size the memory's size, bytes. + * @return Returns a pointer to an OH_AVMemory instance, needs to be freed by OH_AVMemory_Destroy. + * @since 10 + */ +OH_AVMemory *OH_AVMemory_Create(int32_t size); + +/** + * @brief Get the memory's virtual address + * @syscap SystemCapability.Multimedia.Media.Core + * @param mem Encapsulate OH_AVMemory structure instance pointer + * @return the memory's virtual address if the memory is valid, otherwise nullptr. + * @since 9 + * @version 1.0 + */ +uint8_t *OH_AVMemory_GetAddr(struct OH_AVMemory *mem); + +/** + * @brief Get the memory's size + * @syscap SystemCapability.Multimedia.Media.Core + * @param mem Encapsulate OH_AVMemory structure instance pointer + * @return the memory's size if the memory is valid, otherwise -1. + * @since 9 + * @version 1.0 + */ +int32_t OH_AVMemory_GetSize(struct OH_AVMemory *mem); + +/** + * @brief Clear the internal resources of the memory and destroy the memory instance + * @syscap SystemCapability.Multimedia.Media.Core + * @param mem Encapsulate OH_AVMemory structure instance pointer + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVMemory_Destroy(struct OH_AVMemory *mem); + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVMEMORY_H diff --git a/multimedia/av_codec/native_avmuxer.h b/multimedia/av_codec/native_avmuxer.h new file mode 100644 index 0000000000000000000000000000000000000000..ec7e647dcf0e8437393733f53722ddd1633b986e --- /dev/null +++ b/multimedia/av_codec/native_avmuxer.h @@ -0,0 +1,125 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVMUXER_H +#define NATIVE_AVMUXER_H + +#include +#include +#include "native_avcodec_base.h" +#include "native_averrors.h" +#include "native_avformat.h" +#include "native_avmemory.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OH_AVMuxer OH_AVMuxer; + +/** + * @brief Create an OH_AVMuxer instance by output file description and format. + * @syscap SystemCapability.Multimedia.Media.Muxer + * @param fd Must be opened with read and write permission. Caller is responsible for closing fd. + * @param format The output format is {@link OH_AVOutputFormat} . + * @return Returns a pointer to an OH_AVMuxer instance, needs to be freed by OH_AVMuxer_Destroy. + * @since 10 + */ +OH_AVMuxer *OH_AVMuxer_Create(int32_t fd, OH_AVOutputFormat format); + +/** + * @brief Set the rotation for output video playback. + * Note: This interface can only be called before OH_AVMuxer_Start. + * @syscap SystemCapability.Multimedia.Media.Muxer + * @param muxer Pointer to an OH_AVMuxer instance. + * @param rotation The supported angles are 0, 90, 180, and 270 degrees. + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVMuxer_SetRotation(OH_AVMuxer *muxer, int32_t rotation); + +/** + * @brief Add track format to the muxer. + * Note: This interface can only be called before OH_AVMuxer_Start. + * @syscap SystemCapability.Multimedia.Media.Muxer + * @param muxer Pointer to an OH_AVMuxer instance + * @param trackIndex The int32_t handle pointer used to get the track index for this newly added track, + * and it should be used in the OH_AVMuxer_WriteSample. The track index is greater than or equal to 0, + * others is error index. + * @param trackFormat OH_AVFormat handle pointer contain track format + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVMuxer_AddTrack(OH_AVMuxer *muxer, int32_t *trackIndex, OH_AVFormat *trackFormat); + +/** + * @brief Start the muxer. + * Note: This interface is called after OH_AVMuxer_AddTrack and before OH_AVMuxer_WriteSample. + * @syscap SystemCapability.Multimedia.Media.Muxer + * @param muxer Pointer to an OH_AVMuxer instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVMuxer_Start(OH_AVMuxer *muxer); + +/** + * @brief Write an encoded sample to the muxer. + * Note: This interface can only be called after OH_AVMuxer_Start and before OH_AVMuxer_Stop. The application needs to + * make sure that the samples are written to the right tacks. Also, it needs to make sure the samples for each track are + * written in chronological order. + * @syscap SystemCapability.Multimedia.Media.Muxer + * @param muxer Pointer to an OH_AVMuxer instance + * @param trackIndex The track index for this sample + * @param sample The encoded or demuxer sample + * @param info The buffer information related to this sample {@link OH_AVCodecBufferAttr} + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVMuxer_WriteSample(OH_AVMuxer *muxer, + uint32_t trackIndex, + OH_AVMemory *sample, + OH_AVCodecBufferAttr info); + +/** + * @brief Stop the muxer. + * Note: Once the muxer stops, it can not be restarted. + * @syscap SystemCapability.Multimedia.Media.Muxer + * @param muxer Pointer to an OH_AVMuxer instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVMuxer_Stop(OH_AVMuxer *muxer); + +/** + * @brief Clear the internal resources of the muxer and destroy the muxer instance + * @syscap SystemCapability.Multimedia.Media.Muxer + * @param muxer Pointer to an OH_AVMuxer instance + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 + */ +OH_AVErrCode OH_AVMuxer_Destroy(OH_AVMuxer *muxer); + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVMUXER_H \ No newline at end of file diff --git a/multimedia/av_codec/native_avsource.h b/multimedia/av_codec/native_avsource.h new file mode 100644 index 0000000000000000000000000000000000000000..fe6ab38dc93ce6f9de1db2b595df553f755986e4 --- /dev/null +++ b/multimedia/av_codec/native_avsource.h @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVSOURCE_H +#define NATIVE_AVSOURCE_H + +#include +#include "native_avcodec_base.h" +#include "native_averrors.h" +#include "native_avformat.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OH_AVSource OH_AVSource; + +/** + * @brief Creates an OH_AVSource instance that models the media at the URI. + * @syscap SystemCapability.Multimedia.Media.Spliter + * @param uri An URI for a remote media resource. + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 +*/ +OH_AVSource *OH_AVSource_CreateWithURI(char *uri); + +/** + * @brief Creates an OH_AVSource instance that models the media at the FileDescriptor. + * @syscap SystemCapability.Multimedia.Media.Spliter + * @param fd The fileDescriptor of data source. + * @param offset The offset into the file to start reading. + * @param size The file size in bytes. + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 +*/ +OH_AVSource *OH_AVSource_CreateWithFD(int32_t fd, int64_t offset, int64_t size); + +/** + * @brief Destroy the OH_AVSource instance and free the internal resources. + * @syscap SystemCapability.Multimedia.Media.Spliter + * @param source Pointer to an OH_AVSource instance. + * @return Returns AV_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVErrCode} + * @since 10 +*/ +OH_AVErrCode OH_AVSource_Destroy(OH_AVSource *source); + +/** + * @brief Get the format info of source. + * @syscap SystemCapability.Multimedia.Media.Spliter + * @param source Pointer to an OH_AVSource instance. + * @return Returns the source's format info. + * @since 10 +*/ +OH_AVFormat *OH_AVSource_GetSourceFormat(OH_AVSource *source); + +/** + * @brief Get the format info of track. + * @syscap SystemCapability.Multimedia.Media.Spliter + * @param source Pointer to an OH_AVSource instance. + * @param trackIndex The track index to get format. + * @return Returns the track's format info. + * @since 10 +*/ +OH_AVFormat *OH_AVSource_GetTrackFormat(OH_AVSource *source, uint32_t trackIndex); + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVSOURCE_H \ No newline at end of file diff --git a/multimedia/av_codec/video_decoder/BUILD.gn b/multimedia/av_codec/video_decoder/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..155f161c3c00b1e5c0a27456508e50825b5e89dc --- /dev/null +++ b/multimedia/av_codec/video_decoder/BUILD.gn @@ -0,0 +1,32 @@ +# Copyright (C) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") +import("//foundation/multimedia/av_codec/config.gni") +ohos_ndk_headers("native_media_vdec_header") { + dest_dir = "$ndk_headers_out_dir/multimedia/player_framework" + sources = + [ "$av_codec_root_dir/interfaces/kits/c/native_avcodec_videodecoder.h" ] +} + +ohos_ndk_library("libnative_media_vdec") { + ndk_description_file = "./libnative_media_vdec.ndk.json" + min_compact_version = "1" + output_name = "native_media_vdec" + output_extension = "so" + + system_capability = "SystemCapability.Multimedia.Media.VideoDecoder" + system_capability_headers = + [ "multimedia/player_framework/native_avcodec_videodecoder.h" ] +} diff --git a/multimedia/av_codec/video_decoder/libnative_media_vdec.ndk.json b/multimedia/av_codec/video_decoder/libnative_media_vdec.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..7e6fd7d7a269e611b4e2ab3781005ca759dc527b --- /dev/null +++ b/multimedia/av_codec/video_decoder/libnative_media_vdec.ndk.json @@ -0,0 +1,19 @@ +[ + { "name": "OH_VideoDecoder_CreateByMime" }, + { "name": "OH_VideoDecoder_CreateByName" }, + { "name": "OH_VideoDecoder_Destroy" }, + { "name": "OH_VideoDecoder_SetCallback" }, + { "name": "OH_VideoDecoder_SetSurface" }, + { "name": "OH_VideoDecoder_Configure" }, + { "name": "OH_VideoDecoder_Prepare" }, + { "name": "OH_VideoDecoder_Start" }, + { "name": "OH_VideoDecoder_Stop" }, + { "name": "OH_VideoDecoder_Flush" }, + { "name": "OH_VideoDecoder_Reset" }, + { "name": "OH_VideoDecoder_GetOutputDescription" }, + { "name": "OH_VideoDecoder_SetParameter" }, + { "name": "OH_VideoDecoder_PushInputData" }, + { "name": "OH_VideoDecoder_RenderOutputData" }, + { "name": "OH_VideoDecoder_FreeOutputData" }, + { "name": "OH_VideoDecoder_IsValid" } +] diff --git a/multimedia/av_codec/video_encoder/BUILD.gn b/multimedia/av_codec/video_encoder/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..9e38f860f598b5841131889a0edc2a370ed29671 --- /dev/null +++ b/multimedia/av_codec/video_encoder/BUILD.gn @@ -0,0 +1,32 @@ +# Copyright (C) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") +import("//foundation/multimedia/av_codec/config.gni") +ohos_ndk_headers("native_media_venc_header") { + dest_dir = "$ndk_headers_out_dir/multimedia/player_framework" + sources = + [ "$av_codec_root_dir/interfaces/kits/c/native_avcodec_videoencoder.h" ] +} + +ohos_ndk_library("libnative_media_venc") { + ndk_description_file = "./libnative_media_venc.ndk.json" + min_compact_version = "1" + output_name = "native_media_venc" + output_extension = "so" + + system_capability = "SystemCapability.Multimedia.Media.VideoEncoder" + system_capability_headers = + [ "multimedia/player_framework/native_avcodec_videoencoder.h" ] +} diff --git a/multimedia/av_codec/video_encoder/libnative_media_venc.ndk.json b/multimedia/av_codec/video_encoder/libnative_media_venc.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..28febaa454ae601d1cdf476b495c4eed3892d950 --- /dev/null +++ b/multimedia/av_codec/video_encoder/libnative_media_venc.ndk.json @@ -0,0 +1,20 @@ +[ + { "name": "OH_VideoEncoder_CreateByMime" }, + { "name": "OH_VideoEncoder_CreateByName" }, + { "name": "OH_VideoEncoder_Destroy" }, + { "name": "OH_VideoEncoder_SetCallback" }, + { "name": "OH_VideoEncoder_Configure" }, + { "name": "OH_VideoEncoder_Prepare" }, + { "name": "OH_VideoEncoder_Start" }, + { "name": "OH_VideoEncoder_Stop" }, + { "name": "OH_VideoEncoder_Flush" }, + { "name": "OH_VideoEncoder_Reset" }, + { "name": "OH_VideoEncoder_GetOutputDescription" }, + { "name": "OH_VideoEncoder_SetParameter" }, + { "name": "OH_VideoEncoder_GetSurface" }, + { "name": "OH_VideoEncoder_FreeOutputData" }, + { "name": "OH_VideoEncoder_NotifyEndOfStream" }, + { "name": "OH_VideoEncoder_PushInputData" }, + { "name": "OH_VideoEncoder_GetInputDescription" }, + { "name": "OH_VideoEncoder_IsValid" } +] diff --git a/multimedia/image_framework/BUILD.gn b/multimedia/image_framework/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..833b5fb732632ab0fedfef405157769e9f766cc3 --- /dev/null +++ b/multimedia/image_framework/BUILD.gn @@ -0,0 +1,64 @@ +# Copyright (C) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +ohos_ndk_library("libpixelmap_ndk") { + ndk_description_file = "./libimage_pixelmap_napi.ndk.json" + min_compact_version = "1" + output_name = "pixelmap_ndk" +} + +ohos_ndk_headers("image_header") { + dest_dir = "$ndk_headers_out_dir/multimedia/image_framework" + sources = [ + "./include/image_pixel_map_mdk.h", + "./include/image_pixel_map_napi.h", + ] +} + +ohos_ndk_library("libimage_ndk") { + ndk_description_file = "./libimage_ndk.ndk.json" + min_compact_version = "1" + output_name = "image_ndk" +} + +ohos_ndk_headers("image_ndk_header") { + dest_dir = "$ndk_headers_out_dir/multimedia/image_framework" + sources = [ + "./include/image_mdk.h", + "./include/image_mdk_common.h", + ] +} + +ohos_ndk_library("libimage_receiver_ndk") { + ndk_description_file = "./libimage_receiver_ndk.ndk.json" + min_compact_version = "1" + output_name = "image_receiver_ndk" +} + +ohos_ndk_headers("image_receiver_ndk_header") { + dest_dir = "$ndk_headers_out_dir/multimedia/image_framework" + sources = [ "./include/image_receiver_mdk.h" ] +} + +ohos_ndk_library("libimage_source_ndk") { + ndk_description_file = "./libimage_source_ndk.ndk.json" + min_compact_version = "1" + output_name = "image_source_ndk" +} + +ohos_ndk_headers("image_source_ndk_header") { + dest_dir = "$ndk_headers_out_dir/multimedia/image_framework" + sources = [ "./include/image_source_mdk.h" ] +} diff --git a/multimedia/image_framework/include/image_mdk.h b/multimedia/image_framework/include/image_mdk.h new file mode 100644 index 0000000000000000000000000000000000000000..cb1aa629a37a0b2fe1971bfe4a55a71925517b5e --- /dev/null +++ b/multimedia/image_framework/include/image_mdk.h @@ -0,0 +1,221 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup image + * @{ + * + * @brief Provides APIs for access to the image interface. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 2.0 + */ + +/** + * @file image_mdk.h + * + * @brief Declares functions that access the image rectangle, size, format, and component data. + * Need link libimagendk.z.so + * + * @since 10 + * @version 2.0 + */ + +#ifndef INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_MDK_H_ +#define INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_MDK_H_ +#include "napi/native_api.h" +#include "image_mdk_common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct ImageNative_; + +/** + * @brief Defines an image object at the native layer for the image interface. + * + * @since 10 + * @version 2.0 + */ +typedef struct ImageNative_ ImageNative; + +/** + * @brief Enumerates the image formats. + * + * @since 10 + * @version 2.0 + */ +enum { + /** YCbCr422 semi-planar format. */ + OHOS_IMAGE_FORMAT_YCBCR_422_SP = 1000, + /** JPEG encoding format. */ + OHOS_IMAGE_FORMAT_JPEG = 2000 +}; + +/** + * @brief Enumerates the image components. + * + * @since 10 + * @version 2.0 + */ +enum { + /** Luminance component. */ + OHOS_IMAGE_COMPONENT_FORMAT_YUV_Y = 1, + /** Chrominance component - blue projection. */ + OHOS_IMAGE_COMPONENT_FORMAT_YUV_U = 2, + /** Chrominance component - red projection. */ + OHOS_IMAGE_COMPONENT_FORMAT_YUV_V = 3, + /** JPEG format. */ + OHOS_IMAGE_COMPONENT_FORMAT_JPEG = 4, +}; + +/** + * @brief Defines the information about an image rectangle. + * + * @since 10 + * @version 2.0 + */ +struct OhosImageRect { + /** X coordinate of the rectangle. */ + int32_t x; + /** Y coordinate of the rectangle. */ + int32_t y; + /** Width of the rectangle, in pixels. */ + int32_t width; + /** Height of the rectangle, in pixels. */ + int32_t height; +}; + +/** + * @brief Defines the image composition information. + * + * @since 10 + * @version 2.0 + */ +struct OhosImageComponent { + /** Buffer that stores the pixel data. */ + uint8_t* byteBuffer; + /** Size of the pixel data in the memory. */ + size_t size; + /** Type of the pixel data. */ + int32_t componentType; + /** Row stride of the pixel data. */ + int32_t rowStride; + /** Pixel stride of the pixel data */ + int32_t pixelStride; +}; + +/** + * @brief Parses an {@link ImageNative} object at the native layer from a JavaScript native API image object. + * + * @param env Indicates the pointer to the Java Native Interface (JNI) environment. + * @param source Indicates a JavaScript native API image object. + * @return Returns an {@link ImageNative} pointer object if the operation is successful + * returns a null pointer otherwise. + * @see ImageNative, OH_Image_Release + * @since 10 + * @version 2.0 + */ +ImageNative* OH_Image_InitImageNative(napi_env env, napi_value source); + +/** + * @brief Obtains {@link OhosImageRect} of an {@link ImageNative} at the native layer. + * + * @param native Indicates the pointer to an {@link ImageNative} object at the native layer. + * @param rect Indicates the pointer to the {@link OhosImageRect} object obtained. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * @see ImageNative, OhosImageRect + * @since 10 + * @version 2.0 + */ +int32_t OH_Image_ClipRect(const ImageNative* native, struct OhosImageRect* rect); + +/** + * @brief Obtains {@link OhosImageSize} of an {@link ImageNative} object at the native layer. + * + * @param native Indicates the pointer to an {@link ImageNative} object at the native layer. + * @param size Indicates the pointer to the {@link OhosImageSize} object obtained. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * @see ImageNative, OhosImageSize + * @since 10 + * @version 2.0 + */ +int32_t OH_Image_Size(const ImageNative* native, struct OhosImageSize* size); + +/** + * @brief Obtains the image format of an {@link ImageNative} object at the native layer. + * + * @param native Indicates the pointer to an {@link ImageNative} object at the native layer. + * @param format Indicates the pointer to the image format obtained. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * @see ImageNative + * @since 10 + * @version 2.0 + */ +int32_t OH_Image_Format(const ImageNative* native, int32_t* format); + +/** + * @brief Obtains {@link OhosImageComponent} of an {@link ImageNative} object at the native layer. + * + * @param native Indicates the pointer to an {@link ImageNative} object at the native layer. + * @param componentType Indicates the type of the required component. + * @param componentNative Indicates the pointer to the {@link OhosImageComponent} object obtained. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * @see ImageNative, OhosImageComponent + * @since 10 + * @version 2.0 + */ +int32_t OH_Image_GetComponent(const ImageNative* native, + int32_t componentType, struct OhosImageComponent* componentNative); + +/** + * @brief Releases an {@link ImageNative} object at the native layer. + * Note: This API is not used to release a JavaScript native API Image object. + * It is used to release the object {@link ImageNative} at the native layer + * parsed by calling {@link OH_Image_InitImageNative}. + * + * @param native Indicates the pointer to an {@link ImageNative} object at the native layer. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * @see ImageNative, OH_Image_InitImageNative + * @since 10 + * @version 2.0 + */ +int32_t OH_Image_Release(ImageNative* native); +#ifdef __cplusplus +}; +#endif +/** @} */ +#endif // INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_MDK_H_ diff --git a/multimedia/image_framework/include/image_mdk_common.h b/multimedia/image_framework/include/image_mdk_common.h new file mode 100644 index 0000000000000000000000000000000000000000..65fe6088571c846f5aa15c6fb609885d596bef93 --- /dev/null +++ b/multimedia/image_framework/include/image_mdk_common.h @@ -0,0 +1,180 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup image + * @{ + * + * @brief Provides APIs for access to the image interface. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 2.0 + */ + +/** + * @file image_mdk_common.h + * + * @brief Declares the common enums and structs used by the image interface. + * + * @since 10 + * @version 2.0 + */ + +#ifndef INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_COMMON_H_ +#define INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_COMMON_H_ +#include + +#ifdef __cplusplus +extern "C" { +#endif +#define IMAGE_RESULT_BASE 62980096 +/** + * @brief Enumerates the return values that may be used by the interface. + * + * @since 10 + * @version 2.0 + */ +typedef enum { + IMAGE_RESULT_SUCCESS = 0, // Operation success + IMAGE_RESULT_BAD_PARAMETER = -1, // Invalid parameter + IMAGE_RESULT_IMAGE_RESULT_BASE = IMAGE_RESULT_BASE, // Operation failed + IMAGE_RESULT_ERR_IPC = IMAGE_RESULT_BASE + 1, // ipc error + IMAGE_RESULT_ERR_SHAMEM_NOT_EXIST = IMAGE_RESULT_BASE + 2, // sharememory error + IMAGE_RESULT_ERR_SHAMEM_DATA_ABNORMAL = IMAGE_RESULT_BASE + 3, // sharememory data abnormal + IMAGE_RESULT_DECODE_ABNORMAL = IMAGE_RESULT_BASE + 4, // image decode error + IMAGE_RESULT_DATA_ABNORMAL = IMAGE_RESULT_BASE + 5, // image input data error + IMAGE_RESULT_MALLOC_ABNORMAL = IMAGE_RESULT_BASE + 6, // image malloc error + IMAGE_RESULT_DATA_UNSUPPORT = IMAGE_RESULT_BASE + 7, // image type unsupported + IMAGE_RESULT_INIT_ABNORMAL = IMAGE_RESULT_BASE + 8, // image init error + IMAGE_RESULT_GET_DATA_ABNORMAL = IMAGE_RESULT_BASE + 9, // image get data error + IMAGE_RESULT_TOO_LARGE = IMAGE_RESULT_BASE + 10, // image data too large + IMAGE_RESULT_TRANSFORM = IMAGE_RESULT_BASE + 11, // image transform error + IMAGE_RESULT_COLOR_CONVERT = IMAGE_RESULT_BASE + 12, // image color convert error + IMAGE_RESULT_CROP = IMAGE_RESULT_BASE + 13, // crop error + IMAGE_RESULT_SOURCE_DATA = IMAGE_RESULT_BASE + 14, // image source data error + IMAGE_RESULT_SOURCE_DATA_INCOMPLETE = IMAGE_RESULT_BASE + 15, // image source data incomplete + IMAGE_RESULT_MISMATCHED_FORMAT = IMAGE_RESULT_BASE + 16, // image mismatched format + IMAGE_RESULT_UNKNOWN_FORMAT = IMAGE_RESULT_BASE + 17, // image unknown format + IMAGE_RESULT_SOURCE_UNRESOLVED = IMAGE_RESULT_BASE + 18, // image source unresolved + IMAGE_RESULT_INVALID_PARAMETER = IMAGE_RESULT_BASE + 19, // image invalid parameter + IMAGE_RESULT_DECODE_FAILED = IMAGE_RESULT_BASE + 20, // decode fail + IMAGE_RESULT_PLUGIN_REGISTER_FAILED = IMAGE_RESULT_BASE + 21, // register plugin fail + IMAGE_RESULT_PLUGIN_CREATE_FAILED = IMAGE_RESULT_BASE + 22, // create plugin fail + IMAGE_RESULT_ENCODE_FAILED = IMAGE_RESULT_BASE + 23, // image encode fail + IMAGE_RESULT_ADD_PIXEL_MAP_FAILED = IMAGE_RESULT_BASE + 24, // image add pixel map fail + IMAGE_RESULT_HW_DECODE_UNSUPPORT = IMAGE_RESULT_BASE + 25, // image hardware decode unsupported + IMAGE_RESULT_DECODE_HEAD_ABNORMAL = IMAGE_RESULT_BASE + 26, // image decode head error + IMAGE_RESULT_DECODE_EXIF_UNSUPPORT = IMAGE_RESULT_BASE + 27, // image decode exif unsupport + IMAGE_RESULT_PROPERTY_NOT_EXIST = IMAGE_RESULT_BASE + 28, // image property not exist + + IMAGE_RESULT_MEDIA_DATA_UNSUPPORT = IMAGE_RESULT_BASE + 30, // media type unsupported + IMAGE_RESULT_MEDIA_TOO_LARGE = IMAGE_RESULT_BASE + 31, // media data too large + IMAGE_RESULT_MEDIA_MALLOC_FAILED = IMAGE_RESULT_BASE + 32, // media malloc memory failed + IMAGE_RESULT_MEDIA_END_OF_STREAM = IMAGE_RESULT_BASE + 33, // media end of stream error + IMAGE_RESULT_MEDIA_IO_ABNORMAL = IMAGE_RESULT_BASE + 34, // media io error + IMAGE_RESULT_MEDIA_MALFORMED = IMAGE_RESULT_BASE + 35, // media malformed error + IMAGE_RESULT_MEDIA_BUFFER_TOO_SMALL = IMAGE_RESULT_BASE + 36, // media buffer too small error + IMAGE_RESULT_MEDIA_OUT_OF_RANGE = IMAGE_RESULT_BASE + 37, // media out of range error + IMAGE_RESULT_MEDIA_STATUS_ABNORMAL = IMAGE_RESULT_BASE + 38, // media status abnormal error + IMAGE_RESULT_MEDIA_VALUE_INVALID = IMAGE_RESULT_BASE + 39, // media value invalid + IMAGE_RESULT_MEDIA_NULL_POINTER = IMAGE_RESULT_BASE + 40, // media error operation + IMAGE_RESULT_MEDIA_INVALID_OPERATION = IMAGE_RESULT_BASE + 41, // media invalid operation + IMAGE_RESULT_MEDIA_ERR_PLAYER_NOT_INIT = IMAGE_RESULT_BASE + 42, // media init error + IMAGE_RESULT_MEDIA_EARLY_PREPARE = IMAGE_RESULT_BASE + 43, // media early prepare + IMAGE_RESULT_MEDIA_SEEK_ERR = IMAGE_RESULT_BASE + 44, // media rewind error + IMAGE_RESULT_MEDIA_PERMISSION_DENIED = IMAGE_RESULT_BASE + 45, // media permission denied + IMAGE_RESULT_MEDIA_DEAD_OBJECT = IMAGE_RESULT_BASE + 46, // media dead object + IMAGE_RESULT_MEDIA_TIMED_OUT = IMAGE_RESULT_BASE + 47, // media time out + IMAGE_RESULT_MEDIA_TRACK_NOT_ALL_SUPPORTED = IMAGE_RESULT_BASE + 48, // media track subset support + IMAGE_RESULT_MEDIA_ADAPTER_INIT_FAILED = IMAGE_RESULT_BASE + 49, // media recorder adapter init failed + IMAGE_RESULT_MEDIA_WRITE_PARCEL_FAIL = IMAGE_RESULT_BASE + 50, // write parcel failed + IMAGE_RESULT_MEDIA_READ_PARCEL_FAIL = IMAGE_RESULT_BASE + 51, // read parcel failed + IMAGE_RESULT_MEDIA_NO_AVAIL_BUFFER = IMAGE_RESULT_BASE + 52, // read parcel failed + IMAGE_RESULT_MEDIA_INVALID_PARAM = IMAGE_RESULT_BASE + 53, // media function found invalid param + IMAGE_RESULT_MEDIA_CODEC_ADAPTER_NOT_EXIST = IMAGE_RESULT_BASE + 54, // media zcodec adapter not init + IMAGE_RESULT_MEDIA_CREATE_CODEC_ADAPTER_FAILED = IMAGE_RESULT_BASE + 55, // media create zcodec adapter failed + IMAGE_RESULT_MEDIA_CODEC_ADAPTER_NOT_INIT = IMAGE_RESULT_BASE + 56, // media adapter inner not init + IMAGE_RESULT_MEDIA_ZCODEC_CREATE_FAILED = IMAGE_RESULT_BASE + 57, // media adapter inner not init + IMAGE_RESULT_MEDIA_ZCODEC_NOT_EXIST = IMAGE_RESULT_BASE + 58, // media zcodec not exist + IMAGE_RESULT_MEDIA_JNI_CLASS_NOT_EXIST = IMAGE_RESULT_BASE + 59, // media jni class not found + IMAGE_RESULT_MEDIA_JNI_METHOD_NOT_EXIST = IMAGE_RESULT_BASE + 60, // media jni method not found + IMAGE_RESULT_MEDIA_JNI_NEW_OBJ_FAILED = IMAGE_RESULT_BASE + 61, // media jni obj new failed + IMAGE_RESULT_MEDIA_JNI_COMMON_ERROR = IMAGE_RESULT_BASE + 62, // media jni normal error + IMAGE_RESULT_MEDIA_DISTRIBUTE_NOT_SUPPORT = IMAGE_RESULT_BASE + 63, // media distribute not support + IMAGE_RESULT_MEDIA_SOURCE_NOT_SET = IMAGE_RESULT_BASE + 64, // media source not set + IMAGE_RESULT_MEDIA_RTSP_ADAPTER_NOT_INIT = IMAGE_RESULT_BASE + 65, // media rtsp adapter not init + IMAGE_RESULT_MEDIA_RTSP_ADAPTER_NOT_EXIST = IMAGE_RESULT_BASE + 66, // media rtsp adapter not exist + IMAGE_RESULT_MEDIA_RTSP_SURFACE_UNSUPPORT = IMAGE_RESULT_BASE + 67, // media rtsp surface not support + IMAGE_RESULT_MEDIA_RTSP_CAPTURE_NOT_INIT = IMAGE_RESULT_BASE + 68, // media rtsp capture init error + IMAGE_RESULT_MEDIA_RTSP_SOURCE_URL_INVALID = IMAGE_RESULT_BASE + 69, // media rtsp source url invalid + IMAGE_RESULT_MEDIA_RTSP_VIDEO_TRACK_NOT_FOUND = IMAGE_RESULT_BASE + 70, // media rtsp can't find video track + IMAGE_RESULT_MEDIA_RTSP_CAMERA_NUM_REACH_MAX = IMAGE_RESULT_BASE + 71, // rtsp camera num reach to max num + IMAGE_RESULT_MEDIA_SET_VOLUME = IMAGE_RESULT_BASE + 72, // media set volume error + IMAGE_RESULT_MEDIA_NUMBER_OVERFLOW = IMAGE_RESULT_BASE + 73, // media number operation overflow + IMAGE_RESULT_MEDIA_DIS_PLAYER_UNSUPPORTED = IMAGE_RESULT_BASE + 74, // media distribute player unsupporteded + IMAGE_RESULT_MEDIA_DENCODE_ICC_FAILED = IMAGE_RESULT_BASE + 75, // image dencode ICC fail + IMAGE_RESULT_MEDIA_ENCODE_ICC_FAILED = IMAGE_RESULT_BASE + 76, // image encode ICC fail + + IMAGE_RESULT_MEDIA_READ_PIXELMAP_FAILED = IMAGE_RESULT_BASE + 150, // read pixelmap failed + IMAGE_RESULT_MEDIA_WRITE_PIXELMAP_FAILED = IMAGE_RESULT_BASE + 151, // write pixelmap failed + IMAGE_RESULT_MEDIA_PIXELMAP_NOT_ALLOW_MODIFY = IMAGE_RESULT_BASE + 152, // pixelmap not allow modify + IMAGE_RESULT_MEDIA_CONFIG_FAILED = IMAGE_RESULT_BASE + 153, // config error + IMAGE_RESULT_JNI_ENV_ABNORMAL = IMAGE_RESULT_BASE + 154, // Abnormal JNI environment + IMAGE_RESULT_SURFACE_GRALLOC_BUFFER_FAILED = IMAGE_RESULT_BASE + 155, // surface gralloc buffer failed + IMAGE_RESULT_CREATE_SURFACE_FAILED = IMAGE_RESULT_BASE + 156, // create surface failed + IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED = IMAGE_RESULT_BASE + 157, // Failed to obtain parameters for surface + IMAGE_RESULT_GET_SURFACE_FAILED = IMAGE_RESULT_BASE + 158, // get sufrace failed + IMAGE_RESULT_SURFACE_ACQUIRE_BUFFER_FAILED = IMAGE_RESULT_BASE + 159, // Acquire Buffer failed + IMAGE_RESULT_SURFACE_REQUEST_BUFFER_FAILED = IMAGE_RESULT_BASE + 160, // request Buffer failed + IMAGE_RESULT_REGISTER_LISTENER_FAILED = IMAGE_RESULT_BASE + 161, // Failed to register listener + IMAGE_RESULT_REGISTER_BUFFER_FAILED = IMAGE_RESULT_BASE + 162, // Failed to register buffer + IMAGE_RESULT_FREAD_FAILED = IMAGE_RESULT_BASE + 163, // read file failed + IMAGE_RESULT_PEEK_FAILED = IMAGE_RESULT_BASE + 164, // peek file failed + IMAGE_RESULT_SEEK_FAILED = IMAGE_RESULT_BASE + 165, // seek file failed + IMAGE_RESULT_STREAM_SIZE_ERROR = IMAGE_RESULT_BASE + 166, // stream bad + IMAGE_RESULT_FILE_FD_ERROR = IMAGE_RESULT_BASE + 167, // file fd is bad + IMAGE_RESULT_FILE_DAMAGED = IMAGE_RESULT_BASE + 168, // file damaged + IMAGE_RESULT_CREATE_DECODER_FAILED = IMAGE_RESULT_BASE + 169, // create decoder failed + IMAGE_RESULT_CREATE_ENCODER_FAILED = IMAGE_RESULT_BASE + 170, // create encoder failed + IMAGE_RESULT_CHECK_FORMAT_ERROR = IMAGE_RESULT_BASE + 171, // check format failed + IMAGE_RESULT_THIRDPART_SKIA_ERROR = IMAGE_RESULT_BASE + 172, // skia error + IMAGE_RESULT_HW_DECODE_FAILED = IMAGE_RESULT_BASE + 173, // hard decode failed + IMAGE_RESULT_ALLOCATER_TYPE_ERROR = IMAGE_RESULT_BASE + 174, // hard decode failed + IMAGE_RESULT_ALPHA_TYPE_ERROR = IMAGE_RESULT_BASE + 175, // hard decode failed + IMAGE_RESULT_INDEX_INVALID = IMAGE_RESULT_BASE + 176, // invalid index + + IMAGE_RESULT_MEDIA_UNKNOWN = IMAGE_RESULT_BASE + 200, // media unknown error +} IRNdkErrCode; + +/** + * @brief Defines the image size. + * + * @since 10 + * @version 2.0 + */ +struct OhosImageSize { + /** Image width, in pixels. */ + int32_t width; + /** Image height, in pixels. */ + int32_t height; +}; + +#ifdef __cplusplus +}; +#endif +/** @} */ + +#endif // INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_COMMON_H_ \ No newline at end of file diff --git a/multimedia/image_framework/include/image_pixel_map_mdk.h b/multimedia/image_framework/include/image_pixel_map_mdk.h new file mode 100644 index 0000000000000000000000000000000000000000..cd511ca30a8a73080a93f7c7c150b5a578679b9b --- /dev/null +++ b/multimedia/image_framework/include/image_pixel_map_mdk.h @@ -0,0 +1,615 @@ +/* + * Copyright (C) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup image + * @{ + * + * @brief Provides APIs for obtaining pixel map data and information. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 1.0 + */ + +/** + * @file image_pixel_map_mdk.h + * + * @brief Declares the APIs that can lock, access, and unlock a pixel map. + * Need link libpixelmapndk.z.so + * + * @since 10 + * @version 1.0 + */ + +#ifndef INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_PIXEL_MAP_MDK_H_ +#define INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_PIXEL_MAP_MDK_H_ +#include +#include "napi/native_api.h" +#include "image_mdk_common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Defines the native pixel map information. + * @since 10 + * @version 1.0 + */ +struct NativePixelMap_; + +/** + * @brief Defines the data type name of the native pixel map. + * @since 10 + * @version 1.0 + */ +typedef struct NativePixelMap_ NativePixelMap; + +/** + * @brief Defines the pixel map information. + * + * @since 10 + * @version 1.0 + */ +typedef struct OhosPixelMapInfos { + /** Image width, in pixels. */ + uint32_t width; + /** Image height, in pixels. */ + uint32_t height; + /** Number of bytes per row. */ + uint32_t rowSize; + /** Pixel format. */ + int32_t pixelFormat; +} OhosPixelMapInfos; + +/** + * @brief Enumerates the pixel map alpha types. + * + * @since 10 + * @version 1.0 + */ +enum { + /** + * Unknown format. + */ + OHOS_PIXEL_MAP_ALPHA_TYPE_UNKNOWN = 0, + /** + * Opaque format. + */ + OHOS_PIXEL_MAP_ALPHA_TYPE_OPAQUE = 1, + /** + * Premultiplied format. + */ + OHOS_PIXEL_MAP_ALPHA_TYPE_PREMUL = 2, + /** + * Unpremultiplied format. + */ + OHOS_PIXEL_MAP_ALPHA_TYPE_UNPREMUL = 3 +}; + +/** + * @brief Enumerates the pixel map editing types. + * + * @since 10 + * @version 1.0 + */ +enum { + /** + * Read-only. + */ + OHOS_PIXEL_MAP_READ_ONLY = 0, + /** + * Editable. + */ + OHOS_PIXEL_MAP_EDITABLE = 1, +}; + +/** + * @brief Defines the options used for creating a pixel map. + * + * @since 10 + * @version 1.0 + */ +struct OhosPixelMapCreateOps { + /** Image width, in pixels. */ + uint32_t width; + /** Image height, in pixels. */ + uint32_t height; + /** Image format. */ + int32_t pixelFormat; + /** Editing type of the image. */ + uint32_t editable; + /** Alpha type of the image. */ + uint32_t alphaType; + /** Scale mode of the image. */ + uint32_t scaleMode; +}; + +/** + * @brief Creates a PixelMap object. + * + * @param env Indicates the NAPI environment pointer. + * @param info Indicates the options for setting the PixelMap object. + * @param buf Indicates the pointer to the buffer of the image. + * @param len Indicates the image size. + * @param res Indicates the pointer to the PixelMap object at the application layer. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_HEAD_ABNORMAL - if image decode head error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_DECODER_FAILED - if create decoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_ENCODER_FAILED - if create encoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CHECK_FORMAT_ERROR - if check format failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_NOT_EXIST - if sharememory error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_DATA_ABNORMAL - if sharememory data abnormal. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_ABNORMAL - if image decode error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MALLOC_ABNORMAL - if image malloc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INIT_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CROP - if crop error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ENCODE_FAILED - if image add pixel map fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_HW_DECODE_UNSUPPORT - if image hardware decode unsupported. + * returns {@link IRNdkErrCode} IMAGE_RESULT_HW_DECODE_FAILED - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_IPC - if ipc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALPHA_TYPE_ERROR - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALLOCATER_TYPE_ERROR - if hard decode failed. + * @see CreatePixelMap + * @since 10 + * @version 1.0 + */ +int32_t OH_PixelMap_CreatePixelMap(napi_env env, OhosPixelMapCreateOps info, + void* buf, size_t len, napi_value* res); + +/** + * @brief Creates a PixelMap object that contains only alpha channel information. + * + * @param env Indicates the NAPI environment pointer. + * @param source Indicates the options for setting the PixelMap object. + * @param alpha Indicates the pointer to the alpha channel. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_HEAD_ABNORMAL - if image decode head error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_DECODER_FAILED - if create decoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_ENCODER_FAILED - if create encoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CHECK_FORMAT_ERROR - if check format failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_NOT_EXIST - if sharememory error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_DATA_ABNORMAL - if sharememory data abnormal. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_ABNORMAL - if image decode error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MALLOC_ABNORMAL - if image malloc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INIT_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CROP - if crop error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ENCODE_FAILED - if image add pixel map fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_HW_DECODE_UNSUPPORT - if image hardware decode unsupported. + * returns {@link IRNdkErrCode} IMAGE_RESULT_HW_DECODE_FAILED - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_IPC - if ipc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALPHA_TYPE_ERROR - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALLOCATER_TYPE_ERROR - if hard decode failed. + * @see CreateAlphaPixelMap + * @since 10 + * @version 1.0 + */ +int32_t OH_PixelMap_CreateAlphaPixelMap(napi_env env, napi_value source, napi_value* alpha); + +/** + * @brief Initializes a PixelMap object. + * + * @param env Indicates the NAPI environment pointer. + * @param source Indicates the options for setting the PixelMap object. + * @return Returns a pointer to the NativePixelMap object + * if the operation is successful; returns nullptr otherwise. + * @see InitNativePixelMap + * @since 10 + * @version 1.0 + */ +NativePixelMap* OH_PixelMap_InitNativePixelMap(napi_env env, napi_value source); + +/** + * @brief Obtains the number of bytes per row of a PixelMap object. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @param num Indicates the pointer to the number of bytes per row of the PixelMap object. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * @see GetBytesNumberPerRow + * @since 10 + * @version 1.0 + */ +int32_t OH_PixelMap_GetBytesNumberPerRow(const NativePixelMap* native, int32_t* num); + +/** + * @brief Checks whether a PixelMap object is editable. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @param editable Indicates the pointer to the editing type of the PixelMap object. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * @see GetIsEditable + * @since 10 + * @version 1.0 + */ +int32_t OH_PixelMap_GetIsEditable(const NativePixelMap* native, int32_t* editable); + +/** + * @brief Checks whether a PixelMap object supports alpha channels. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @param alpha Indicates the pointer to the support for alpha channels. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * @see IsSupportAlpha + * @since 10 + * @version 1.0 + */ +int32_t OH_PixelMap_IsSupportAlpha(const NativePixelMap* native, int32_t* alpha); + +/** + * @brief Sets an alpha channel for a PixelMap object. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @param alpha Indicates the alpha channel to set. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * @see SetAlphaAble + * @since 10 + * @version 1.0 + */ +int32_t OH_PixelMap_SetAlphaAble(const NativePixelMap* native, int32_t alpha); + +/** + * @brief Obtains the pixel density of a PixelMap object. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @param density Indicates the pointer to the pixel density. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * @see GetDensity + * @since 10 + * @version 1.0 + */ +int32_t OH_PixelMap_GetDensity(const NativePixelMap* native, int32_t* density); + +/** + * @brief Sets the pixel density for a PixelMap object. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @param density Indicates the pixel density to set. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * @see GetDensity + * @since 10 + * @version 1.0 + */ +int32_t OH_PixelMap_SetDensity(const NativePixelMap* native, int32_t density); + +/** + * @brief Sets the opacity for a PixelMap object. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @param opacity Indicates the opacity to set. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * @see SetOpacity + * @since 10 + * @version 1.0 + */ +int32_t OH_PixelMap_SetOpacity(const NativePixelMap* native, float opacity); + +/** + * @brief Scales a PixelMap object. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @param x Indicates the scaling ratio of the width. + * @param y Indicates the scaling ratio of the height. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CHECK_FORMAT_ERROR - if check format failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_NOT_EXIST - if sharememory error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_DATA_ABNORMAL - if sharememory data abnormal. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MALLOC_ABNORMAL - if image malloc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CROP - if crop error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALPHA_TYPE_ERROR - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALLOCATER_TYPE_ERROR - if hard decode failed. + * @see Scale + * @since 10 + * @version 1.0 + */ +int32_t OH_PixelMap_Scale(const NativePixelMap* native, float x, float y); + +/** + * @brief Translates a PixelMap object. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @param x Indicates the horizontal distance to translate. + * @param y Indicates the vertical distance to translate. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CHECK_FORMAT_ERROR - if check format failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_NOT_EXIST - if sharememory error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_DATA_ABNORMAL - if sharememory data abnormal. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MALLOC_ABNORMAL - if image malloc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CROP - if crop error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALPHA_TYPE_ERROR - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALLOCATER_TYPE_ERROR - if hard decode failed. + * @see Translate + * @since 10 + * @version 1.0 + */ +int32_t OH_PixelMap_Translate(const NativePixelMap* native, float x, float y); + +/** + * @brief Rotates a PixelMap object. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @param angle Indicates the angle to rotate. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CHECK_FORMAT_ERROR - if check format failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_NOT_EXIST - if sharememory error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_DATA_ABNORMAL - if sharememory data abnormal. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MALLOC_ABNORMAL - if image malloc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CROP - if crop error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALPHA_TYPE_ERROR - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALLOCATER_TYPE_ERROR - if hard decode failed. + * @see Rotate + * @since 10 + * @version 1.0 + */ +int32_t OH_PixelMap_Rotate(const NativePixelMap* native, float angle); + +/** + * @brief Flips a PixelMap object. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @param x Specifies whether to flip around the x axis. + * @param y Specifies whether to flip around the y axis. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CHECK_FORMAT_ERROR - if check format failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_NOT_EXIST - if sharememory error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_DATA_ABNORMAL - if sharememory data abnormal. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MALLOC_ABNORMAL - if image malloc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CROP - if crop error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALPHA_TYPE_ERROR - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALLOCATER_TYPE_ERROR - if hard decode failed. + * @see Flip + * @since 10 + * @version 1.0 + */ +int32_t OH_PixelMap_Flip(const NativePixelMap* native, int32_t x, int32_t y); + +/** + * @brief Crops a PixelMap object. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @param x Indicates the x-coordinate of the upper left corner of the target image. + * @param y Indicates the y-coordinate of the upper left corner of the target image. + * @param width Indicates the width of the cropped region. + * @param height Indicates the height of the cropped region. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CHECK_FORMAT_ERROR - if check format failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_NOT_EXIST - if sharememory error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_DATA_ABNORMAL - if sharememory data abnormal. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MALLOC_ABNORMAL - if image malloc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CROP - if crop error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALPHA_TYPE_ERROR - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALLOCATER_TYPE_ERROR - if hard decode failed. + * @see Crop + * @since 10 + * @version 1.0 + */ +int32_t OH_PixelMap_Crop(const NativePixelMap* native, int32_t x, int32_t y, int32_t width, int32_t height); + +/** + * @brief Obtains the image information of a PixelMap object. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @param info Indicates the pointer to the image information. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CHECK_FORMAT_ERROR - if check format failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_NOT_EXIST - if sharememory error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_DATA_ABNORMAL - if sharememory data abnormal. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MALLOC_ABNORMAL - if image malloc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CROP - if crop error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALPHA_TYPE_ERROR - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALLOCATER_TYPE_ERROR - if hard decode failed. + * @see OhosPixelMapInfos + * @since 10 + * @version 2.0 + */ +int32_t OH_PixelMap_GetImageInfo(const NativePixelMap* native, OhosPixelMapInfos *info); + +/** + * @brief Obtains the memory address of a NativePixelMap object and locks the memory. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @param addr Indicates the double pointer to the memory address. + * @see UnAccessPixels + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CHECK_FORMAT_ERROR - if check format failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_NOT_EXIST - if sharememory error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_DATA_ABNORMAL - if sharememory data abnormal. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MALLOC_ABNORMAL - if image malloc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CROP - if crop error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALPHA_TYPE_ERROR - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALLOCATER_TYPE_ERROR - if hard decode failed. * @since 10 + * @version 2.0 + */ +int32_t OH_PixelMap_AccessPixels(const NativePixelMap* native, void** addr); + +/** + * @brief Unlocks the memory of the NativePixelMap object data. + * This function is used with {@link OH_PixelMap_AccessPixels} in pairs. + * + * @param native Indicates the pointer to a NativePixelMap object. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CHECK_FORMAT_ERROR - if check format failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_NOT_EXIST - if sharememory error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_DATA_ABNORMAL - if sharememory data abnormal. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MALLOC_ABNORMAL - if image malloc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CROP - if crop error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALPHA_TYPE_ERROR - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALLOCATER_TYPE_ERROR - if hard decode failed. * @see AccessPixels + * @since 10 + * @version 2.0 + */ +int32_t OH_PixelMap_UnAccessPixels(const NativePixelMap* native); + +#ifdef __cplusplus +}; +#endif +/** @} */ + +#endif // INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_PIXEL_MAP_NAPI_H_ diff --git a/multimedia/image_framework/include/image_pixel_map_napi.h b/multimedia/image_framework/include/image_pixel_map_napi.h new file mode 100644 index 0000000000000000000000000000000000000000..4ce97331e988534402f9047a6ca45ef975e2941e --- /dev/null +++ b/multimedia/image_framework/include/image_pixel_map_napi.h @@ -0,0 +1,173 @@ +/* + * Copyright (C) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup image + * @{ + * + * @brief Provides APIs for obtaining pixel map data and information. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 8 + * @version 1.0 + */ + +/** + * @file image_pixel_map_napi.h + * + * @brief Declares the APIs that can lock, access, and unlock a pixel map. + * + * @since 8 + * @version 1.0 + */ + +#ifndef INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_PIXEL_MAP_NAPI_H_ +#define INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_PIXEL_MAP_NAPI_H_ +#include +#include "napi/native_api.h" +namespace OHOS { +namespace Media { +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Enumerates the error codes returned by the functions. + * + * @deprecated since 10 + * @since 8 + * @version 1.0 + */ +enum { + /** Operation success. */ + OHOS_IMAGE_RESULT_SUCCESS = 0, + /** Invalid value. */ + OHOS_IMAGE_RESULT_BAD_PARAMETER = -1, +}; + +/** + * @brief Enumerates the pixel formats. + * + * @deprecated since 10 + * @since 8 + * @version 1.0 + */ +enum { + /** + * Unknown format. + */ + OHOS_PIXEL_MAP_FORMAT_NONE = 0, + /** + * 32-bit RGBA, with 8 bits each for R (red), G (green), B (blue), and A (alpha). + * The data is stored from the most significant bit to the least significant bit. + */ + OHOS_PIXEL_MAP_FORMAT_RGBA_8888 = 3, + /** + * 16-bit RGB, with 5, 6, and 5 bits for R, G, and B, respectively. + * The data is stored from the most significant bit to the least significant bit. + */ + OHOS_PIXEL_MAP_FORMAT_RGB_565 = 2, +}; + +/** + * @brief Defines the pixel map information. + * + * @deprecated since 10 + * @since 8 + * @version 1.0 + */ +struct OhosPixelMapInfo { + /** Image width, in pixels. */ + uint32_t width; + /** Image height, in pixels. */ + uint32_t height; + /** Number of bytes per row. */ + uint32_t rowSize; + /** Pixel format. */ + int32_t pixelFormat; +}; + +/** + * @brief Enumerates the pixel map scale modes. + * + * @since 10 + * @version 2.0 + */ +enum { + /** + * Adaptation to the target image size. + */ + OHOS_PIXEL_MAP_SCALE_MODE_FIT_TARGET_SIZE = 0, + /** + * Cropping the center portion of an image to the target size. + */ + OHOS_PIXEL_MAP_SCALE_MODE_CENTER_CROP = 1, +}; + +/** + * @brief Obtains the information about a PixelMap object + * and stores the information to the {@link OhosPixelMapInfo} struct. + * + * @deprecated since 10 + * @param env Indicates the NAPI environment pointer. + * @param value Indicates the PixelMap object at the application layer. + * @param info Indicates the pointer to the object that stores the information obtained. + * For details, see {@link OhosPixelMapInfo}. + * @return Returns 0 if the information is obtained and stored successfully; returns an error code otherwise. + * @see OhosPixelMapInfo + * @since 8 + * @version 1.0 + */ +int32_t OH_GetImageInfo(napi_env env, napi_value value, OhosPixelMapInfo *info); + +/** + * @brief Obtains the memory address of a PixelMap object and locks the memory. + * + * After the function is executed successfully, *addrPtr is the memory address to be accessed. + * After the access operation is complete, you must use {@link OH_UnAccessPixels} to unlock the memory. + * Otherwise, the resources in the memory cannot be released. + * After the memory is unlocked, its address cannot be accessed or operated. + * + * @deprecated since 10 + * @param env Indicates the NAPI environment pointer. + * @param value Indicates the PixelMap object at the application layer. + * @param addrPtr Indicates the double pointer to the memory address. + * @see UnAccessPixels + * @return Returns {@link OHOS_IMAGE_RESULT_SUCCESS} if the operation is successful; returns an error code otherwise. + * @since 8 + * @version 1.0 + */ +int32_t OH_AccessPixels(napi_env env, napi_value value, void** addrPtr); + +/** + * @brief Unlocks the memory of a PixelMap object. This function is used with {@link OH_AccessPixels} in pairs. + * + * @deprecated since 10 + * @param env Indicates the NAPI environment pointer. + * @param value Indicates the PixelMap object at the application layer. + * @return Returns {@link OHOS_IMAGE_RESULT_SUCCESS} if the operation is successful; returns an error code otherwise. + * @see AccessPixels + * @since 8 + * @version 1.0 + */ +int32_t OH_UnAccessPixels(napi_env env, napi_value value); + +#ifdef __cplusplus +}; +#endif +/** @} */ +} // namespace Media +} // namespace OHOS +#endif // INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_PIXEL_MAP_NAPI_H_ diff --git a/multimedia/image_framework/include/image_receiver_mdk.h b/multimedia/image_framework/include/image_receiver_mdk.h new file mode 100644 index 0000000000000000000000000000000000000000..2ca87438f4b2ea8e00985bf210d37f1348440d88 --- /dev/null +++ b/multimedia/image_framework/include/image_receiver_mdk.h @@ -0,0 +1,278 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup image + * @{ + * + * @brief Provides APIs for obtaining image data from the native layer. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 2.0 + */ + +/** + * @file image_receiver_mdk.h + * + * @brief Declares the APIs for obtaining image data from the native layer. + * Need link libimagendk.z.so and libimage_receiverndk.z.so + * @since 10 + * @version 2.0 + */ + +#ifndef INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_RECEIVER_MDK_H_ +#define INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_RECEIVER_MDK_H_ +#include "napi/native_api.h" +#include "image_mdk_common.h" +#include "image_mdk.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Defines an ImageReceiver object at the native layer. + * + * @since 10 + * @version 2.0 + */ +struct ImageReceiverNative_; + +/** + * @brief Defines the data type name of a native image receiver. + * + * @since 10 + * @version 2.0 + */ +typedef struct ImageReceiverNative_ ImageReceiverNative; + +/** + * @brief Defines the callbacks for images at the native layer. + * + * @since 10 + * @version 2.0 + */ +typedef void (*OH_Image_Receiver_On_Callback)(void); + +/** + * @brief Defines the information about an image receiver. + * + * @since 10 + * @version 2.0 + */ +struct OhosImageReceiverInfo { + /* Default width of the image received by the consumer, in pixels. */ + int32_t width; + /* Default height of the image received by the consumer, in pixels. */ + int32_t height; + /* Image format {@link OHOS_IMAGE_FORMAT_JPEG} created by using the receiver. */ + int32_t format; + /* Maximum number of images that can be cached. */ + int32_t capicity; +}; + +/** + * @brief Creates an ImageReceiver object at the application layer. + * + * @param env Indicates the NAPI environment pointer. + * @param info Indicates the options for setting the ImageReceiver object. + * @param res Indicates the pointer to the ImageReceiver object obtained. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_SURFACE_FAILED - if create surface failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GRALLOC_BUFFER_FAILED - if surface gralloc buffer failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_SURFACE_FAILED - if get sufrace failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MEDIA_RTSP_SURFACE_UNSUPPORT - if media rtsp surface not support. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image type unsupported. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MEDIA_DATA_UNSUPPORT - if media type unsupported. + * @see OhosImageReceiverInfo + * @since 10 + * @version 2.0 + */ +int32_t OH_Image_Receiver_CreateImageReceiver(napi_env env, struct OhosImageReceiverInfo info, napi_value* res); + +/** + * @brief Initializes an {@link ImageReceiverNative} object at the native layer + * through an ImageReceiver object at the application layer. + * + * @param env Indicates the NAPI environment pointer. + * @param source Indicates an ImageReceiver object. + * @return Returns the pointer to the {@link ImageReceiverNative} object obtained if the operation is successful; + * returns a null pointer otherwise. + * @see ImageReceiverNative, OH_Image_Receiver_Release + * @since 10 + * @version 2.0 + */ +ImageReceiverNative* OH_Image_Receiver_InitImageReceiverNative(napi_env env, napi_value source); + +/** + * @brief Obtains the receiver ID through an {@link ImageReceiverNative} object. + * + * @param native Indicates the pointer to an {@link ImageReceiverNative} object at the native layer. + * @param id Indicates the pointer to the buffer that stores the ID string obtained. + * @param len Indicates the size of the buffer. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_SURFACE_FAILED - if get sufrace failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image type unsupported. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MEDIA_DATA_UNSUPPORT - if media type unsupported. + * @see ImageReceiverNative + * @since 10 + * @version 2.0 + */ +int32_t OH_Image_Receiver_GetReceivingSurfaceId(const ImageReceiverNative* native, char* id, size_t len); + +/** + * @brief Obtains the latest image through an {@link ImageReceiverNative} object. + * + * @param native Indicates the pointer to an {@link ImageReceiverNative} object at the native layer. + * @param image Indicates the pointer to an Image object at the application layer. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_SURFACE_FAILED - if create surface failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GRALLOC_BUFFER_FAILED - if surface gralloc buffer failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_SURFACE_FAILED - if get sufrace failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MEDIA_RTSP_SURFACE_UNSUPPORT - if media rtsp surface not support. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image type unsupported. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_REQUEST_BUFFER_FAILED - if request Buffer failed. + * @see ImageReceiverNative + * @since 10 + * @version 2.0 + */ +int32_t OH_Image_Receiver_ReadLatestImage(const ImageReceiverNative* native, napi_value* image); + +/** + * @brief Obtains the next image through an {@link ImageReceiverNative} object. + * + * @param native Indicates the pointer to an {@link ImageReceiverNative} object at the native layer. + * @param image Indicates the pointer to an Image object at the application layer. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GET_PARAMETER_FAILED - if Failed to obtain parameters for surface. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_SURFACE_FAILED - if create surface failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_GRALLOC_BUFFER_FAILED - if surface gralloc buffer failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_SURFACE_FAILED - if get sufrace failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MEDIA_RTSP_SURFACE_UNSUPPORT - if media rtsp surface not support. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image type unsupported. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SURFACE_REQUEST_BUFFER_FAILED - if request Buffer failed. + * @see ImageReceiverNative + * @since 10 + * @version 2.0 + */ +int32_t OH_Image_Receiver_ReadNextImage(const ImageReceiverNative* native, napi_value* image); + +/** + * @brief Registers an {@link OH_Image_Receiver_On_Callback} callback event. + * + * This callback event is triggered whenever a new image is received. + * + * @param native Indicates the pointer to an {@link ImageReceiverNative} object at the native layer. + * @param callback Indicates the {@link OH_Image_Receiver_On_Callback} callback event to register. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_SURFACE_FAILED - if get sufrace failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image type unsupported. + * returns {@link IRNdkErrCode} IMAGE_RESULT_REGISTER_LISTENER_FAILED - if Failed to register listener. + * returns {@link IRNdkErrCode} IMAGE_RESULT_REGISTER_BUFFER_FAILED - if Failed to register buffer. + * @see ImageReceiverNative + * @since 10 + * @version 2.0 + */ +int32_t OH_Image_Receiver_On(const ImageReceiverNative* native, OH_Image_Receiver_On_Callback callback); + +/** + * @brief Obtains the size of the image receiver through an {@link ImageReceiverNative} object. + * + * @param native Indicates the pointer to an {@link ImageReceiverNative} object at the native layer. + * @param size Indicates the pointer to the {@link OhosImageSize} object obtained. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image type unsupported. + * @see ImageReceiverNative, OH_Image_Receiver_On_Callback + * @since 10 + * @version 2.0 + */ +int32_t OH_Image_Receiver_GetSize(const ImageReceiverNative* native, struct OhosImageSize* size); + +/** + * @brief Obtains the capacity of the image receiver through an {@link ImageReceiverNative} object. + * + * @param native Indicates the pointer to an {@link ImageReceiverNative} object at the native layer. + * @param capacity Indicates the pointer to the capacity obtained. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image type unsupported. + * @see ImageReceiverNative, OhosImageSize + * @since 10 + * @version 2.0 + */ +int32_t OH_Image_Receiver_GetCapacity(const ImageReceiverNative* native, int32_t* capacity); + +/** + * @brief Obtains the format of the image receiver through an {@link ImageReceiverNative} object. + * + * @param native Indicates the pointer to an {@link ImageReceiverNative} object at the native layer. + * @param format Indicates the pointer to the format obtained. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image type unsupported. + * @see ImageReceiverNative + + * @since 10 + * @version 2.0 + */ +int32_t OH_Image_Receiver_GetFormat(const ImageReceiverNative* native, int32_t* format); + +/** + * @brief Releases an {@link ImageReceiverNative} object at the native layer. + * + * This API is not used to release an ImageReceiver object at the application layer. + * + * @param native Indicates the pointer to an {@link ImageReceiverNative} object at the native layer. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * @see ImageReceiverNative + * @since 10 + * @version 2.0 + */ +int32_t OH_Image_Receiver_Release(ImageReceiverNative* native); +#ifdef __cplusplus +}; +#endif +/** @} */ + +#endif // INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_RECEIVER_MDK_H_ diff --git a/multimedia/image_framework/include/image_source_mdk.h b/multimedia/image_framework/include/image_source_mdk.h new file mode 100644 index 0000000000000000000000000000000000000000..3f40a28eb20f633dc700589fec5c559ac98e9e40 --- /dev/null +++ b/multimedia/image_framework/include/image_source_mdk.h @@ -0,0 +1,827 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @addtogroup image + * @{ + * + * @brief Provides native APIs for image sources. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ + +/** + * @file image_source_mdk.h + * + * @brief Declares APIs for decoding an image source into a pixel map. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ + +#ifndef INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_SOURCE_MDK_H_ +#define INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_SOURCE_MDK_H_ +#include +#include "napi/native_api.h" +#include "image_mdk_common.h" +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Defines a native image source object for the image source APIs. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +struct ImageSourceNative_; + +/** + * @brief Defines a native image source object for the image source APIs. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +typedef struct ImageSourceNative_ ImageSourceNative; + +/** + * @brief Defines a pointer to bits per sample, one of the image properties. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +const char* OHOS_IMAGE_PROPERTY_BITS_PER_SAMPLE = "BitsPerSample"; + +/** + * @brief Defines a pointer to the orientation, one of the image properties. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +const char* OHOS_IMAGE_PROPERTY_ORIENTATION = "Orientation"; + +/** + * @brief Defines a pointer to the image length, one of the image properties. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +const char* OHOS_IMAGE_PROPERTY_IMAGE_LENGTH = "ImageLength"; + +/** + * @brief Defines a pointer to the image width, one of the image properties. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +const char* OHOS_IMAGE_PROPERTY_IMAGE_WIDTH = "ImageWidth"; + +/** + * @brief Defines a pointer to the GPS latitude, one of the image properties. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +const char* OHOS_IMAGE_PROPERTY_GPS_LATITUDE = "GPSLatitude"; + +/** + * @brief Defines a pointer to the GPS longitude, one of the image properties. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +const char* OHOS_IMAGE_PROPERTY_GPS_LONGITUDE = "GPSLongitude"; + +/** + * @brief Defines a pointer to the GPS latitude reference information, one of the image properties. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +const char* OHOS_IMAGE_PROPERTY_GPS_LATITUDE_REF = "GPSLatitudeRef"; + +/** + * @brief Defines a pointer to the GPS longitude reference information, one of the image properties. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +const char* OHOS_IMAGE_PROPERTY_GPS_LONGITUDE_REF = "GPSLongitudeRef"; + +/** + * @brief Defines a pointer to the created date and time, one of the image properties. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +const char* OHOS_IMAGE_PROPERTY_DATE_TIME_ORIGINAL = "DateTimeOriginal"; + +/** + * @brief Defines a pointer to the exposure time, one of the image properties. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +const char* OHOS_IMAGE_PROPERTY_EXPOSURE_TIME = "ExposureTime"; + +/** + * @brief Defines a pointer to the scene type, one of the image properties. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +const char* OHOS_IMAGE_PROPERTY_SCENE_TYPE = "SceneType"; + +/** + * @brief Defines a pointer to the ISO speed ratings, one of the image properties. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +const char* OHOS_IMAGE_PROPERTY_ISO_SPEED_RATINGS = "ISOSpeedRatings"; + +/** + * @brief Defines a pointer to the f-number of the image, one of the image properties. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +const char* OHOS_IMAGE_PROPERTY_F_NUMBER = "FNumber"; + +/** + * @brief Defines a pointer to the compressed bits per pixel, one of the image properties. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +const char* OHOS_IMAGE_PROPERTY_COMPRESSED_BITS_PER_PIXEL = "CompressedBitsPerPixel"; + +/** + * @brief Defines the region of the image source to decode. + * It is used in {@link OhosImageDecodingOps}, {@link OH_ImageSource_CreatePixelMap}, and + * {@link OH_ImageSource_CreatePixelMapList}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +struct OhosImageRegion { + /** X coordinate of the start point, in pixels. */ + int32_t x; + /** Y coordinate of the start point, in pixels. */ + int32_t y; + /** Width of the region, in pixels. */ + int32_t width; + /** Height of the region, in pixels. */ + int32_t height; +}; + +/** + * @brief Defines image source options infomation + * {@link OH_ImageSource_Create} and {@link OH_ImageSource_CreateIncremental}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +struct OhosImageSourceOps { + /** Pixel density of the image source. */ + int32_t density; + /** Image source pixel format, used to describe YUV buffer usually. */ + int32_t pixelFormat; + /** Image source pixel size of width and height. */ + struct OhosImageSize size; +}; + +/** + * @brief Defines the options for decoding the image source. + * It is used in {@link OH_ImageSource_CreatePixelMap} and {@link OH_ImageSource_CreatePixelMapList}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +struct OhosImageDecodingOps { + /** Defines output pixel map editable. */ + int8_t editable; + /** Defines output pixel format. */ + int32_t pixelFormat; + /** Defines decoding target pixel density. */ + int32_t fitDensity; + /** Defines decoding index of image source. */ + uint32_t index; + /** Defines decoding sample size option. */ + uint32_t sampleSize; + /** Defines decoding rotate option. */ + uint32_t rotate; + /** Defines decoding target pixel size of width and height. */ + struct OhosImageSize size; + /** Defines image source pixel region for decoding. */ + struct OhosImageRegion region; +}; + +/** + * @brief Defines the image source information, which is obtained by calling {@link OH_ImageSource_GetImageInfo}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +struct OhosImageSourceInfo { + /** Pixel format of the image source. It is set in {@link OH_ImageSource_Create}. */ + int32_t pixelFormat; + /** Color space of the image source. */ + int32_t colorSpace; + /** Alpha type of the image source. */ + int32_t alphaType; + /** Image density of the image source. It is set in {@link OH_ImageSource_Create}. */ + int32_t density; + /** Pixel width and height of the image source. */ + struct OhosImageSize size; +}; + +/** + * @brief Defines the input resource of the image source. It is obtained by calling {@link OH_ImageSource_Create}. + * Only one type of resource is accepted at a time. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +struct OhosImageSource { + /** Pointer to the image source URI. Only a file URI or Base64 URI is accepted. */ + char* uri = nullptr; + /** Length of the image source URI. */ + size_t uriSize = 0; + /** Descriptor of the image source. */ + int32_t fd = -1; + /** Pointer to the image source buffer. Only a formatted packet buffer or Base64 buffer is accepted. */ + uint8_t* buffer = nullptr; + /** Size of the image source buffer. */ + size_t bufferSize = 0; +}; + +/** + * @brief Defines the delay time list of the image source. It is obtained by calling + * {@link OH_ImageSource_GetDelayTime}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +struct OhosImageSourceDelayTimeList { + /** Pointer to the head of the image source delay time list. */ + int32_t* delayTimeList; + /** Size of the image source delay time list. */ + size_t size = 0; +}; + +/** + * @brief Defines image source supported format string. + * {@link OhosImageSourceSupportedFormatList} and {@link OH_ImageSource_GetSupportedFormats} + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +struct OhosImageSourceSupportedFormat { + /** Image source supported format string head.*/ + char* format = nullptr; + /** Image source supported format string size.*/ + size_t size = 0; +}; + +/** + * @brief Defines the format string list supported by the image source. + * It is obtained by calling {@link OH_ImageSource_GetSupportedFormats}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +struct OhosImageSourceSupportedFormatList { + /** Image source supported format string list head.*/ + struct OhosImageSourceSupportedFormat** supportedFormatList = nullptr; + /** Image source supported format string list size.*/ + size_t size = 0; +}; + +/** + * @brief Defines the property string (in key-value format) of the image source. + * It is used in {@link OH_ImageSource_GetImageProperty} and {@link OH_ImageSource_ModifyImageProperty}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +struct OhosImageSourceProperty { + /** Image source property key and value string head.*/ + char* value = nullptr; + /** Image source property key and value string size.*/ + size_t size = 0; +}; + +/** + * @brief Defines the update data of the image source. It is obtained by calling {@link OH_ImageSource_UpdateData}. + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +struct OhosImageSourceUpdateData { + /** Image source update data buffer.*/ + uint8_t* buffer = nullptr; + /** Image source update data buffer size.*/ + size_t bufferSize = 0; + /** Image source offset of update data buffer.*/ + uint32_t offset = 0; + /** Image source update data length in update data buffer.*/ + uint32_t updateLength = 0; + /** Image source update data is completed in this session.*/ + int8_t isCompleted = 0; +}; + +/** + * @brief Creates an ImageSource object at the JavaScript native layer based on the specified + * {@link OhosImageSource} and {@link OhosImageSourceOps} structs. + * + * @param env Indicates a pointer to the Java Native Interface (JNI) environment. + * @param src Indicates a pointer to the input resource of the image source. For details, see {@link OhosImageSource}. + * @param ops Indicates a pointer to the options for creating the image source. + * For details, see {@link OhosImageSourceOps}. + * @param res Indicates a pointer to the ImageSource object created at the JavaScript native layer. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SOURCE_DATA_INCOMPLETE - if image source data incomplete. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SOURCE_DATA - if image source data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_TOO_LARGE - if image data too large. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_HEAD_ABNORMAL - if image decode head error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_EXIF_UNSUPPORT - if image decode exif unsupport. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PROPERTY_NOT_EXIST - if image property not exist. + * returns {@link IRNdkErrCode} IMAGE_RESULT_FILE_DAMAGED - if file damaged. + * returns {@link IRNdkErrCode} IMAGE_RESULT_FILE_FD_ERROR - if file fd is bad. + * returns {@link IRNdkErrCode} IMAGE_RESULT_STREAM_SIZE_ERROR - if stream bad. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SEEK_FAILED - if seek file failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PEEK_FAILED - if peek file failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_FREAD_FAILED - if read file failed. + * @see {@link OhosImageSource}, {@link OhosImageSourceOps} + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +int32_t OH_ImageSource_Create(napi_env env, struct OhosImageSource* src, + struct OhosImageSourceOps* ops, napi_value *res); + +/** + * @brief Creates an incremental ImageSource object at the JavaScript native layer based on the specified + * {@link OhosImageSource} and {@link OhosImageSourceOps} structs. + * The image source data will be updated through {@link OH_ImageSource_UpdateData}. + * + * @param env Indicates a pointer to the JNI environment. + * @param src Indicates a pointer to the input resource of the image source. Only the buffer type is accepted. + * For details, see {@link OhosImageSource}. + * @param ops Indicates a pointer to the options for creating the image source. + * For details, see {@link OhosImageSourceOps}. + * @param res Indicates a pointer to the ImageSource object created at the JavaScript native layer. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SOURCE_DATA_INCOMPLETE - if image source data incomplete. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SOURCE_DATA - if image source data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_TOO_LARGE - if image data too large. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_HEAD_ABNORMAL - if image decode head error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_EXIF_UNSUPPORT - if image decode exif unsupport. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PROPERTY_NOT_EXIST - if image property not exist. + * returns {@link IRNdkErrCode} IMAGE_RESULT_FILE_DAMAGED - if file damaged. + * returns {@link IRNdkErrCode} IMAGE_RESULT_FILE_FD_ERROR - if file fd is bad. + * returns {@link IRNdkErrCode} IMAGE_RESULT_STREAM_SIZE_ERROR - if stream bad. + * returns {@link IRNdkErrCode} IMAGE_RESULT_SEEK_FAILED - if seek file failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PEEK_FAILED - if peek file failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_FREAD_FAILED - if read file failed. + * @see {@link OhosImageSource}, {@link OhosImageSourceOps}, {@link OH_ImageSource_UpdateData} + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +int32_t OH_ImageSource_CreateIncremental(napi_env env, struct OhosImageSource* source, + struct OhosImageSourceOps* ops, napi_value *res); + +/** + * @brief Obtains all supported decoding formats. + * + * @param res Indicates a pointer to the OhosImageSourceSupportedFormatList struct. + * When the input supportedFormatList is a null pointer and size is 0, the size of the supported formats + * is returned through size in res. + * To obtain all formats, a space larger than size is required. + * In addition, sufficient space must be reserved for each format supported. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CHECK_FORMAT_ERROR - if decode fail. + * @see {@link OhosImageSourceSupportedFormatList}, {@link OhosImageSourceSupportedFormat} + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +int32_t OH_ImageSource_GetSupportedFormats(struct OhosImageSourceSupportedFormatList* res); + +/** + * @brief Converts an {@link ImageSource} object at the JavaScript native layer to an ImageSourceNative object + * at the C++ native layer. + * + * @param env Indicates a pointer to the JNI environment. + * @param source Indicates a pointer to the ImageSource object at the JavaScript native layer. + * @return Returns a pointer to the {@link ImageSourceNative} object if the operation is successful; + * returns a null pointer otherwise. + * @see {@link ImageSourceNative}, {@link OH_ImageSource_Release} + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +ImageSourceNative* OH_ImageSource_InitNative(napi_env env, napi_value source); + +/** + * @brief Decodes an ImageSource object to obtain a PixelMap object at the JavaScript native layer + * based on the specified {@link OhosImageDecodingOps} struct. + * + * @param native Indicates a pointer to the {@link ImageSourceNative} object at the C++ native layer. + * @param ops Indicates a pointer to the options for decoding the image source. + * For details, see {@link OhosImageDecodingOps}. + * @param res Indicates a pointer to the PixelMap object obtained at the JavaScript native layer. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_HEAD_ABNORMAL - if image decode head error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_DECODER_FAILED - if create decoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_ENCODER_FAILED - if create encoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CHECK_FORMAT_ERROR - if check format failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_NOT_EXIST - if sharememory error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_DATA_ABNORMAL - if sharememory data abnormal. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_ABNORMAL - if image decode error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MALLOC_ABNORMAL - if image malloc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INIT_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CROP - if crop error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ENCODE_FAILED - if image add pixel map fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_HW_DECODE_UNSUPPORT - if image hardware decode unsupported. + * returns {@link IRNdkErrCode} IMAGE_RESULT_HW_DECODE_FAILED - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_IPC - if ipc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALPHA_TYPE_ERROR - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALLOCATER_TYPE_ERROR - if hard decode failed. + * @see {@link ImageSourceNative}, {@link OhosImageDecodingOps} + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +int32_t OH_ImageSource_CreatePixelMap(const ImageSourceNative* native, + struct OhosImageDecodingOps* ops, napi_value *res); + +/** + * @brief Decodes an ImageSource to obtain all the PixelMap objects at the JavaScript native layer + * based on the specified {@link OhosImageDecodingOps} struct. + * + * @param native Indicates a pointer to the {@link ImageSourceNative} object at the C++ native layer. + * @param ops Indicates a pointer to the options for decoding the image source. + * For details, see {@link OhosImageDecodingOps}. + * @param res Indicates a pointer to the PixelMap objects obtained at the JavaScript native layer. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_HEAD_ABNORMAL - if image decode head error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_DECODER_FAILED - if create decoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_ENCODER_FAILED - if create encoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CHECK_FORMAT_ERROR - if check format failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_NOT_EXIST - if sharememory error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_DATA_ABNORMAL - if sharememory data abnormal. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_ABNORMAL - if image decode error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MALLOC_ABNORMAL - if image malloc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INIT_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CROP - if crop error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ENCODE_FAILED - if image add pixel map fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_HW_DECODE_UNSUPPORT - if image hardware decode unsupported. + * returns {@link IRNdkErrCode} IMAGE_RESULT_HW_DECODE_FAILED - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_IPC - if ipc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALPHA_TYPE_ERROR - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALLOCATER_TYPE_ERROR - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_EXIF_UNSUPPORT - if image decode exif unsupport. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PROPERTY_NOT_EXIST - if image property not exist. + * @see {@link ImageSourceNative}, {@link OhosImageDecodingOps} + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +int32_t OH_ImageSource_CreatePixelMapList(const ImageSourceNative* native, + struct OhosImageDecodingOps* ops, napi_value *res); + +/** + * @brief Obtains the delay time list from some ImageSource objects (such as GIF image sources). + * + * @param native Indicates a pointer to the {@link ImageSourceNative} object at the C++ native layer. + * @param res Indicates a pointer to the delay time list obtained. + * For details, see {@link OhosImageSourceDelayTimeList}. When the input delayTimeList is a null pointer and + * size is 0, the size of the delay time list is returned through size in res. + * To obtain the complete delay time list, a space greater than size is required. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_HEAD_ABNORMAL - if image decode head error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_DECODER_FAILED - if create decoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_ABNORMAL - if image decode error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_EXIF_UNSUPPORT - if image decode exif unsupport. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PROPERTY_NOT_EXIST - if image property not exist. + * @see {@link ImageSourceNative}, {@link OhosImageSourceDelayTimeList} + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +int32_t OH_ImageSource_GetDelayTime(const ImageSourceNative* native, + struct OhosImageSourceDelayTimeList* res); + +/** + * @brief Obtains the number of frames from an ImageSource object. + * + * @param native Indicates a pointer to the {@link ImageSourceNative} object at the C++ native layer. + * @param res Indicates a pointer to the number of frames obtained. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_HEAD_ABNORMAL - if image decode head error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_DECODER_FAILED - if create decoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_ABNORMAL - if image decode error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_EXIF_UNSUPPORT - if image decode exif unsupport. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PROPERTY_NOT_EXIST - if image property not exist. + * @see {@link ImageSourceNative} + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +int32_t OH_ImageSource_GetFrameCount(const ImageSourceNative* native, uint32_t *res); + +/** + * @brief Obtains image source information from an ImageSource object by index. + * + * @param native Indicates a pointer to the {@link ImageSourceNative} object at the C++ native layer. + * @param index Indicates the index of the frame. + * @param info Indicates a pointer to the image source information obtained. + * For details, see {@link OhosImageSourceInfo}. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_HEAD_ABNORMAL - if image decode head error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_DECODER_FAILED - if create decoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_ABNORMAL - if image decode error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_EXIF_UNSUPPORT - if image decode exif unsupport. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PROPERTY_NOT_EXIST - if image property not exist. + * @see {@link ImageSourceNative}, {@link OhosImageSourceInfo} + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +int32_t OH_ImageSource_GetImageInfo(const ImageSourceNative* native, int32_t index, + struct OhosImageSourceInfo* info); + +/** + * @brief Obtains the value of an image property from an ImageSource object. + * + * @param native Indicates a pointer to the {@link ImageSourceNative} object at the C++ native layer. + * @param key Indicates a pointer to the property. For details, see {@link OhosImageSourceProperty}. + * @param value Indicates a pointer to the property value obtained. + * If the input value is a null pointer and size is 0, the size of the property value is returned + * through size in value. + * To obtain the complete property value, a space greater than size is required. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_HEAD_ABNORMAL - if image decode head error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_DECODER_FAILED - if create decoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_ABNORMAL - if image decode error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_EXIF_UNSUPPORT - if image decode exif unsupport. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PROPERTY_NOT_EXIST - if image property not exist. + * @see {@link ImageSourceNative}, {@link OhosImageSourceProperty} + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +int32_t OH_ImageSource_GetImageProperty(const ImageSourceNative* native, + struct OhosImageSourceProperty* key, struct OhosImageSourceProperty* value); + +/** + * @brief Modifies the value of an image property of an ImageSource object. + * + * @param native Indicates a pointer to the {@link ImageSourceNative} object at the C++ native layer. + * @param key Indicates a pointer to the property. For details, see {@link OhosImageSourceProperty}. + * @param value Indicates a pointer to the new value of the property. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_HEAD_ABNORMAL - if image decode head error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_DECODER_FAILED - if create decoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_ABNORMAL - if image decode error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_EXIF_UNSUPPORT - if image decode exif unsupport. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PROPERTY_NOT_EXIST - if image property not exist. + * @see {@link ImageSourceNative}, {@link OhosImageSourceProperty} + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +int32_t OH_ImageSource_ModifyImageProperty(const ImageSourceNative* native, + struct OhosImageSourceProperty* key, struct OhosImageSourceProperty* value); + +/** + * @brief Updates the data of an ImageSource object. + * + * @param native Indicates a pointer to the {@link ImageSourceNative} object at the C++ native layer. + * @param data Indicates a pointer to the update data. For details, see {@link OhosImageSourceUpdateData}. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_FAILED - if decode fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_HEAD_ABNORMAL - if image decode head error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_DECODER_FAILED - if create decoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CREATE_ENCODER_FAILED - if create encoder failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CHECK_FORMAT_ERROR - if check format failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_THIRDPART_SKIA_ERROR - if skia error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_NOT_EXIST - if sharememory error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_SHAMEM_DATA_ABNORMAL - if sharememory data abnormal. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DECODE_ABNORMAL - if image decode error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_MALLOC_ABNORMAL - if image malloc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_UNSUPPORT - if image init error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INIT_ABNORMAL - if image input data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_CROP - if crop error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_UNKNOWN_FORMAT - if image unknown format. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_REGISTER_FAILED - if register plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_PLUGIN_CREATE_FAILED - if create plugin fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ENCODE_FAILED - image add pixel map fail. + * returns {@link IRNdkErrCode} IMAGE_RESULT_HW_DECODE_UNSUPPORT - if image hardware decode unsupported. + * returns {@link IRNdkErrCode} IMAGE_RESULT_HW_DECODE_FAILED - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ERR_IPC - if ipc error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INDEX_INVALID - if invalid index. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALPHA_TYPE_ERROR - if hard decode failed. + * returns {@link IRNdkErrCode} IMAGE_RESULT_ALLOCATER_TYPE_ERROR - if hard decode failed. + * @see {@link ImageSourceNative}, {@link OhosImageSourceUpdateData} + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +int32_t OH_ImageSource_UpdateData(const ImageSourceNative* native, struct OhosImageSourceUpdateData* data); + + +/** + * @brief Releases an ImageSourceNative object. + * + * @param native Indicates a pointer to the {@link ImageSourceNative} object at the C++ native layer. + * @return Returns {@link IRNdkErrCode} IMAGE_RESULT_SUCCESS - if the operation is successful. + * returns {@link IRNdkErrCode} IMAGE_RESULT_BAD_PARAMETER - if bad parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_JNI_ENV_ABNORMAL - if Abnormal JNI environment. + * returns {@link IRNdkErrCode} IMAGE_RESULT_INVALID_PARAMETER - if invalid parameter. + * returns {@link IRNdkErrCode} IMAGE_RESULT_GET_DATA_ABNORMAL - if image get data error. + * returns {@link IRNdkErrCode} IMAGE_RESULT_DATA_ABNORMAL - if image input data error. + * @see {@link ImageSourceNative}, {@link OH_ImageSource_Create}, {@link OH_ImageSource_CreateIncremental} + * + * @Syscap SystemCapability.Multimedia.Image + * @since 10 + * @version 4.0 + */ +int32_t OH_ImageSource_Release(ImageSourceNative* native); +#ifdef __cplusplus +}; +#endif +#endif // INTERFACES_KITS_NATIVE_INCLUDE_IMAGE_SOURCE_MDK_H_ diff --git a/multimedia/image_framework/libimage_ndk.ndk.json b/multimedia/image_framework/libimage_ndk.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..b7bba91e2c91d76036b542fdbee9bf9545f99784 --- /dev/null +++ b/multimedia/image_framework/libimage_ndk.ndk.json @@ -0,0 +1,21 @@ +[ + { + "first_introduced": "1", + "name": "OH_Image_InitImageNative" + }, + { + "name": "OH_Image_ClipRect" + }, + { + "name": "OH_Image_Size" + }, + { + "name": "OH_Image_Format" + }, + { + "name": "OH_Image_GetComponent" + }, + { + "name": "OH_Image_Release" + } +] \ No newline at end of file diff --git a/multimedia/image_framework/libimage_pixelmap_napi.ndk.json b/multimedia/image_framework/libimage_pixelmap_napi.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..64800fe826282f2c62c68ee354f432af18ea4fed --- /dev/null +++ b/multimedia/image_framework/libimage_pixelmap_napi.ndk.json @@ -0,0 +1,66 @@ +[ + { + "first_introduced": "1", + "name": "OH_GetImageInfo" + }, + { + "name": "OH_AccessPixels" + }, + { + "name": "OH_UnAccessPixels" + }, + { + "name": "OH_PixelMap_CreatePixelMap" + }, + { + "name": "OH_PixelMap_CreateAlphaPixelMap" + }, + { + "name": "OH_PixelMap_InitNativePixelMap" + }, + { + "name": "OH_PixelMap_GetBytesNumberPerRow" + }, + { + "name": "OH_PixelMap_GetIsEditable" + }, + { + "name": "OH_PixelMap_IsSupportAlpha" + }, + { + "name": "OH_PixelMap_SetAlphaAble" + }, + { + "name": "OH_PixelMap_GetDensity" + }, + { + "name": "OH_PixelMap_SetDensity" + }, + { + "name": "OH_PixelMap_SetOpacity" + }, + { + "name": "OH_PixelMap_Scale" + }, + { + "name": "OH_PixelMap_Translate" + }, + { + "name": "OH_PixelMap_Rotate" + }, + { + "name": "OH_PixelMap_Flip" + }, + { + "name": "OH_PixelMap_Crop" + }, + { + "name": "OH_PixelMap_GetImageInfo" + }, + { + "name": "OH_PixelMap_AccessPixels" + }, + { + "name": "OH_PixelMap_UnAccessPixels" + } +] \ No newline at end of file diff --git a/multimedia/image_framework/libimage_receiver_ndk.ndk.json b/multimedia/image_framework/libimage_receiver_ndk.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..c92209afc26e6a16a0657b61c2f9424105ad76e9 --- /dev/null +++ b/multimedia/image_framework/libimage_receiver_ndk.ndk.json @@ -0,0 +1,33 @@ +[ + { + "first_introduced": "1", + "name": "OH_Image_Receiver_CreateImageReceiver" + }, + { + "name": "OH_Image_Receiver_InitImageReceiverNative" + }, + { + "name": "OH_Image_Receiver_GetReceivingSurfaceId" + }, + { + "name": "OH_Image_Receiver_ReadLatestImage" + }, + { + "name": "OH_Image_Receiver_ReadNextImage" + }, + { + "name": "OH_Image_Receiver_On" + }, + { + "name": "OH_Image_Receiver_GetSize" + }, + { + "name": "OH_Image_Receiver_GetCapacity" + }, + { + "name": "OH_Image_Receiver_GetFormat" + }, + { + "name": "OH_Image_Receiver_Release" + } +] \ No newline at end of file diff --git a/multimedia/image_framework/libimage_source_ndk.ndk.json b/multimedia/image_framework/libimage_source_ndk.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..b2606bfb22ec3ef3a8fb4647d908d0534e4b870a --- /dev/null +++ b/multimedia/image_framework/libimage_source_ndk.ndk.json @@ -0,0 +1,42 @@ +[ + { + "first_introduced": "1", + "name": "OH_ImageSource_Create" + }, + { + "name": "OH_ImageSource_CreateIncremental" + }, + { + "name": "OH_ImageSource_InitNative" + }, + { + "name": "OH_ImageSource_CreatePixelMap" + }, + { + "name": "OH_ImageSource_CreatePixelMapList" + }, + { + "name": "OH_ImageSource_GetDelayTime" + }, + { + "name": "OH_ImageSource_GetFrameCount" + }, + { + "name": "OH_ImageSource_GetSupportedFormats" + }, + { + "name": "OH_ImageSource_GetImageInfo" + }, + { + "name": "OH_ImageSource_GetImageProperty" + }, + { + "name": "OH_ImageSource_ModifyImageProperty" + }, + { + "name": "OH_ImageSource_UpdateData" + }, + { + "name": "OH_ImageSource_Release" + } +] \ No newline at end of file diff --git a/multimedia/image_framework/ndk_test_example/@ohos.xtstest.mypixelmap.d.ts b/multimedia/image_framework/ndk_test_example/@ohos.xtstest.mypixelmap.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..baff7239aba50735546ff8fbb906bc7ed3ac6c59 --- /dev/null +++ b/multimedia/image_framework/ndk_test_example/@ohos.xtstest.mypixelmap.d.ts @@ -0,0 +1,23 @@ +/* +* Copyright (C) 2022 Huawei Device Co., Ltd. +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +import image from '@ohos.multimedia.image' + +declare namespace mypixelmap { + function testGetImageInfo(PixelMap pixelMap): void; + function testAccessPixels(PixelMap pixelMap): void; + function testUnAccessPixels(PixelMap pixelMap): void; +} + +export default mypixelmap; \ No newline at end of file diff --git a/multimedia/image_framework/ndk_test_example/BUILD.gn b/multimedia/image_framework/ndk_test_example/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..8834d5e1f4dbf31f2a72a2d76935d25cfa4e8773 --- /dev/null +++ b/multimedia/image_framework/ndk_test_example/BUILD.gn @@ -0,0 +1,58 @@ +# Copyright (C) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +############################################################################ +# Debug Used : mypixelmap +############################################################################ + +js_declaration("mypixelmap_js") { + part_name = "multimedia_image" + sources = [ "//foundation/multimedia/image_framework/interfaces/kits/native/ndk_test_example/@ohos.xtstest.mypixelmap.d.ts" ] +} + +ohos_copy("mypixelmap_declaration") { + sources = [ "//foundation/multimedia/image_framework/interfaces/kits/native/ndk_test_example/@ohos.xtstest.mypixelmap.d.ts" ] + outputs = [ target_out_dir + "/$target_name/" ] + module_source_dir = target_out_dir + "/$target_name" + module_install_name = "" +} + +ohos_shared_library("mypixelmap") { + sanitize = { + cfi = true + cfi_cross_dso = true + debug = false + } + install_enable = true + + sources = [ "my_pixel_map.cpp" ] + + include_dirs = [ + "include", + "//foundation/multimedia/image_framework/interfaces/kits/native/include", + ] + + deps = [ + "//foundation/arkui/napi:ace_napi", + "//foundation/multimedia/image_framework/frameworks/kits/js/common/pixelmap_ndk:pixelmap_ndk", + ] + + external_deps = [ "hilog:libhilog" ] + + relative_install_dir = "module" + + subsystem_name = "multimedia" + part_name = "multimedia_image" +} diff --git a/multimedia/image_framework/ndk_test_example/my_pixel_map.cpp b/multimedia/image_framework/ndk_test_example/my_pixel_map.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a4172f198f8c8db5073f1138aa844b882efa78ca --- /dev/null +++ b/multimedia/image_framework/ndk_test_example/my_pixel_map.cpp @@ -0,0 +1,203 @@ +/* + * Copyright (C) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "my_pixel_map.h" +#include "media_errors.h" +#include "hilog/log.h" +#include "image_napi_utils.h" +#include "image_pixel_map_napi.h" + +using OHOS::HiviewDFX::HiLog; +namespace { +constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, LOG_DOMAIN, "MyPixelMapNapiTest"}; +constexpr uint32_t TEST_ARG_SUM = 1; +} +namespace OHOS { +namespace Media { +static const std::string CLASS_NAME = "MyPixelMap"; +napi_ref MyPixelMap::sConstructor_ = nullptr; +MyPixelMap::MyPixelMap():env_(nullptr) +{ +} + +MyPixelMap::~MyPixelMap() +{ +} + +napi_value MyPixelMap::Init(napi_env env, napi_value exports) +{ + napi_property_descriptor props[] = { + }; + + napi_property_descriptor static_prop[] = { + DECLARE_NAPI_STATIC_FUNCTION("testGetImageInfo", TestGetImageInfo), + DECLARE_NAPI_STATIC_FUNCTION("testAccessPixels", TestAccessPixels), + DECLARE_NAPI_STATIC_FUNCTION("testUnAccessPixels", TestUnAccessPixels), + }; + + napi_value constructor = nullptr; + + if (napi_define_class(env, CLASS_NAME.c_str(), NAPI_AUTO_LENGTH, Constructor, nullptr, IMG_ARRAY_SIZE(props), + props, &constructor) != napi_ok) { + HiLog::Error(LABEL, "define class fail"); + return nullptr; + } + + if (napi_create_reference(env, constructor, 1, &sConstructor_) != napi_ok) { + HiLog::Error(LABEL, "create reference fail"); + return nullptr; + } + + if (napi_set_named_property(env, exports, CLASS_NAME.c_str(), constructor) != napi_ok) { + HiLog::Error(LABEL, "set named property fail"); + return nullptr; + } + + if (napi_define_properties(env, exports, IMG_ARRAY_SIZE(static_prop), static_prop) != napi_ok) { + HiLog::Error(LABEL, "define properties fail"); + return nullptr; + } + + HiLog::Debug(LABEL, "Init success"); + return exports; +} + +napi_value MyPixelMap::Constructor(napi_env env, napi_callback_info info) +{ + HiLog::Debug(LABEL, "Constructor IN"); + napi_value undefineVar = nullptr; + napi_get_undefined(env, &undefineVar); + + napi_status status; + napi_value thisVar = nullptr; + napi_get_undefined(env, &thisVar); + + napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr); + + HiLog::Debug(LABEL, "Constructor OUT"); + return thisVar; +} + +napi_value MyPixelMap::TestGetImageInfo(napi_env env, napi_callback_info info) +{ + HiLog::Debug(LABEL, "TestGetImageInfo IN"); + + napi_value result = nullptr; + napi_get_undefined(env, &result); + + napi_status status; + napi_value thisVar = nullptr; + napi_value argValue[TEST_ARG_SUM] = {0}; + size_t argCount = TEST_ARG_SUM; + + status = napi_get_cb_info(env, info, &argCount, argValue, &thisVar, nullptr); + if (status != napi_ok) { + HiLog::Error(LABEL, "napi_get_cb_info fail"); + } + + HiLog::Debug(LABEL, "OH_GetImageInfo Test|Begin"); + OhosPixelMapInfo pixelMapInfo; + int32_t res = OH_GetImageInfo(env, argValue[0], &pixelMapInfo); + HiLog::Debug(LABEL, "OH_GetImageInfo Test|End, res=%{public}d", res); + HiLog::Debug(LABEL, "OH_GetImageInfo, w=%{public}u, h=%{public}u, r=%{public}u, f=%{public}d", + pixelMapInfo.width, pixelMapInfo.height, pixelMapInfo.rowSize, pixelMapInfo.pixelFormat); + + HiLog::Debug(LABEL, "TestGetImageInfo OUT"); + return result; +} + +napi_value MyPixelMap::TestAccessPixels(napi_env env, napi_callback_info info) +{ + HiLog::Debug(LABEL, "TestAccessPixels IN"); + + napi_value result = nullptr; + napi_get_undefined(env, &result); + + napi_status status; + napi_value thisVar = nullptr; + napi_value argValue[TEST_ARG_SUM] = {0}; + size_t argCount = TEST_ARG_SUM; + + status = napi_get_cb_info(env, info, &argCount, argValue, &thisVar, nullptr); + if (status != napi_ok) { + HiLog::Error(LABEL, "napi_get_cb_info fail"); + } + + HiLog::Debug(LABEL, "OH_AccessPixels Test|Begin"); + void* addrPtr = nullptr; + int32_t res = OH_AccessPixels(env, argValue[0], &addrPtr); + HiLog::Debug(LABEL, "OH_AccessPixels Test|End, res=%{public}d", res); + + HiLog::Debug(LABEL, "TestAccessPixels OUT"); + return result; +} + +napi_value MyPixelMap::TestUnAccessPixels(napi_env env, napi_callback_info info) +{ + HiLog::Debug(LABEL, "TestUnAccessPixels IN"); + + napi_value result = nullptr; + napi_get_undefined(env, &result); + + napi_status status; + napi_value thisVar = nullptr; + napi_value argValue[TEST_ARG_SUM] = {0}; + size_t argCount = TEST_ARG_SUM; + + status = napi_get_cb_info(env, info, &argCount, argValue, &thisVar, nullptr); + if (status != napi_ok) { + HiLog::Error(LABEL, "napi_get_cb_info fail"); + } + + HiLog::Debug(LABEL, "OH_UnAccessPixels Test|Begin"); + int32_t res = OH_UnAccessPixels(env, argValue[0]); + HiLog::Debug(LABEL, "OH_UnAccessPixels Test|End, res=%{public}d", res); + + HiLog::Debug(LABEL, "TestUnAccessPixels OUT"); + return result; +} + +/* + * Function registering all props and functions of ohos.medialibrary module + */ +static napi_value Export(napi_env env, napi_value exports) +{ + HiLog::Error(LABEL, "MyPixelMap CALL"); + MyPixelMap::Init(env, exports); + return exports; +} + +/* + * module define + */ +static napi_module g_module = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = nullptr, + .nm_register_func = Export, + .nm_modname = "xtstest.mypixelmap", + .nm_priv = ((void*)0), + .reserved = {0} +}; + +/* + * module register + */ +extern "C" __attribute__((constructor)) void MyPixelMapRegisterModule(void) +{ + napi_module_register(&g_module); +} +} // namespace Media +} // namespace OHOS diff --git a/multimedia/image_framework/ndk_test_example/my_pixel_map.h b/multimedia/image_framework/ndk_test_example/my_pixel_map.h new file mode 100644 index 0000000000000000000000000000000000000000..5542df1f0af39a7ef512305fab72fa0a9896f5a8 --- /dev/null +++ b/multimedia/image_framework/ndk_test_example/my_pixel_map.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef PIXEL_MAP_NAPI_TEST_H_ +#define PIXEL_MAP_NAPI_TEST_H_ + +#include "pixel_map.h" +#include "image_type.h" +#include "image_source.h" +#include "napi/native_api.h" +#include "napi/native_node_api.h" + +namespace OHOS { +namespace Media { +class MyPixelMap { +public: + MyPixelMap(); + ~MyPixelMap(); + + static napi_value Init(napi_env env, napi_value exports); + + static napi_value TestGetImageInfo(napi_env env, napi_callback_info info); + static napi_value TestAccessPixels(napi_env env, napi_callback_info info); + static napi_value TestUnAccessPixels(napi_env env, napi_callback_info info); + +private: + static napi_value Constructor(napi_env env, napi_callback_info info); + + static napi_ref sConstructor_; + + napi_env env_ = nullptr; +}; +} // namespace Media +} // namespace OHOS +#endif /* PIXEL_MAP_NAPI_TEST_H_ */ diff --git a/multimedia/player_framework/avscreen_capture/BUILD.gn b/multimedia/player_framework/avscreen_capture/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..35f4bdef94b57054247dfd7a6fa7f6035a4677ef --- /dev/null +++ b/multimedia/player_framework/avscreen_capture/BUILD.gn @@ -0,0 +1,39 @@ +# Copyright (C) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") +import("//foundation/multimedia/player_framework/config.gni") + +ohos_ndk_headers("native_avscreen_capture_header") { + dest_dir = "$ndk_headers_out_dir/multimedia/player_framework" + sources = [ + "$MEDIA_PLAYER_ROOT_DIR/interfaces/kits/c/native_avscreen_capture.h", + "$MEDIA_PLAYER_ROOT_DIR/interfaces/kits/c/native_avscreen_capture_base.h", + "$MEDIA_PLAYER_ROOT_DIR/interfaces/kits/c/native_avscreen_capture_errors.h", + ] +} + +ohos_ndk_library("libnative_avscreen_capture") { + ndk_description_file = "./libnative_avscreen_capture.ndk.json" + min_compact_version = "1" + output_name = "native_avscreen_capture" + output_extension = "so" + + system_capability = "SystemCapability.Multimedia.Media.AVScreenCapture" + system_capability_headers = [ + "multimedia/player_framework/native_avscreen_capture.h", + "multimedia/player_framework/native_avscreen_capture_base.h", + "multimedia/player_framework/native_avscreen_capture_errors.h", + ] +} diff --git a/multimedia/player_framework/avscreen_capture/libnative_avscreen_capture.ndk.json b/multimedia/player_framework/avscreen_capture/libnative_avscreen_capture.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..cf7bda8c551af1cb015227c9d62c5648812f412a --- /dev/null +++ b/multimedia/player_framework/avscreen_capture/libnative_avscreen_capture.ndk.json @@ -0,0 +1,13 @@ +[ + { "name": "OH_AVScreenCapture_Create" }, + { "name": "OH_AVScreenCapture_Init" }, + { "name": "OH_AVScreenCapture_StartScreenCapture" }, + { "name": "OH_AVScreenCapture_StopScreenCapture" }, + { "name": "OH_AVScreenCapture_AcquireAudioBuffer" }, + { "name": "OH_AVScreenCapture_AcquireVideoBuffer" }, + { "name": "OH_AVScreenCapture_ReleaseAudioBuffer" }, + { "name": "OH_AVScreenCapture_ReleaseVideoBuffer" }, + { "name": "OH_AVScreenCapture_SetCallback" }, + { "name": "OH_AVScreenCapture_Release" }, + { "name": "OH_AVScreenCapture_SetMicrophoneEnabled" } +] \ No newline at end of file diff --git a/multimedia/player_framework/native_avscreen_capture.h b/multimedia/player_framework/native_avscreen_capture.h new file mode 100644 index 0000000000000000000000000000000000000000..22837a29dac5448236f11f5a47ce624914e94396 --- /dev/null +++ b/multimedia/player_framework/native_avscreen_capture.h @@ -0,0 +1,191 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVSCREEN_CAPTURE_H +#define NATIVE_AVSCREEN_CAPTURE_H + +#include +#include +#include "native_avscreen_capture_errors.h" +#include "native_avscreen_capture_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Create a screen capture + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @return Returns a pointer to an OH_AVScreenCapture instance + * @since 10 + * @version 1.0 + */ +struct OH_AVScreenCapture *OH_AVScreenCapture_Create(void); + +/** + * @brief To init the screen capture, typically, you need to configure the description information of the audio + * and video, which can be extracted from the container. This interface must be called before StartAVScreenCapture + * called. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @param config Information describing the audio and video config + * @return Returns AVSCREEN_CAPTURE_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVSCREEN_CAPTURE_ErrCode} + * @since 10 + * @version 1.0 + */ +OH_AVSCREEN_CAPTURE_ErrCode OH_AVScreenCapture_Init(struct OH_AVScreenCapture *capture, + OH_AVScreenCaptureConfig config); + +/** + * @brief Start the av screen capture + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @param type Information describing the data type of the capture + * @return Returns AVSCREEN_CAPTURE_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVSCREEN_CAPTURE_ErrCode} + * @since 10 + * @version 1.0 + */ +OH_AVSCREEN_CAPTURE_ErrCode OH_AVScreenCapture_StartScreenCapture(struct OH_AVScreenCapture *capture); + +/** + * @brief Stop the av screen capture + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @return Returns AVSCREEN_CAPTURE_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVSCREEN_CAPTURE_ErrCode} + * @since 10 + * @version 1.0 + */ +OH_AVSCREEN_CAPTURE_ErrCode OH_AVScreenCapture_StopScreenCapture(struct OH_AVScreenCapture *capture); + +/** + * @brief Start av screen record use to start save screen record file. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @return Returns AVSCREEN_CAPTURE_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVSCREEN_CAPTURE_ErrCode} + * @since 10 + * @version 1.0 + */ +OH_AVSCREEN_CAPTURE_ErrCode OH_AVScreenCapture_StartScreenRecording(struct OH_AVScreenCapture *capture); + +/** + * @brief Start av screen record use to stop save screen record file. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @return Returns AVSCREEN_CAPTURE_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVSCREEN_CAPTURE_ErrCode} + * @since 10 + * @version 1.0 + */ +OH_AVSCREEN_CAPTURE_ErrCode OH_AVScreenCapture_StopScreenRecording(struct OH_AVScreenCapture *capture); + +/** + * @brief Acquire the audio buffer for the av screen capture + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @param audiobuffer Information describing the audio buffer of the capture + * @param type Information describing the audio source type + * @return Returns AVSCREEN_CAPTURE_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVSCREEN_CAPTURE_ErrCode} + * @since 10 + * @version 1.0 + */ +OH_AVSCREEN_CAPTURE_ErrCode OH_AVScreenCapture_AcquireAudioBuffer(struct OH_AVScreenCapture *capture, + OH_AudioBuffer **audiobuffer, OH_AudioCaptureSourceType type); + +/** + * @brief Acquire the video buffer for the av screen capture + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @param fence A processing state of display buffer + * @param timestamp Information about the video buffer + * @param region Information about the video buffer + * @return Returns a pointer to an OH_NativeBuffer instance + * @since 10 + * @version 1.0 + */ +OH_NativeBuffer* OH_AVScreenCapture_AcquireVideoBuffer(struct OH_AVScreenCapture *capture, + int32_t *fence, int64_t *timestamp, struct OH_Rect *region); + +/** + * @brief Release the audio buffer for the av screen capture + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @param type Information describing the audio source type + * @return Returns AVSCREEN_CAPTURE_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVSCREEN_CAPTURE_ErrCode} + * @since 10 + * @version 1.0 + */ +OH_AVSCREEN_CAPTURE_ErrCode OH_AVScreenCapture_ReleaseAudioBuffer(struct OH_AVScreenCapture *capture, + OH_AudioCaptureSourceType type); + +/** + * @brief Release the video buffer for the av screen capture + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @return Returns AVSCREEN_CAPTURE_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVSCREEN_CAPTURE_ErrCode} + * @since 10 + * @version 1.0 + */ +OH_AVSCREEN_CAPTURE_ErrCode OH_AVScreenCapture_ReleaseVideoBuffer(struct OH_AVScreenCapture *capture); + +/** + * @brief Set the callback function so that your application + * can respond to the events generated by the av screen capture. This interface must be called before Init is called. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @param callback A collection of all callback functions, see {@link OH_AVScreenCaptureCallback} + * @return Returns AVSCREEN_CAPTURE_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVSCREEN_CAPTURE_ErrCode} + * @since 10 + * @version 1.0 + */ +OH_AVSCREEN_CAPTURE_ErrCode OH_AVScreenCapture_SetCallback(struct OH_AVScreenCapture *capture, + struct OH_AVScreenCaptureCallback callback); + +/** + * @brief Release the av screen capture + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @return Returns AVSCREEN_CAPTURE_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVSCREEN_CAPTURE_ErrCode} + * @since 10 + * @version 1.0 + */ +OH_AVSCREEN_CAPTURE_ErrCode OH_AVScreenCapture_Release(struct OH_AVScreenCapture *capture); + +/** + * @brief Controls the switch of the microphone, which is turned on by default + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @param isMicrophone The switch of the microphone + * @return Returns AVSCREEN_CAPTURE_ERR_OK if the execution is successful, + * otherwise returns a specific error code, refer to {@link OH_AVSCREEN_CAPTURE_ErrCode} + * @since 10 + * @version 1.0 + */ +OH_AVSCREEN_CAPTURE_ErrCode OH_AVScreenCapture_SetMicrophoneEnabled(struct OH_AVScreenCapture *capture, + bool isMicrophone); + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVSCREEN_CAPTURE_H \ No newline at end of file diff --git a/multimedia/player_framework/native_avscreen_capture_base.h b/multimedia/player_framework/native_avscreen_capture_base.h new file mode 100644 index 0000000000000000000000000000000000000000..97b27e3f16aea7201b30461c3140cf6595305765 --- /dev/null +++ b/multimedia/player_framework/native_avscreen_capture_base.h @@ -0,0 +1,394 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVSCREEN_CAPTURE_BASE_H +#define NATIVE_AVSCREEN_CAPTURE_BASE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Nativebuffer of avscreeencapture that from graphics. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef struct OH_NativeBuffer OH_NativeBuffer; + +/** + * @brief Initialization of avscreeencapture + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef struct OH_AVScreenCapture OH_AVScreenCapture; + +/** + * @brief Enumerates screen capture mode. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef enum OH_CaptureMode { + /* capture home screen */ + OH_CAPTURE_HOME_SCREEN = 0, + /* capture a specified screen */ + OH_CAPTURE_SPECIFIED_SCREEN = 1, + /* capture a specified window */ + OH_CAPTURE_SPECIFIED_WINDOW = 2, + OH_CAPTURE_INVAILD = -1 +} OH_CaptureMode; + +/** + * @brief Enumerates audio cap source type. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef enum OH_AudioCaptureSourceType { + /* Invalid audio source */ + OH_SOURCE_INVALID = -1, + /* Default audio source */ + OH_SOURCE_DEFAULT = 0, + /* Microphone */ + OH_MIC = 1, + /* inner all PlayBack */ + OH_ALL_PLAYBACK = 2, + /* inner app PlayBack */ + OH_APP_PLAYBACK = 3, +} OH_AudioCaptureSourceType; + +/** + * @brief Enumerates audio codec formats. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef enum OH_AudioCodecFormat { + /* Default format */ + OH_AUDIO_DEFAULT = 0, + /* Advanced Audio Coding Low Complexity (AAC-LC) */ + OH_AAC_LC = 3, + /* Invalid value */ + OH_AUDIO_CODEC_FORMAT_BUTT, +} OH_AudioCodecFormat; + +/** + * @brief Enumerates video codec formats. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef enum OH_VideoCodecFormat { + /* Default format */ + OH_VIDEO_DEFAULT = 0, + /* H.264 */ + OH_H264 = 2, + /* H.265/HEVC */ + OH_H265 = 4, + /* MPEG4 */ + OH_MPEG4 = 6, + /* VP8 */ + OH_VP8 = 8, + /* VP9 */ + OH_VP9 = 10, + /* Invalid format */ + OH_VIDEO_CODEC_FORMAT_BUTT, +} OH_VideoCodecFormat; + +/** + * @brief Enumerates screen capture data type. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef enum OH_DataType { + /* YUV/RGBA/PCM, etc. original stream */ + OH_ORIGINAL_STREAM = 0, + /* h264/AAC, etc. encoded stream */ + OH_ENCODED_STREAM = 1, + /* mp4 file */ + OH_CAPTURE_FILE = 2, + OH_INVAILD = -1 +} OH_DataType; + +/** + * @brief Enumerates video source types. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef enum OH_VideoSourceType { + /* Unsupported App Usage. */ + /* YUV video data provided through graphic */ + OH_VIDEO_SOURCE_SURFACE_YUV = 0, + /* Raw encoded data provided through graphic */ + OH_VIDEO_SOURCE_SURFACE_ES, + /* RGBA video data provided through graphic */ + OH_VIDEO_SOURCE_SURFACE_RGBA, + /* Invalid value */ + OH_VIDEO_SOURCE_BUTT +} OH_VideoSourceType; + +/** + * @brief Enumerates the container format types. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef enum OH_ContainerFormatType { + /* Audio format type -- m4a */ + CFT_MPEG_4A = 0, + /* Video format type -- mp4 */ + CFT_MPEG_4 = 1 +} OH_ContainerFormatType; + +/** + * @brief Audio capture info struct + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef struct OH_AudioCaptureInfo { + /* Audio capture sample rate info */ + int32_t audioSampleRate; + /* Audio capture channel info */ + int32_t audioChannels; + /* Audio capture source type */ + OH_AudioCaptureSourceType audioSource; +} OH_AudioCaptureInfo; + +/** + * @brief Audio encoder info + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef struct OH_AudioEncInfo { + /* Audio encoder bitrate */ + int32_t audioBitrate; + /* Audio codec format */ + OH_AudioCodecFormat audioCodecformat; +} OH_AudioEncInfo; + +/** + * @brief The audio info of avscreeencapture + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef struct OH_AudioInfo { + /* Audio capture info of microphone */ + OH_AudioCaptureInfo micCapInfo; + /* Audio capture info of inner */ + OH_AudioCaptureInfo innerCapInfo; + /* Audio encoder info, no need to set, while dataType = OH_ORIGINAL_STREAM */ + OH_AudioEncInfo audioEncInfo; +} OH_AudioInfo; + +/** + * @brief Video capture info + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef struct OH_VideoCaptureInfo { + /* Display id, should be set while captureMode = CAPTURE_SPECIFIED_SCREEN */ + uint64_t displayId; + /* The ids of mission, should be set while captureMode = CAPTURE_SPECIFIED_WINDOW */ + int32_t *missionIDs; + /* Mission ids length, should be set while captureMode = CAPTURE_SPECIFIED_WINDOW */ + int32_t missionIDsLen; + /* Video frame width of avscreeencapture */ + int32_t videoFrameWidth; + /* Video frame height of avscreeencapture */ + int32_t videoFrameHeight; + /* Video source type of avscreeencapture */ + OH_VideoSourceType videoSource; +} OH_VideoCaptureInfo; + +/** + * @brief Videoc encoder info + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef struct OH_VideoEncInfo { + /* Video encoder format */ + OH_VideoCodecFormat videoCodec; + /* Video encoder bitrate */ + int32_t videoBitrate; + /* Video encoder frame rate */ + int32_t videoFrameRate; +} OH_VideoEncInfo; + +/** + * @brief Video info + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef struct OH_VideoInfo { + /* Video capture info */ + OH_VideoCaptureInfo videoCapInfo; + /* Video encoder info */ + OH_VideoEncInfo videoEncInfo; +} OH_VideoInfo; + +/** + * @brief Recorder file info + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef struct OH_RecorderInfo { + /* Recorder file url */ + char *url; + /* Recorder file url length */ + uint32_t urlLen; + /* Recorder file format */ + OH_ContainerFormatType fileFormat; +} OH_RecorderInfo; + +/** + * @brief AV screeen capture config info + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef struct OH_AVScreenCaptureConfig { + OH_CaptureMode captureMode; + OH_DataType dataType; + OH_AudioInfo audioInfo; + OH_VideoInfo videoInfo; + /* should be set, while dataType = OH_CAPTURE_FILE */ + OH_RecorderInfo recorderInfo; +} OH_AVScreenCaptureConfig; + +/** + * @brief When an error occurs in the running of the OH_AVScreenCapture instance, the function pointer will be called + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @param errorCode specific error code + * + * @since 10 + * @version 1.0 + */ +typedef void (*OH_AVScreenCaptureOnError)(OH_AVScreenCapture *capture, int32_t errorCode); + +/** + * @brief When audio buffer is available during the operation of OH_AVScreenCapture, the function pointer will + * be called. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @param isReady Information describing whether audio buffer is available + * @param type Information describing the audio source type + * + * @since 10 + * @version 1.0 + */ +typedef void (*OH_AVScreenCaptureOnAudioBufferAvailable)(OH_AVScreenCapture *capture, bool isReady, + OH_AudioCaptureSourceType type); + +/** + * @brief When video buffer is available during the operation of OH_AVScreenCapture, the function pointer will + * be called. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param capture Pointer to an OH_AVScreenCapture instance + * @param isReady Information describing whether video buffer is available + * + * @since 10 + * @version 1.0 + */ +typedef void (*OH_AVScreenCaptureOnVideoBufferAvailable)(OH_AVScreenCapture *capture, bool isReady); + +/** + * @brief A collection of all callback function pointers in OH_AVScreenCapture. Register an instance of this + * structure to the OH_AVScreenCapture instance, and process the information reported through the callback to ensure the + * normal operation of OH_AVScreenCapture. + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @param onError Monitor OH_AVScreenCapture operation errors, refer to {@link OH_AVScreenCaptureOnError} + * @param onAudioBufferAvailable Monitor audio buffer, refer to {@link OH_AVScreenCaptureOnAudioBufferAvailable} + * @param onVideoBufferAvailable Monitor video buffer, refer to {@link OH_AVScreenCaptureOnVideoBufferAvailable} + * + * @since 10 + * @version 1.0 + */ +typedef struct OH_AVScreenCaptureCallback { + OH_AVScreenCaptureOnError onError; + OH_AVScreenCaptureOnAudioBufferAvailable onAudioBufferAvailable; + OH_AVScreenCaptureOnVideoBufferAvailable onVideoBufferAvailable; +} OH_AVScreenCaptureCallback; + +/** + * @brief avscreeencapture rect info + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef struct OH_Rect { + /* X-coordinate of screen recording */ + int32_t x; + /* y-coordinate of screen recording */ + int32_t y; + /* Width of screen recording */ + int32_t width; + /* Height of screen recording */ + int32_t height; +} OH_Rect; + + +/** + * @brief Audiobuffer struct info + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * + * @since 10 + * @version 1.0 + */ +typedef struct OH_AudioBuffer { + /* Audio buffer memory block */ + uint8_t *buf; + /* Audio buffer memory block size */ + int32_t size; + /* Audio buffer timestamp info */ + int64_t timestamp; + /* Audio capture source type */ + OH_AudioCaptureSourceType type; +} OH_AudioBuffer; + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVSCREEN_CAPTURE_BASE_H \ No newline at end of file diff --git a/multimedia/player_framework/native_avscreen_capture_errors.h b/multimedia/player_framework/native_avscreen_capture_errors.h new file mode 100644 index 0000000000000000000000000000000000000000..d202659f0da89789496eb3de5b401fb860013d0b --- /dev/null +++ b/multimedia/player_framework/native_avscreen_capture_errors.h @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVSCREEN_CAPTURE_ERRORS_H +#define NATIVE_AVSCREEN_CAPTURE_ERRORS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Screen capture error code + * @syscap SystemCapability.Multimedia.Media.AVScreenCapture + * @since 10 + * @version 1.0 + */ + +typedef enum OH_AVSCREEN_CAPTURE_ErrCode { + /** + * basic error mask for screen recording. + */ + AV_SCREEN_CAPTURE_ERR_BASE = 0, + /** + * the operation completed successfully. + */ + AV_SCREEN_CAPTURE_ERR_OK = AV_SCREEN_CAPTURE_ERR_BASE, + /** + * no memory. + */ + AV_SCREEN_CAPTURE_ERR_NO_MEMORY = AV_SCREEN_CAPTURE_ERR_BASE + 1, + /** + * opertation not be permitted. + */ + AV_SCREEN_CAPTURE_ERR_OPERATE_NOT_PERMIT = AV_SCREEN_CAPTURE_ERR_BASE + 2, + /** + * invalid argument. + */ + AV_SCREEN_CAPTURE_ERR_INVALID_VAL = AV_SCREEN_CAPTURE_ERR_BASE + 3, + /** + * IO error. + */ + AV_SCREEN_CAPTURE_ERR_IO = AV_SCREEN_CAPTURE_ERR_BASE + 4, + /** + * network timeout. + */ + AV_SCREEN_CAPTURE_ERR_TIMEOUT = AV_SCREEN_CAPTURE_ERR_BASE + 5, + /** + * unknown error. + */ + AV_SCREEN_CAPTURE_ERR_UNKNOWN = AV_SCREEN_CAPTURE_ERR_BASE + 6, + /** + * media service died. + */ + AV_SCREEN_CAPTURE_ERR_SERVICE_DIED = AV_SCREEN_CAPTURE_ERR_BASE + 7, + /** + * the state is not support this operation. + */ + AV_SCREEN_CAPTURE_ERR_INVALID_STATE = AV_SCREEN_CAPTURE_ERR_BASE + 8, + /** + * unsupport interface. + */ + AV_SCREEN_CAPTURE_ERR_UNSUPPORT = AV_SCREEN_CAPTURE_ERR_BASE + 9, + /** + * extend err start. + */ + AV_SCREEN_CAPTURE_ERR_EXTEND_START = AV_SCREEN_CAPTURE_ERR_BASE + 100, +} OH_AVSCREEN_CAPTURE_ErrCode; + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVSCREEN_CAPTURE_ERRORS_H \ No newline at end of file diff --git a/patches/patches.json b/patches/patches.json new file mode 100644 index 0000000000000000000000000000000000000000..10f32254842b4a1f997736a6e5fbee890b8bd625 --- /dev/null +++ b/patches/patches.json @@ -0,0 +1,9 @@ +{ + "patches": [ + { + "project":"build", + "path":"build", + "pr_url":"https://gitee.com/openharmony/build/pulls/2215" + } + ] +} \ No newline at end of file diff --git a/security/huks/BUILD.gn b/security/huks/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..e2d44a30ad115e7a1fd065f329621761c8e69407 --- /dev/null +++ b/security/huks/BUILD.gn @@ -0,0 +1,71 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +ohos_ndk_library("libhuks_ndk") { + output_name = "huks_ndk" + output_extension = "z.so" + ndk_description_file = "./libhuks.ndk.json" + min_compact_version = "1" + + # system_capability = "SystemCapability.Security.Huks" +} + +ohos_ndk_headers("huks_header") { + dest_dir = "$ndk_headers_out_dir/huks" + sources = [ + "./include/native_huks_api.h", + "./include/native_huks_param.h", + "./include/native_huks_type.h", + ] +} + +config("huks_config") { + include_dirs = [ "include" ] +} + +ohos_shared_library("huks_ndk") { + public_configs = [ ":huks_config" ] + defines = [ + "L2_STANDARD", + "_HARDWARE_ROOT_KEY_", + "_HUKS_LOG_ENABLE_", + ] + + include_dirs = [ + "//base/security/huks/interfaces/kits/c/include", + "//base/security/huks/interfaces/inner_api/huks_standard/main/include", + "//base/security/huks/frameworks/huks_standard/main/common/include", + ] + + sources = [ + "//base/security/huks/interfaces/kits/c/src/native_huks_api_adapter.c", + "src/native_huks_api.c", + "src/native_huks_param.c", + ] + + deps = [ + "//base/security/huks/interfaces/inner_api/huks_standard/main:libhukssdk", + ] + + external_deps = [ "hilog:libhilog" ] + + cflags_cc = [ + "-Wall", + "-Werror", + ] + + part_name = "huks" + subsystem_name = "security" +} diff --git a/security/huks/include/native_huks_api.h b/security/huks/include/native_huks_api.h new file mode 100644 index 0000000000000000000000000000000000000000..f052661e21981d10971e1a98d4f05457a67f1d3f --- /dev/null +++ b/security/huks/include/native_huks_api.h @@ -0,0 +1,263 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_HUKS_API_H +#define NATIVE_HUKS_API_H + +/** + * @addtogroup HuksKeyApi + * @{ + * + * @brief Describes the OpenHarmony Universal KeyStore (HUKS) capabilities, including key management and + * cryptography operations, provided for applications. + * The keys managed by HUKS can be imported by applications or generated by calling the HUKS APIs. + * + * @syscap SystemCapability.Security.Huks + * @since 9 + * @version 1.0 + */ + +/** + * @file native_huks_api.h + * + * @brief Declares the APIs used to access the HUKS. + * + * @since 9 + * @version 1.0 + */ + +#include "native_huks_type.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Obtains the current HUKS SDK version. + * + * @param sdkVersion Indicates the pointer to the SDK version (in string format) obtained. + * return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_GetSdkVersion(struct OH_Huks_Blob *sdkVersion); + +/** + * @brief Generates a key. + * + * @param keyAlias Indicates the pointer to the alias of the key to generate. + * The alias must be unique in the process of the service. Otherwise, the key will be overwritten. + * @param paramSetIn Indicates the pointer to the parameter set for generating the key. + * @param paramSetOut Indicates the pointer to a temporary key generated. If the generated key is + * not of a temporary type, this parameter is a null pointer. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_GenerateKeyItem(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSetIn, struct OH_Huks_ParamSet *paramSetOut); + +/** + * @brief Imports a key in plaintext. + * + * @param keyAlias Indicates the pointer to the alias of the key to import. + * The alias must be unique in the process of the service. Otherwise, the key will be overwritten. + * @param paramSet Indicates the pointer to the parameters of the key to import. + * @param key Indicates the pointer to the key to import. The key must be in the format required by the HUKS. + * For details, see {@link HuksTypeApi}. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_ImportKeyItem(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSet, const struct OH_Huks_Blob *key); + +/** + * @brief Imports a wrapped key. + * + * @param keyAlias Indicates the pointer to the alias of the key to import. + * The alias must be unique in the process of the service. Otherwise, the key will be overwritten. + * @param wrappingKeyAlias Indicates the pointer to the alias of the wrapping key, + * which is obtained through key agreement and used to decrypt the key to import. + * @param paramSet Indicates the pointer to the parameters of the wrapped key to import. + * @param wrappedKeyData Indicates the pointer to the wrapped key to import. + * The key must be in the format required by the HUKS. For details, see {@link OH_Huks_AlgSuite}. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_ImportWrappedKeyItem(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_Blob *wrappingKeyAlias, const struct OH_Huks_ParamSet *paramSet, + const struct OH_Huks_Blob *wrappedKeyData); + +/** + * @brief Exports a public key. + * + * @param keyAlias Indicates the pointer to the alias of the public key to export. + * The alias must be the same as the alias for the key generated. + * @param paramSet Indicates the pointer to the parameters required for exporting the public key. + * @param key Indicates the pointer to the public key exported. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_ExportPublicKeyItem(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSet, struct OH_Huks_Blob *key); + +/** + * @brief Deletes a key. + * + * @param keyAlias Indicates the pointer to the alias of the key to delete. + * The alias must be the same as the alias for the key generated. + * @param paramSet Indicates the pointer to the parameters required for deleting the key. + * By default, this parameter is a null pointer. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_DeleteKeyItem(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSet); + +/** + * @brief Obtains the attributes of a key. + * + * @param keyAlias Indicates the pointer to the alias of the target key. + * @param paramSetIn Indicates the pointer to the attribute tag required for + * obtaining the attributes. By default, this parameter is a null pointer. + * @param paramSetOut Indicates the pointer to the attributes obtained. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_GetKeyItemParamSet(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSetIn, struct OH_Huks_ParamSet *paramSetOut); + +/** + * @brief Checks whether a key exists. + * + * @param keyAlias Indicates the pointer to the alias of the target key. + * @param paramSet Indicates the pointer to the attribute tag required for checking the key. + * By default, this parameter is a null pointer. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the key exists. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_ERR_CODE_ITEM_NOT_EXIST} if the key does not exist. + * @return Returns any other error code for other cases. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_IsKeyItemExist(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSet); + +/** + * @brief Obtain the key certificate chain. + * + * @param keyAlias Indicates the pointer to the alias of the target key. + * @param paramSet Indicates the pointer to the parameters required for obtaining the key certificate. + * @param certChain Indicates the pointer to the key certificate chain obtained. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_AttestKeyItem(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSet, struct OH_Huks_CertChain *certChain); + +/** + * @brief Initializes the key session interface and obtains a handle (mandatory) and challenge value (optional). + * + * @param keyAlias Indicates the pointer to the alias of the target key. + * @param paramSet Indicates the pointer to the parameters for the initialization operation. + * @param handle Indicates the pointer to the handle of the key session obtained. + * This handle is required for subsequent operations, including {@link OH_Huks_UpdateSession}, + * {@link OH_Huks_FinishSession}, and {@link OH_Huks_AbortSession}. + * @param challenge Indicates the pointer to the challenge value obtained. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + * @see OH_Huks_UpdateSession + * @see OH_Huks_FinishSession + * @see OH_Huks_AbortSession + */ +struct OH_Huks_Result OH_Huks_InitSession(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSet, struct OH_Huks_Blob *handle, struct OH_Huks_Blob *token); + +/** + * @brief Adds data by segment for the key operation, performs the related key operation, + * and outputs the processed data. + * + * @param handle Indicates the pointer to the key session handle, which is generated by {@link OH_Huks_InitSession}. + * @param paramSet Indicates the pointer to the parameters required for the key operation. + * @param inData Indicates the pointer to the data to be processed. + * This API can be called multiples time to process large data by segment. + * @param outData Indicates the pointer to the output data. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + * @see OH_Huks_InitSession + * @see OH_Huks_FinishSession + * @see OH_Huks_AbortSession + */ +struct OH_Huks_Result OH_Huks_UpdateSession(const struct OH_Huks_Blob *handle, + const struct OH_Huks_ParamSet *paramSet, const struct OH_Huks_Blob *inData, struct OH_Huks_Blob *outData); + +/** + * @brief Ends the key session. + * + * @param handle Indicates the pointer to the key session handle, which is generated by {@link OH_Huks_InitSession}. + * @param paramSet Indicates the pointer to the parameters required for the key operation. + * @param inData Indicates the pointer to the data to be processed. + * @param outData Indicates the pointer to the output data. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + * @see OH_Huks_InitSession + * @see OH_Huks_UpdateSession + * @see OH_Huks_AbortSession + */ +struct OH_Huks_Result OH_Huks_FinishSession(const struct OH_Huks_Blob *handle, + const struct OH_Huks_ParamSet *paramSet, const struct OH_Huks_Blob *inData, struct OH_Huks_Blob *outData); + +/** + * @brief Aborts a key session. + * + * @param handle Indicates the pointer to the key session handle, which is generated by {@link OH_Huks_InitSession}. + * @param paramSet Indicates the pointer to the parameters required for aborting the key session. + * By default, this parameter is a null pointer. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + * @see OH_Huks_InitSession + * @see OH_Huks_UpdateSession + * @see OH_Huks_FinishSession + */ +struct OH_Huks_Result OH_Huks_AbortSession(const struct OH_Huks_Blob *handle, + const struct OH_Huks_ParamSet *paramSet); + +#ifdef __cplusplus +} +#endif + +/** @} */ +#endif /* NATIVE_HUKS_API_H */ diff --git a/security/huks/include/native_huks_api_adapter.h b/security/huks/include/native_huks_api_adapter.h new file mode 100644 index 0000000000000000000000000000000000000000..25f187cc3adaee59bdeea96def9d042fd1578fe8 --- /dev/null +++ b/security/huks/include/native_huks_api_adapter.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_HUKS_API_ADAPTER_H +#define NATIVE_HUKS_API_ADAPTER_H + +#include "native_huks_type.h" + +#ifdef __cplusplus +extern "C" { +#endif + +int32_t HuksAttestAdapter(const struct OH_Huks_Blob *keyAlias, const struct OH_Huks_ParamSet *paramSet, + struct OH_Huks_CertChain *certChain); + +#ifdef __cplusplus +} +#endif + +#endif /* NATIVE_HUKS_API_ADAPTER_H */ diff --git a/security/huks/include/native_huks_param.h b/security/huks/include/native_huks_param.h new file mode 100644 index 0000000000000000000000000000000000000000..c375fe1f9a67f82462e984b326bef9acad3cc7af --- /dev/null +++ b/security/huks/include/native_huks_param.h @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_HUKS_PARAM_H +#define NATIVE_HUKS_PARAM_H + +/** + * @addtogroup HuksParamSetApi + * @{ + * + * @brief Defines the capabilities of OpenHarmony Universal KeyStore (HUKS) parameter sets. + * The HUKS APIs can be used to perform parameter set lifecycle management, + * including initializing a parameter set, adding parameters to a parameter set, constructing + * a parameter set, and destroying a parameter set. + * They can also be used to obtain parameters, copy parameter sets, and check parameter validity. + * + * @syscap SystemCapability.Security.Huks + * @since 9 + * @version 1.0 + */ + +/** + * @file native_huks_param.h + * + * @brief Provides APIs for constructing, using, and destroying parameter sets. + * + * @since 9 + * @version 1.0 + */ + +#include "native_huks_type.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Initializes a parameter set. + * + * @param paramSet Indicates the double pointer to the parameter set to initialize. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the initialization is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_InitParamSet(struct OH_Huks_ParamSet **paramSet); + +/** + * @brief Adds parameters to a parameter set. + * + * @param paramSet Indicates the pointer to the parameter set to which parameters are to be added. + * @param params Indicates the pointer to the array of parameters to add. + * @param paramCnt Indicates the number of parameters to add. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_AddParams(struct OH_Huks_ParamSet *paramSet, + const struct OH_Huks_Param *params, uint32_t paramCnt); + +/** + * @brief Constructs a parameter set. + * + * @param paramSet Indicates the double pointer to the parameter set to construct. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_BuildParamSet(struct OH_Huks_ParamSet **paramSet); + +/** + * @brief Destroys a parameter set. + * + * @param paramSet Indicates the double pointer to the parameter set to destroy. + * @since 9 + * @version 1.0 + */ +void OH_Huks_FreeParamSet(struct OH_Huks_ParamSet **paramSet); + +/** + * @brief Copies a parameter set (deep copy). + * + * @param fromParamSet Indicates the pointer to the parameter set to copy. + * @param fromParamSetSize Indicates the memory size occupied by the source parameter set. + * @param paramSet Indicates the double pointer to the new parameter set generated. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_CopyParamSet(const struct OH_Huks_ParamSet *fromParamSet, + uint32_t fromParamSetSize, struct OH_Huks_ParamSet **paramSet); + +/** + * @brief Obtains parameters from a parameter set. + * + * @param paramSet Indicates the pointer to the target parameter set. + * @param tag Indicates the value of the parameter to be obtained. + * @param param Indicates the double pointer to the parameter obtained. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the operation is successful, + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_GetParam(const struct OH_Huks_ParamSet *paramSet, uint32_t tag, + struct OH_Huks_Param **param); + +/** + * @brief Refreshes data of the Blob type in a parameter set. + * + * @param paramSet Indicates the pointer to the target parameter set. + * @param isCopy Specifies whether to copy the data of the Blob type to the parameter set. + * If yes, the data of the Blob type will be copied to the parameter set. + * Otherwise, only the address of the Blob data will be refreshed. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if operation is successful; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_FreshParamSet(struct OH_Huks_ParamSet *paramSet, bool isCopy); + +/** + * @brief Checks whether the parameters in a parameter set are valid. + * + * @param paramSet Indicates the pointer to the parameter set to check. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the parameters in the parameter set are valid; + * returns other values if the parameter set has invalid, duplicate, or incorrect parameters. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_IsParamSetTagValid(const struct OH_Huks_ParamSet *paramSet); + +/** + * @brief Checks whether a parameter set is of the valid size. + * + * @param paramSet Indicates the pointer to the parameter set to check. + * @param size Indicates the memory size occupied by the parameter set. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the parameter set is of the valid size; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_IsParamSetValid(const struct OH_Huks_ParamSet *paramSet, uint32_t size); + +/** + * @brief Checks whether two parameters are the same. + * + * @param baseParam Indicates the pointer to the first parameter. + * @param param Indicates the pointer to the second parameter. + * @return Returns {@link OH_Huks_ErrCode#OH_HUKS_SUCCESS} if the two parameters are the same; + * returns an error code otherwise. + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result OH_Huks_CheckParamMatch(const struct OH_Huks_Param *baseParam, const struct OH_Huks_Param *param); + +#ifdef __cplusplus +} +#endif + +/** @} */ +#endif /* NATIVE_HUKS_PARAM_H */ diff --git a/security/huks/include/native_huks_type.h b/security/huks/include/native_huks_type.h new file mode 100644 index 0000000000000000000000000000000000000000..9b51f56c9dae5511159e49dabf1c5901854fc51d --- /dev/null +++ b/security/huks/include/native_huks_type.h @@ -0,0 +1,861 @@ +/* + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_OH_HUKS_TYPE_H +#define NATIVE_OH_HUKS_TYPE_H + +/** + * @addtogroup HuksTypeApi + * @{ + * + * @brief Defines the macros, enumerated values, data structures, + * and error codes used by OpenHarmony Universal KeyStore (HUKS) APIs. + * + * @syscap SystemCapability.Security.Huks + * @since 9 + * @version 1.0 + */ + +/** + * @file native_huks_type.h + * + * @brief Defines the enumerated variables, structures, and macros used in the HUKS APIs. + * + * @since 9 + * @version 1.0 + */ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define OH_HUKS_AE_TAG_LEN 16 +#define OH_HUKS_BITS_PER_BYTE 8 +#define OH_HUKS_MAX_KEY_SIZE 2048 +#define OH_HUKS_AE_NONCE_LEN 12 +#define OH_HUKS_MAX_KEY_ALIAS_LEN 64 +#define OH_HUKS_MAX_PROCESS_NAME_LEN 50 +#define OH_HUKS_MAX_RANDOM_LEN 1024 +#define OH_HUKS_SIGNATURE_MIN_SIZE 64 +#define OH_HUKS_MAX_OUT_BLOB_SIZE (5 * 1024 * 1024) +#define OH_HUKS_WRAPPED_FORMAT_MAX_SIZE (1024 * 1024) +#define OH_HUKS_IMPORT_WRAPPED_KEY_TOTAL_BLOBS 10 +#define TOKEN_CHALLENGE_LEN 32 +#define SHA256_SIGN_LEN 32 +#define TOKEN_SIZE 32 +#define MAX_AUTH_TIMEOUT_SECOND 60 +#define SECURE_SIGN_VERSION 0x01000001 + +/** + * @brief Enumerates the key purposes. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_KeyPurpose { + /** Used to encrypt the plaintext. */ + OH_HUKS_KEY_PURPOSE_ENCRYPT = 1, + /** Used to decrypt the cipher text. */ + OH_HUKS_KEY_PURPOSE_DECRYPT = 2, + /** Used to sign data. */ + OH_HUKS_KEY_PURPOSE_SIGN = 4, + /** Used to verify the signature. */ + OH_HUKS_KEY_PURPOSE_VERIFY = 8, + /** Used to derive a key. */ + OH_HUKS_KEY_PURPOSE_DERIVE = 16, + /** Used for an encrypted export. */ + OH_HUKS_KEY_PURPOSE_WRAP = 32, + /** Used for an encrypted import. */ + OH_HUKS_KEY_PURPOSE_UNWRAP = 64, + /** Used to generate a message authentication code (MAC). */ + OH_HUKS_KEY_PURPOSE_MAC = 128, + /** Used for key agreement. */ + OH_HUKS_KEY_PURPOSE_AGREE = 256, +}; + +/** + * @brief Enumerates the digest algorithms. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_KeyDigest { + /** No digest algorithm. */ + OH_HUKS_DIGEST_NONE = 0, + /** MD5. */ + OH_HUKS_DIGEST_MD5 = 1, + /** SM3. */ + OH_HUKS_DIGEST_SM3 = 2, + /** SHA-1. */ + OH_HUKS_DIGEST_SHA1 = 10, + /** SHA-224. */ + OH_HUKS_DIGEST_SHA224 = 11, + /** SHA-256. */ + OH_HUKS_DIGEST_SHA256 = 12, + /** SHA-384. */ + OH_HUKS_DIGEST_SHA384 = 13, + /** SHA-512. */ + OH_HUKS_DIGEST_SHA512 = 14, +}; + +/** + * @brief Enumerates the padding algorithms. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_KeyPadding { + /** No padding algorithm. */ + OH_HUKS_PADDING_NONE = 0, + /** Optimal Asymmetric Encryption Padding (OAEP). */ + OH_HUKS_PADDING_OAEP = 1, + /** Probabilistic Signature Scheme (PSS). */ + OH_HUKS_PADDING_PSS = 2, + /** Public Key Cryptography Standards (PKCS) #1 v1.5. */ + OH_HUKS_PADDING_PKCS1_V1_5 = 3, + /** PKCS #5. */ + OH_HUKS_PADDING_PKCS5 = 4, + /** PKCS #7. */ + OH_HUKS_PADDING_PKCS7 = 5, +}; + +/** + * @brief Enumerates the cipher modes. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_CipherMode { + /** Electronic Code Block (ECB) mode. */ + OH_HUKS_MODE_ECB = 1, + /** Cipher Block Chaining (CBC) mode. */ + OH_HUKS_MODE_CBC = 2, + /** Counter (CTR) mode. */ + OH_HUKS_MODE_CTR = 3, + /** Output Feedback (OFB) mode. */ + OH_HUKS_MODE_OFB = 4, + /** Counter with CBC-MAC (CCM) mode. */ + OH_HUKS_MODE_CCM = 31, + /** Galois/Counter (GCM) mode. */ + OH_HUKS_MODE_GCM = 32, +}; + +/** + * @brief Enumerates the key sizes. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_KeySize { + /** Rivest-Shamir-Adleman (RSA) key of 512 bits. */ + OH_HUKS_RSA_KEY_SIZE_512 = 512, + /** RSA key of 768 bits. */ + OH_HUKS_RSA_KEY_SIZE_768 = 768, + /** RSA key of 1024 bits. */ + OH_HUKS_RSA_KEY_SIZE_1024 = 1024, + /** RSA key of 2048 bits. */ + OH_HUKS_RSA_KEY_SIZE_2048 = 2048, + /** RSA key of 3072 bits. */ + OH_HUKS_RSA_KEY_SIZE_3072 = 3072, + /** RSA key of 4096 bits. */ + OH_HUKS_RSA_KEY_SIZE_4096 = 4096, + + /** Elliptic Curve Cryptography (ECC) key of 224 bits. */ + OH_HUKS_ECC_KEY_SIZE_224 = 224, + /** ECC key of 256 bits. */ + OH_HUKS_ECC_KEY_SIZE_256 = 256, + /** ECC key of 384 bits. */ + OH_HUKS_ECC_KEY_SIZE_384 = 384, + /** ECC key of 521 bits. */ + OH_HUKS_ECC_KEY_SIZE_521 = 521, + + /** Advanced Encryption Standard (AES) key of 128 bits. */ + OH_HUKS_AES_KEY_SIZE_128 = 128, + /** AES key of 192 bits. */ + OH_HUKS_AES_KEY_SIZE_192 = 192, + /** AES key of 256 bits. */ + OH_HUKS_AES_KEY_SIZE_256 = 256, + /** AES key of 512 bits. */ + OH_HUKS_AES_KEY_SIZE_512 = 512, + + /** Curve25519 key of 256 bits. */ + OH_HUKS_CURVE25519_KEY_SIZE_256 = 256, + + /** Diffie-Hellman (DH) key of 2048 bits. */ + OH_HUKS_DH_KEY_SIZE_2048 = 2048, + /** DH key of 3072 bits. */ + OH_HUKS_DH_KEY_SIZE_3072 = 3072, + /** DH key of 4096 bits. */ + OH_HUKS_DH_KEY_SIZE_4096 = 4096, + + /** ShangMi2 (SM2) key of 256 bits. */ + OH_HUKS_SM2_KEY_SIZE_256 = 256, + /** ShangMi4 (SM4) key of 128 bits. */ + OH_HUKS_SM4_KEY_SIZE_128 = 128, +}; + +/** + * @brief Enumerates the key algorithms. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_KeyAlg { + /** RSA. */ + OH_HUKS_ALG_RSA = 1, + /** ECC. */ + OH_HUKS_ALG_ECC = 2, + /** DSA. */ + OH_HUKS_ALG_DSA = 3, + + /** AES. */ + OH_HUKS_ALG_AES = 20, + /** HMAC. */ + OH_HUKS_ALG_HMAC = 50, + /** HKDF. */ + OH_HUKS_ALG_HKDF = 51, + /** PBKDF2. */ + OH_HUKS_ALG_PBKDF2 = 52, + + /** ECDH. */ + OH_HUKS_ALG_ECDH = 100, + /** X25519. */ + OH_HUKS_ALG_X25519 = 101, + /** Ed25519. */ + OH_HUKS_ALG_ED25519 = 102, + /** DH. */ + OH_HUKS_ALG_DH = 103, + + /** SM2. */ + OH_HUKS_ALG_SM2 = 150, + /** SM3. */ + OH_HUKS_ALG_SM3 = 151, + /** SM4. */ + OH_HUKS_ALG_SM4 = 152, +}; + +/** + * @brief Enumerates the algorithm suites required for ciphertext imports. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_AlgSuite { + /** Key material format (Length-Value format), X25519 key agreement, and AES-256-GCM encryption and decryption. + * | x25519_plain_pubkey_length (4 Byte) | x25519_plain_pubkey | agreekey_aad_length (4 Byte) | agreekey_aad + * | agreekey_nonce_length (4 Byte) | agreekey_nonce | + * | agreekey_aead_tag_len (4 Byte) | agreekey_aead_tag | + * | kek_enc_data_length (4 Byte) | kek_enc_data | kek_aad_length (4 Byte) | kek_aad + * | kek_nonce_length (4 Byte) | kek_nonce | kek_aead_tag_len (4 Byte) | kek_aead_tag + * | key_material_size_len (4 Byte) | key_material_size | key_mat_enc_length (4 Byte) | key_mat_enc_data + */ + OH_HUKS_UNWRAP_SUITE_X25519_AES_256_GCM_NOPADDING = 1, + + /** Key material format (Length-Value format), ECDH-p256 key agreement, and AES-256-GCM encryption and decryption. + * | ECC_plain_pubkey_length (4 Byte) | ECC_plain_pubkey | agreekey_aad_length (4 Byte) | agreekey_aad + * | agreekey_nonce_length (4 Byte) | agreekey_nonce | + * | agreekey_aead_tag_len (4 Byte) | agreekey_aead_tag | + * | kek_enc_data_length (4 Byte) | kek_enc_data | kek_aad_length (4 Byte) | kek_aad + * | kek_nonce_length (4 Byte) | kek_nonce | kek_aead_tag_len (4 Byte) | kek_aead_tag + * | key_material_size_len (4 Byte) | key_material_size | key_mat_enc_length (4 Byte) | key_mat_enc_data + */ + OH_HUKS_UNWRAP_SUITE_ECDH_AES_256_GCM_NOPADDING = 2, +}; + +/** + * @brief Enumerates the key generation types. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_KeyGenerateType { + /** Key generated by default. */ + OH_HUKS_KEY_GENERATE_TYPE_DEFAULT = 0, + /** Derived key. */ + OH_HUKS_KEY_GENERATE_TYPE_DERIVE = 1, + /** Key obtained by key agreement. */ + OH_HUKS_KEY_GENERATE_TYPE_AGREE = 2, +}; + +/** + * @brief Enumerates the key generation modes. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_KeyFlag { + /** Import a public key using an API. */ + OH_HUKS_KEY_FLAG_IMPORT_KEY = 1, + /** Generate a key by using an API. */ + OH_HUKS_KEY_FLAG_GENERATE_KEY = 2, + /** Generate a key by using a key agreement API. */ + OH_HUKS_KEY_FLAG_AGREE_KEY = 3, + /** Derive a key by using an API. */ + OH_HUKS_KEY_FLAG_DERIVE_KEY = 4, +}; + +/** + * @brief Enumerates the key storage modes. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_KeyStorageType { + /** The key is managed locally. */ + OH_HUKS_STORAGE_TEMP = 0, + /** The key is managed by the HUKS service. */ + OH_HUKS_STORAGE_PERSISTENT = 1, + /** The key is only used in huks. */ + OH_HUKS_STORAGE_ONLY_USED_IN_HUKS = 2, + /** The key can be allowed to export. */ + OH_HUKS_STORAGE_KEY_EXPORT_ALLOWED = 3, +}; + +/** + * @brief Enumerates the types of keys to import. By default, + * a public key is imported. This field is not required when a symmetric key is imported. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_ImportKeyType { + /** Public key. */ + OH_HUKS_KEY_TYPE_PUBLIC_KEY = 0, + /** Private key. */ + OH_HUKS_KEY_TYPE_PRIVATE_KEY = 1, + /** Public and private key pair. */ + OH_HUKS_KEY_TYPE_KEY_PAIR = 2, +}; + +/** + * @brief Enumerates the key storage modes. + * + * @since 10 + * @version 1.0 + */ +enum OH_Huks_RsaPssSaltLenType { + /** Salt length matches digest. */ + OH_HUKS_RSA_PSS_SALT_LEN_DIGEST = 0, + /** Set salt length to maximum possible, default type. */ + OH_HUKS_RSA_PSS_SALT_LEN_MAX = 1, +}; + +/** + * @brief Enumerates the error codes. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_ErrCode { + /** The operation is successful. */ + OH_HUKS_SUCCESS = 0, + /** Permission verification failed. */ + OH_HUKS_ERR_CODE_PERMISSION_FAIL = 201, + /** Invalid parameters are detected. */ + OH_HUKS_ERR_CODE_ILLEGAL_ARGUMENT = 401, + /** The API is not supported. */ + OH_HUKS_ERR_CODE_NOT_SUPPORTED_API = 801, + + /** The feature is not supported. */ + OH_HUKS_ERR_CODE_FEATURE_NOT_SUPPORTED = 12000001, + /** Key algorithm parameters are missing. */ + OH_HUKS_ERR_CODE_MISSING_CRYPTO_ALG_ARGUMENT = 12000002, + /** Invalid key algorithm parameters are detected. */ + OH_HUKS_ERR_CODE_INVALID_CRYPTO_ALG_ARGUMENT = 12000003, + /** Failed to operate the file. */ + OH_HUKS_ERR_CODE_FILE_OPERATION_FAIL = 12000004, + /** The process communication failed. */ + OH_HUKS_ERR_CODE_COMMUNICATION_FAIL = 12000005, + /** Failed to operate the algorithm library. */ + OH_HUKS_ERR_CODE_CRYPTO_FAIL = 12000006, + /** Failed to access the key because the key has expired. */ + OH_HUKS_ERR_CODE_KEY_AUTH_PERMANENTLY_INVALIDATED = 12000007, + /** Failed to access the key because the authentication has failed. */ + OH_HUKS_ERR_CODE_KEY_AUTH_VERIFY_FAILED = 12000008, + /** Key access timed out. */ + OH_HUKS_ERR_CODE_KEY_AUTH_TIME_OUT = 12000009, + /** The number of key operation sessions has reached the limit. */ + OH_HUKS_ERR_CODE_SESSION_LIMIT = 12000010, + /** The entity does not exist. */ + OH_HUKS_ERR_CODE_ITEM_NOT_EXIST = 12000011, + /** Internal error. */ + OH_HUKS_ERR_CODE_INTERNAL_ERROR = 12000012, + /** The authentication credential does not exist. */ + OH_HUKS_ERR_CODE_CREDENTIAL_NOT_EXIST = 12000013, +}; + +/** + * @brief Enumerates the tag types. + * @see OH_Huks_Param + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_TagType { + /** Invalid tag type. */ + OH_HUKS_TAG_TYPE_INVALID = 0 << 28, + /** int32_t. */ + OH_HUKS_TAG_TYPE_INT = 1 << 28, + /** uin32_t. */ + OH_HUKS_TAG_TYPE_UINT = 2 << 28, + /** uin64_t. */ + OH_HUKS_TAG_TYPE_ULONG = 3 << 28, + /** Boolean. */ + OH_HUKS_TAG_TYPE_BOOL = 4 << 28, + /** OH_Huks_Blob. */ + OH_HUKS_TAG_TYPE_BYTES = 5 << 28, +}; + +/** + * @brief Enumerates the user authentication types. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_UserAuthType { + /** Fingerprint authentication. */ + OH_HUKS_USER_AUTH_TYPE_FINGERPRINT = 1 << 0, + /** Facial authentication. */ + OH_HUKS_USER_AUTH_TYPE_FACE = 1 << 1, + /** PIN authentication. */ + OH_HUKS_USER_AUTH_TYPE_PIN = 1 << 2, +}; + +/** + * @brief Enumerates the access control types. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_AuthAccessType { + /** The key is invalid after the password is cleared. */ + OH_HUKS_AUTH_ACCESS_INVALID_CLEAR_PASSWORD = 1 << 0, + /** The key is invalid after a new biometric feature is enrolled. */ + OH_HUKS_AUTH_ACCESS_INVALID_NEW_BIO_ENROLL = 1 << 1, +}; + +/** + * @brief Enumerates the types of the challenges generated when a key is used. + * @see OH_Huks_ChallengePosition + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_ChallengeType { + /** Normal challenge, which is of 32 bytes by default. */ + OH_HUKS_CHALLENGE_TYPE_NORMAL = 0, + /** Custom challenge, which supports only one authentication for multiple keys. + * The valid value of a custom challenge is of 8 bytes. + */ + OH_HUKS_CHALLENGE_TYPE_CUSTOM = 1, + /** Challenge is not required. */ + OH_HUKS_CHALLENGE_TYPE_NONE = 2, +}; + +/** + * @brief Enumerates the positions of the 8-byte valid value in a custom challenge generated. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_ChallengePosition { + /** Bytes 0 to 7. */ + OH_HUKS_CHALLENGE_POS_0 = 0, + /** Bytes 8 to 15. */ + OH_HUKS_CHALLENGE_POS_1, + /** Bytes 16 to 23. */ + OH_HUKS_CHALLENGE_POS_2, + /** Bytes 24 to 31. */ + OH_HUKS_CHALLENGE_POS_3, +}; + +/** + * @brief Enumerates the signature types of the keys generated or imported. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_SecureSignType { + /** + * The signature carries authentication information. This field is specified when a key + * is generated or imported. When the key is used to sign data, the data will be added with + * the authentication information and then be signed. + */ + OH_HUKS_SECURE_SIGN_WITH_AUTHINFO = 1, +}; + +/** + * @brief Enumerates the tag values used in parameter sets. + * + * @since 9 + * @version 1.0 + */ +enum OH_Huks_Tag { + /** Tags for key parameters. The value range is 1 to 200. */ + /** Algorithm. */ + OH_HUKS_TAG_ALGORITHM = OH_HUKS_TAG_TYPE_UINT | 1, + /** Key purpose. */ + OH_HUKS_TAG_PURPOSE = OH_HUKS_TAG_TYPE_UINT | 2, + /** Key size. */ + OH_HUKS_TAG_KEY_SIZE = OH_HUKS_TAG_TYPE_UINT | 3, + /** Digest algorithm. */ + OH_HUKS_TAG_DIGEST = OH_HUKS_TAG_TYPE_UINT | 4, + /** Padding algorithm. */ + OH_HUKS_TAG_PADDING = OH_HUKS_TAG_TYPE_UINT | 5, + /** Cipher mode. */ + OH_HUKS_TAG_BLOCK_MODE = OH_HUKS_TAG_TYPE_UINT | 6, + /** Key type. */ + OH_HUKS_TAG_KEY_TYPE = OH_HUKS_TAG_TYPE_UINT | 7, + /** Associated authentication data. */ + OH_HUKS_TAG_ASSOCIATED_DATA = OH_HUKS_TAG_TYPE_BYTES | 8, + /** Field for key encryption and decryption. */ + OH_HUKS_TAG_NONCE = OH_HUKS_TAG_TYPE_BYTES | 9, + /** Initialized vector (IV). */ + OH_HUKS_TAG_IV = OH_HUKS_TAG_TYPE_BYTES | 10, + + /** Information generated during key derivation. */ + OH_HUKS_TAG_INFO = OH_HUKS_TAG_TYPE_BYTES | 11, + /** Salt value used for key derivation. */ + OH_HUKS_TAG_SALT = OH_HUKS_TAG_TYPE_BYTES | 12, + /** Number of iterations for key derivation. */ + OH_HUKS_TAG_ITERATION = OH_HUKS_TAG_TYPE_UINT | 14, + + /** Type of the generated key. For details, see {@link OH_Huks_KeyGenerateType}. */ + OH_HUKS_TAG_KEY_GENERATE_TYPE = OH_HUKS_TAG_TYPE_UINT | 15, + /** Algorithm used in key agreement. */ + OH_HUKS_TAG_AGREE_ALG = OH_HUKS_TAG_TYPE_UINT | 19, + /** Alias of the public key used for key agreement. */ + OH_HUKS_TAG_AGREE_PUBLIC_KEY_IS_KEY_ALIAS = OH_HUKS_TAG_TYPE_BOOL | 20, + /** Alias of the private key used for key agreement. */ + OH_HUKS_TAG_AGREE_PRIVATE_KEY_ALIAS = OH_HUKS_TAG_TYPE_BYTES | 21, + /** Public key used for key agreement. */ + OH_HUKS_TAG_AGREE_PUBLIC_KEY = OH_HUKS_TAG_TYPE_BYTES | 22, + /** Alias of the key. */ + OH_HUKS_TAG_KEY_ALIAS = OH_HUKS_TAG_TYPE_BYTES | 23, + /** Size of the derived key. */ + OH_HUKS_TAG_DERIVE_KEY_SIZE = OH_HUKS_TAG_TYPE_UINT | 24, + /** Type of the key to import. For details, see {@link OH_Huks_ImportKeyType}. */ + OH_HUKS_TAG_IMPORT_KEY_TYPE = OH_HUKS_TAG_TYPE_UINT | 25, + /** Algorithm suite required for encrypted imports. */ + OH_HUKS_TAG_UNWRAP_ALGORITHM_SUITE = OH_HUKS_TAG_TYPE_UINT | 26, + /** Storage mode of derived or agree keys. For details, see {@link OH_Huks_KeyStorageType}. */ + OH_HUKS_TAG_DERIVED_AGREED_KEY_STORAGE_FLAG = OH_HUKS_TAG_TYPE_UINT | 29, + /** Type of rsa pss salt length. */ + OH_HUKS_TAG_RSA_PSS_SALT_LEN_TYPE = OH_HUKS_TAG_TYPE_UINT | 30, + + /** Tags for access control and user authentication. The value range is 301 to 500. */ + /** All users in the multi-user scenario. */ + OH_HUKS_TAG_ALL_USERS = OH_HUKS_TAG_TYPE_BOOL | 301, + /** Multi-user ID. */ + OH_HUKS_TAG_USER_ID = OH_HUKS_TAG_TYPE_UINT | 302, + /** Specifies whether key access control is required. */ + OH_HUKS_TAG_NO_AUTH_REQUIRED = OH_HUKS_TAG_TYPE_BOOL | 303, + /** User authentication type in key access control. */ + OH_HUKS_TAG_USER_AUTH_TYPE = OH_HUKS_TAG_TYPE_UINT | 304, + /** Timeout duration for key access. */ + OH_HUKS_TAG_AUTH_TIMEOUT = OH_HUKS_TAG_TYPE_UINT | 305, + /** Authentication token for the key. */ + OH_HUKS_TAG_AUTH_TOKEN = OH_HUKS_TAG_TYPE_BYTES | 306, + /** + * Access control type. For details, see {@link OH_Huks_AuthAccessType}. + * This parameter must be set together with the user authentication type. + */ + OH_HUKS_TAG_KEY_AUTH_ACCESS_TYPE = OH_HUKS_TAG_TYPE_UINT | 307, + /** Signature type for the key to be generated or imported. */ + OH_HUKS_TAG_KEY_SECURE_SIGN_TYPE = OH_HUKS_TAG_TYPE_UINT | 308, + /** Challenge type. For details, see {@link OH_Huks_ChallengeType}. */ + OH_HUKS_TAG_CHALLENGE_TYPE = OH_HUKS_TAG_TYPE_UINT | 309, + /** + * Position of the 8-byte valid value in a custom challenge. + * For details, see {@link OH_Huks_ChallengePosition}. + */ + OH_HUKS_TAG_CHALLENGE_POS = OH_HUKS_TAG_TYPE_UINT | 310, + + /** Purpose of key authentication */ + OH_HUKS_TAG_KEY_AUTH_PURPOSE = OH_HUKS_TAG_TYPE_UINT | 311, + + /** Tags for key attestation. The value range is 501 to 600. */ + /** Challenge value used in the attestation. */ + OH_HUKS_TAG_ATTESTATION_CHALLENGE = OH_HUKS_TAG_TYPE_BYTES | 501, + /** Application ID used in the attestation. */ + OH_HUKS_TAG_ATTESTATION_APPLICATION_ID = OH_HUKS_TAG_TYPE_BYTES | 502, + /** Alias of the key. */ + OH_HUKS_TAG_ATTESTATION_ID_ALIAS = OH_HUKS_TAG_TYPE_BYTES | 511, + /** Security level used in the attestation. */ + OH_HUKS_TAG_ATTESTATION_ID_SEC_LEVEL_INFO = OH_HUKS_TAG_TYPE_BYTES | 514, + /** Version information used in the attestation. */ + OH_HUKS_TAG_ATTESTATION_ID_VERSION_INFO = OH_HUKS_TAG_TYPE_BYTES | 515, + + /** + * 601 to 1000 are reserved for other tags. + * + * Extended tags. The value range is 1001 to 9999. + */ + /** Specifies whether it is a key alias. */ + OH_HUKS_TAG_IS_KEY_ALIAS = OH_HUKS_TAG_TYPE_BOOL | 1001, + /** Key storage mode. For details, see {@link OH_Huks_KeyStorageType}. */ + OH_HUKS_TAG_KEY_STORAGE_FLAG = OH_HUKS_TAG_TYPE_UINT | 1002, + /** Specifies whether to allow the key to be wrapped. */ + OH_HUKS_TAG_IS_ALLOWED_WRAP = OH_HUKS_TAG_TYPE_BOOL | 1003, + /** Key wrap type. */ + OH_HUKS_TAG_KEY_WRAP_TYPE = OH_HUKS_TAG_TYPE_UINT | 1004, + /** Authentication ID. */ + OH_HUKS_TAG_KEY_AUTH_ID = OH_HUKS_TAG_TYPE_BYTES | 1005, + /** Role of the key. */ + OH_HUKS_TAG_KEY_ROLE = OH_HUKS_TAG_TYPE_UINT | 1006, + /** Key flag. For details, see {@link OH_Huks_KeyFlag}. */ + OH_HUKS_TAG_KEY_FLAG = OH_HUKS_TAG_TYPE_UINT | 1007, + /** Specifies whether this API is asynchronous. */ + OH_HUKS_TAG_IS_ASYNCHRONIZED = OH_HUKS_TAG_TYPE_UINT | 1008, + /** Key domain. */ + OH_HUKS_TAG_KEY_DOMAIN = OH_HUKS_TAG_TYPE_UINT | 1011, + + /** Authenticated Encryption. */ + OH_HUKS_TAG_AE_TAG = OH_HUKS_TAG_TYPE_BYTES | 10009, + + /** + * 11000 to 12000 are reserved. + * + * 20001 to N are reserved for other tags. + */ + /** Symmetric key data. */ + OH_HUKS_TAG_SYMMETRIC_KEY_DATA = OH_HUKS_TAG_TYPE_BYTES | 20001, + /** Public key data of the asymmetric key pair. */ + OH_HUKS_TAG_ASYMMETRIC_PUBLIC_KEY_DATA = OH_HUKS_TAG_TYPE_BYTES | 20002, + /** Private key data of the asymmetric key pair. */ + OH_HUKS_TAG_ASYMMETRIC_PRIVATE_KEY_DATA = OH_HUKS_TAG_TYPE_BYTES | 20003, +}; + +/** + * @brief Defines the return data, including the result code and message. + * + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Result { + /** Result code. */ + int32_t errorCode; + /** Description of the result code. */ + const char *errorMsg; + /** Other data returned. */ + uint8_t *data; +}; + +/** + * @brief Defines the structure for storing data. + * + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Blob { + /** Data size. */ + uint32_t size; + /** Pointer to the memory in which the data is stored. */ + uint8_t *data; +}; + +/** + * @brief Defines the parameter structure in a parameter set. + * + * @since 9 + * @version 1.0 + */ +struct OH_Huks_Param { + /** Tag value. */ + uint32_t tag; + + union { + /** Parameter of the Boolean type. */ + bool boolParam; + /** Parameter of the int32_t type. */ + int32_t int32Param; + /** Parameter of the uint32_t type. */ + uint32_t uint32Param; + /** Parameter of the uint64_t type. */ + uint64_t uint64Param; + /** Parameter of the struct OH_Huks_Blob type. */ + struct OH_Huks_Blob blob; + }; +}; + +/** + * @brief Defines the structure of the parameter set. + * + * @since 9 + * @version 1.0 + */ +struct OH_Huks_ParamSet { + /** Memory size of the parameter set. */ + uint32_t paramSetSize; + /** Number of parameters in the parameter set. */ + uint32_t paramsCnt; + /** Parameter array. */ + struct OH_Huks_Param params[]; +}; + +/** + * @brief Defines the structure of the certificate chain. + * + * @since 9 + * @version 1.0 + */ +struct OH_Huks_CertChain { + /** Pointer to the certificate data. */ + struct OH_Huks_Blob *certs; + /** Number of certificates. */ + uint32_t certsCount; +}; + +/** + * @brief Defines the key information structure. + * + * @since 9 + * @version 1.0 + */ +struct OH_Huks_KeyInfo { + /** Alias of the key. */ + struct OH_Huks_Blob alias; + /** Pointer to the key parameter set. */ + struct OH_Huks_ParamSet *paramSet; +}; + +/** + * @brief Defines the structure of a public key. + * + * @since 9 + * @version 1.0 + */ +struct OH_Huks_PubKeyInfo { + /** Algorithm of the public key. */ + enum OH_Huks_KeyAlg keyAlg; + /** Length of the public key. */ + uint32_t keySize; + /** Length of the n or X value. */ + uint32_t nOrXSize; + /** Length of the e or Y value. */ + uint32_t eOrYSize; + /** Placeholder size. */ + uint32_t placeHolder; +}; + +/** + * @brief Defines the structure of an RSA key. + * + * @since 9 + * @version 1.0 + */ +struct OH_Huks_KeyMaterialRsa { + /** Algorithm of the key. */ + enum OH_Huks_KeyAlg keyAlg; + /** Length of the key. */ + uint32_t keySize; + /** Length of the n value. */ + uint32_t nSize; + /** Length of the e value. */ + uint32_t eSize; + /** Length of the d value. */ + uint32_t dSize; +}; + +/** + * @brief Defines the structure of an ECC key. + * + * @since 9 + * @version 1.0 + */ +struct OH_Huks_KeyMaterialEcc { + /** Algorithm of the key. */ + enum OH_Huks_KeyAlg keyAlg; + /** Length of the key. */ + uint32_t keySize; + /** Length of the x value. */ + uint32_t xSize; + /** Length of the y value. */ + uint32_t ySize; + /** Length of the z value. */ + uint32_t zSize; +}; + +/** + * @brief Defines the structure of a DSA key. + * + * @since 9 + * @version 1.0 + */ +struct OH_Huks_KeyMaterialDsa { + /** Algorithm of the key. */ + enum OH_Huks_KeyAlg keyAlg; + /** Length of the key. */ + uint32_t keySize; + /** Length of the x value. */ + uint32_t xSize; + /** Length of the y value. */ + uint32_t ySize; + /** Length of the p value. */ + uint32_t pSize; + /** Length of the q value. */ + uint32_t qSize; + /** Length of the g value. */ + uint32_t gSize; +}; + +/** + * @brief Defines the structure of a DH key. + * + * @since 9 + * @version 1.0 + */ +struct OH_Huks_KeyMaterialDh { + /** Algorithm of the key. */ + enum OH_Huks_KeyAlg keyAlg; + /** Length of the DH key. */ + uint32_t keySize; + /** Length of the public key. */ + uint32_t pubKeySize; + /** Length of the private key. */ + uint32_t priKeySize; + /** Reserved. */ + uint32_t reserved; +}; + +/** + * @brief Defines the structure of a 25519 key. + * + * @since 9 + * @version 1.0 + */ +struct OH_Huks_KeyMaterial25519 { + /** Algorithm of the key. */ + enum OH_Huks_KeyAlg keyAlg; + /** Length of the 25519 key. */ + uint32_t keySize; + /** Length of the public key. */ + uint32_t pubKeySize; + /** Length of the private key. */ + uint32_t priKeySize; + /** Reserved. */ + uint32_t reserved; +}; + +#ifdef __cplusplus +} +#endif + +/** @} */ +#endif /* NATIVE_OH_HUKS_TYPE_H */ diff --git a/security/huks/libhuks.ndk.json b/security/huks/libhuks.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..a07592c0bea1c6ccaa40c94fc8f10ad7826cc55d --- /dev/null +++ b/security/huks/libhuks.ndk.json @@ -0,0 +1,71 @@ +[ + { + "name": "OH_Huks_GetSdkVersion" + }, + { + "name": "OH_Huks_GenerateKeyItem" + }, + { + "name": "OH_Huks_ImportKeyItem" + }, + { + "name": "OH_Huks_ImportWrappedKeyItem" + }, + { + "name": "OH_Huks_ExportPublicKeyItem" + }, + { + "name": "OH_Huks_DeleteKeyItem" + }, + { + "name": "OH_Huks_GetKeyItemParamSet" + }, + { + "name": "OH_Huks_IsKeyItemExist" + }, + { + "name": "OH_Huks_AttestKeyItem" + }, + { + "name": "OH_Huks_InitSession" + }, + { + "name": "OH_Huks_UpdateSession" + }, + { + "name": "OH_Huks_FinishSession" + }, + { + "name": "OH_Huks_AbortSession" + }, + { + "name": "OH_Huks_InitParamSet" + }, + { + "name": "OH_Huks_AddParams" + }, + { + "name": "OH_Huks_BuildParamSet" + }, + { + "name": "OH_Huks_FreeParamSet" + }, + { + "name": "OH_Huks_CopyParamSet" + }, + { + "name": "OH_Huks_GetParam" + }, + { + "name": "OH_Huks_FreshParamSet" + }, + { + "name": "OH_Huks_IsParamSetTagValid" + }, + { + "name": "OH_Huks_IsParamSetValid" + }, + { + "name": "OH_Huks_CheckParamMatch" + } +] \ No newline at end of file diff --git a/security/huks/src/native_huks_api.c b/security/huks/src/native_huks_api.c new file mode 100644 index 0000000000000000000000000000000000000000..2a6ab5cd2483427851ecb194915f55449d77285f --- /dev/null +++ b/security/huks/src/native_huks_api.c @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "native_huks_api.h" + +#include "hks_api.h" +#include "hks_errcode_adapter.h" +#include "native_huks_api_adapter.h" + +static struct OH_Huks_Result ConvertApiResult(int32_t ret) +{ + struct HksResult result = HksConvertErrCode(ret); + return *((struct OH_Huks_Result *)(&result)); +} + +struct OH_Huks_Result OH_Huks_GetSdkVersion(struct OH_Huks_Blob *sdkVersion) +{ + int32_t result = HksGetSdkVersion((struct HksBlob *) sdkVersion); + return ConvertApiResult(result); +} + +struct OH_Huks_Result OH_Huks_GenerateKeyItem(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSetIn, struct OH_Huks_ParamSet *paramSetOut) +{ + int32_t result = HksGenerateKey((const struct HksBlob *) keyAlias, + (const struct HksParamSet *) paramSetIn, (struct HksParamSet *) paramSetOut); + return ConvertApiResult(result); +} + +struct OH_Huks_Result OH_Huks_ImportKeyItem(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSet, const struct OH_Huks_Blob *key) +{ + int32_t result = HksImportKey((const struct HksBlob *) keyAlias, + (const struct HksParamSet *) paramSet, (const struct HksBlob *) key); + return ConvertApiResult(result); +} + +struct OH_Huks_Result OH_Huks_ImportWrappedKeyItem(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_Blob *wrappingKeyAlias, const struct OH_Huks_ParamSet *paramSet, + const struct OH_Huks_Blob *wrappedKeyData) +{ + int32_t result = HksImportWrappedKey((const struct HksBlob *) keyAlias, + (const struct HksBlob *) wrappingKeyAlias, (const struct HksParamSet *) paramSet, + (const struct HksBlob *) wrappedKeyData); + return ConvertApiResult(result); +} + +struct OH_Huks_Result OH_Huks_ExportPublicKeyItem(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSet, struct OH_Huks_Blob *key) +{ + int32_t result = HksExportPublicKey((const struct HksBlob *) keyAlias, + (const struct HksParamSet *) paramSet, (struct HksBlob *) key); + return ConvertApiResult(result); +} + +struct OH_Huks_Result OH_Huks_DeleteKeyItem(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSet) +{ + int32_t result = HksDeleteKey((const struct HksBlob *) keyAlias, (const struct HksParamSet *) paramSet); + return ConvertApiResult(result); +} + +struct OH_Huks_Result OH_Huks_GetKeyItemParamSet(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSetIn, struct OH_Huks_ParamSet *paramSetOut) +{ + int32_t result = HksGetKeyParamSet((const struct HksBlob *) keyAlias, + (const struct HksParamSet *) paramSetIn, (struct HksParamSet *) paramSetOut); + return ConvertApiResult(result); +} + +struct OH_Huks_Result OH_Huks_IsKeyItemExist(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSet) +{ + int32_t result = HksKeyExist((const struct HksBlob *) keyAlias, (const struct HksParamSet *) paramSet); + return ConvertApiResult(result); +} + +struct OH_Huks_Result OH_Huks_AttestKeyItem(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSet, struct OH_Huks_CertChain *certChain) +{ + int32_t result = HuksAttestAdapter(keyAlias, paramSet, certChain); + return ConvertApiResult(result); +} + +struct OH_Huks_Result OH_Huks_InitSession(const struct OH_Huks_Blob *keyAlias, + const struct OH_Huks_ParamSet *paramSet, struct OH_Huks_Blob *handle, struct OH_Huks_Blob *token) +{ + int32_t result = HksInit((const struct HksBlob *) keyAlias, + (const struct HksParamSet *) paramSet, (struct HksBlob *) handle, (struct HksBlob *) token); + return ConvertApiResult(result); +} + +struct OH_Huks_Result OH_Huks_UpdateSession(const struct OH_Huks_Blob *handle, + const struct OH_Huks_ParamSet *paramSet, const struct OH_Huks_Blob *inData, struct OH_Huks_Blob *outData) +{ + int32_t result = HksUpdate((const struct HksBlob *) handle, + (const struct HksParamSet *) paramSet, (const struct HksBlob *) inData, (struct HksBlob *) outData); + return ConvertApiResult(result); +} + +struct OH_Huks_Result OH_Huks_FinishSession(const struct OH_Huks_Blob *handle, + const struct OH_Huks_ParamSet *paramSet, const struct OH_Huks_Blob *inData, struct OH_Huks_Blob *outData) +{ + int32_t result = HksFinish((const struct HksBlob *) handle, + (const struct HksParamSet *) paramSet, (const struct HksBlob *) inData, (struct HksBlob *) outData); + return ConvertApiResult(result); +} + +struct OH_Huks_Result OH_Huks_AbortSession(const struct OH_Huks_Blob *handle, + const struct OH_Huks_ParamSet *paramSet) +{ + int32_t result = HksAbort((const struct HksBlob *) handle, (const struct HksParamSet *) paramSet); + return ConvertApiResult(result); +} diff --git a/security/huks/src/native_huks_api_adapter.c b/security/huks/src/native_huks_api_adapter.c new file mode 100644 index 0000000000000000000000000000000000000000..792b6b50edd1313323730d8e5b7d42c278a07ada --- /dev/null +++ b/security/huks/src/native_huks_api_adapter.c @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "hks_api.h" +#include "hks_param.h" + +#include "native_huks_api_adapter.h" +#include "native_huks_param.h" + +int32_t HuksAttestAdapter(const struct OH_Huks_Blob *keyAlias, const struct OH_Huks_ParamSet *paramSet, + struct OH_Huks_CertChain *certChain) +{ + int32_t ret; + struct HksParamSet *newParamSet = NULL; + do { + if (paramSet == NULL) { + ret = HKS_ERROR_NULL_POINTER; + break; + } + ret = HksCheckParamSet((struct HksParamSet *)paramSet, paramSet->paramSetSize); + if (ret != HKS_SUCCESS) { + break; + } + ret = HksInitParamSet(&newParamSet); + if (ret != HKS_SUCCESS) { + break; + } + ret = HksFreshParamSet((struct HksParamSet *)paramSet, false); + if (ret != HKS_SUCCESS) { + break; + } + ret = HksAddParams(newParamSet, (const struct HksParam *)paramSet->params, paramSet->paramsCnt); + if (ret != HKS_SUCCESS) { + break; + } + struct HksParam isBase64Param = { .tag = HKS_TAG_ATTESTATION_BASE64, .boolParam = true }; + ret = HksAddParams(newParamSet, &isBase64Param, 1); + if (ret != HKS_SUCCESS) { + break; + } + ret = HksBuildParamSet(&newParamSet); + if (ret != HKS_SUCCESS) { + break; + } + ret = HksAttestKey((const struct HksBlob *)keyAlias, (struct HksParamSet *)newParamSet, + (struct HksCertChain *)certChain); + } while (0); + HksFreeParamSet(&newParamSet); + return ret; +} \ No newline at end of file diff --git a/security/huks/src/native_huks_param.c b/security/huks/src/native_huks_param.c new file mode 100644 index 0000000000000000000000000000000000000000..9fab8b6c4ff09a1cc66d23e9c700360d74ff8826 --- /dev/null +++ b/security/huks/src/native_huks_param.c @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "native_huks_param.h" + +#include "hks_param.h" +#include "hks_errcode_adapter.h" + +static struct OH_Huks_Result ConvertParamResult(int32_t ret) +{ + struct HksResult result = HksConvertErrCode(ret); + return *((struct OH_Huks_Result *)(&result)); +} + +struct OH_Huks_Result OH_Huks_InitParamSet(struct OH_Huks_ParamSet **paramSet) +{ + int32_t result = HksInitParamSet((struct HksParamSet **) paramSet); + return ConvertParamResult(result); +} + +struct OH_Huks_Result OH_Huks_AddParams(struct OH_Huks_ParamSet *paramSet, + const struct OH_Huks_Param *params, uint32_t paramCnt) +{ + int32_t result = HksAddParams((struct HksParamSet *) paramSet, + (const struct HksParam *) params, paramCnt); + return ConvertParamResult(result); +} + +struct OH_Huks_Result OH_Huks_BuildParamSet(struct OH_Huks_ParamSet **paramSet) +{ + int32_t result = HksBuildParamSet((struct HksParamSet **) paramSet); + return ConvertParamResult(result); +} + +void OH_Huks_FreeParamSet(struct OH_Huks_ParamSet **paramSet) +{ + HksFreeParamSet((struct HksParamSet **) paramSet); +} + +struct OH_Huks_Result OH_Huks_CopyParamSet(const struct OH_Huks_ParamSet *fromParamSet, + uint32_t fromParamSetSize, struct OH_Huks_ParamSet **paramSet) +{ + int32_t result = HksGetParamSet((const struct HksParamSet *) fromParamSet, + fromParamSetSize, (struct HksParamSet **) paramSet); + return ConvertParamResult(result); +} + +struct OH_Huks_Result OH_Huks_GetParam(const struct OH_Huks_ParamSet *paramSet, uint32_t tag, + struct OH_Huks_Param **param) +{ + int32_t result = HksGetParam((const struct HksParamSet *) paramSet, tag, (struct HksParam **) param); + return ConvertParamResult(result); +} + +struct OH_Huks_Result OH_Huks_FreshParamSet(struct OH_Huks_ParamSet *paramSet, bool isCopy) +{ + int32_t result = HksFreshParamSet((struct HksParamSet *) paramSet, isCopy); + return ConvertParamResult(result); +} + +struct OH_Huks_Result OH_Huks_IsParamSetTagValid(const struct OH_Huks_ParamSet *paramSet) +{ + int32_t result = HksCheckParamSetTag((const struct HksParamSet *) paramSet); + return ConvertParamResult(result); +} + +struct OH_Huks_Result OH_Huks_IsParamSetValid(const struct OH_Huks_ParamSet *paramSet, uint32_t size) +{ + int32_t result = HksCheckParamSet((const struct HksParamSet *) paramSet, size); + return ConvertParamResult(result); +} + +struct OH_Huks_Result OH_Huks_CheckParamMatch(const struct OH_Huks_Param *baseParam, const struct OH_Huks_Param *param) +{ + int32_t result = HksCheckParamMatch((const struct HksParam *) baseParam, (const struct HksParam *) param); + return ConvertParamResult(result); +} diff --git a/startup/init/syscap/BUILD.gn b/startup/init/syscap/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..715c6cf41de1b1b613d53274afc32e28b4bf9d95 --- /dev/null +++ b/startup/init/syscap/BUILD.gn @@ -0,0 +1,41 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +ohos_shared_library("deviceinfo_ndk") { + cflags = [ "-fstack-protector-all" ] + sources = [ + "src/deviceinfo.c", + "src/syscap_ndk.c", + ] + include_dirs = [ "./include" ] + deps = [ "//base/startup/init/interfaces/innerkits:libbegetutil" ] + part_name = "init" + subsystem_name = "startup" +} + +ohos_ndk_library("libdeviceinfo_ndk") { + cflags = [ "-fstack-protector-all" ] + output_name = "deviceinfo_ndk" + ndk_description_file = "./libdeviceinfo.ndk.json" + min_compact_version = "1" +} + +ohos_ndk_headers("deviceinfo_header") { + dest_dir = "$ndk_headers_out_dir/" + sources = [ + "./include/deviceinfo.h", + "./include/syscap_ndk.h", + ] +} diff --git a/startup/init/syscap/include/deviceinfo.h b/startup/init/syscap/include/deviceinfo.h new file mode 100644 index 0000000000000000000000000000000000000000..cc1a504ffa0819117379ec6d27513cb97a207445 --- /dev/null +++ b/startup/init/syscap/include/deviceinfo.h @@ -0,0 +1,230 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef DEVICEINFO_CSDK_H +#define DEVICEINFO_CSDK_H + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif + +/** + * Obtains the device type represented by a string, + * which can be {@code phone} (or {@code default} for phones), {@code wearable}, {@code liteWearable}, + * {@code tablet}, {@code tv}, {@code car}, or {@code smartVision}. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetDeviceType(void); + +/** + * Obtains the device manufacturer represented by a string. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetManufacture(void); + +/** + * Obtains the device brand represented by a string. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetBrand(void); + +/** + * Obtains the external product series represented by a string. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetMarketName(void); + +/** + * Obtains the product series represented by a string. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetProductSeries(void); + +/** + * Obtains the product model represented by a string. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetProductModel(void); + +/** + * Obtains the software model represented by a string. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetSoftwareModel(void); + +/** + * Obtains the hardware model represented by a string. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetHardwareModel(void); + +/** + * Obtains the bootloader version number represented by a string. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetBootloaderVersion(void); + +/** + * Obtains the application binary interface (Abi) list represented by a string. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetAbiList(void); + +/** + * Obtains the security patch level represented by a string. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetSecurityPatchTag(void); + +/** + * Obtains the product version represented by a string. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetDisplayVersion(void); + +/** + * Obtains the incremental version represented by a string. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetIncrementalVersion(void); + +/** + * Obtains the OS release type represented by a string. + * + *

The OS release category can be {@code Release}, {@code Beta}, or {@code Canary}. + * The specific release type may be {@code Release}, {@code Beta1}, or others alike. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetOsReleaseType(void); + +/** + * Obtains the OS version represented by a string. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetOSFullName(void); + +/** + * Obtains the SDK API version number. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +int OH_GetSdkApiVersion(void); + +/** + * Obtains the first API version number. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +int OH_GetFirstApiVersion(void); + +/** + * Obtains the version ID by a string. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetVersionId(void); + +/** + * Obtains the build types of the same baseline code. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetBuildType(void); + +/** + * Obtains the different build user of the same baseline code. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetBuildUser(void); + +/** + * Obtains the different build host of the same baseline code. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetBuildHost(void); + +/** + * Obtains the build time. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetBuildTime(void); + +/** + * Obtains the version hash. + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetBuildRootHash(void); + +/** + * Obtains the Distribution OS name represented by a string. + * + *

Independent Software Vendor (ISV) may distribute OHOS with their own OS name. + * If ISV not specified, it will return an empty string + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetDistributionOSName(void); + +/** + * Obtains the ISV distribution OS version represented by a string. + * If ISV not specified, it will return the same value as OH_GetOSFullName + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetDistributionOSVersion(void); + +/** + * Obtains the ISV distribution OS api version represented by a integer. + * If ISV not specified, it will return the same value as OH_GetSdkApiVersion + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +int OH_GetDistributionOSApiVersion(void); + +/** + * Obtains the ISV distribution OS release type represented by a string. + * If ISV not specified, it will return the same value as OH_GetOsReleaseType + * @syscap SystemCapability.Startup.SystemInfo + * @since 10 + */ +const char *OH_GetDistributionOSReleaseType(void); + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif +#endif diff --git a/startup/init/syscap/include/syscap_ndk.h b/startup/init/syscap/include/syscap_ndk.h new file mode 100644 index 0000000000000000000000000000000000000000..070a6cb1e66afea5347295bf62258ac4b7fb7458 --- /dev/null +++ b/startup/init/syscap/include/syscap_ndk.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SYSCAP_NDK_H +#define SYSCAP_NDK_H + +#include + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif + +bool canIUse(const char *cap); + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif +#endif \ No newline at end of file diff --git a/startup/init/syscap/init_sync.h b/startup/init/syscap/init_sync.h new file mode 100644 index 0000000000000000000000000000000000000000..ceeefbce390a32bf12cb49334c52fc475fced04c --- /dev/null +++ b/startup/init/syscap/init_sync.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef BASE_STARTUP_INITLITE_NOTIFY_H +#define BASE_STARTUP_INITLITE_NOTIFY_H + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif + +#define EVENT1 0xf +#define EVENT1_WAITTIME 10000 // 10s = 10*1000 * 1 tick(1ms) + +#define EVENT2 0xf0 +/* Define EVENT2_WAITTIME 0 means QS_STAGE2 is no used */ +#define EVENT2_WAITTIME 0 + +#define EVENT3 0xf00 +/* Define EVENT3_WAITTIME 0 means QS_STAGE3 is no used */ +#define EVENT3_WAITTIME 0 + +/* + * Notify the event to Init process. + * All processes can call. Usually called by the listened process. + * event: There needs to be a consensus between the listener(init process) and the notifier. + */ +extern int NotifyInit(unsigned long event); + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif + +#endif // BASE_STARTUP_INITLITE_NOTIFY_H diff --git a/startup/init/syscap/libdeviceinfo.ndk.json b/startup/init/syscap/libdeviceinfo.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..dfed9279629410bcd503cf146c361860ba288421 --- /dev/null +++ b/startup/init/syscap/libdeviceinfo.ndk.json @@ -0,0 +1,30 @@ +[ + {"name": "canIUse"}, + {"name": "OH_GetDeviceType"}, + {"name": "OH_GetManufacture"}, + {"name": "OH_GetBrand"}, + {"name": "OH_GetMarketName"}, + {"name": "OH_GetProductSeries"}, + {"name": "OH_GetProductModel"}, + {"name": "OH_GetSoftwareModel"}, + {"name": "OH_GetHardwareModel"}, + {"name": "OH_GetBootloaderVersion"}, + {"name": "OH_GetAbiList"}, + {"name": "OH_GetSecurityPatchTag"}, + {"name": "OH_GetDisplayVersion"}, + {"name": "OH_GetIncrementalVersion"}, + {"name": "OH_GetOsReleaseType"}, + {"name": "OH_GetOSFullName"}, + {"name": "OH_GetSdkApiVersion"}, + {"name": "OH_GetFirstApiVersion"}, + {"name": "OH_GetVersionId"}, + {"name": "OH_GetBuildType"}, + {"name": "OH_GetBuildUser"}, + {"name": "OH_GetBuildHost"}, + {"name": "OH_GetBuildTime"}, + {"name": "OH_GetBuildRootHash"}, + {"name": "OH_GetDistributionOSName"}, + {"name": "OH_GetDistributionOSVersion"}, + {"name": "OH_GetDistributionOSApiVersion"}, + {"name": "OH_GetDistributionOSReleaseType"} +] diff --git a/third_party/libuv/BUILD.gn b/third_party/libuv/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..6b4a49b2c5f1d99c61916366a3db19db305ca87a --- /dev/null +++ b/third_party/libuv/BUILD.gn @@ -0,0 +1,375 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# +# 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 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(ohos_lite)) { + import("//build/lite/config/component/lite_component.gni") + import("//build/lite/ndk/ndk.gni") + import("//third_party/libuv/libuv.gni") + + # This is the configuration needed to use libuv. + config("libuv_config") { + include_dirs = [ + "include", + "src", + "src/unix", + ] + cflags = [ + "-Wno-unused-parameter", + "-Wno-incompatible-pointer-types", + "-D_GNU_SOURCE", + "-D_POSIX_C_SOURCE=200112", + ] + + # Adding NDEBUG macro manually to avoid compilation + # error in debug version, FIX ME + # https://gitee.com/openharmony/build/pulls/1206/files + defines += [ "NDEBUG" ] + } + + # This is the configuration used to build libuv itself. + # It should not be needed outside of this library. + config("libuv_private_config") { + visibility = [ ":*" ] + include_dirs = [ + "include", + "src", + "src/unix", + ] + + # Adding NDEBUG macro manually to avoid compilation + # error in debug version, FIX ME + # https://gitee.com/openharmony/build/pulls/1206/files + defines += [ "NDEBUG" ] + } + + source_set("libuv_source") { + include_dirs = [ + "include", + "src", + "src/unix", + ] + + cflags = [ + "-Wno-unused-parameter", + "-Wno-incompatible-pointer-types", + "-D_GNU_SOURCE", + "-D_POSIX_C_SOURCE=200112", + "-U__linux__", + "-D__GNU__", + "-fPIC", + ] + + sources = [ + # common_source + "src/fs-poll.c", + "src/idna.c", + "src/inet.c", + "src/random.c", + "src/strscpy.c", + "src/threadpool.c", + "src/timer.c", + "src/uv-common.c", + "src/uv-data-getter-setters.c", + "src/version.c", + + # nonwin_srcs + "src/unix/async.c", + "src/unix/core.c", + "src/unix/dl.c", + "src/unix/epoll.c", + "src/unix/fs.c", + "src/unix/getaddrinfo.c", + "src/unix/getnameinfo.c", + "src/unix/loop-watcher.c", + "src/unix/loop.c", + "src/unix/no-fsevents.c", + "src/unix/pipe.c", + "src/unix/poll.c", + "src/unix/posix-hrtime.c", + "src/unix/posix-poll.c", + "src/unix/process.c", + "src/unix/random-devurandom.c", + "src/unix/signal.c", + "src/unix/stream.c", + "src/unix/tcp.c", + "src/unix/thread.c", + "src/unix/tty.c", + "src/unix/udp.c", + ] + } + + static_library("uv_static") { + deps = [ ":libuv_source" ] + public_configs = [ ":libuv_config" ] + } + + shared_library("uv") { + deps = [ ":libuv_source" ] + public_configs = [ ":libuv_config" ] + libs = [ + "pthread", + "dl", + ] + } +} else { + import("//build/ohos.gni") + import("//third_party/libuv/libuv.gni") + + common_source = [ + "src/fs-poll.c", + "src/idna.c", + "src/inet.c", + "src/random.c", + "src/strscpy.c", + "src/threadpool.c", + "src/timer.c", + "src/uv-common.c", + "src/uv-data-getter-setters.c", + "src/version.c", + ] + if (!is_mingw && !is_win) { + nonwin_srcs = [ + "src/unix/epoll.c", + "src/unix/async.c", + "src/unix/core.c", + "src/unix/dl.c", + "src/unix/fs.c", + "src/unix/getaddrinfo.c", + "src/unix/getnameinfo.c", + "src/unix/loop.c", + "src/unix/loop-watcher.c", + "src/unix/pipe.c", + "src/unix/poll.c", + "src/unix/process.c", + "src/unix/random-devurandom.c", + "src/unix/signal.c", + "src/unix/stream.c", + "src/unix/tcp.c", + "src/unix/thread.c", + "src/unix/tty.c", + "src/unix/udp.c", + ] + } + + # This is the configuration needed to use libuv. + config("libuv_config") { + include_dirs = [ + "include", + "src", + "src/unix", + ] + cflags = [ "-Wno-unused-parameter" ] + if (is_linux || is_ohos) { + cflags += [ + "-Wno-incompatible-pointer-types", + "-D_GNU_SOURCE", + "-D_POSIX_C_SOURCE=200112", + ] + + # Adding NDEBUG macro manually to avoid compilation + # error in debug version, FIX ME + # https://gitee.com/openharmony/build/pulls/1206/files + defines = [ "NDEBUG" ] + if (use_ffrt && is_ohos) { + defines += [ "USE_FFRT" ] + } + } else if (is_mingw || is_win) { + cflags += [ + "-Wno-missing-braces", + "-Wno-implicit-function-declaration", + "-Wno-error=return-type", + "-Wno-error=sign-compare", + "-Wno-error=unused-variable", + "-Wno-error=unknown-pragmas", + "-Wno-unused-variable", + ] + defines = [ + "WIN32_LEAN_AND_MEAN", + "_WIN32_WINNT=0x0600", + ] + + # Adding NDEBUG macro manually to avoid compilation + # error in debug version, FIX ME + # https://gitee.com/openharmony/build/pulls/1206/files + defines += [ "NDEBUG" ] + + libs = [ + "psapi", + "user32", + "advapi32", + "iphlpapi", + "userenv", + "ws2_32", + ] + } + } + + # This is the configuration used to build libuv itself. + # It should not be needed outside of this library. + config("libuv_private_config") { + visibility = [ ":*" ] + include_dirs = [ + "include", + "src", + "src/unix", + ] + + # Adding NDEBUG macro manually to avoid compilation + # error in debug version, FIX ME + # https://gitee.com/openharmony/build/pulls/1206/files + defines = [ "NDEBUG" ] + } + + ohos_source_set("libuv_source") { + configs = [ ":libuv_config" ] + sources = common_source + + if (is_mac || (defined(is_ios) && is_ios)) { + sources += nonwin_srcs + [ + "src/unix/bsd-ifaddrs.c", + "src/unix/kqueue.c", + "src/unix/random-getentropy.c", + "src/unix/darwin-proctitle.c", + "src/unix/darwin.c", + "src/unix/fsevents.c", + "src/unix/os390-proctitle.c", + ] + sources -= [ "src/unix/epoll.c" ] + } else if (is_mingw || is_win) { + sources += [ + "src/win/async.c", + "src/win/core.c", + "src/win/detect-wakeup.c", + "src/win/dl.c", + "src/win/error.c", + "src/win/fs-event.c", + "src/win/fs.c", + "src/win/getaddrinfo.c", + "src/win/getnameinfo.c", + "src/win/handle.c", + "src/win/loop-watcher.c", + "src/win/pipe.c", + "src/win/poll.c", + "src/win/process-stdio.c", + "src/win/process.c", + "src/win/signal.c", + "src/win/snprintf.c", + "src/win/stream.c", + "src/win/tcp.c", + "src/win/thread.c", + "src/win/tty.c", + "src/win/udp.c", + "src/win/util.c", + "src/win/winapi.c", + "src/win/winsock.c", + ] + } else if (is_ohos || (defined(is_android) && is_android)) { + sources += nonwin_srcs + [ + "src/unix/linux-core.c", + "src/unix/linux-inotify.c", + "src/unix/linux-syscalls.c", + "src/unix/procfs-exepath.c", + "src/unix/pthread-fixes.c", + "src/unix/random-getentropy.c", + "src/unix/random-getrandom.c", + "src/unix/random-sysctl-linux.c", + "src/unix/proctitle.c", + ] + if (use_ffrt) { + external_deps = [ "ffrt:libffrt" ] + } + } else if (is_linux) { + sources += nonwin_srcs + [ + "src/unix/linux-core.c", + "src/unix/linux-inotify.c", + "src/unix/linux-syscalls.c", + "src/unix/procfs-exepath.c", + "src/unix/random-getrandom.c", + "src/unix/random-sysctl-linux.c", + "src/unix/proctitle.c", + ] + } else { + sources += nonwin_srcs + [ + "src/unix/linux-core.c", + "src/unix/linux-inotify.c", + "src/unix/linux-syscalls.c", + "src/unix/procfs-exepath.c", + "src/unix/random-getrandom.c", + "src/unix/random-sysctl-linux.c", + "src/unix/proctitle.c", + ] + } + subsystem_name = "thirdparty" + part_name = "libuv" + } + + ohos_static_library("uv_static") { + deps = [ ":libuv_source" ] + public_configs = [ ":libuv_config" ] + subsystem_name = "thirdparty" + part_name = "libuv" + } + ohos_shared_library("uv") { + deps = [ ":libuv_source" ] + public_configs = [ ":libuv_config" ] + subsystem_name = "thirdparty" + innerapi_tags = [ "platformsdk" ] + part_name = "libuv" + if (is_ohos) { + output_extension = "so" + } + install_images = [ + "system", + "updater", + ] + } +} + +ohos_ndk_library("libuv_ndk") { + ndk_description_file = "./libuv.ndk.json" + min_compact_version = "1" + output_name = "uv" + output_extension = "so" +} + +ohos_ndk_headers("libuv_header") { + dest_dir = "$ndk_headers_out_dir" + sources = [ "include/uv_ndk/uv.h" ] +} + +ohos_ndk_headers("libuv_uv_header") { + dest_dir = "$ndk_headers_out_dir/uv" + sources = [ + "include/uv/aix.h", + "include/uv/bsd.h", + "include/uv/darwin.h", + "include/uv/errno.h", + "include/uv/linux.h", + "include/uv/os390.h", + "include/uv/posix.h", + "include/uv/stdint-msvc2008.h", + "include/uv/sunos.h", + "include/uv/threadpool.h", + "include/uv/tree.h", + "include/uv/unix.h", + "include/uv/version.h", + "include/uv/win.h", + ] +} diff --git a/third_party/libuv/LICENSE b/third_party/libuv/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..545c4498a5ac824ad32eec887daa03bac4225785 --- /dev/null +++ b/third_party/libuv/LICENSE @@ -0,0 +1,66 @@ +libuv is licensed for use as follows: + +==== +Copyright (c) 2015-present libuv project contributors. + +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 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. +==== + +This license applies to parts of libuv originating from the +https://github.com/joyent/libuv repository: + +==== + +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +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 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. + +==== + +This license applies to all parts of libuv that are not externally +maintained libraries. + +The externally maintained libraries used by libuv are: + + - tree.h (from FreeBSD), copyright Niels Provos. Two clause BSD license. + + - inet_pton and inet_ntop implementations, contained in src/inet.c, are + copyright the Internet Systems Consortium, Inc., and licensed under the ISC + license. + + - stdint-msvc2008.h (from msinttypes), copyright Alexander Chemeris. Three + clause BSD license. + + - pthread-fixes.c, copyright Google Inc. and Sony Mobile Communications AB. + Three clause BSD license. diff --git a/third_party/libuv/LICENSE-docs b/third_party/libuv/LICENSE-docs new file mode 100644 index 0000000000000000000000000000000000000000..2c33393f4272b12f7347ef51aae9e28d9bc40890 --- /dev/null +++ b/third_party/libuv/LICENSE-docs @@ -0,0 +1,396 @@ +Attribution 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution 4.0 International Public License ("Public License"). To the +extent this Public License may be interpreted as a contract, You are +granted the Licensed Rights in consideration of Your acceptance of +these terms and conditions, and the Licensor grants You such rights in +consideration of benefits the Licensor receives from making the +Licensed Material available under these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/third_party/libuv/OAT.xml b/third_party/libuv/OAT.xml new file mode 100644 index 0000000000000000000000000000000000000000..d4f6cfe2a221d65b23bb29a256abbb947510b68b --- /dev/null +++ b/third_party/libuv/OAT.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third_party/libuv/README.OpenSource b/third_party/libuv/README.OpenSource new file mode 100644 index 0000000000000000000000000000000000000000..a62892ff4c19d812464e8550939100eee6443112 --- /dev/null +++ b/third_party/libuv/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "libuv", + "License": "MIT License", + "License File": "LICENSE", + "Version Number": "v1.44.1", + "Owner": "sunbingxin@huawei.com", + "Upstream URL": "https://github.com/libuv/libuv", + "Description": "libuv is a multi-platform support library with a focus on asynchronous I/O." + } +] diff --git a/third_party/libuv/include/uv.h b/third_party/libuv/include/uv.h new file mode 100644 index 0000000000000000000000000000000000000000..bd5976730990435509cd96a35d75f06adc82c714 --- /dev/null +++ b/third_party/libuv/include/uv.h @@ -0,0 +1,1862 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * 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 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. + */ + +/* See https://github.com/libuv/libuv#documentation for documentation. */ + +#ifndef UV_H +#define UV_H +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_UV_SHARED) && defined(USING_UV_SHARED) +#error "Define either BUILDING_UV_SHARED or USING_UV_SHARED, not both." +#endif + +#ifdef _WIN32 + /* Windows - set up dll import/export decorators. */ +# if defined(BUILDING_UV_SHARED) + /* Building shared library. */ +# define UV_EXTERN __declspec(dllexport) +# elif defined(USING_UV_SHARED) + /* Using shared library. */ +# define UV_EXTERN __declspec(dllimport) +# else + /* Building static library. */ +# define UV_EXTERN /* nothing */ +# endif +#elif __GNUC__ >= 4 +# define UV_EXTERN __attribute__((visibility("default"))) +#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) /* Sun Studio >= 8 */ +# define UV_EXTERN __global +#else +# define UV_EXTERN /* nothing */ +#endif + +#include "uv/errno.h" +#include "uv/version.h" +#include +#include + +#if defined(_MSC_VER) && _MSC_VER < 1600 +# include "uv/stdint-msvc2008.h" +#else +# include +#endif + +#if defined(_WIN32) +# include "uv/win.h" +#else +# include "uv/unix.h" +#endif + +/* Expand this list if necessary. */ +#define UV_ERRNO_MAP(XX) \ + XX(E2BIG, "argument list too long") \ + XX(EACCES, "permission denied") \ + XX(EADDRINUSE, "address already in use") \ + XX(EADDRNOTAVAIL, "address not available") \ + XX(EAFNOSUPPORT, "address family not supported") \ + XX(EAGAIN, "resource temporarily unavailable") \ + XX(EAI_ADDRFAMILY, "address family not supported") \ + XX(EAI_AGAIN, "temporary failure") \ + XX(EAI_BADFLAGS, "bad ai_flags value") \ + XX(EAI_BADHINTS, "invalid value for hints") \ + XX(EAI_CANCELED, "request canceled") \ + XX(EAI_FAIL, "permanent failure") \ + XX(EAI_FAMILY, "ai_family not supported") \ + XX(EAI_MEMORY, "out of memory") \ + XX(EAI_NODATA, "no address") \ + XX(EAI_NONAME, "unknown node or service") \ + XX(EAI_OVERFLOW, "argument buffer overflow") \ + XX(EAI_PROTOCOL, "resolved protocol is unknown") \ + XX(EAI_SERVICE, "service not available for socket type") \ + XX(EAI_SOCKTYPE, "socket type not supported") \ + XX(EALREADY, "connection already in progress") \ + XX(EBADF, "bad file descriptor") \ + XX(EBUSY, "resource busy or locked") \ + XX(ECANCELED, "operation canceled") \ + XX(ECHARSET, "invalid Unicode character") \ + XX(ECONNABORTED, "software caused connection abort") \ + XX(ECONNREFUSED, "connection refused") \ + XX(ECONNRESET, "connection reset by peer") \ + XX(EDESTADDRREQ, "destination address required") \ + XX(EEXIST, "file already exists") \ + XX(EFAULT, "bad address in system call argument") \ + XX(EFBIG, "file too large") \ + XX(EHOSTUNREACH, "host is unreachable") \ + XX(EINTR, "interrupted system call") \ + XX(EINVAL, "invalid argument") \ + XX(EIO, "i/o error") \ + XX(EISCONN, "socket is already connected") \ + XX(EISDIR, "illegal operation on a directory") \ + XX(ELOOP, "too many symbolic links encountered") \ + XX(EMFILE, "too many open files") \ + XX(EMSGSIZE, "message too long") \ + XX(ENAMETOOLONG, "name too long") \ + XX(ENETDOWN, "network is down") \ + XX(ENETUNREACH, "network is unreachable") \ + XX(ENFILE, "file table overflow") \ + XX(ENOBUFS, "no buffer space available") \ + XX(ENODEV, "no such device") \ + XX(ENOENT, "no such file or directory") \ + XX(ENOMEM, "not enough memory") \ + XX(ENONET, "machine is not on the network") \ + XX(ENOPROTOOPT, "protocol not available") \ + XX(ENOSPC, "no space left on device") \ + XX(ENOSYS, "function not implemented") \ + XX(ENOTCONN, "socket is not connected") \ + XX(ENOTDIR, "not a directory") \ + XX(ENOTEMPTY, "directory not empty") \ + XX(ENOTSOCK, "socket operation on non-socket") \ + XX(ENOTSUP, "operation not supported on socket") \ + XX(EOVERFLOW, "value too large for defined data type") \ + XX(EPERM, "operation not permitted") \ + XX(EPIPE, "broken pipe") \ + XX(EPROTO, "protocol error") \ + XX(EPROTONOSUPPORT, "protocol not supported") \ + XX(EPROTOTYPE, "protocol wrong type for socket") \ + XX(ERANGE, "result too large") \ + XX(EROFS, "read-only file system") \ + XX(ESHUTDOWN, "cannot send after transport endpoint shutdown") \ + XX(ESPIPE, "invalid seek") \ + XX(ESRCH, "no such process") \ + XX(ETIMEDOUT, "connection timed out") \ + XX(ETXTBSY, "text file is busy") \ + XX(EXDEV, "cross-device link not permitted") \ + XX(UNKNOWN, "unknown error") \ + XX(EOF, "end of file") \ + XX(ENXIO, "no such device or address") \ + XX(EMLINK, "too many links") \ + XX(EHOSTDOWN, "host is down") \ + XX(EREMOTEIO, "remote I/O error") \ + XX(ENOTTY, "inappropriate ioctl for device") \ + XX(EFTYPE, "inappropriate file type or format") \ + XX(EILSEQ, "illegal byte sequence") \ + XX(ESOCKTNOSUPPORT, "socket type not supported") \ + +#define UV_HANDLE_TYPE_MAP(XX) \ + XX(ASYNC, async) \ + XX(CHECK, check) \ + XX(FS_EVENT, fs_event) \ + XX(FS_POLL, fs_poll) \ + XX(HANDLE, handle) \ + XX(IDLE, idle) \ + XX(NAMED_PIPE, pipe) \ + XX(POLL, poll) \ + XX(PREPARE, prepare) \ + XX(PROCESS, process) \ + XX(STREAM, stream) \ + XX(TCP, tcp) \ + XX(TIMER, timer) \ + XX(TTY, tty) \ + XX(UDP, udp) \ + XX(SIGNAL, signal) \ + +#define UV_REQ_TYPE_MAP(XX) \ + XX(REQ, req) \ + XX(CONNECT, connect) \ + XX(WRITE, write) \ + XX(SHUTDOWN, shutdown) \ + XX(UDP_SEND, udp_send) \ + XX(FS, fs) \ + XX(WORK, work) \ + XX(GETADDRINFO, getaddrinfo) \ + XX(GETNAMEINFO, getnameinfo) \ + XX(RANDOM, random) \ + +typedef enum { +#define XX(code, _) UV_ ## code = UV__ ## code, + UV_ERRNO_MAP(XX) +#undef XX + UV_ERRNO_MAX = UV__EOF - 1 +} uv_errno_t; + +typedef enum { + UV_UNKNOWN_HANDLE = 0, +#define XX(uc, lc) UV_##uc, + UV_HANDLE_TYPE_MAP(XX) +#undef XX + UV_FILE, + UV_HANDLE_TYPE_MAX +} uv_handle_type; + +typedef enum { + UV_UNKNOWN_REQ = 0, +#define XX(uc, lc) UV_##uc, + UV_REQ_TYPE_MAP(XX) +#undef XX + UV_REQ_TYPE_PRIVATE + UV_REQ_TYPE_MAX +} uv_req_type; + + +/* Handle types. */ +typedef struct uv_loop_s uv_loop_t; +typedef struct uv_handle_s uv_handle_t; +typedef struct uv_dir_s uv_dir_t; +typedef struct uv_stream_s uv_stream_t; +typedef struct uv_tcp_s uv_tcp_t; +typedef struct uv_udp_s uv_udp_t; +typedef struct uv_pipe_s uv_pipe_t; +typedef struct uv_tty_s uv_tty_t; +typedef struct uv_poll_s uv_poll_t; +typedef struct uv_timer_s uv_timer_t; +typedef struct uv_prepare_s uv_prepare_t; +typedef struct uv_check_s uv_check_t; +typedef struct uv_idle_s uv_idle_t; +typedef struct uv_async_s uv_async_t; +typedef struct uv_process_s uv_process_t; +typedef struct uv_fs_event_s uv_fs_event_t; +typedef struct uv_fs_poll_s uv_fs_poll_t; +typedef struct uv_signal_s uv_signal_t; + +/* Request types. */ +typedef struct uv_req_s uv_req_t; +typedef struct uv_getaddrinfo_s uv_getaddrinfo_t; +typedef struct uv_getnameinfo_s uv_getnameinfo_t; +typedef struct uv_shutdown_s uv_shutdown_t; +typedef struct uv_write_s uv_write_t; +typedef struct uv_connect_s uv_connect_t; +typedef struct uv_udp_send_s uv_udp_send_t; +typedef struct uv_fs_s uv_fs_t; +typedef struct uv_work_s uv_work_t; +typedef struct uv_random_s uv_random_t; + +/* None of the above. */ +typedef struct uv_env_item_s uv_env_item_t; +typedef struct uv_cpu_info_s uv_cpu_info_t; +typedef struct uv_interface_address_s uv_interface_address_t; +typedef struct uv_dirent_s uv_dirent_t; +typedef struct uv_passwd_s uv_passwd_t; +typedef struct uv_utsname_s uv_utsname_t; +typedef struct uv_statfs_s uv_statfs_t; + +typedef enum { + UV_LOOP_BLOCK_SIGNAL = 0, + UV_METRICS_IDLE_TIME +} uv_loop_option; + +typedef enum { + UV_RUN_DEFAULT = 0, + UV_RUN_ONCE, + UV_RUN_NOWAIT +} uv_run_mode; + + +UV_EXTERN unsigned int uv_version(void); +UV_EXTERN const char* uv_version_string(void); + +typedef void* (*uv_malloc_func)(size_t size); +typedef void* (*uv_realloc_func)(void* ptr, size_t size); +typedef void* (*uv_calloc_func)(size_t count, size_t size); +typedef void (*uv_free_func)(void* ptr); + +UV_EXTERN void uv_library_shutdown(void); + +UV_EXTERN int uv_replace_allocator(uv_malloc_func malloc_func, + uv_realloc_func realloc_func, + uv_calloc_func calloc_func, + uv_free_func free_func); + +UV_EXTERN uv_loop_t* uv_default_loop(void); +UV_EXTERN int uv_loop_init(uv_loop_t* loop); +UV_EXTERN int uv_loop_close(uv_loop_t* loop); +/* + * NOTE: + * This function is DEPRECATED (to be removed after 0.12), users should + * allocate the loop manually and use uv_loop_init instead. + */ +UV_EXTERN uv_loop_t* uv_loop_new(void); +/* + * NOTE: + * This function is DEPRECATED (to be removed after 0.12). Users should use + * uv_loop_close and free the memory manually instead. + */ +UV_EXTERN void uv_loop_delete(uv_loop_t*); +UV_EXTERN size_t uv_loop_size(void); +UV_EXTERN int uv_loop_alive(const uv_loop_t* loop); +UV_EXTERN int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...); +UV_EXTERN int uv_loop_fork(uv_loop_t* loop); + +UV_EXTERN int uv_run(uv_loop_t*, uv_run_mode mode); +UV_EXTERN void uv_stop(uv_loop_t*); + +UV_EXTERN void uv_ref(uv_handle_t*); +UV_EXTERN void uv_unref(uv_handle_t*); +UV_EXTERN int uv_has_ref(const uv_handle_t*); + +UV_EXTERN void uv_update_time(uv_loop_t*); +UV_EXTERN uint64_t uv_now(const uv_loop_t*); + +UV_EXTERN int uv_backend_fd(const uv_loop_t*); +UV_EXTERN int uv_backend_timeout(const uv_loop_t*); + +typedef void (*uv_alloc_cb)(uv_handle_t* handle, + size_t suggested_size, + uv_buf_t* buf); +typedef void (*uv_read_cb)(uv_stream_t* stream, + ssize_t nread, + const uv_buf_t* buf); +typedef void (*uv_write_cb)(uv_write_t* req, int status); +typedef void (*uv_connect_cb)(uv_connect_t* req, int status); +typedef void (*uv_shutdown_cb)(uv_shutdown_t* req, int status); +typedef void (*uv_connection_cb)(uv_stream_t* server, int status); +typedef void (*uv_close_cb)(uv_handle_t* handle); +typedef void (*uv_poll_cb)(uv_poll_t* handle, int status, int events); +typedef void (*uv_timer_cb)(uv_timer_t* handle); +typedef void (*uv_async_cb)(uv_async_t* handle); +typedef void (*uv_prepare_cb)(uv_prepare_t* handle); +typedef void (*uv_check_cb)(uv_check_t* handle); +typedef void (*uv_idle_cb)(uv_idle_t* handle); +typedef void (*uv_exit_cb)(uv_process_t*, int64_t exit_status, int term_signal); +typedef void (*uv_walk_cb)(uv_handle_t* handle, void* arg); +typedef void (*uv_fs_cb)(uv_fs_t* req); +typedef void (*uv_work_cb)(uv_work_t* req); +typedef void (*uv_after_work_cb)(uv_work_t* req, int status); +typedef void (*uv_getaddrinfo_cb)(uv_getaddrinfo_t* req, + int status, + struct addrinfo* res); +typedef void (*uv_getnameinfo_cb)(uv_getnameinfo_t* req, + int status, + const char* hostname, + const char* service); +typedef void (*uv_random_cb)(uv_random_t* req, + int status, + void* buf, + size_t buflen); + +typedef struct { + long tv_sec; + long tv_nsec; +} uv_timespec_t; + + +typedef struct { + uint64_t st_dev; + uint64_t st_mode; + uint64_t st_nlink; + uint64_t st_uid; + uint64_t st_gid; + uint64_t st_rdev; + uint64_t st_ino; + uint64_t st_size; + uint64_t st_blksize; + uint64_t st_blocks; + uint64_t st_flags; + uint64_t st_gen; + uv_timespec_t st_atim; + uv_timespec_t st_mtim; + uv_timespec_t st_ctim; + uv_timespec_t st_birthtim; +} uv_stat_t; + + +typedef void (*uv_fs_event_cb)(uv_fs_event_t* handle, + const char* filename, + int events, + int status); + +typedef void (*uv_fs_poll_cb)(uv_fs_poll_t* handle, + int status, + const uv_stat_t* prev, + const uv_stat_t* curr); + +typedef void (*uv_signal_cb)(uv_signal_t* handle, int signum); + + +typedef enum { + UV_LEAVE_GROUP = 0, + UV_JOIN_GROUP +} uv_membership; + + +UV_EXTERN int uv_translate_sys_error(int sys_errno); + +UV_EXTERN const char* uv_strerror(int err); +UV_EXTERN char* uv_strerror_r(int err, char* buf, size_t buflen); + +UV_EXTERN const char* uv_err_name(int err); +UV_EXTERN char* uv_err_name_r(int err, char* buf, size_t buflen); + + +#define UV_REQ_FIELDS \ + /* public */ \ + void* data; \ + /* read-only */ \ + uv_req_type type; \ + /* private */ \ + void* reserved[6]; \ + UV_REQ_PRIVATE_FIELDS \ + +/* Abstract base class of all requests. */ +struct uv_req_s { + UV_REQ_FIELDS +}; + + +/* Platform-specific request types. */ +UV_PRIVATE_REQ_TYPES + + +UV_EXTERN int uv_shutdown(uv_shutdown_t* req, + uv_stream_t* handle, + uv_shutdown_cb cb); + +struct uv_shutdown_s { + UV_REQ_FIELDS + uv_stream_t* handle; + uv_shutdown_cb cb; + UV_SHUTDOWN_PRIVATE_FIELDS +}; + + +#define UV_HANDLE_FIELDS \ + /* public */ \ + void* data; \ + /* read-only */ \ + uv_loop_t* loop; \ + uv_handle_type type; \ + /* private */ \ + uv_close_cb close_cb; \ + void* handle_queue[2]; \ + union { \ + int fd; \ + void* reserved[4]; \ + } u; \ + UV_HANDLE_PRIVATE_FIELDS \ + +/* The abstract base class of all handles. */ +struct uv_handle_s { + UV_HANDLE_FIELDS +}; + +UV_EXTERN size_t uv_handle_size(uv_handle_type type); +UV_EXTERN uv_handle_type uv_handle_get_type(const uv_handle_t* handle); +UV_EXTERN const char* uv_handle_type_name(uv_handle_type type); +UV_EXTERN void* uv_handle_get_data(const uv_handle_t* handle); +UV_EXTERN uv_loop_t* uv_handle_get_loop(const uv_handle_t* handle); +UV_EXTERN void uv_handle_set_data(uv_handle_t* handle, void* data); + +UV_EXTERN size_t uv_req_size(uv_req_type type); +UV_EXTERN void* uv_req_get_data(const uv_req_t* req); +UV_EXTERN void uv_req_set_data(uv_req_t* req, void* data); +UV_EXTERN uv_req_type uv_req_get_type(const uv_req_t* req); +UV_EXTERN const char* uv_req_type_name(uv_req_type type); + +UV_EXTERN int uv_is_active(const uv_handle_t* handle); + +UV_EXTERN void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg); + +/* Helpers for ad hoc debugging, no API/ABI stability guaranteed. */ +UV_EXTERN void uv_print_all_handles(uv_loop_t* loop, FILE* stream); +UV_EXTERN void uv_print_active_handles(uv_loop_t* loop, FILE* stream); + +UV_EXTERN void uv_close(uv_handle_t* handle, uv_close_cb close_cb); + +UV_EXTERN int uv_send_buffer_size(uv_handle_t* handle, int* value); +UV_EXTERN int uv_recv_buffer_size(uv_handle_t* handle, int* value); + +UV_EXTERN int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd); + +UV_EXTERN uv_buf_t uv_buf_init(char* base, unsigned int len); + +UV_EXTERN int uv_pipe(uv_file fds[2], int read_flags, int write_flags); +UV_EXTERN int uv_socketpair(int type, + int protocol, + uv_os_sock_t socket_vector[2], + int flags0, + int flags1); + +#define UV_STREAM_FIELDS \ + /* number of bytes queued for writing */ \ + size_t write_queue_size; \ + uv_alloc_cb alloc_cb; \ + uv_read_cb read_cb; \ + /* private */ \ + UV_STREAM_PRIVATE_FIELDS + +/* + * uv_stream_t is a subclass of uv_handle_t. + * + * uv_stream is an abstract class. + * + * uv_stream_t is the parent class of uv_tcp_t, uv_pipe_t and uv_tty_t. + */ +struct uv_stream_s { + UV_HANDLE_FIELDS + UV_STREAM_FIELDS +}; + +UV_EXTERN size_t uv_stream_get_write_queue_size(const uv_stream_t* stream); + +UV_EXTERN int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb); +UV_EXTERN int uv_accept(uv_stream_t* server, uv_stream_t* client); + +UV_EXTERN int uv_read_start(uv_stream_t*, + uv_alloc_cb alloc_cb, + uv_read_cb read_cb); +UV_EXTERN int uv_read_stop(uv_stream_t*); + +UV_EXTERN int uv_write(uv_write_t* req, + uv_stream_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_write_cb cb); +UV_EXTERN int uv_write2(uv_write_t* req, + uv_stream_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_stream_t* send_handle, + uv_write_cb cb); +UV_EXTERN int uv_try_write(uv_stream_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs); +UV_EXTERN int uv_try_write2(uv_stream_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_stream_t* send_handle); + +/* uv_write_t is a subclass of uv_req_t. */ +struct uv_write_s { + UV_REQ_FIELDS + uv_write_cb cb; + uv_stream_t* send_handle; /* TODO: make private and unix-only in v2.x. */ + uv_stream_t* handle; + UV_WRITE_PRIVATE_FIELDS +}; + + +UV_EXTERN int uv_is_readable(const uv_stream_t* handle); +UV_EXTERN int uv_is_writable(const uv_stream_t* handle); + +UV_EXTERN int uv_stream_set_blocking(uv_stream_t* handle, int blocking); + +UV_EXTERN int uv_is_closing(const uv_handle_t* handle); + + +/* + * uv_tcp_t is a subclass of uv_stream_t. + * + * Represents a TCP stream or TCP server. + */ +struct uv_tcp_s { + UV_HANDLE_FIELDS + UV_STREAM_FIELDS + UV_TCP_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_tcp_init(uv_loop_t*, uv_tcp_t* handle); +UV_EXTERN int uv_tcp_init_ex(uv_loop_t*, uv_tcp_t* handle, unsigned int flags); +UV_EXTERN int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock); +UV_EXTERN int uv_tcp_nodelay(uv_tcp_t* handle, int enable); +UV_EXTERN int uv_tcp_keepalive(uv_tcp_t* handle, + int enable, + unsigned int delay); +UV_EXTERN int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable); + +enum uv_tcp_flags { + /* Used with uv_tcp_bind, when an IPv6 address is used. */ + UV_TCP_IPV6ONLY = 1 +}; + +UV_EXTERN int uv_tcp_bind(uv_tcp_t* handle, + const struct sockaddr* addr, + unsigned int flags); +UV_EXTERN int uv_tcp_getsockname(const uv_tcp_t* handle, + struct sockaddr* name, + int* namelen); +UV_EXTERN int uv_tcp_getpeername(const uv_tcp_t* handle, + struct sockaddr* name, + int* namelen); +UV_EXTERN int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb); +UV_EXTERN int uv_tcp_connect(uv_connect_t* req, + uv_tcp_t* handle, + const struct sockaddr* addr, + uv_connect_cb cb); + +/* uv_connect_t is a subclass of uv_req_t. */ +struct uv_connect_s { + UV_REQ_FIELDS + uv_connect_cb cb; + uv_stream_t* handle; + UV_CONNECT_PRIVATE_FIELDS +}; + + +/* + * UDP support. + */ + +enum uv_udp_flags { + /* Disables dual stack mode. */ + UV_UDP_IPV6ONLY = 1, + /* + * Indicates message was truncated because read buffer was too small. The + * remainder was discarded by the OS. Used in uv_udp_recv_cb. + */ + UV_UDP_PARTIAL = 2, + /* + * Indicates if SO_REUSEADDR will be set when binding the handle. + * This sets the SO_REUSEPORT socket flag on the BSDs and OS X. On other + * Unix platforms, it sets the SO_REUSEADDR flag. What that means is that + * multiple threads or processes can bind to the same address without error + * (provided they all set the flag) but only the last one to bind will receive + * any traffic, in effect "stealing" the port from the previous listener. + */ + UV_UDP_REUSEADDR = 4, + /* + * Indicates that the message was received by recvmmsg, so the buffer provided + * must not be freed by the recv_cb callback. + */ + UV_UDP_MMSG_CHUNK = 8, + /* + * Indicates that the buffer provided has been fully utilized by recvmmsg and + * that it should now be freed by the recv_cb callback. When this flag is set + * in uv_udp_recv_cb, nread will always be 0 and addr will always be NULL. + */ + UV_UDP_MMSG_FREE = 16, + /* + * Indicates if IP_RECVERR/IPV6_RECVERR will be set when binding the handle. + * This sets IP_RECVERR for IPv4 and IPV6_RECVERR for IPv6 UDP sockets on + * Linux. This stops the Linux kernel from suppressing some ICMP error + * messages and enables full ICMP error reporting for faster failover. + * This flag is no-op on platforms other than Linux. + */ + UV_UDP_LINUX_RECVERR = 32, + /* + * Indicates that recvmmsg should be used, if available. + */ + UV_UDP_RECVMMSG = 256 +}; + +typedef void (*uv_udp_send_cb)(uv_udp_send_t* req, int status); +typedef void (*uv_udp_recv_cb)(uv_udp_t* handle, + ssize_t nread, + const uv_buf_t* buf, + const struct sockaddr* addr, + unsigned flags); + +/* uv_udp_t is a subclass of uv_handle_t. */ +struct uv_udp_s { + UV_HANDLE_FIELDS + /* read-only */ + /* + * Number of bytes queued for sending. This field strictly shows how much + * information is currently queued. + */ + size_t send_queue_size; + /* + * Number of send requests currently in the queue awaiting to be processed. + */ + size_t send_queue_count; + UV_UDP_PRIVATE_FIELDS +}; + +/* uv_udp_send_t is a subclass of uv_req_t. */ +struct uv_udp_send_s { + UV_REQ_FIELDS + uv_udp_t* handle; + uv_udp_send_cb cb; + UV_UDP_SEND_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_udp_init(uv_loop_t*, uv_udp_t* handle); +UV_EXTERN int uv_udp_init_ex(uv_loop_t*, uv_udp_t* handle, unsigned int flags); +UV_EXTERN int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock); +UV_EXTERN int uv_udp_bind(uv_udp_t* handle, + const struct sockaddr* addr, + unsigned int flags); +UV_EXTERN int uv_udp_connect(uv_udp_t* handle, const struct sockaddr* addr); + +UV_EXTERN int uv_udp_getpeername(const uv_udp_t* handle, + struct sockaddr* name, + int* namelen); +UV_EXTERN int uv_udp_getsockname(const uv_udp_t* handle, + struct sockaddr* name, + int* namelen); +UV_EXTERN int uv_udp_set_membership(uv_udp_t* handle, + const char* multicast_addr, + const char* interface_addr, + uv_membership membership); +UV_EXTERN int uv_udp_set_source_membership(uv_udp_t* handle, + const char* multicast_addr, + const char* interface_addr, + const char* source_addr, + uv_membership membership); +UV_EXTERN int uv_udp_set_multicast_loop(uv_udp_t* handle, int on); +UV_EXTERN int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl); +UV_EXTERN int uv_udp_set_multicast_interface(uv_udp_t* handle, + const char* interface_addr); +UV_EXTERN int uv_udp_set_broadcast(uv_udp_t* handle, int on); +UV_EXTERN int uv_udp_set_ttl(uv_udp_t* handle, int ttl); +UV_EXTERN int uv_udp_send(uv_udp_send_t* req, + uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr, + uv_udp_send_cb send_cb); +UV_EXTERN int uv_udp_try_send(uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr); +UV_EXTERN int uv_udp_recv_start(uv_udp_t* handle, + uv_alloc_cb alloc_cb, + uv_udp_recv_cb recv_cb); +UV_EXTERN int uv_udp_using_recvmmsg(const uv_udp_t* handle); +UV_EXTERN int uv_udp_recv_stop(uv_udp_t* handle); +UV_EXTERN size_t uv_udp_get_send_queue_size(const uv_udp_t* handle); +UV_EXTERN size_t uv_udp_get_send_queue_count(const uv_udp_t* handle); + + +/* + * uv_tty_t is a subclass of uv_stream_t. + * + * Representing a stream for the console. + */ +struct uv_tty_s { + UV_HANDLE_FIELDS + UV_STREAM_FIELDS + UV_TTY_PRIVATE_FIELDS +}; + +typedef enum { + /* Initial/normal terminal mode */ + UV_TTY_MODE_NORMAL, + /* Raw input mode (On Windows, ENABLE_WINDOW_INPUT is also enabled) */ + UV_TTY_MODE_RAW, + /* Binary-safe I/O mode for IPC (Unix-only) */ + UV_TTY_MODE_IO +} uv_tty_mode_t; + +typedef enum { + /* + * The console supports handling of virtual terminal sequences + * (Windows10 new console, ConEmu) + */ + UV_TTY_SUPPORTED, + /* The console cannot process the virtual terminal sequence. (Legacy + * console) + */ + UV_TTY_UNSUPPORTED +} uv_tty_vtermstate_t; + + +UV_EXTERN int uv_tty_init(uv_loop_t*, uv_tty_t*, uv_file fd, int readable); +UV_EXTERN int uv_tty_set_mode(uv_tty_t*, uv_tty_mode_t mode); +UV_EXTERN int uv_tty_reset_mode(void); +UV_EXTERN int uv_tty_get_winsize(uv_tty_t*, int* width, int* height); +UV_EXTERN void uv_tty_set_vterm_state(uv_tty_vtermstate_t state); +UV_EXTERN int uv_tty_get_vterm_state(uv_tty_vtermstate_t* state); + +#ifdef __cplusplus +extern "C++" { + +inline int uv_tty_set_mode(uv_tty_t* handle, int mode) { + return uv_tty_set_mode(handle, static_cast(mode)); +} + +} +#endif + +UV_EXTERN uv_handle_type uv_guess_handle(uv_file file); + +/* + * uv_pipe_t is a subclass of uv_stream_t. + * + * Representing a pipe stream or pipe server. On Windows this is a Named + * Pipe. On Unix this is a Unix domain socket. + */ +struct uv_pipe_s { + UV_HANDLE_FIELDS + UV_STREAM_FIELDS + int ipc; /* non-zero if this pipe is used for passing handles */ + UV_PIPE_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_pipe_init(uv_loop_t*, uv_pipe_t* handle, int ipc); +UV_EXTERN int uv_pipe_open(uv_pipe_t*, uv_file file); +UV_EXTERN int uv_pipe_bind(uv_pipe_t* handle, const char* name); +UV_EXTERN void uv_pipe_connect(uv_connect_t* req, + uv_pipe_t* handle, + const char* name, + uv_connect_cb cb); +UV_EXTERN int uv_pipe_getsockname(const uv_pipe_t* handle, + char* buffer, + size_t* size); +UV_EXTERN int uv_pipe_getpeername(const uv_pipe_t* handle, + char* buffer, + size_t* size); +UV_EXTERN void uv_pipe_pending_instances(uv_pipe_t* handle, int count); +UV_EXTERN int uv_pipe_pending_count(uv_pipe_t* handle); +UV_EXTERN uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle); +UV_EXTERN int uv_pipe_chmod(uv_pipe_t* handle, int flags); + + +struct uv_poll_s { + UV_HANDLE_FIELDS + uv_poll_cb poll_cb; + UV_POLL_PRIVATE_FIELDS +}; + +enum uv_poll_event { + UV_READABLE = 1, + UV_WRITABLE = 2, + UV_DISCONNECT = 4, + UV_PRIORITIZED = 8 +}; + +UV_EXTERN int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd); +UV_EXTERN int uv_poll_init_socket(uv_loop_t* loop, + uv_poll_t* handle, + uv_os_sock_t socket); +UV_EXTERN int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb); +UV_EXTERN int uv_poll_stop(uv_poll_t* handle); + + +struct uv_prepare_s { + UV_HANDLE_FIELDS + UV_PREPARE_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_prepare_init(uv_loop_t*, uv_prepare_t* prepare); +UV_EXTERN int uv_prepare_start(uv_prepare_t* prepare, uv_prepare_cb cb); +UV_EXTERN int uv_prepare_stop(uv_prepare_t* prepare); + + +struct uv_check_s { + UV_HANDLE_FIELDS + UV_CHECK_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_check_init(uv_loop_t*, uv_check_t* check); +UV_EXTERN int uv_check_start(uv_check_t* check, uv_check_cb cb); +UV_EXTERN int uv_check_stop(uv_check_t* check); + + +struct uv_idle_s { + UV_HANDLE_FIELDS + UV_IDLE_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_idle_init(uv_loop_t*, uv_idle_t* idle); +UV_EXTERN int uv_idle_start(uv_idle_t* idle, uv_idle_cb cb); +UV_EXTERN int uv_idle_stop(uv_idle_t* idle); + + +struct uv_async_s { + UV_HANDLE_FIELDS + UV_ASYNC_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_async_init(uv_loop_t*, + uv_async_t* async, + uv_async_cb async_cb); +UV_EXTERN int uv_async_send(uv_async_t* async); + + +/* + * uv_timer_t is a subclass of uv_handle_t. + * + * Used to get woken up at a specified time in the future. + */ +struct uv_timer_s { + UV_HANDLE_FIELDS + UV_TIMER_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_timer_init(uv_loop_t*, uv_timer_t* handle); +UV_EXTERN int uv_timer_start(uv_timer_t* handle, + uv_timer_cb cb, + uint64_t timeout, + uint64_t repeat); +UV_EXTERN int uv_timer_stop(uv_timer_t* handle); +UV_EXTERN int uv_timer_again(uv_timer_t* handle); +UV_EXTERN void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat); +UV_EXTERN uint64_t uv_timer_get_repeat(const uv_timer_t* handle); +UV_EXTERN uint64_t uv_timer_get_due_in(const uv_timer_t* handle); + + +/* + * uv_getaddrinfo_t is a subclass of uv_req_t. + * + * Request object for uv_getaddrinfo. + */ +struct uv_getaddrinfo_s { + UV_REQ_FIELDS + /* read-only */ + uv_loop_t* loop; + /* struct addrinfo* addrinfo is marked as private, but it really isn't. */ + UV_GETADDRINFO_PRIVATE_FIELDS +}; + + +UV_EXTERN int uv_getaddrinfo(uv_loop_t* loop, + uv_getaddrinfo_t* req, + uv_getaddrinfo_cb getaddrinfo_cb, + const char* node, + const char* service, + const struct addrinfo* hints); +UV_EXTERN void uv_freeaddrinfo(struct addrinfo* ai); + + +/* +* uv_getnameinfo_t is a subclass of uv_req_t. +* +* Request object for uv_getnameinfo. +*/ +struct uv_getnameinfo_s { + UV_REQ_FIELDS + /* read-only */ + uv_loop_t* loop; + /* host and service are marked as private, but they really aren't. */ + UV_GETNAMEINFO_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_getnameinfo(uv_loop_t* loop, + uv_getnameinfo_t* req, + uv_getnameinfo_cb getnameinfo_cb, + const struct sockaddr* addr, + int flags); + + +/* uv_spawn() options. */ +typedef enum { + UV_IGNORE = 0x00, + UV_CREATE_PIPE = 0x01, + UV_INHERIT_FD = 0x02, + UV_INHERIT_STREAM = 0x04, + + /* + * When UV_CREATE_PIPE is specified, UV_READABLE_PIPE and UV_WRITABLE_PIPE + * determine the direction of flow, from the child process' perspective. Both + * flags may be specified to create a duplex data stream. + */ + UV_READABLE_PIPE = 0x10, + UV_WRITABLE_PIPE = 0x20, + + /* + * When UV_CREATE_PIPE is specified, specifying UV_NONBLOCK_PIPE opens the + * handle in non-blocking mode in the child. This may cause loss of data, + * if the child is not designed to handle to encounter this mode, + * but can also be significantly more efficient. + */ + UV_NONBLOCK_PIPE = 0x40, + UV_OVERLAPPED_PIPE = 0x40 /* old name, for compatibility */ +} uv_stdio_flags; + +typedef struct uv_stdio_container_s { + uv_stdio_flags flags; + + union { + uv_stream_t* stream; + int fd; + } data; +} uv_stdio_container_t; + +typedef struct uv_process_options_s { + uv_exit_cb exit_cb; /* Called after the process exits. */ + const char* file; /* Path to program to execute. */ + /* + * Command line arguments. args[0] should be the path to the program. On + * Windows this uses CreateProcess which concatenates the arguments into a + * string this can cause some strange errors. See the note at + * windows_verbatim_arguments. + */ + char** args; + /* + * This will be set as the environ variable in the subprocess. If this is + * NULL then the parents environ will be used. + */ + char** env; + /* + * If non-null this represents a directory the subprocess should execute + * in. Stands for current working directory. + */ + const char* cwd; + /* + * Various flags that control how uv_spawn() behaves. See the definition of + * `enum uv_process_flags` below. + */ + unsigned int flags; + /* + * The `stdio` field points to an array of uv_stdio_container_t structs that + * describe the file descriptors that will be made available to the child + * process. The convention is that stdio[0] points to stdin, fd 1 is used for + * stdout, and fd 2 is stderr. + * + * Note that on windows file descriptors greater than 2 are available to the + * child process only if the child processes uses the MSVCRT runtime. + */ + int stdio_count; + uv_stdio_container_t* stdio; + /* + * Libuv can change the child process' user/group id. This happens only when + * the appropriate bits are set in the flags fields. This is not supported on + * windows; uv_spawn() will fail and set the error to UV_ENOTSUP. + */ + uv_uid_t uid; + uv_gid_t gid; +} uv_process_options_t; + +/* + * These are the flags that can be used for the uv_process_options.flags field. + */ +enum uv_process_flags { + /* + * Set the child process' user id. The user id is supplied in the `uid` field + * of the options struct. This does not work on windows; setting this flag + * will cause uv_spawn() to fail. + */ + UV_PROCESS_SETUID = (1 << 0), + /* + * Set the child process' group id. The user id is supplied in the `gid` + * field of the options struct. This does not work on windows; setting this + * flag will cause uv_spawn() to fail. + */ + UV_PROCESS_SETGID = (1 << 1), + /* + * Do not wrap any arguments in quotes, or perform any other escaping, when + * converting the argument list into a command line string. This option is + * only meaningful on Windows systems. On Unix it is silently ignored. + */ + UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS = (1 << 2), + /* + * Spawn the child process in a detached state - this will make it a process + * group leader, and will effectively enable the child to keep running after + * the parent exits. Note that the child process will still keep the + * parent's event loop alive unless the parent process calls uv_unref() on + * the child's process handle. + */ + UV_PROCESS_DETACHED = (1 << 3), + /* + * Hide the subprocess window that would normally be created. This option is + * only meaningful on Windows systems. On Unix it is silently ignored. + */ + UV_PROCESS_WINDOWS_HIDE = (1 << 4), + /* + * Hide the subprocess console window that would normally be created. This + * option is only meaningful on Windows systems. On Unix it is silently + * ignored. + */ + UV_PROCESS_WINDOWS_HIDE_CONSOLE = (1 << 5), + /* + * Hide the subprocess GUI window that would normally be created. This + * option is only meaningful on Windows systems. On Unix it is silently + * ignored. + */ + UV_PROCESS_WINDOWS_HIDE_GUI = (1 << 6) +}; + +/* + * uv_process_t is a subclass of uv_handle_t. + */ +struct uv_process_s { + UV_HANDLE_FIELDS + uv_exit_cb exit_cb; + int pid; + UV_PROCESS_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_spawn(uv_loop_t* loop, + uv_process_t* handle, + const uv_process_options_t* options); +UV_EXTERN int uv_process_kill(uv_process_t*, int signum); +UV_EXTERN int uv_kill(int pid, int signum); +UV_EXTERN uv_pid_t uv_process_get_pid(const uv_process_t*); + + +/* + * uv_work_t is a subclass of uv_req_t. + */ +struct uv_work_s { + UV_REQ_FIELDS + uv_loop_t* loop; + uv_work_cb work_cb; + uv_after_work_cb after_work_cb; + UV_WORK_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_queue_work(uv_loop_t* loop, + uv_work_t* req, + uv_work_cb work_cb, + uv_after_work_cb after_work_cb); + +UV_EXTERN int uv_cancel(uv_req_t* req); + +typedef enum { + uv_qos_background = 0, + uv_qos_utility = 1, + uv_qos_default = 2, + uv_qos_user_initiated = 3, +} uv_qos_t; + +UV_EXTERN int uv_queue_work_with_qos(uv_loop_t* loop, + uv_work_t* req, + uv_work_cb work_cb, + uv_after_work_cb after_work_cb, + uv_qos_t qos); + +struct uv_cpu_times_s { + uint64_t user; /* milliseconds */ + uint64_t nice; /* milliseconds */ + uint64_t sys; /* milliseconds */ + uint64_t idle; /* milliseconds */ + uint64_t irq; /* milliseconds */ +}; + +struct uv_cpu_info_s { + char* model; + int speed; + struct uv_cpu_times_s cpu_times; +}; + +struct uv_interface_address_s { + char* name; + char phys_addr[6]; + int is_internal; + union { + struct sockaddr_in address4; + struct sockaddr_in6 address6; + } address; + union { + struct sockaddr_in netmask4; + struct sockaddr_in6 netmask6; + } netmask; +}; + +struct uv_passwd_s { + char* username; + unsigned long uid; + unsigned long gid; + char* shell; + char* homedir; +}; + +struct uv_utsname_s { + char sysname[256]; + char release[256]; + char version[256]; + char machine[256]; + /* This struct does not contain the nodename and domainname fields present in + the utsname type. domainname is a GNU extension. Both fields are referred + to as meaningless in the docs. */ +}; + +struct uv_statfs_s { + uint64_t f_type; + uint64_t f_bsize; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; + uint64_t f_spare[4]; +}; + +typedef enum { + UV_DIRENT_UNKNOWN, + UV_DIRENT_FILE, + UV_DIRENT_DIR, + UV_DIRENT_LINK, + UV_DIRENT_FIFO, + UV_DIRENT_SOCKET, + UV_DIRENT_CHAR, + UV_DIRENT_BLOCK +} uv_dirent_type_t; + +struct uv_dirent_s { + const char* name; + uv_dirent_type_t type; +}; + +UV_EXTERN char** uv_setup_args(int argc, char** argv); +UV_EXTERN int uv_get_process_title(char* buffer, size_t size); +UV_EXTERN int uv_set_process_title(const char* title); +UV_EXTERN int uv_resident_set_memory(size_t* rss); +UV_EXTERN int uv_uptime(double* uptime); +UV_EXTERN uv_os_fd_t uv_get_osfhandle(int fd); +UV_EXTERN int uv_open_osfhandle(uv_os_fd_t os_fd); + +typedef struct { + long tv_sec; + long tv_usec; +} uv_timeval_t; + +typedef struct { + int64_t tv_sec; + int32_t tv_usec; +} uv_timeval64_t; + +typedef struct { + uv_timeval_t ru_utime; /* user CPU time used */ + uv_timeval_t ru_stime; /* system CPU time used */ + uint64_t ru_maxrss; /* maximum resident set size */ + uint64_t ru_ixrss; /* integral shared memory size */ + uint64_t ru_idrss; /* integral unshared data size */ + uint64_t ru_isrss; /* integral unshared stack size */ + uint64_t ru_minflt; /* page reclaims (soft page faults) */ + uint64_t ru_majflt; /* page faults (hard page faults) */ + uint64_t ru_nswap; /* swaps */ + uint64_t ru_inblock; /* block input operations */ + uint64_t ru_oublock; /* block output operations */ + uint64_t ru_msgsnd; /* IPC messages sent */ + uint64_t ru_msgrcv; /* IPC messages received */ + uint64_t ru_nsignals; /* signals received */ + uint64_t ru_nvcsw; /* voluntary context switches */ + uint64_t ru_nivcsw; /* involuntary context switches */ +} uv_rusage_t; + +UV_EXTERN int uv_getrusage(uv_rusage_t* rusage); + +UV_EXTERN int uv_os_homedir(char* buffer, size_t* size); +UV_EXTERN int uv_os_tmpdir(char* buffer, size_t* size); +UV_EXTERN int uv_os_get_passwd(uv_passwd_t* pwd); +UV_EXTERN void uv_os_free_passwd(uv_passwd_t* pwd); +UV_EXTERN uv_pid_t uv_os_getpid(void); +UV_EXTERN uv_pid_t uv_os_getppid(void); + +#if defined(__PASE__) +/* On IBM i PASE, the highest process priority is -10 */ +# define UV_PRIORITY_LOW 39 /* RUNPTY(99) */ +# define UV_PRIORITY_BELOW_NORMAL 15 /* RUNPTY(50) */ +# define UV_PRIORITY_NORMAL 0 /* RUNPTY(20) */ +# define UV_PRIORITY_ABOVE_NORMAL -4 /* RUNTY(12) */ +# define UV_PRIORITY_HIGH -7 /* RUNPTY(6) */ +# define UV_PRIORITY_HIGHEST -10 /* RUNPTY(1) */ +#else +# define UV_PRIORITY_LOW 19 +# define UV_PRIORITY_BELOW_NORMAL 10 +# define UV_PRIORITY_NORMAL 0 +# define UV_PRIORITY_ABOVE_NORMAL -7 +# define UV_PRIORITY_HIGH -14 +# define UV_PRIORITY_HIGHEST -20 +#endif + +UV_EXTERN int uv_os_getpriority(uv_pid_t pid, int* priority); +UV_EXTERN int uv_os_setpriority(uv_pid_t pid, int priority); + +UV_EXTERN unsigned int uv_available_parallelism(void); +UV_EXTERN int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count); +UV_EXTERN void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count); + +UV_EXTERN int uv_interface_addresses(uv_interface_address_t** addresses, + int* count); +UV_EXTERN void uv_free_interface_addresses(uv_interface_address_t* addresses, + int count); + +struct uv_env_item_s { + char* name; + char* value; +}; + +UV_EXTERN int uv_os_environ(uv_env_item_t** envitems, int* count); +UV_EXTERN void uv_os_free_environ(uv_env_item_t* envitems, int count); +UV_EXTERN int uv_os_getenv(const char* name, char* buffer, size_t* size); +UV_EXTERN int uv_os_setenv(const char* name, const char* value); +UV_EXTERN int uv_os_unsetenv(const char* name); + +#ifdef MAXHOSTNAMELEN +# define UV_MAXHOSTNAMESIZE (MAXHOSTNAMELEN + 1) +#else + /* + Fallback for the maximum hostname size, including the null terminator. The + Windows gethostname() documentation states that 256 bytes will always be + large enough to hold the null-terminated hostname. + */ +# define UV_MAXHOSTNAMESIZE 256 +#endif + +UV_EXTERN int uv_os_gethostname(char* buffer, size_t* size); + +UV_EXTERN int uv_os_uname(uv_utsname_t* buffer); + +UV_EXTERN uint64_t uv_metrics_idle_time(uv_loop_t* loop); + +typedef enum { + UV_FS_UNKNOWN = -1, + UV_FS_CUSTOM, + UV_FS_OPEN, + UV_FS_CLOSE, + UV_FS_READ, + UV_FS_WRITE, + UV_FS_SENDFILE, + UV_FS_STAT, + UV_FS_LSTAT, + UV_FS_FSTAT, + UV_FS_FTRUNCATE, + UV_FS_UTIME, + UV_FS_FUTIME, + UV_FS_ACCESS, + UV_FS_CHMOD, + UV_FS_FCHMOD, + UV_FS_FSYNC, + UV_FS_FDATASYNC, + UV_FS_UNLINK, + UV_FS_RMDIR, + UV_FS_MKDIR, + UV_FS_MKDTEMP, + UV_FS_RENAME, + UV_FS_SCANDIR, + UV_FS_LINK, + UV_FS_SYMLINK, + UV_FS_READLINK, + UV_FS_CHOWN, + UV_FS_FCHOWN, + UV_FS_REALPATH, + UV_FS_COPYFILE, + UV_FS_LCHOWN, + UV_FS_OPENDIR, + UV_FS_READDIR, + UV_FS_CLOSEDIR, + UV_FS_STATFS, + UV_FS_MKSTEMP, + UV_FS_LUTIME +} uv_fs_type; + +struct uv_dir_s { + uv_dirent_t* dirents; + size_t nentries; + void* reserved[4]; + UV_DIR_PRIVATE_FIELDS +}; + +/* uv_fs_t is a subclass of uv_req_t. */ +struct uv_fs_s { + UV_REQ_FIELDS + uv_fs_type fs_type; + uv_loop_t* loop; + uv_fs_cb cb; + ssize_t result; + void* ptr; + const char* path; + uv_stat_t statbuf; /* Stores the result of uv_fs_stat() and uv_fs_fstat(). */ + UV_FS_PRIVATE_FIELDS +}; + +UV_EXTERN uv_fs_type uv_fs_get_type(const uv_fs_t*); +UV_EXTERN ssize_t uv_fs_get_result(const uv_fs_t*); +UV_EXTERN int uv_fs_get_system_error(const uv_fs_t*); +UV_EXTERN void* uv_fs_get_ptr(const uv_fs_t*); +UV_EXTERN const char* uv_fs_get_path(const uv_fs_t*); +UV_EXTERN uv_stat_t* uv_fs_get_statbuf(uv_fs_t*); + +UV_EXTERN void uv_fs_req_cleanup(uv_fs_t* req); +UV_EXTERN int uv_fs_close(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_fs_cb cb); +UV_EXTERN int uv_fs_open(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int flags, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_read(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + const uv_buf_t bufs[], + unsigned int nbufs, + int64_t offset, + uv_fs_cb cb); +UV_EXTERN int uv_fs_unlink(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_write(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + const uv_buf_t bufs[], + unsigned int nbufs, + int64_t offset, + uv_fs_cb cb); +/* + * This flag can be used with uv_fs_copyfile() to return an error if the + * destination already exists. + */ +#define UV_FS_COPYFILE_EXCL 0x0001 + +/* + * This flag can be used with uv_fs_copyfile() to attempt to create a reflink. + * If copy-on-write is not supported, a fallback copy mechanism is used. + */ +#define UV_FS_COPYFILE_FICLONE 0x0002 + +/* + * This flag can be used with uv_fs_copyfile() to attempt to create a reflink. + * If copy-on-write is not supported, an error is returned. + */ +#define UV_FS_COPYFILE_FICLONE_FORCE 0x0004 + +UV_EXTERN int uv_fs_copyfile(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + int flags, + uv_fs_cb cb); +UV_EXTERN int uv_fs_mkdir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_mkdtemp(uv_loop_t* loop, + uv_fs_t* req, + const char* tpl, + uv_fs_cb cb); +UV_EXTERN int uv_fs_mkstemp(uv_loop_t* loop, + uv_fs_t* req, + const char* tpl, + uv_fs_cb cb); +UV_EXTERN int uv_fs_rmdir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_scandir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int flags, + uv_fs_cb cb); +UV_EXTERN int uv_fs_scandir_next(uv_fs_t* req, + uv_dirent_t* ent); +UV_EXTERN int uv_fs_opendir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_readdir(uv_loop_t* loop, + uv_fs_t* req, + uv_dir_t* dir, + uv_fs_cb cb); +UV_EXTERN int uv_fs_closedir(uv_loop_t* loop, + uv_fs_t* req, + uv_dir_t* dir, + uv_fs_cb cb); +UV_EXTERN int uv_fs_stat(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fstat(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_fs_cb cb); +UV_EXTERN int uv_fs_rename(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fsync(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fdatasync(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_fs_cb cb); +UV_EXTERN int uv_fs_ftruncate(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + int64_t offset, + uv_fs_cb cb); +UV_EXTERN int uv_fs_sendfile(uv_loop_t* loop, + uv_fs_t* req, + uv_file out_fd, + uv_file in_fd, + int64_t in_offset, + size_t length, + uv_fs_cb cb); +UV_EXTERN int uv_fs_access(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_chmod(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_utime(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + double atime, + double mtime, + uv_fs_cb cb); +UV_EXTERN int uv_fs_futime(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + double atime, + double mtime, + uv_fs_cb cb); +UV_EXTERN int uv_fs_lutime(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + double atime, + double mtime, + uv_fs_cb cb); +UV_EXTERN int uv_fs_lstat(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_link(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + uv_fs_cb cb); + +/* + * This flag can be used with uv_fs_symlink() on Windows to specify whether + * path argument points to a directory. + */ +#define UV_FS_SYMLINK_DIR 0x0001 + +/* + * This flag can be used with uv_fs_symlink() on Windows to specify whether + * the symlink is to be created using junction points. + */ +#define UV_FS_SYMLINK_JUNCTION 0x0002 + +UV_EXTERN int uv_fs_symlink(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + int flags, + uv_fs_cb cb); +UV_EXTERN int uv_fs_readlink(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_realpath(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fchmod(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_chown(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_uid_t uid, + uv_gid_t gid, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fchown(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_uid_t uid, + uv_gid_t gid, + uv_fs_cb cb); +UV_EXTERN int uv_fs_lchown(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_uid_t uid, + uv_gid_t gid, + uv_fs_cb cb); +UV_EXTERN int uv_fs_statfs(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); + + +enum uv_fs_event { + UV_RENAME = 1, + UV_CHANGE = 2 +}; + + +struct uv_fs_event_s { + UV_HANDLE_FIELDS + /* private */ + char* path; + UV_FS_EVENT_PRIVATE_FIELDS +}; + + +/* + * uv_fs_stat() based polling file watcher. + */ +struct uv_fs_poll_s { + UV_HANDLE_FIELDS + /* Private, don't touch. */ + void* poll_ctx; +}; + +UV_EXTERN int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle); +UV_EXTERN int uv_fs_poll_start(uv_fs_poll_t* handle, + uv_fs_poll_cb poll_cb, + const char* path, + unsigned int interval); +UV_EXTERN int uv_fs_poll_stop(uv_fs_poll_t* handle); +UV_EXTERN int uv_fs_poll_getpath(uv_fs_poll_t* handle, + char* buffer, + size_t* size); + + +struct uv_signal_s { + UV_HANDLE_FIELDS + uv_signal_cb signal_cb; + int signum; + UV_SIGNAL_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_signal_init(uv_loop_t* loop, uv_signal_t* handle); +UV_EXTERN int uv_signal_start(uv_signal_t* handle, + uv_signal_cb signal_cb, + int signum); +UV_EXTERN int uv_signal_start_oneshot(uv_signal_t* handle, + uv_signal_cb signal_cb, + int signum); +UV_EXTERN int uv_signal_stop(uv_signal_t* handle); + +UV_EXTERN void uv_loadavg(double avg[3]); + + +/* + * Flags to be passed to uv_fs_event_start(). + */ +enum uv_fs_event_flags { + /* + * By default, if the fs event watcher is given a directory name, we will + * watch for all events in that directory. This flags overrides this behavior + * and makes fs_event report only changes to the directory entry itself. This + * flag does not affect individual files watched. + * This flag is currently not implemented yet on any backend. + */ + UV_FS_EVENT_WATCH_ENTRY = 1, + + /* + * By default uv_fs_event will try to use a kernel interface such as inotify + * or kqueue to detect events. This may not work on remote filesystems such + * as NFS mounts. This flag makes fs_event fall back to calling stat() on a + * regular interval. + * This flag is currently not implemented yet on any backend. + */ + UV_FS_EVENT_STAT = 2, + + /* + * By default, event watcher, when watching directory, is not registering + * (is ignoring) changes in it's subdirectories. + * This flag will override this behaviour on platforms that support it. + */ + UV_FS_EVENT_RECURSIVE = 4 +}; + + +UV_EXTERN int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle); +UV_EXTERN int uv_fs_event_start(uv_fs_event_t* handle, + uv_fs_event_cb cb, + const char* path, + unsigned int flags); +UV_EXTERN int uv_fs_event_stop(uv_fs_event_t* handle); +UV_EXTERN int uv_fs_event_getpath(uv_fs_event_t* handle, + char* buffer, + size_t* size); + +UV_EXTERN int uv_ip4_addr(const char* ip, int port, struct sockaddr_in* addr); +UV_EXTERN int uv_ip6_addr(const char* ip, int port, struct sockaddr_in6* addr); + +UV_EXTERN int uv_ip4_name(const struct sockaddr_in* src, char* dst, size_t size); +UV_EXTERN int uv_ip6_name(const struct sockaddr_in6* src, char* dst, size_t size); +UV_EXTERN int uv_ip_name(const struct sockaddr* src, char* dst, size_t size); + +UV_EXTERN int uv_inet_ntop(int af, const void* src, char* dst, size_t size); +UV_EXTERN int uv_inet_pton(int af, const char* src, void* dst); + + +struct uv_random_s { + UV_REQ_FIELDS + /* read-only */ + uv_loop_t* loop; + /* private */ + int status; + void* buf; + size_t buflen; + uv_random_cb cb; + struct uv__work work_req; +}; + +UV_EXTERN int uv_random(uv_loop_t* loop, + uv_random_t* req, + void *buf, + size_t buflen, + unsigned flags, /* For future extension; must be 0. */ + uv_random_cb cb); + +#if defined(IF_NAMESIZE) +# define UV_IF_NAMESIZE (IF_NAMESIZE + 1) +#elif defined(IFNAMSIZ) +# define UV_IF_NAMESIZE (IFNAMSIZ + 1) +#else +# define UV_IF_NAMESIZE (16 + 1) +#endif + +UV_EXTERN int uv_if_indextoname(unsigned int ifindex, + char* buffer, + size_t* size); +UV_EXTERN int uv_if_indextoiid(unsigned int ifindex, + char* buffer, + size_t* size); + +UV_EXTERN int uv_exepath(char* buffer, size_t* size); + +UV_EXTERN int uv_cwd(char* buffer, size_t* size); + +UV_EXTERN int uv_chdir(const char* dir); + +UV_EXTERN uint64_t uv_get_free_memory(void); +UV_EXTERN uint64_t uv_get_total_memory(void); +UV_EXTERN uint64_t uv_get_constrained_memory(void); + +UV_EXTERN uint64_t uv_hrtime(void); +UV_EXTERN void uv_sleep(unsigned int msec); + +UV_EXTERN void uv_disable_stdio_inheritance(void); + +UV_EXTERN int uv_dlopen(const char* filename, uv_lib_t* lib); +UV_EXTERN void uv_dlclose(uv_lib_t* lib); +UV_EXTERN int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr); +UV_EXTERN const char* uv_dlerror(const uv_lib_t* lib); + +UV_EXTERN int uv_mutex_init(uv_mutex_t* handle); +UV_EXTERN int uv_mutex_init_recursive(uv_mutex_t* handle); +UV_EXTERN void uv_mutex_destroy(uv_mutex_t* handle); +UV_EXTERN void uv_mutex_lock(uv_mutex_t* handle); +UV_EXTERN int uv_mutex_trylock(uv_mutex_t* handle); +UV_EXTERN void uv_mutex_unlock(uv_mutex_t* handle); + +UV_EXTERN int uv_rwlock_init(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_destroy(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_rdlock(uv_rwlock_t* rwlock); +UV_EXTERN int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_rdunlock(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_wrlock(uv_rwlock_t* rwlock); +UV_EXTERN int uv_rwlock_trywrlock(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_wrunlock(uv_rwlock_t* rwlock); + +UV_EXTERN int uv_sem_init(uv_sem_t* sem, unsigned int value); +UV_EXTERN void uv_sem_destroy(uv_sem_t* sem); +UV_EXTERN void uv_sem_post(uv_sem_t* sem); +UV_EXTERN void uv_sem_wait(uv_sem_t* sem); +UV_EXTERN int uv_sem_trywait(uv_sem_t* sem); + +UV_EXTERN int uv_cond_init(uv_cond_t* cond); +UV_EXTERN void uv_cond_destroy(uv_cond_t* cond); +UV_EXTERN void uv_cond_signal(uv_cond_t* cond); +UV_EXTERN void uv_cond_broadcast(uv_cond_t* cond); + +UV_EXTERN int uv_barrier_init(uv_barrier_t* barrier, unsigned int count); +UV_EXTERN void uv_barrier_destroy(uv_barrier_t* barrier); +UV_EXTERN int uv_barrier_wait(uv_barrier_t* barrier); + +UV_EXTERN void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex); +UV_EXTERN int uv_cond_timedwait(uv_cond_t* cond, + uv_mutex_t* mutex, + uint64_t timeout); + +UV_EXTERN void uv_once(uv_once_t* guard, void (*callback)(void)); + +UV_EXTERN int uv_key_create(uv_key_t* key); +UV_EXTERN void uv_key_delete(uv_key_t* key); +UV_EXTERN void* uv_key_get(uv_key_t* key); +UV_EXTERN void uv_key_set(uv_key_t* key, void* value); + +UV_EXTERN int uv_gettimeofday(uv_timeval64_t* tv); + +typedef void (*uv_thread_cb)(void* arg); + +UV_EXTERN int uv_thread_create(uv_thread_t* tid, uv_thread_cb entry, void* arg); + +typedef enum { + UV_THREAD_NO_FLAGS = 0x00, + UV_THREAD_HAS_STACK_SIZE = 0x01 +} uv_thread_create_flags; + +struct uv_thread_options_s { + unsigned int flags; + size_t stack_size; + /* More fields may be added at any time. */ +}; + +typedef struct uv_thread_options_s uv_thread_options_t; + +UV_EXTERN int uv_thread_create_ex(uv_thread_t* tid, + const uv_thread_options_t* params, + uv_thread_cb entry, + void* arg); +UV_EXTERN uv_thread_t uv_thread_self(void); +UV_EXTERN int uv_thread_join(uv_thread_t *tid); +UV_EXTERN int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2); + +/* The presence of these unions force similar struct layout. */ +#define XX(_, name) uv_ ## name ## _t name; +union uv_any_handle { + UV_HANDLE_TYPE_MAP(XX) +}; + +union uv_any_req { + UV_REQ_TYPE_MAP(XX) +}; +#undef XX + + +struct uv_loop_s { + /* User data - use this for whatever. */ + void* data; + /* Loop reference counting. */ + unsigned int active_handles; + void* handle_queue[2]; + union { + void* unused; + unsigned int count; + } active_reqs; + /* Internal storage for future extensions. */ + void* internal_fields; + /* Internal flag to signal loop stop. */ + unsigned int stop_flag; + UV_LOOP_PRIVATE_FIELDS +}; + +UV_EXTERN void* uv_loop_get_data(const uv_loop_t*); +UV_EXTERN void uv_loop_set_data(uv_loop_t*, void* data); + +/* Don't export the private CPP symbols. */ +#undef UV_HANDLE_TYPE_PRIVATE +#undef UV_REQ_TYPE_PRIVATE +#undef UV_REQ_PRIVATE_FIELDS +#undef UV_STREAM_PRIVATE_FIELDS +#undef UV_TCP_PRIVATE_FIELDS +#undef UV_PREPARE_PRIVATE_FIELDS +#undef UV_CHECK_PRIVATE_FIELDS +#undef UV_IDLE_PRIVATE_FIELDS +#undef UV_ASYNC_PRIVATE_FIELDS +#undef UV_TIMER_PRIVATE_FIELDS +#undef UV_GETADDRINFO_PRIVATE_FIELDS +#undef UV_GETNAMEINFO_PRIVATE_FIELDS +#undef UV_FS_REQ_PRIVATE_FIELDS +#undef UV_WORK_PRIVATE_FIELDS +#undef UV_FS_EVENT_PRIVATE_FIELDS +#undef UV_SIGNAL_PRIVATE_FIELDS +#undef UV_LOOP_PRIVATE_FIELDS +#undef UV_LOOP_PRIVATE_PLATFORM_FIELDS +#undef UV__ERR + +#ifdef __cplusplus +} +#endif +#endif /* UV_H */ diff --git a/third_party/libuv/include/uv/aix.h b/third_party/libuv/include/uv/aix.h new file mode 100644 index 0000000000000000000000000000000000000000..7dc992fa6d74b5db275847ace8ef9acfd8108c2f --- /dev/null +++ b/third_party/libuv/include/uv/aix.h @@ -0,0 +1,32 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * 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 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. + */ + +#ifndef UV_AIX_H +#define UV_AIX_H + +#define UV_PLATFORM_LOOP_FIELDS \ + int fs_fd; \ + +#define UV_PLATFORM_FS_EVENT_FIELDS \ + uv__io_t event_watcher; \ + char *dir_filename; \ + +#endif /* UV_AIX_H */ diff --git a/third_party/libuv/include/uv/bsd.h b/third_party/libuv/include/uv/bsd.h new file mode 100644 index 0000000000000000000000000000000000000000..2d72b3d7711311144aae0fdfe73479b89f2aba2d --- /dev/null +++ b/third_party/libuv/include/uv/bsd.h @@ -0,0 +1,34 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * 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 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. + */ + +#ifndef UV_BSD_H +#define UV_BSD_H + +#define UV_PLATFORM_FS_EVENT_FIELDS \ + uv__io_t event_watcher; \ + +#define UV_IO_PRIVATE_PLATFORM_FIELDS \ + int rcount; \ + int wcount; \ + +#define UV_HAVE_KQUEUE 1 + +#endif /* UV_BSD_H */ diff --git a/third_party/libuv/include/uv/darwin.h b/third_party/libuv/include/uv/darwin.h new file mode 100644 index 0000000000000000000000000000000000000000..d226415820bb6a504f79b74dd7c7e460d4c403f5 --- /dev/null +++ b/third_party/libuv/include/uv/darwin.h @@ -0,0 +1,61 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * 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 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. + */ + +#ifndef UV_DARWIN_H +#define UV_DARWIN_H + +#if defined(__APPLE__) && defined(__MACH__) +# include +# include +# include +# include +# define UV_PLATFORM_SEM_T semaphore_t +#endif + +#define UV_IO_PRIVATE_PLATFORM_FIELDS \ + int rcount; \ + int wcount; \ + +#define UV_PLATFORM_LOOP_FIELDS \ + uv_thread_t cf_thread; \ + void* _cf_reserved; \ + void* cf_state; \ + uv_mutex_t cf_mutex; \ + uv_sem_t cf_sem; \ + void* cf_signals[2]; \ + +#define UV_PLATFORM_FS_EVENT_FIELDS \ + uv__io_t event_watcher; \ + char* realpath; \ + int realpath_len; \ + int cf_flags; \ + uv_async_t* cf_cb; \ + void* cf_events[2]; \ + void* cf_member[2]; \ + int cf_error; \ + uv_mutex_t cf_mutex; \ + +#define UV_STREAM_PRIVATE_PLATFORM_FIELDS \ + void* select; \ + +#define UV_HAVE_KQUEUE 1 + +#endif /* UV_DARWIN_H */ diff --git a/third_party/libuv/include/uv/errno.h b/third_party/libuv/include/uv/errno.h new file mode 100644 index 0000000000000000000000000000000000000000..71906b3f5e65e6718c230860ac58eaf64e0669ba --- /dev/null +++ b/third_party/libuv/include/uv/errno.h @@ -0,0 +1,460 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * 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 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. + */ + +#ifndef UV_ERRNO_H_ +#define UV_ERRNO_H_ + +#include +#if EDOM > 0 +# define UV__ERR(x) (-(x)) +#else +# define UV__ERR(x) (x) +#endif + +#define UV__EOF (-4095) +#define UV__UNKNOWN (-4094) + +#define UV__EAI_ADDRFAMILY (-3000) +#define UV__EAI_AGAIN (-3001) +#define UV__EAI_BADFLAGS (-3002) +#define UV__EAI_CANCELED (-3003) +#define UV__EAI_FAIL (-3004) +#define UV__EAI_FAMILY (-3005) +#define UV__EAI_MEMORY (-3006) +#define UV__EAI_NODATA (-3007) +#define UV__EAI_NONAME (-3008) +#define UV__EAI_OVERFLOW (-3009) +#define UV__EAI_SERVICE (-3010) +#define UV__EAI_SOCKTYPE (-3011) +#define UV__EAI_BADHINTS (-3013) +#define UV__EAI_PROTOCOL (-3014) + +/* Only map to the system errno on non-Windows platforms. It's apparently + * a fairly common practice for Windows programmers to redefine errno codes. + */ +#if defined(E2BIG) && !defined(_WIN32) +# define UV__E2BIG UV__ERR(E2BIG) +#else +# define UV__E2BIG (-4093) +#endif + +#if defined(EACCES) && !defined(_WIN32) +# define UV__EACCES UV__ERR(EACCES) +#else +# define UV__EACCES (-4092) +#endif + +#if defined(EADDRINUSE) && !defined(_WIN32) +# define UV__EADDRINUSE UV__ERR(EADDRINUSE) +#else +# define UV__EADDRINUSE (-4091) +#endif + +#if defined(EADDRNOTAVAIL) && !defined(_WIN32) +# define UV__EADDRNOTAVAIL UV__ERR(EADDRNOTAVAIL) +#else +# define UV__EADDRNOTAVAIL (-4090) +#endif + +#if defined(EAFNOSUPPORT) && !defined(_WIN32) +# define UV__EAFNOSUPPORT UV__ERR(EAFNOSUPPORT) +#else +# define UV__EAFNOSUPPORT (-4089) +#endif + +#if defined(EAGAIN) && !defined(_WIN32) +# define UV__EAGAIN UV__ERR(EAGAIN) +#else +# define UV__EAGAIN (-4088) +#endif + +#if defined(EALREADY) && !defined(_WIN32) +# define UV__EALREADY UV__ERR(EALREADY) +#else +# define UV__EALREADY (-4084) +#endif + +#if defined(EBADF) && !defined(_WIN32) +# define UV__EBADF UV__ERR(EBADF) +#else +# define UV__EBADF (-4083) +#endif + +#if defined(EBUSY) && !defined(_WIN32) +# define UV__EBUSY UV__ERR(EBUSY) +#else +# define UV__EBUSY (-4082) +#endif + +#if defined(ECANCELED) && !defined(_WIN32) +# define UV__ECANCELED UV__ERR(ECANCELED) +#else +# define UV__ECANCELED (-4081) +#endif + +#if defined(ECHARSET) && !defined(_WIN32) +# define UV__ECHARSET UV__ERR(ECHARSET) +#else +# define UV__ECHARSET (-4080) +#endif + +#if defined(ECONNABORTED) && !defined(_WIN32) +# define UV__ECONNABORTED UV__ERR(ECONNABORTED) +#else +# define UV__ECONNABORTED (-4079) +#endif + +#if defined(ECONNREFUSED) && !defined(_WIN32) +# define UV__ECONNREFUSED UV__ERR(ECONNREFUSED) +#else +# define UV__ECONNREFUSED (-4078) +#endif + +#if defined(ECONNRESET) && !defined(_WIN32) +# define UV__ECONNRESET UV__ERR(ECONNRESET) +#else +# define UV__ECONNRESET (-4077) +#endif + +#if defined(EDESTADDRREQ) && !defined(_WIN32) +# define UV__EDESTADDRREQ UV__ERR(EDESTADDRREQ) +#else +# define UV__EDESTADDRREQ (-4076) +#endif + +#if defined(EEXIST) && !defined(_WIN32) +# define UV__EEXIST UV__ERR(EEXIST) +#else +# define UV__EEXIST (-4075) +#endif + +#if defined(EFAULT) && !defined(_WIN32) +# define UV__EFAULT UV__ERR(EFAULT) +#else +# define UV__EFAULT (-4074) +#endif + +#if defined(EHOSTUNREACH) && !defined(_WIN32) +# define UV__EHOSTUNREACH UV__ERR(EHOSTUNREACH) +#else +# define UV__EHOSTUNREACH (-4073) +#endif + +#if defined(EINTR) && !defined(_WIN32) +# define UV__EINTR UV__ERR(EINTR) +#else +# define UV__EINTR (-4072) +#endif + +#if defined(EINVAL) && !defined(_WIN32) +# define UV__EINVAL UV__ERR(EINVAL) +#else +# define UV__EINVAL (-4071) +#endif + +#if defined(EIO) && !defined(_WIN32) +# define UV__EIO UV__ERR(EIO) +#else +# define UV__EIO (-4070) +#endif + +#if defined(EISCONN) && !defined(_WIN32) +# define UV__EISCONN UV__ERR(EISCONN) +#else +# define UV__EISCONN (-4069) +#endif + +#if defined(EISDIR) && !defined(_WIN32) +# define UV__EISDIR UV__ERR(EISDIR) +#else +# define UV__EISDIR (-4068) +#endif + +#if defined(ELOOP) && !defined(_WIN32) +# define UV__ELOOP UV__ERR(ELOOP) +#else +# define UV__ELOOP (-4067) +#endif + +#if defined(EMFILE) && !defined(_WIN32) +# define UV__EMFILE UV__ERR(EMFILE) +#else +# define UV__EMFILE (-4066) +#endif + +#if defined(EMSGSIZE) && !defined(_WIN32) +# define UV__EMSGSIZE UV__ERR(EMSGSIZE) +#else +# define UV__EMSGSIZE (-4065) +#endif + +#if defined(ENAMETOOLONG) && !defined(_WIN32) +# define UV__ENAMETOOLONG UV__ERR(ENAMETOOLONG) +#else +# define UV__ENAMETOOLONG (-4064) +#endif + +#if defined(ENETDOWN) && !defined(_WIN32) +# define UV__ENETDOWN UV__ERR(ENETDOWN) +#else +# define UV__ENETDOWN (-4063) +#endif + +#if defined(ENETUNREACH) && !defined(_WIN32) +# define UV__ENETUNREACH UV__ERR(ENETUNREACH) +#else +# define UV__ENETUNREACH (-4062) +#endif + +#if defined(ENFILE) && !defined(_WIN32) +# define UV__ENFILE UV__ERR(ENFILE) +#else +# define UV__ENFILE (-4061) +#endif + +#if defined(ENOBUFS) && !defined(_WIN32) +# define UV__ENOBUFS UV__ERR(ENOBUFS) +#else +# define UV__ENOBUFS (-4060) +#endif + +#if defined(ENODEV) && !defined(_WIN32) +# define UV__ENODEV UV__ERR(ENODEV) +#else +# define UV__ENODEV (-4059) +#endif + +#if defined(ENOENT) && !defined(_WIN32) +# define UV__ENOENT UV__ERR(ENOENT) +#else +# define UV__ENOENT (-4058) +#endif + +#if defined(ENOMEM) && !defined(_WIN32) +# define UV__ENOMEM UV__ERR(ENOMEM) +#else +# define UV__ENOMEM (-4057) +#endif + +#if defined(ENONET) && !defined(_WIN32) +# define UV__ENONET UV__ERR(ENONET) +#else +# define UV__ENONET (-4056) +#endif + +#if defined(ENOSPC) && !defined(_WIN32) +# define UV__ENOSPC UV__ERR(ENOSPC) +#else +# define UV__ENOSPC (-4055) +#endif + +#if defined(ENOSYS) && !defined(_WIN32) +# define UV__ENOSYS UV__ERR(ENOSYS) +#else +# define UV__ENOSYS (-4054) +#endif + +#if defined(ENOTCONN) && !defined(_WIN32) +# define UV__ENOTCONN UV__ERR(ENOTCONN) +#else +# define UV__ENOTCONN (-4053) +#endif + +#if defined(ENOTDIR) && !defined(_WIN32) +# define UV__ENOTDIR UV__ERR(ENOTDIR) +#else +# define UV__ENOTDIR (-4052) +#endif + +#if defined(ENOTEMPTY) && !defined(_WIN32) +# define UV__ENOTEMPTY UV__ERR(ENOTEMPTY) +#else +# define UV__ENOTEMPTY (-4051) +#endif + +#if defined(ENOTSOCK) && !defined(_WIN32) +# define UV__ENOTSOCK UV__ERR(ENOTSOCK) +#else +# define UV__ENOTSOCK (-4050) +#endif + +#if defined(ENOTSUP) && !defined(_WIN32) +# define UV__ENOTSUP UV__ERR(ENOTSUP) +#else +# define UV__ENOTSUP (-4049) +#endif + +#if defined(EPERM) && !defined(_WIN32) +# define UV__EPERM UV__ERR(EPERM) +#else +# define UV__EPERM (-4048) +#endif + +#if defined(EPIPE) && !defined(_WIN32) +# define UV__EPIPE UV__ERR(EPIPE) +#else +# define UV__EPIPE (-4047) +#endif + +#if defined(EPROTO) && !defined(_WIN32) +# define UV__EPROTO UV__ERR(EPROTO) +#else +# define UV__EPROTO (-4046) +#endif + +#if defined(EPROTONOSUPPORT) && !defined(_WIN32) +# define UV__EPROTONOSUPPORT UV__ERR(EPROTONOSUPPORT) +#else +# define UV__EPROTONOSUPPORT (-4045) +#endif + +#if defined(EPROTOTYPE) && !defined(_WIN32) +# define UV__EPROTOTYPE UV__ERR(EPROTOTYPE) +#else +# define UV__EPROTOTYPE (-4044) +#endif + +#if defined(EROFS) && !defined(_WIN32) +# define UV__EROFS UV__ERR(EROFS) +#else +# define UV__EROFS (-4043) +#endif + +#if defined(ESHUTDOWN) && !defined(_WIN32) +# define UV__ESHUTDOWN UV__ERR(ESHUTDOWN) +#else +# define UV__ESHUTDOWN (-4042) +#endif + +#if defined(ESPIPE) && !defined(_WIN32) +# define UV__ESPIPE UV__ERR(ESPIPE) +#else +# define UV__ESPIPE (-4041) +#endif + +#if defined(ESRCH) && !defined(_WIN32) +# define UV__ESRCH UV__ERR(ESRCH) +#else +# define UV__ESRCH (-4040) +#endif + +#if defined(ETIMEDOUT) && !defined(_WIN32) +# define UV__ETIMEDOUT UV__ERR(ETIMEDOUT) +#else +# define UV__ETIMEDOUT (-4039) +#endif + +#if defined(ETXTBSY) && !defined(_WIN32) +# define UV__ETXTBSY UV__ERR(ETXTBSY) +#else +# define UV__ETXTBSY (-4038) +#endif + +#if defined(EXDEV) && !defined(_WIN32) +# define UV__EXDEV UV__ERR(EXDEV) +#else +# define UV__EXDEV (-4037) +#endif + +#if defined(EFBIG) && !defined(_WIN32) +# define UV__EFBIG UV__ERR(EFBIG) +#else +# define UV__EFBIG (-4036) +#endif + +#if defined(ENOPROTOOPT) && !defined(_WIN32) +# define UV__ENOPROTOOPT UV__ERR(ENOPROTOOPT) +#else +# define UV__ENOPROTOOPT (-4035) +#endif + +#if defined(ERANGE) && !defined(_WIN32) +# define UV__ERANGE UV__ERR(ERANGE) +#else +# define UV__ERANGE (-4034) +#endif + +#if defined(ENXIO) && !defined(_WIN32) +# define UV__ENXIO UV__ERR(ENXIO) +#else +# define UV__ENXIO (-4033) +#endif + +#if defined(EMLINK) && !defined(_WIN32) +# define UV__EMLINK UV__ERR(EMLINK) +#else +# define UV__EMLINK (-4032) +#endif + +/* EHOSTDOWN is not visible on BSD-like systems when _POSIX_C_SOURCE is + * defined. Fortunately, its value is always 64 so it's possible albeit + * icky to hard-code it. + */ +#if defined(EHOSTDOWN) && !defined(_WIN32) +# define UV__EHOSTDOWN UV__ERR(EHOSTDOWN) +#elif defined(__APPLE__) || \ + defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || \ + defined(__NetBSD__) || \ + defined(__OpenBSD__) +# define UV__EHOSTDOWN (-64) +#else +# define UV__EHOSTDOWN (-4031) +#endif + +#if defined(EREMOTEIO) && !defined(_WIN32) +# define UV__EREMOTEIO UV__ERR(EREMOTEIO) +#else +# define UV__EREMOTEIO (-4030) +#endif + +#if defined(ENOTTY) && !defined(_WIN32) +# define UV__ENOTTY UV__ERR(ENOTTY) +#else +# define UV__ENOTTY (-4029) +#endif + +#if defined(EFTYPE) && !defined(_WIN32) +# define UV__EFTYPE UV__ERR(EFTYPE) +#else +# define UV__EFTYPE (-4028) +#endif + +#if defined(EILSEQ) && !defined(_WIN32) +# define UV__EILSEQ UV__ERR(EILSEQ) +#else +# define UV__EILSEQ (-4027) +#endif + +#if defined(EOVERFLOW) && !defined(_WIN32) +# define UV__EOVERFLOW UV__ERR(EOVERFLOW) +#else +# define UV__EOVERFLOW (-4026) +#endif + +#if defined(ESOCKTNOSUPPORT) && !defined(_WIN32) +# define UV__ESOCKTNOSUPPORT UV__ERR(ESOCKTNOSUPPORT) +#else +# define UV__ESOCKTNOSUPPORT (-4025) +#endif + +#endif /* UV_ERRNO_H_ */ diff --git a/third_party/libuv/include/uv/linux.h b/third_party/libuv/include/uv/linux.h new file mode 100644 index 0000000000000000000000000000000000000000..9b38405a190d323c92882d92db23ef762a570a96 --- /dev/null +++ b/third_party/libuv/include/uv/linux.h @@ -0,0 +1,34 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * 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 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. + */ + +#ifndef UV_LINUX_H +#define UV_LINUX_H + +#define UV_PLATFORM_LOOP_FIELDS \ + uv__io_t inotify_read_watcher; \ + void* inotify_watchers; \ + int inotify_fd; \ + +#define UV_PLATFORM_FS_EVENT_FIELDS \ + void* watchers[2]; \ + int wd; \ + +#endif /* UV_LINUX_H */ diff --git a/third_party/libuv/include/uv/os390.h b/third_party/libuv/include/uv/os390.h new file mode 100644 index 0000000000000000000000000000000000000000..0267d74cbd02c93d34c02bbc2750932a7e842898 --- /dev/null +++ b/third_party/libuv/include/uv/os390.h @@ -0,0 +1,33 @@ +/* Copyright libuv project contributors. All rights reserved. + * + * 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 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. + */ + +#ifndef UV_MVS_H +#define UV_MVS_H + +#define UV_PLATFORM_SEM_T long + +#define UV_PLATFORM_LOOP_FIELDS \ + void* ep; \ + +#define UV_PLATFORM_FS_EVENT_FIELDS \ + char rfis_rftok[8]; \ + +#endif /* UV_MVS_H */ diff --git a/third_party/libuv/include/uv/posix.h b/third_party/libuv/include/uv/posix.h new file mode 100644 index 0000000000000000000000000000000000000000..9a96634db0e3a585c75905bbbfc49ebe5c63e2df --- /dev/null +++ b/third_party/libuv/include/uv/posix.h @@ -0,0 +1,31 @@ +/* Copyright libuv project contributors. All rights reserved. + * + * 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 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. + */ + +#ifndef UV_POSIX_H +#define UV_POSIX_H + +#define UV_PLATFORM_LOOP_FIELDS \ + struct pollfd* poll_fds; \ + size_t poll_fds_used; \ + size_t poll_fds_size; \ + unsigned char poll_fds_iterating; \ + +#endif /* UV_POSIX_H */ diff --git a/third_party/libuv/include/uv/stdint-msvc2008.h b/third_party/libuv/include/uv/stdint-msvc2008.h new file mode 100644 index 0000000000000000000000000000000000000000..d02608a5972642c7b7a13b987f21e2502a5af3ea --- /dev/null +++ b/third_party/libuv/include/uv/stdint-msvc2008.h @@ -0,0 +1,247 @@ +// ISO C9x compliant stdint.h for Microsoft Visual Studio +// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 +// +// Copyright (c) 2006-2008 Alexander Chemeris +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// 3. The name of the author may be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef _MSC_VER // [ +#error "Use this header only with Microsoft Visual C++ compilers!" +#endif // _MSC_VER ] + +#ifndef _MSC_STDINT_H_ // [ +#define _MSC_STDINT_H_ + +#if _MSC_VER > 1000 +#pragma once +#endif + +#include + +// For Visual Studio 6 in C++ mode and for many Visual Studio versions when +// compiling for ARM we should wrap include with 'extern "C++" {}' +// or compiler give many errors like this: +// error C2733: second C linkage of overloaded function 'wmemchr' not allowed +#ifdef __cplusplus +extern "C" { +#endif +# include +#ifdef __cplusplus +} +#endif + +// Define _W64 macros to mark types changing their size, like intptr_t. +#ifndef _W64 +# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 +# define _W64 __w64 +# else +# define _W64 +# endif +#endif + + +// 7.18.1 Integer types + +// 7.18.1.1 Exact-width integer types + +// Visual Studio 6 and Embedded Visual C++ 4 doesn't +// realize that, e.g. char has the same size as __int8 +// so we give up on __intX for them. +#if (_MSC_VER < 1300) + typedef signed char int8_t; + typedef signed short int16_t; + typedef signed int int32_t; + typedef unsigned char uint8_t; + typedef unsigned short uint16_t; + typedef unsigned int uint32_t; +#else + typedef signed __int8 int8_t; + typedef signed __int16 int16_t; + typedef signed __int32 int32_t; + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; +#endif +typedef signed __int64 int64_t; +typedef unsigned __int64 uint64_t; + + +// 7.18.1.2 Minimum-width integer types +typedef int8_t int_least8_t; +typedef int16_t int_least16_t; +typedef int32_t int_least32_t; +typedef int64_t int_least64_t; +typedef uint8_t uint_least8_t; +typedef uint16_t uint_least16_t; +typedef uint32_t uint_least32_t; +typedef uint64_t uint_least64_t; + +// 7.18.1.3 Fastest minimum-width integer types +typedef int8_t int_fast8_t; +typedef int16_t int_fast16_t; +typedef int32_t int_fast32_t; +typedef int64_t int_fast64_t; +typedef uint8_t uint_fast8_t; +typedef uint16_t uint_fast16_t; +typedef uint32_t uint_fast32_t; +typedef uint64_t uint_fast64_t; + +// 7.18.1.4 Integer types capable of holding object pointers +#ifdef _WIN64 // [ + typedef signed __int64 intptr_t; + typedef unsigned __int64 uintptr_t; +#else // _WIN64 ][ + typedef _W64 signed int intptr_t; + typedef _W64 unsigned int uintptr_t; +#endif // _WIN64 ] + +// 7.18.1.5 Greatest-width integer types +typedef int64_t intmax_t; +typedef uint64_t uintmax_t; + + +// 7.18.2 Limits of specified-width integer types + +#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259 + +// 7.18.2.1 Limits of exact-width integer types +#define INT8_MIN ((int8_t)_I8_MIN) +#define INT8_MAX _I8_MAX +#define INT16_MIN ((int16_t)_I16_MIN) +#define INT16_MAX _I16_MAX +#define INT32_MIN ((int32_t)_I32_MIN) +#define INT32_MAX _I32_MAX +#define INT64_MIN ((int64_t)_I64_MIN) +#define INT64_MAX _I64_MAX +#define UINT8_MAX _UI8_MAX +#define UINT16_MAX _UI16_MAX +#define UINT32_MAX _UI32_MAX +#define UINT64_MAX _UI64_MAX + +// 7.18.2.2 Limits of minimum-width integer types +#define INT_LEAST8_MIN INT8_MIN +#define INT_LEAST8_MAX INT8_MAX +#define INT_LEAST16_MIN INT16_MIN +#define INT_LEAST16_MAX INT16_MAX +#define INT_LEAST32_MIN INT32_MIN +#define INT_LEAST32_MAX INT32_MAX +#define INT_LEAST64_MIN INT64_MIN +#define INT_LEAST64_MAX INT64_MAX +#define UINT_LEAST8_MAX UINT8_MAX +#define UINT_LEAST16_MAX UINT16_MAX +#define UINT_LEAST32_MAX UINT32_MAX +#define UINT_LEAST64_MAX UINT64_MAX + +// 7.18.2.3 Limits of fastest minimum-width integer types +#define INT_FAST8_MIN INT8_MIN +#define INT_FAST8_MAX INT8_MAX +#define INT_FAST16_MIN INT16_MIN +#define INT_FAST16_MAX INT16_MAX +#define INT_FAST32_MIN INT32_MIN +#define INT_FAST32_MAX INT32_MAX +#define INT_FAST64_MIN INT64_MIN +#define INT_FAST64_MAX INT64_MAX +#define UINT_FAST8_MAX UINT8_MAX +#define UINT_FAST16_MAX UINT16_MAX +#define UINT_FAST32_MAX UINT32_MAX +#define UINT_FAST64_MAX UINT64_MAX + +// 7.18.2.4 Limits of integer types capable of holding object pointers +#ifdef _WIN64 // [ +# define INTPTR_MIN INT64_MIN +# define INTPTR_MAX INT64_MAX +# define UINTPTR_MAX UINT64_MAX +#else // _WIN64 ][ +# define INTPTR_MIN INT32_MIN +# define INTPTR_MAX INT32_MAX +# define UINTPTR_MAX UINT32_MAX +#endif // _WIN64 ] + +// 7.18.2.5 Limits of greatest-width integer types +#define INTMAX_MIN INT64_MIN +#define INTMAX_MAX INT64_MAX +#define UINTMAX_MAX UINT64_MAX + +// 7.18.3 Limits of other integer types + +#ifdef _WIN64 // [ +# define PTRDIFF_MIN _I64_MIN +# define PTRDIFF_MAX _I64_MAX +#else // _WIN64 ][ +# define PTRDIFF_MIN _I32_MIN +# define PTRDIFF_MAX _I32_MAX +#endif // _WIN64 ] + +#define SIG_ATOMIC_MIN INT_MIN +#define SIG_ATOMIC_MAX INT_MAX + +#ifndef SIZE_MAX // [ +# ifdef _WIN64 // [ +# define SIZE_MAX _UI64_MAX +# else // _WIN64 ][ +# define SIZE_MAX _UI32_MAX +# endif // _WIN64 ] +#endif // SIZE_MAX ] + +// WCHAR_MIN and WCHAR_MAX are also defined in +#ifndef WCHAR_MIN // [ +# define WCHAR_MIN 0 +#endif // WCHAR_MIN ] +#ifndef WCHAR_MAX // [ +# define WCHAR_MAX _UI16_MAX +#endif // WCHAR_MAX ] + +#define WINT_MIN 0 +#define WINT_MAX _UI16_MAX + +#endif // __STDC_LIMIT_MACROS ] + + +// 7.18.4 Limits of other integer types + +#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260 + +// 7.18.4.1 Macros for minimum-width integer constants + +#define INT8_C(val) val##i8 +#define INT16_C(val) val##i16 +#define INT32_C(val) val##i32 +#define INT64_C(val) val##i64 + +#define UINT8_C(val) val##ui8 +#define UINT16_C(val) val##ui16 +#define UINT32_C(val) val##ui32 +#define UINT64_C(val) val##ui64 + +// 7.18.4.2 Macros for greatest-width integer constants +#define INTMAX_C INT64_C +#define UINTMAX_C UINT64_C + +#endif // __STDC_CONSTANT_MACROS ] + + +#endif // _MSC_STDINT_H_ ] diff --git a/third_party/libuv/include/uv/sunos.h b/third_party/libuv/include/uv/sunos.h new file mode 100644 index 0000000000000000000000000000000000000000..042166424e50b7de043fe869bec40cc27ce7d136 --- /dev/null +++ b/third_party/libuv/include/uv/sunos.h @@ -0,0 +1,44 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * 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 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. + */ + +#ifndef UV_SUNOS_H +#define UV_SUNOS_H + +#include +#include + +/* For the sake of convenience and reduced #ifdef-ery in src/unix/sunos.c, + * add the fs_event fields even when this version of SunOS doesn't support + * file watching. + */ +#define UV_PLATFORM_LOOP_FIELDS \ + uv__io_t fs_event_watcher; \ + int fs_fd; \ + +#if defined(PORT_SOURCE_FILE) + +# define UV_PLATFORM_FS_EVENT_FIELDS \ + file_obj_t fo; \ + int fd; \ + +#endif /* defined(PORT_SOURCE_FILE) */ + +#endif /* UV_SUNOS_H */ diff --git a/third_party/libuv/include/uv/threadpool.h b/third_party/libuv/include/uv/threadpool.h new file mode 100644 index 0000000000000000000000000000000000000000..9708ebdd5301a9cf1f9da856b4b12b89ef6fd683 --- /dev/null +++ b/third_party/libuv/include/uv/threadpool.h @@ -0,0 +1,37 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * 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 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. + */ + +/* + * This file is private to libuv. It provides common functionality to both + * Windows and Unix backends. + */ + +#ifndef UV_THREADPOOL_H_ +#define UV_THREADPOOL_H_ + +struct uv__work { + void (*work)(struct uv__work *w); + void (*done)(struct uv__work *w, int status); + struct uv_loop_s* loop; + void* wq[2]; +}; + +#endif /* UV_THREADPOOL_H_ */ diff --git a/third_party/libuv/include/uv/tree.h b/third_party/libuv/include/uv/tree.h new file mode 100644 index 0000000000000000000000000000000000000000..2b28835fdedef241914447b60016744dd078dbad --- /dev/null +++ b/third_party/libuv/include/uv/tree.h @@ -0,0 +1,768 @@ +/*- + * Copyright 2002 Niels Provos + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef UV_TREE_H_ +#define UV_TREE_H_ + +#ifndef UV__UNUSED +# if __GNUC__ +# define UV__UNUSED __attribute__((unused)) +# else +# define UV__UNUSED +# endif +#endif + +/* + * This file defines data structures for different types of trees: + * splay trees and red-black trees. + * + * A splay tree is a self-organizing data structure. Every operation + * on the tree causes a splay to happen. The splay moves the requested + * node to the root of the tree and partly rebalances it. + * + * This has the benefit that request locality causes faster lookups as + * the requested nodes move to the top of the tree. On the other hand, + * every lookup causes memory writes. + * + * The Balance Theorem bounds the total access time for m operations + * and n inserts on an initially empty tree as O((m + n)lg n). The + * amortized cost for a sequence of m accesses to a splay tree is O(lg n); + * + * A red-black tree is a binary search tree with the node color as an + * extra attribute. It fulfills a set of conditions: + * - every search path from the root to a leaf consists of the + * same number of black nodes, + * - each red node (except for the root) has a black parent, + * - each leaf node is black. + * + * Every operation on a red-black tree is bounded as O(lg n). + * The maximum height of a red-black tree is 2lg (n+1). + */ + +#define SPLAY_HEAD(name, type) \ +struct name { \ + struct type *sph_root; /* root of the tree */ \ +} + +#define SPLAY_INITIALIZER(root) \ + { NULL } + +#define SPLAY_INIT(root) do { \ + (root)->sph_root = NULL; \ +} while (/*CONSTCOND*/ 0) + +#define SPLAY_ENTRY(type) \ +struct { \ + struct type *spe_left; /* left element */ \ + struct type *spe_right; /* right element */ \ +} + +#define SPLAY_LEFT(elm, field) (elm)->field.spe_left +#define SPLAY_RIGHT(elm, field) (elm)->field.spe_right +#define SPLAY_ROOT(head) (head)->sph_root +#define SPLAY_EMPTY(head) (SPLAY_ROOT(head) == NULL) + +/* SPLAY_ROTATE_{LEFT,RIGHT} expect that tmp hold SPLAY_{RIGHT,LEFT} */ +#define SPLAY_ROTATE_RIGHT(head, tmp, field) do { \ + SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field); \ + SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ + (head)->sph_root = tmp; \ +} while (/*CONSTCOND*/ 0) + +#define SPLAY_ROTATE_LEFT(head, tmp, field) do { \ + SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field); \ + SPLAY_LEFT(tmp, field) = (head)->sph_root; \ + (head)->sph_root = tmp; \ +} while (/*CONSTCOND*/ 0) + +#define SPLAY_LINKLEFT(head, tmp, field) do { \ + SPLAY_LEFT(tmp, field) = (head)->sph_root; \ + tmp = (head)->sph_root; \ + (head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \ +} while (/*CONSTCOND*/ 0) + +#define SPLAY_LINKRIGHT(head, tmp, field) do { \ + SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ + tmp = (head)->sph_root; \ + (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \ +} while (/*CONSTCOND*/ 0) + +#define SPLAY_ASSEMBLE(head, node, left, right, field) do { \ + SPLAY_RIGHT(left, field) = SPLAY_LEFT((head)->sph_root, field); \ + SPLAY_LEFT(right, field) = SPLAY_RIGHT((head)->sph_root, field); \ + SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(node, field); \ + SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(node, field); \ +} while (/*CONSTCOND*/ 0) + +/* Generates prototypes and inline functions */ + +#define SPLAY_PROTOTYPE(name, type, field, cmp) \ +void name##_SPLAY(struct name *, struct type *); \ +void name##_SPLAY_MINMAX(struct name *, int); \ +struct type *name##_SPLAY_INSERT(struct name *, struct type *); \ +struct type *name##_SPLAY_REMOVE(struct name *, struct type *); \ + \ +/* Finds the node with the same key as elm */ \ +static __inline struct type * \ +name##_SPLAY_FIND(struct name *head, struct type *elm) \ +{ \ + if (SPLAY_EMPTY(head)) \ + return(NULL); \ + name##_SPLAY(head, elm); \ + if ((cmp)(elm, (head)->sph_root) == 0) \ + return (head->sph_root); \ + return (NULL); \ +} \ + \ +static __inline struct type * \ +name##_SPLAY_NEXT(struct name *head, struct type *elm) \ +{ \ + name##_SPLAY(head, elm); \ + if (SPLAY_RIGHT(elm, field) != NULL) { \ + elm = SPLAY_RIGHT(elm, field); \ + while (SPLAY_LEFT(elm, field) != NULL) { \ + elm = SPLAY_LEFT(elm, field); \ + } \ + } else \ + elm = NULL; \ + return (elm); \ +} \ + \ +static __inline struct type * \ +name##_SPLAY_MIN_MAX(struct name *head, int val) \ +{ \ + name##_SPLAY_MINMAX(head, val); \ + return (SPLAY_ROOT(head)); \ +} + +/* Main splay operation. + * Moves node close to the key of elm to top + */ +#define SPLAY_GENERATE(name, type, field, cmp) \ +struct type * \ +name##_SPLAY_INSERT(struct name *head, struct type *elm) \ +{ \ + if (SPLAY_EMPTY(head)) { \ + SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) = NULL; \ + } else { \ + int __comp; \ + name##_SPLAY(head, elm); \ + __comp = (cmp)(elm, (head)->sph_root); \ + if(__comp < 0) { \ + SPLAY_LEFT(elm, field) = SPLAY_LEFT((head)->sph_root, field); \ + SPLAY_RIGHT(elm, field) = (head)->sph_root; \ + SPLAY_LEFT((head)->sph_root, field) = NULL; \ + } else if (__comp > 0) { \ + SPLAY_RIGHT(elm, field) = SPLAY_RIGHT((head)->sph_root, field); \ + SPLAY_LEFT(elm, field) = (head)->sph_root; \ + SPLAY_RIGHT((head)->sph_root, field) = NULL; \ + } else \ + return ((head)->sph_root); \ + } \ + (head)->sph_root = (elm); \ + return (NULL); \ +} \ + \ +struct type * \ +name##_SPLAY_REMOVE(struct name *head, struct type *elm) \ +{ \ + struct type *__tmp; \ + if (SPLAY_EMPTY(head)) \ + return (NULL); \ + name##_SPLAY(head, elm); \ + if ((cmp)(elm, (head)->sph_root) == 0) { \ + if (SPLAY_LEFT((head)->sph_root, field) == NULL) { \ + (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \ + } else { \ + __tmp = SPLAY_RIGHT((head)->sph_root, field); \ + (head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \ + name##_SPLAY(head, elm); \ + SPLAY_RIGHT((head)->sph_root, field) = __tmp; \ + } \ + return (elm); \ + } \ + return (NULL); \ +} \ + \ +void \ +name##_SPLAY(struct name *head, struct type *elm) \ +{ \ + struct type __node, *__left, *__right, *__tmp; \ + int __comp; \ + \ + SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL; \ + __left = __right = &__node; \ + \ + while ((__comp = (cmp)(elm, (head)->sph_root)) != 0) { \ + if (__comp < 0) { \ + __tmp = SPLAY_LEFT((head)->sph_root, field); \ + if (__tmp == NULL) \ + break; \ + if ((cmp)(elm, __tmp) < 0){ \ + SPLAY_ROTATE_RIGHT(head, __tmp, field); \ + if (SPLAY_LEFT((head)->sph_root, field) == NULL) \ + break; \ + } \ + SPLAY_LINKLEFT(head, __right, field); \ + } else if (__comp > 0) { \ + __tmp = SPLAY_RIGHT((head)->sph_root, field); \ + if (__tmp == NULL) \ + break; \ + if ((cmp)(elm, __tmp) > 0){ \ + SPLAY_ROTATE_LEFT(head, __tmp, field); \ + if (SPLAY_RIGHT((head)->sph_root, field) == NULL) \ + break; \ + } \ + SPLAY_LINKRIGHT(head, __left, field); \ + } \ + } \ + SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ +} \ + \ +/* Splay with either the minimum or the maximum element \ + * Used to find minimum or maximum element in tree. \ + */ \ +void name##_SPLAY_MINMAX(struct name *head, int __comp) \ +{ \ + struct type __node, *__left, *__right, *__tmp; \ + \ + SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL; \ + __left = __right = &__node; \ + \ + for (;;) { \ + if (__comp < 0) { \ + __tmp = SPLAY_LEFT((head)->sph_root, field); \ + if (__tmp == NULL) \ + break; \ + if (__comp < 0){ \ + SPLAY_ROTATE_RIGHT(head, __tmp, field); \ + if (SPLAY_LEFT((head)->sph_root, field) == NULL) \ + break; \ + } \ + SPLAY_LINKLEFT(head, __right, field); \ + } else if (__comp > 0) { \ + __tmp = SPLAY_RIGHT((head)->sph_root, field); \ + if (__tmp == NULL) \ + break; \ + if (__comp > 0) { \ + SPLAY_ROTATE_LEFT(head, __tmp, field); \ + if (SPLAY_RIGHT((head)->sph_root, field) == NULL) \ + break; \ + } \ + SPLAY_LINKRIGHT(head, __left, field); \ + } \ + } \ + SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ +} + +#define SPLAY_NEGINF -1 +#define SPLAY_INF 1 + +#define SPLAY_INSERT(name, x, y) name##_SPLAY_INSERT(x, y) +#define SPLAY_REMOVE(name, x, y) name##_SPLAY_REMOVE(x, y) +#define SPLAY_FIND(name, x, y) name##_SPLAY_FIND(x, y) +#define SPLAY_NEXT(name, x, y) name##_SPLAY_NEXT(x, y) +#define SPLAY_MIN(name, x) (SPLAY_EMPTY(x) ? NULL \ + : name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF)) +#define SPLAY_MAX(name, x) (SPLAY_EMPTY(x) ? NULL \ + : name##_SPLAY_MIN_MAX(x, SPLAY_INF)) + +#define SPLAY_FOREACH(x, name, head) \ + for ((x) = SPLAY_MIN(name, head); \ + (x) != NULL; \ + (x) = SPLAY_NEXT(name, head, x)) + +/* Macros that define a red-black tree */ +#define RB_HEAD(name, type) \ +struct name { \ + struct type *rbh_root; /* root of the tree */ \ +} + +#define RB_INITIALIZER(root) \ + { NULL } + +#define RB_INIT(root) do { \ + (root)->rbh_root = NULL; \ +} while (/*CONSTCOND*/ 0) + +#define RB_BLACK 0 +#define RB_RED 1 +#define RB_ENTRY(type) \ +struct { \ + struct type *rbe_left; /* left element */ \ + struct type *rbe_right; /* right element */ \ + struct type *rbe_parent; /* parent element */ \ + int rbe_color; /* node color */ \ +} + +#define RB_LEFT(elm, field) (elm)->field.rbe_left +#define RB_RIGHT(elm, field) (elm)->field.rbe_right +#define RB_PARENT(elm, field) (elm)->field.rbe_parent +#define RB_COLOR(elm, field) (elm)->field.rbe_color +#define RB_ROOT(head) (head)->rbh_root +#define RB_EMPTY(head) (RB_ROOT(head) == NULL) + +#define RB_SET(elm, parent, field) do { \ + RB_PARENT(elm, field) = parent; \ + RB_LEFT(elm, field) = RB_RIGHT(elm, field) = NULL; \ + RB_COLOR(elm, field) = RB_RED; \ +} while (/*CONSTCOND*/ 0) + +#define RB_SET_BLACKRED(black, red, field) do { \ + RB_COLOR(black, field) = RB_BLACK; \ + RB_COLOR(red, field) = RB_RED; \ +} while (/*CONSTCOND*/ 0) + +#ifndef RB_AUGMENT +#define RB_AUGMENT(x) do {} while (0) +#endif + +#define RB_ROTATE_LEFT(head, elm, tmp, field) do { \ + (tmp) = RB_RIGHT(elm, field); \ + if ((RB_RIGHT(elm, field) = RB_LEFT(tmp, field)) != NULL) { \ + RB_PARENT(RB_LEFT(tmp, field), field) = (elm); \ + } \ + RB_AUGMENT(elm); \ + if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) { \ + if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \ + RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \ + else \ + RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \ + } else \ + (head)->rbh_root = (tmp); \ + RB_LEFT(tmp, field) = (elm); \ + RB_PARENT(elm, field) = (tmp); \ + RB_AUGMENT(tmp); \ + if ((RB_PARENT(tmp, field))) \ + RB_AUGMENT(RB_PARENT(tmp, field)); \ +} while (/*CONSTCOND*/ 0) + +#define RB_ROTATE_RIGHT(head, elm, tmp, field) do { \ + (tmp) = RB_LEFT(elm, field); \ + if ((RB_LEFT(elm, field) = RB_RIGHT(tmp, field)) != NULL) { \ + RB_PARENT(RB_RIGHT(tmp, field), field) = (elm); \ + } \ + RB_AUGMENT(elm); \ + if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) { \ + if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \ + RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \ + else \ + RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \ + } else \ + (head)->rbh_root = (tmp); \ + RB_RIGHT(tmp, field) = (elm); \ + RB_PARENT(elm, field) = (tmp); \ + RB_AUGMENT(tmp); \ + if ((RB_PARENT(tmp, field))) \ + RB_AUGMENT(RB_PARENT(tmp, field)); \ +} while (/*CONSTCOND*/ 0) + +/* Generates prototypes and inline functions */ +#define RB_PROTOTYPE(name, type, field, cmp) \ + RB_PROTOTYPE_INTERNAL(name, type, field, cmp,) +#define RB_PROTOTYPE_STATIC(name, type, field, cmp) \ + RB_PROTOTYPE_INTERNAL(name, type, field, cmp, UV__UNUSED static) +#define RB_PROTOTYPE_INTERNAL(name, type, field, cmp, attr) \ +attr void name##_RB_INSERT_COLOR(struct name *, struct type *); \ +attr void name##_RB_REMOVE_COLOR(struct name *, struct type *, struct type *);\ +attr struct type *name##_RB_REMOVE(struct name *, struct type *); \ +attr struct type *name##_RB_INSERT(struct name *, struct type *); \ +attr struct type *name##_RB_FIND(struct name *, struct type *); \ +attr struct type *name##_RB_NFIND(struct name *, struct type *); \ +attr struct type *name##_RB_NEXT(struct type *); \ +attr struct type *name##_RB_PREV(struct type *); \ +attr struct type *name##_RB_MINMAX(struct name *, int); \ + \ + +/* Main rb operation. + * Moves node close to the key of elm to top + */ +#define RB_GENERATE(name, type, field, cmp) \ + RB_GENERATE_INTERNAL(name, type, field, cmp,) +#define RB_GENERATE_STATIC(name, type, field, cmp) \ + RB_GENERATE_INTERNAL(name, type, field, cmp, UV__UNUSED static) +#define RB_GENERATE_INTERNAL(name, type, field, cmp, attr) \ +attr void \ +name##_RB_INSERT_COLOR(struct name *head, struct type *elm) \ +{ \ + struct type *parent, *gparent, *tmp; \ + while ((parent = RB_PARENT(elm, field)) != NULL && \ + RB_COLOR(parent, field) == RB_RED) { \ + gparent = RB_PARENT(parent, field); \ + if (parent == RB_LEFT(gparent, field)) { \ + tmp = RB_RIGHT(gparent, field); \ + if (tmp && RB_COLOR(tmp, field) == RB_RED) { \ + RB_COLOR(tmp, field) = RB_BLACK; \ + RB_SET_BLACKRED(parent, gparent, field); \ + elm = gparent; \ + continue; \ + } \ + if (RB_RIGHT(parent, field) == elm) { \ + RB_ROTATE_LEFT(head, parent, tmp, field); \ + tmp = parent; \ + parent = elm; \ + elm = tmp; \ + } \ + RB_SET_BLACKRED(parent, gparent, field); \ + RB_ROTATE_RIGHT(head, gparent, tmp, field); \ + } else { \ + tmp = RB_LEFT(gparent, field); \ + if (tmp && RB_COLOR(tmp, field) == RB_RED) { \ + RB_COLOR(tmp, field) = RB_BLACK; \ + RB_SET_BLACKRED(parent, gparent, field); \ + elm = gparent; \ + continue; \ + } \ + if (RB_LEFT(parent, field) == elm) { \ + RB_ROTATE_RIGHT(head, parent, tmp, field); \ + tmp = parent; \ + parent = elm; \ + elm = tmp; \ + } \ + RB_SET_BLACKRED(parent, gparent, field); \ + RB_ROTATE_LEFT(head, gparent, tmp, field); \ + } \ + } \ + RB_COLOR(head->rbh_root, field) = RB_BLACK; \ +} \ + \ +attr void \ +name##_RB_REMOVE_COLOR(struct name *head, struct type *parent, \ + struct type *elm) \ +{ \ + struct type *tmp; \ + while ((elm == NULL || RB_COLOR(elm, field) == RB_BLACK) && \ + elm != RB_ROOT(head)) { \ + if (RB_LEFT(parent, field) == elm) { \ + tmp = RB_RIGHT(parent, field); \ + if (RB_COLOR(tmp, field) == RB_RED) { \ + RB_SET_BLACKRED(tmp, parent, field); \ + RB_ROTATE_LEFT(head, parent, tmp, field); \ + tmp = RB_RIGHT(parent, field); \ + } \ + if ((RB_LEFT(tmp, field) == NULL || \ + RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) && \ + (RB_RIGHT(tmp, field) == NULL || \ + RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) { \ + RB_COLOR(tmp, field) = RB_RED; \ + elm = parent; \ + parent = RB_PARENT(elm, field); \ + } else { \ + if (RB_RIGHT(tmp, field) == NULL || \ + RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK) { \ + struct type *oleft; \ + if ((oleft = RB_LEFT(tmp, field)) \ + != NULL) \ + RB_COLOR(oleft, field) = RB_BLACK; \ + RB_COLOR(tmp, field) = RB_RED; \ + RB_ROTATE_RIGHT(head, tmp, oleft, field); \ + tmp = RB_RIGHT(parent, field); \ + } \ + RB_COLOR(tmp, field) = RB_COLOR(parent, field); \ + RB_COLOR(parent, field) = RB_BLACK; \ + if (RB_RIGHT(tmp, field)) \ + RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK; \ + RB_ROTATE_LEFT(head, parent, tmp, field); \ + elm = RB_ROOT(head); \ + break; \ + } \ + } else { \ + tmp = RB_LEFT(parent, field); \ + if (RB_COLOR(tmp, field) == RB_RED) { \ + RB_SET_BLACKRED(tmp, parent, field); \ + RB_ROTATE_RIGHT(head, parent, tmp, field); \ + tmp = RB_LEFT(parent, field); \ + } \ + if ((RB_LEFT(tmp, field) == NULL || \ + RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) && \ + (RB_RIGHT(tmp, field) == NULL || \ + RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) { \ + RB_COLOR(tmp, field) = RB_RED; \ + elm = parent; \ + parent = RB_PARENT(elm, field); \ + } else { \ + if (RB_LEFT(tmp, field) == NULL || \ + RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) { \ + struct type *oright; \ + if ((oright = RB_RIGHT(tmp, field)) \ + != NULL) \ + RB_COLOR(oright, field) = RB_BLACK; \ + RB_COLOR(tmp, field) = RB_RED; \ + RB_ROTATE_LEFT(head, tmp, oright, field); \ + tmp = RB_LEFT(parent, field); \ + } \ + RB_COLOR(tmp, field) = RB_COLOR(parent, field); \ + RB_COLOR(parent, field) = RB_BLACK; \ + if (RB_LEFT(tmp, field)) \ + RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK; \ + RB_ROTATE_RIGHT(head, parent, tmp, field); \ + elm = RB_ROOT(head); \ + break; \ + } \ + } \ + } \ + if (elm) \ + RB_COLOR(elm, field) = RB_BLACK; \ +} \ + \ +attr struct type * \ +name##_RB_REMOVE(struct name *head, struct type *elm) \ +{ \ + struct type *child, *parent, *old = elm; \ + int color; \ + if (RB_LEFT(elm, field) == NULL) \ + child = RB_RIGHT(elm, field); \ + else if (RB_RIGHT(elm, field) == NULL) \ + child = RB_LEFT(elm, field); \ + else { \ + struct type *left; \ + elm = RB_RIGHT(elm, field); \ + while ((left = RB_LEFT(elm, field)) != NULL) \ + elm = left; \ + child = RB_RIGHT(elm, field); \ + parent = RB_PARENT(elm, field); \ + color = RB_COLOR(elm, field); \ + if (child) \ + RB_PARENT(child, field) = parent; \ + if (parent) { \ + if (RB_LEFT(parent, field) == elm) \ + RB_LEFT(parent, field) = child; \ + else \ + RB_RIGHT(parent, field) = child; \ + RB_AUGMENT(parent); \ + } else \ + RB_ROOT(head) = child; \ + if (RB_PARENT(elm, field) == old) \ + parent = elm; \ + (elm)->field = (old)->field; \ + if (RB_PARENT(old, field)) { \ + if (RB_LEFT(RB_PARENT(old, field), field) == old) \ + RB_LEFT(RB_PARENT(old, field), field) = elm; \ + else \ + RB_RIGHT(RB_PARENT(old, field), field) = elm; \ + RB_AUGMENT(RB_PARENT(old, field)); \ + } else \ + RB_ROOT(head) = elm; \ + RB_PARENT(RB_LEFT(old, field), field) = elm; \ + if (RB_RIGHT(old, field)) \ + RB_PARENT(RB_RIGHT(old, field), field) = elm; \ + if (parent) { \ + left = parent; \ + do { \ + RB_AUGMENT(left); \ + } while ((left = RB_PARENT(left, field)) != NULL); \ + } \ + goto color; \ + } \ + parent = RB_PARENT(elm, field); \ + color = RB_COLOR(elm, field); \ + if (child) \ + RB_PARENT(child, field) = parent; \ + if (parent) { \ + if (RB_LEFT(parent, field) == elm) \ + RB_LEFT(parent, field) = child; \ + else \ + RB_RIGHT(parent, field) = child; \ + RB_AUGMENT(parent); \ + } else \ + RB_ROOT(head) = child; \ +color: \ + if (color == RB_BLACK) \ + name##_RB_REMOVE_COLOR(head, parent, child); \ + return (old); \ +} \ + \ +/* Inserts a node into the RB tree */ \ +attr struct type * \ +name##_RB_INSERT(struct name *head, struct type *elm) \ +{ \ + struct type *tmp; \ + struct type *parent = NULL; \ + int comp = 0; \ + tmp = RB_ROOT(head); \ + while (tmp) { \ + parent = tmp; \ + comp = (cmp)(elm, parent); \ + if (comp < 0) \ + tmp = RB_LEFT(tmp, field); \ + else if (comp > 0) \ + tmp = RB_RIGHT(tmp, field); \ + else \ + return (tmp); \ + } \ + RB_SET(elm, parent, field); \ + if (parent != NULL) { \ + if (comp < 0) \ + RB_LEFT(parent, field) = elm; \ + else \ + RB_RIGHT(parent, field) = elm; \ + RB_AUGMENT(parent); \ + } else \ + RB_ROOT(head) = elm; \ + name##_RB_INSERT_COLOR(head, elm); \ + return (NULL); \ +} \ + \ +/* Finds the node with the same key as elm */ \ +attr struct type * \ +name##_RB_FIND(struct name *head, struct type *elm) \ +{ \ + struct type *tmp = RB_ROOT(head); \ + int comp; \ + while (tmp) { \ + comp = cmp(elm, tmp); \ + if (comp < 0) \ + tmp = RB_LEFT(tmp, field); \ + else if (comp > 0) \ + tmp = RB_RIGHT(tmp, field); \ + else \ + return (tmp); \ + } \ + return (NULL); \ +} \ + \ +/* Finds the first node greater than or equal to the search key */ \ +attr struct type * \ +name##_RB_NFIND(struct name *head, struct type *elm) \ +{ \ + struct type *tmp = RB_ROOT(head); \ + struct type *res = NULL; \ + int comp; \ + while (tmp) { \ + comp = cmp(elm, tmp); \ + if (comp < 0) { \ + res = tmp; \ + tmp = RB_LEFT(tmp, field); \ + } \ + else if (comp > 0) \ + tmp = RB_RIGHT(tmp, field); \ + else \ + return (tmp); \ + } \ + return (res); \ +} \ + \ +/* ARGSUSED */ \ +attr struct type * \ +name##_RB_NEXT(struct type *elm) \ +{ \ + if (RB_RIGHT(elm, field)) { \ + elm = RB_RIGHT(elm, field); \ + while (RB_LEFT(elm, field)) \ + elm = RB_LEFT(elm, field); \ + } else { \ + if (RB_PARENT(elm, field) && \ + (elm == RB_LEFT(RB_PARENT(elm, field), field))) \ + elm = RB_PARENT(elm, field); \ + else { \ + while (RB_PARENT(elm, field) && \ + (elm == RB_RIGHT(RB_PARENT(elm, field), field))) \ + elm = RB_PARENT(elm, field); \ + elm = RB_PARENT(elm, field); \ + } \ + } \ + return (elm); \ +} \ + \ +/* ARGSUSED */ \ +attr struct type * \ +name##_RB_PREV(struct type *elm) \ +{ \ + if (RB_LEFT(elm, field)) { \ + elm = RB_LEFT(elm, field); \ + while (RB_RIGHT(elm, field)) \ + elm = RB_RIGHT(elm, field); \ + } else { \ + if (RB_PARENT(elm, field) && \ + (elm == RB_RIGHT(RB_PARENT(elm, field), field))) \ + elm = RB_PARENT(elm, field); \ + else { \ + while (RB_PARENT(elm, field) && \ + (elm == RB_LEFT(RB_PARENT(elm, field), field))) \ + elm = RB_PARENT(elm, field); \ + elm = RB_PARENT(elm, field); \ + } \ + } \ + return (elm); \ +} \ + \ +attr struct type * \ +name##_RB_MINMAX(struct name *head, int val) \ +{ \ + struct type *tmp = RB_ROOT(head); \ + struct type *parent = NULL; \ + while (tmp) { \ + parent = tmp; \ + if (val < 0) \ + tmp = RB_LEFT(tmp, field); \ + else \ + tmp = RB_RIGHT(tmp, field); \ + } \ + return (parent); \ +} + +#define RB_NEGINF -1 +#define RB_INF 1 + +#define RB_INSERT(name, x, y) name##_RB_INSERT(x, y) +#define RB_REMOVE(name, x, y) name##_RB_REMOVE(x, y) +#define RB_FIND(name, x, y) name##_RB_FIND(x, y) +#define RB_NFIND(name, x, y) name##_RB_NFIND(x, y) +#define RB_NEXT(name, x, y) name##_RB_NEXT(y) +#define RB_PREV(name, x, y) name##_RB_PREV(y) +#define RB_MIN(name, x) name##_RB_MINMAX(x, RB_NEGINF) +#define RB_MAX(name, x) name##_RB_MINMAX(x, RB_INF) + +#define RB_FOREACH(x, name, head) \ + for ((x) = RB_MIN(name, head); \ + (x) != NULL; \ + (x) = name##_RB_NEXT(x)) + +#define RB_FOREACH_FROM(x, name, y) \ + for ((x) = (y); \ + ((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL); \ + (x) = (y)) + +#define RB_FOREACH_SAFE(x, name, head, y) \ + for ((x) = RB_MIN(name, head); \ + ((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL); \ + (x) = (y)) + +#define RB_FOREACH_REVERSE(x, name, head) \ + for ((x) = RB_MAX(name, head); \ + (x) != NULL; \ + (x) = name##_RB_PREV(x)) + +#define RB_FOREACH_REVERSE_FROM(x, name, y) \ + for ((x) = (y); \ + ((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL); \ + (x) = (y)) + +#define RB_FOREACH_REVERSE_SAFE(x, name, head, y) \ + for ((x) = RB_MAX(name, head); \ + ((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL); \ + (x) = (y)) + +#endif /* UV_TREE_H_ */ diff --git a/third_party/libuv/include/uv/unix.h b/third_party/libuv/include/uv/unix.h new file mode 100644 index 0000000000000000000000000000000000000000..ea37d78768654eef98e10982a6b6ddce934bbbbf --- /dev/null +++ b/third_party/libuv/include/uv/unix.h @@ -0,0 +1,505 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * 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 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. + */ + +#ifndef UV_UNIX_H +#define UV_UNIX_H + +#include +#include +#include +#include + +#include +#include +#include +#include +#include /* MAXHOSTNAMELEN on Solaris */ + +#include +#include + +#if !defined(__MVS__) +#include +#include /* MAXHOSTNAMELEN on Linux and the BSDs */ +#endif +#include +#include + +#include "uv/threadpool.h" + +#if defined(__linux__) +# include "uv/linux.h" +#elif defined (__MVS__) +# include "uv/os390.h" +#elif defined(__PASE__) /* __PASE__ and _AIX are both defined on IBM i */ +# include "uv/posix.h" /* IBM i needs uv/posix.h, not uv/aix.h */ +#elif defined(_AIX) +# include "uv/aix.h" +#elif defined(__sun) +# include "uv/sunos.h" +#elif defined(__APPLE__) +# include "uv/darwin.h" +#elif defined(__DragonFly__) || \ + defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || \ + defined(__OpenBSD__) || \ + defined(__NetBSD__) +# include "uv/bsd.h" +#elif defined(__CYGWIN__) || \ + defined(__MSYS__) || \ + defined(__HAIKU__) || \ + defined(__QNX__) || \ + defined(__GNU__) +# include "uv/posix.h" +#endif + +#ifndef NI_MAXHOST +# define NI_MAXHOST 1025 +#endif + +#ifndef NI_MAXSERV +# define NI_MAXSERV 32 +#endif + +#ifndef UV_IO_PRIVATE_PLATFORM_FIELDS +# define UV_IO_PRIVATE_PLATFORM_FIELDS /* empty */ +#endif + +struct uv__io_s; +struct uv_loop_s; + +typedef void (*uv__io_cb)(struct uv_loop_s* loop, + struct uv__io_s* w, + unsigned int events); +typedef struct uv__io_s uv__io_t; + +struct uv__io_s { + uv__io_cb cb; + void* pending_queue[2]; + void* watcher_queue[2]; + unsigned int pevents; /* Pending event mask i.e. mask at next tick. */ + unsigned int events; /* Current event mask. */ + int fd; + UV_IO_PRIVATE_PLATFORM_FIELDS +}; + +#ifndef UV_PLATFORM_SEM_T +# define UV_PLATFORM_SEM_T sem_t +#endif + +#ifndef UV_PLATFORM_LOOP_FIELDS +# define UV_PLATFORM_LOOP_FIELDS /* empty */ +#endif + +#ifndef UV_PLATFORM_FS_EVENT_FIELDS +# define UV_PLATFORM_FS_EVENT_FIELDS /* empty */ +#endif + +#ifndef UV_STREAM_PRIVATE_PLATFORM_FIELDS +# define UV_STREAM_PRIVATE_PLATFORM_FIELDS /* empty */ +#endif + +/* Note: May be cast to struct iovec. See writev(2). */ +typedef struct uv_buf_t { + char* base; + size_t len; +} uv_buf_t; + +typedef int uv_file; +typedef int uv_os_sock_t; +typedef int uv_os_fd_t; +typedef pid_t uv_pid_t; + +#define UV_ONCE_INIT PTHREAD_ONCE_INIT + +typedef pthread_once_t uv_once_t; +typedef pthread_t uv_thread_t; +typedef pthread_mutex_t uv_mutex_t; +typedef pthread_rwlock_t uv_rwlock_t; +typedef UV_PLATFORM_SEM_T uv_sem_t; +typedef pthread_cond_t uv_cond_t; +typedef pthread_key_t uv_key_t; + +/* Note: guard clauses should match uv_barrier_init's in src/unix/thread.c. */ +#if defined(_AIX) || \ + defined(__OpenBSD__) || \ + !defined(PTHREAD_BARRIER_SERIAL_THREAD) +/* TODO(bnoordhuis) Merge into uv_barrier_t in v2. */ +struct _uv_barrier { + uv_mutex_t mutex; + uv_cond_t cond; + unsigned threshold; + unsigned in; + unsigned out; +}; + +typedef struct { + struct _uv_barrier* b; +# if defined(PTHREAD_BARRIER_SERIAL_THREAD) + /* TODO(bnoordhuis) Remove padding in v2. */ + char pad[sizeof(pthread_barrier_t) - sizeof(struct _uv_barrier*)]; +# endif +} uv_barrier_t; +#else +typedef pthread_barrier_t uv_barrier_t; +#endif + +/* Platform-specific definitions for uv_spawn support. */ +typedef gid_t uv_gid_t; +typedef uid_t uv_uid_t; + +typedef struct dirent uv__dirent_t; + +#define UV_DIR_PRIVATE_FIELDS \ + DIR* dir; + +#if defined(DT_UNKNOWN) +# define HAVE_DIRENT_TYPES +# if defined(DT_REG) +# define UV__DT_FILE DT_REG +# else +# define UV__DT_FILE -1 +# endif +# if defined(DT_DIR) +# define UV__DT_DIR DT_DIR +# else +# define UV__DT_DIR -2 +# endif +# if defined(DT_LNK) +# define UV__DT_LINK DT_LNK +# else +# define UV__DT_LINK -3 +# endif +# if defined(DT_FIFO) +# define UV__DT_FIFO DT_FIFO +# else +# define UV__DT_FIFO -4 +# endif +# if defined(DT_SOCK) +# define UV__DT_SOCKET DT_SOCK +# else +# define UV__DT_SOCKET -5 +# endif +# if defined(DT_CHR) +# define UV__DT_CHAR DT_CHR +# else +# define UV__DT_CHAR -6 +# endif +# if defined(DT_BLK) +# define UV__DT_BLOCK DT_BLK +# else +# define UV__DT_BLOCK -7 +# endif +#endif + +/* Platform-specific definitions for uv_dlopen support. */ +#define UV_DYNAMIC /* empty */ + +typedef struct { + void* handle; + char* errmsg; +} uv_lib_t; + +#define UV_LOOP_PRIVATE_FIELDS \ + unsigned long flags; \ + int backend_fd; \ + void* pending_queue[2]; \ + void* watcher_queue[2]; \ + uv__io_t** watchers; \ + unsigned int nwatchers; \ + unsigned int nfds; \ + void* wq[2]; \ + uv_mutex_t wq_mutex; \ + uv_async_t wq_async; \ + uv_rwlock_t cloexec_lock; \ + uv_handle_t* closing_handles; \ + void* process_handles[2]; \ + void* prepare_handles[2]; \ + void* check_handles[2]; \ + void* idle_handles[2]; \ + void* async_handles[2]; \ + void (*async_unused)(void); /* TODO(bnoordhuis) Remove in libuv v2. */ \ + uv__io_t async_io_watcher; \ + int async_wfd; \ + struct { \ + void* min; \ + unsigned int nelts; \ + } timer_heap; \ + uint64_t timer_counter; \ + uint64_t time; \ + int signal_pipefd[2]; \ + uv__io_t signal_io_watcher; \ + uv_signal_t child_watcher; \ + int emfile_fd; \ + UV_PLATFORM_LOOP_FIELDS \ + +#define UV_REQ_TYPE_PRIVATE /* empty */ + +#define UV_REQ_PRIVATE_FIELDS /* empty */ + +#define UV_PRIVATE_REQ_TYPES /* empty */ + +#define UV_WRITE_PRIVATE_FIELDS \ + void* queue[2]; \ + unsigned int write_index; \ + uv_buf_t* bufs; \ + unsigned int nbufs; \ + int error; \ + uv_buf_t bufsml[4]; \ + +#define UV_CONNECT_PRIVATE_FIELDS \ + void* queue[2]; \ + +#define UV_SHUTDOWN_PRIVATE_FIELDS /* empty */ + +#define UV_UDP_SEND_PRIVATE_FIELDS \ + void* queue[2]; \ + struct sockaddr_storage addr; \ + unsigned int nbufs; \ + uv_buf_t* bufs; \ + ssize_t status; \ + uv_udp_send_cb send_cb; \ + uv_buf_t bufsml[4]; \ + +#define UV_HANDLE_PRIVATE_FIELDS \ + uv_handle_t* next_closing; \ + unsigned int flags; \ + +#define UV_STREAM_PRIVATE_FIELDS \ + uv_connect_t *connect_req; \ + uv_shutdown_t *shutdown_req; \ + uv__io_t io_watcher; \ + void* write_queue[2]; \ + void* write_completed_queue[2]; \ + uv_connection_cb connection_cb; \ + int delayed_error; \ + int accepted_fd; \ + void* queued_fds; \ + UV_STREAM_PRIVATE_PLATFORM_FIELDS \ + +#define UV_TCP_PRIVATE_FIELDS /* empty */ + +#define UV_UDP_PRIVATE_FIELDS \ + uv_alloc_cb alloc_cb; \ + uv_udp_recv_cb recv_cb; \ + uv__io_t io_watcher; \ + void* write_queue[2]; \ + void* write_completed_queue[2]; \ + +#define UV_PIPE_PRIVATE_FIELDS \ + const char* pipe_fname; /* strdup'ed */ + +#define UV_POLL_PRIVATE_FIELDS \ + uv__io_t io_watcher; + +#define UV_PREPARE_PRIVATE_FIELDS \ + uv_prepare_cb prepare_cb; \ + void* queue[2]; \ + +#define UV_CHECK_PRIVATE_FIELDS \ + uv_check_cb check_cb; \ + void* queue[2]; \ + +#define UV_IDLE_PRIVATE_FIELDS \ + uv_idle_cb idle_cb; \ + void* queue[2]; \ + +#define UV_ASYNC_PRIVATE_FIELDS \ + uv_async_cb async_cb; \ + void* queue[2]; \ + int pending; \ + +#define UV_TIMER_PRIVATE_FIELDS \ + uv_timer_cb timer_cb; \ + void* heap_node[3]; \ + uint64_t timeout; \ + uint64_t repeat; \ + uint64_t start_id; + +#define UV_GETADDRINFO_PRIVATE_FIELDS \ + struct uv__work work_req; \ + uv_getaddrinfo_cb cb; \ + struct addrinfo* hints; \ + char* hostname; \ + char* service; \ + struct addrinfo* addrinfo; \ + int retcode; + +#define UV_GETNAMEINFO_PRIVATE_FIELDS \ + struct uv__work work_req; \ + uv_getnameinfo_cb getnameinfo_cb; \ + struct sockaddr_storage storage; \ + int flags; \ + char host[NI_MAXHOST]; \ + char service[NI_MAXSERV]; \ + int retcode; + +#define UV_PROCESS_PRIVATE_FIELDS \ + void* queue[2]; \ + int status; \ + +#define UV_FS_PRIVATE_FIELDS \ + const char *new_path; \ + uv_file file; \ + int flags; \ + mode_t mode; \ + unsigned int nbufs; \ + uv_buf_t* bufs; \ + off_t off; \ + uv_uid_t uid; \ + uv_gid_t gid; \ + double atime; \ + double mtime; \ + struct uv__work work_req; \ + uv_buf_t bufsml[4]; \ + +#define UV_WORK_PRIVATE_FIELDS \ + struct uv__work work_req; + +#define UV_TTY_PRIVATE_FIELDS \ + struct termios orig_termios; \ + int mode; + +#define UV_SIGNAL_PRIVATE_FIELDS \ + /* RB_ENTRY(uv_signal_s) tree_entry; */ \ + struct { \ + struct uv_signal_s* rbe_left; \ + struct uv_signal_s* rbe_right; \ + struct uv_signal_s* rbe_parent; \ + int rbe_color; \ + } tree_entry; \ + /* Use two counters here so we don have to fiddle with atomics. */ \ + unsigned int caught_signals; \ + unsigned int dispatched_signals; + +#define UV_FS_EVENT_PRIVATE_FIELDS \ + uv_fs_event_cb cb; \ + UV_PLATFORM_FS_EVENT_FIELDS \ + +/* fs open() flags supported on this platform: */ +#if defined(O_APPEND) +# define UV_FS_O_APPEND O_APPEND +#else +# define UV_FS_O_APPEND 0 +#endif +#if defined(O_CREAT) +# define UV_FS_O_CREAT O_CREAT +#else +# define UV_FS_O_CREAT 0 +#endif + +#if defined(__linux__) && defined(__arm__) +# define UV_FS_O_DIRECT 0x10000 +#elif defined(__linux__) && defined(__m68k__) +# define UV_FS_O_DIRECT 0x10000 +#elif defined(__linux__) && defined(__mips__) +# define UV_FS_O_DIRECT 0x08000 +#elif defined(__linux__) && defined(__powerpc__) +# define UV_FS_O_DIRECT 0x20000 +#elif defined(__linux__) && defined(__s390x__) +# define UV_FS_O_DIRECT 0x04000 +#elif defined(__linux__) && defined(__x86_64__) +# define UV_FS_O_DIRECT 0x04000 +#elif defined(O_DIRECT) +# define UV_FS_O_DIRECT O_DIRECT +#else +# define UV_FS_O_DIRECT 0 +#endif + +#if defined(O_DIRECTORY) +# define UV_FS_O_DIRECTORY O_DIRECTORY +#else +# define UV_FS_O_DIRECTORY 0 +#endif +#if defined(O_DSYNC) +# define UV_FS_O_DSYNC O_DSYNC +#else +# define UV_FS_O_DSYNC 0 +#endif +#if defined(O_EXCL) +# define UV_FS_O_EXCL O_EXCL +#else +# define UV_FS_O_EXCL 0 +#endif +#if defined(O_EXLOCK) +# define UV_FS_O_EXLOCK O_EXLOCK +#else +# define UV_FS_O_EXLOCK 0 +#endif +#if defined(O_NOATIME) +# define UV_FS_O_NOATIME O_NOATIME +#else +# define UV_FS_O_NOATIME 0 +#endif +#if defined(O_NOCTTY) +# define UV_FS_O_NOCTTY O_NOCTTY +#else +# define UV_FS_O_NOCTTY 0 +#endif +#if defined(O_NOFOLLOW) +# define UV_FS_O_NOFOLLOW O_NOFOLLOW +#else +# define UV_FS_O_NOFOLLOW 0 +#endif +#if defined(O_NONBLOCK) +# define UV_FS_O_NONBLOCK O_NONBLOCK +#else +# define UV_FS_O_NONBLOCK 0 +#endif +#if defined(O_RDONLY) +# define UV_FS_O_RDONLY O_RDONLY +#else +# define UV_FS_O_RDONLY 0 +#endif +#if defined(O_RDWR) +# define UV_FS_O_RDWR O_RDWR +#else +# define UV_FS_O_RDWR 0 +#endif +#if defined(O_SYMLINK) +# define UV_FS_O_SYMLINK O_SYMLINK +#else +# define UV_FS_O_SYMLINK 0 +#endif +#if defined(O_SYNC) +# define UV_FS_O_SYNC O_SYNC +#else +# define UV_FS_O_SYNC 0 +#endif +#if defined(O_TRUNC) +# define UV_FS_O_TRUNC O_TRUNC +#else +# define UV_FS_O_TRUNC 0 +#endif +#if defined(O_WRONLY) +# define UV_FS_O_WRONLY O_WRONLY +#else +# define UV_FS_O_WRONLY 0 +#endif + +/* fs open() flags supported on other platforms: */ +#define UV_FS_O_FILEMAP 0 +#define UV_FS_O_RANDOM 0 +#define UV_FS_O_SHORT_LIVED 0 +#define UV_FS_O_SEQUENTIAL 0 +#define UV_FS_O_TEMPORARY 0 + +#endif /* UV_UNIX_H */ diff --git a/third_party/libuv/include/uv/version.h b/third_party/libuv/include/uv/version.h new file mode 100644 index 0000000000000000000000000000000000000000..56ac1bf41d6d3c20439b0c71dd6d81a20481c120 --- /dev/null +++ b/third_party/libuv/include/uv/version.h @@ -0,0 +1,43 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * 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 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. + */ + +#ifndef UV_VERSION_H +#define UV_VERSION_H + + /* + * Versions with the same major number are ABI stable. API is allowed to + * evolve between minor releases, but only in a backwards compatible way. + * Make sure you update the -soname directives in configure.ac + * whenever you bump UV_VERSION_MAJOR or UV_VERSION_MINOR (but + * not UV_VERSION_PATCH.) + */ + +#define UV_VERSION_MAJOR 1 +#define UV_VERSION_MINOR 44 +#define UV_VERSION_PATCH 1 +#define UV_VERSION_IS_RELEASE 1 +#define UV_VERSION_SUFFIX "" + +#define UV_VERSION_HEX ((UV_VERSION_MAJOR << 16) | \ + (UV_VERSION_MINOR << 8) | \ + (UV_VERSION_PATCH)) + +#endif /* UV_VERSION_H */ diff --git a/third_party/libuv/include/uv/win.h b/third_party/libuv/include/uv/win.h new file mode 100644 index 0000000000000000000000000000000000000000..62be4b04ea81286bcff9a2f1dc7fee7f0df5c0bc --- /dev/null +++ b/third_party/libuv/include/uv/win.h @@ -0,0 +1,691 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * 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 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. + */ + +#ifndef _WIN32_WINNT +# define _WIN32_WINNT 0x0600 +#endif + +#if !defined(_SSIZE_T_) && !defined(_SSIZE_T_DEFINED) +typedef intptr_t ssize_t; +# define SSIZE_MAX INTPTR_MAX +# define _SSIZE_T_ +# define _SSIZE_T_DEFINED +#endif + +#include + +#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) +typedef struct pollfd { + SOCKET fd; + short events; + short revents; +} WSAPOLLFD, *PWSAPOLLFD, *LPWSAPOLLFD; +#endif + +#ifndef LOCALE_INVARIANT +# define LOCALE_INVARIANT 0x007f +#endif + +#include +// Disable the typedef in mstcpip.h of MinGW. +#define _TCP_INITIAL_RTO_PARAMETERS _TCP_INITIAL_RTO_PARAMETERS__AVOID +#define TCP_INITIAL_RTO_PARAMETERS TCP_INITIAL_RTO_PARAMETERS__AVOID +#define PTCP_INITIAL_RTO_PARAMETERS PTCP_INITIAL_RTO_PARAMETERS__AVOID +#include +#undef _TCP_INITIAL_RTO_PARAMETERS +#undef TCP_INITIAL_RTO_PARAMETERS +#undef PTCP_INITIAL_RTO_PARAMETERS +#include + +#include +#include +#include +#include + +#if defined(_MSC_VER) && _MSC_VER < 1600 +# include "uv/stdint-msvc2008.h" +#else +# include +#endif + +#include "uv/tree.h" +#include "uv/threadpool.h" + +#define MAX_PIPENAME_LEN 256 + +#ifndef S_IFLNK +# define S_IFLNK 0xA000 +#endif + +/* Additional signals supported by uv_signal and or uv_kill. The CRT defines + * the following signals already: + * + * #define SIGINT 2 + * #define SIGILL 4 + * #define SIGABRT_COMPAT 6 + * #define SIGFPE 8 + * #define SIGSEGV 11 + * #define SIGTERM 15 + * #define SIGBREAK 21 + * #define SIGABRT 22 + * + * The additional signals have values that are common on other Unix + * variants (Linux and Darwin) + */ +#define SIGHUP 1 +#define SIGKILL 9 +#define SIGWINCH 28 + +/* Redefine NSIG to take SIGWINCH into consideration */ +#if defined(NSIG) && NSIG <= SIGWINCH +# undef NSIG +#endif +#ifndef NSIG +# define NSIG SIGWINCH + 1 +#endif + +/* The CRT defines SIGABRT_COMPAT as 6, which equals SIGABRT on many unix-like + * platforms. However MinGW doesn't define it, so we do. */ +#ifndef SIGABRT_COMPAT +# define SIGABRT_COMPAT 6 +#endif + +/* + * Guids and typedefs for winsock extension functions + * Mingw32 doesn't have these :-( + */ +#ifndef WSAID_ACCEPTEX +# define WSAID_ACCEPTEX \ + {0xb5367df1, 0xcbac, 0x11cf, \ + {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} + +# define WSAID_CONNECTEX \ + {0x25a207b9, 0xddf3, 0x4660, \ + {0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}} + +# define WSAID_GETACCEPTEXSOCKADDRS \ + {0xb5367df2, 0xcbac, 0x11cf, \ + {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} + +# define WSAID_DISCONNECTEX \ + {0x7fda2e11, 0x8630, 0x436f, \ + {0xa0, 0x31, 0xf5, 0x36, 0xa6, 0xee, 0xc1, 0x57}} + +# define WSAID_TRANSMITFILE \ + {0xb5367df0, 0xcbac, 0x11cf, \ + {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} + + typedef BOOL (PASCAL *LPFN_ACCEPTEX) + (SOCKET sListenSocket, + SOCKET sAcceptSocket, + PVOID lpOutputBuffer, + DWORD dwReceiveDataLength, + DWORD dwLocalAddressLength, + DWORD dwRemoteAddressLength, + LPDWORD lpdwBytesReceived, + LPOVERLAPPED lpOverlapped); + + typedef BOOL (PASCAL *LPFN_CONNECTEX) + (SOCKET s, + const struct sockaddr* name, + int namelen, + PVOID lpSendBuffer, + DWORD dwSendDataLength, + LPDWORD lpdwBytesSent, + LPOVERLAPPED lpOverlapped); + + typedef void (PASCAL *LPFN_GETACCEPTEXSOCKADDRS) + (PVOID lpOutputBuffer, + DWORD dwReceiveDataLength, + DWORD dwLocalAddressLength, + DWORD dwRemoteAddressLength, + LPSOCKADDR* LocalSockaddr, + LPINT LocalSockaddrLength, + LPSOCKADDR* RemoteSockaddr, + LPINT RemoteSockaddrLength); + + typedef BOOL (PASCAL *LPFN_DISCONNECTEX) + (SOCKET hSocket, + LPOVERLAPPED lpOverlapped, + DWORD dwFlags, + DWORD reserved); + + typedef BOOL (PASCAL *LPFN_TRANSMITFILE) + (SOCKET hSocket, + HANDLE hFile, + DWORD nNumberOfBytesToWrite, + DWORD nNumberOfBytesPerSend, + LPOVERLAPPED lpOverlapped, + LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, + DWORD dwFlags); + + typedef PVOID RTL_SRWLOCK; + typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK; +#endif + +typedef int (WSAAPI* LPFN_WSARECV) + (SOCKET socket, + LPWSABUF buffers, + DWORD buffer_count, + LPDWORD bytes, + LPDWORD flags, + LPWSAOVERLAPPED overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine); + +typedef int (WSAAPI* LPFN_WSARECVFROM) + (SOCKET socket, + LPWSABUF buffers, + DWORD buffer_count, + LPDWORD bytes, + LPDWORD flags, + struct sockaddr* addr, + LPINT addr_len, + LPWSAOVERLAPPED overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine); + +#ifndef _NTDEF_ + typedef LONG NTSTATUS; + typedef NTSTATUS *PNTSTATUS; +#endif + +#ifndef RTL_CONDITION_VARIABLE_INIT + typedef PVOID CONDITION_VARIABLE, *PCONDITION_VARIABLE; +#endif + +typedef struct _AFD_POLL_HANDLE_INFO { + HANDLE Handle; + ULONG Events; + NTSTATUS Status; +} AFD_POLL_HANDLE_INFO, *PAFD_POLL_HANDLE_INFO; + +typedef struct _AFD_POLL_INFO { + LARGE_INTEGER Timeout; + ULONG NumberOfHandles; + ULONG Exclusive; + AFD_POLL_HANDLE_INFO Handles[1]; +} AFD_POLL_INFO, *PAFD_POLL_INFO; + +#define UV_MSAFD_PROVIDER_COUNT 4 + + +/** + * It should be possible to cast uv_buf_t[] to WSABUF[] + * see http://msdn.microsoft.com/en-us/library/ms741542(v=vs.85).aspx + */ +typedef struct uv_buf_t { + ULONG len; + char* base; +} uv_buf_t; + +typedef int uv_file; +typedef SOCKET uv_os_sock_t; +typedef HANDLE uv_os_fd_t; +typedef int uv_pid_t; + +typedef HANDLE uv_thread_t; + +typedef HANDLE uv_sem_t; + +typedef CRITICAL_SECTION uv_mutex_t; + +/* This condition variable implementation is based on the SetEvent solution + * (section 3.2) at http://www.cs.wustl.edu/~schmidt/win32-cv-1.html + * We could not use the SignalObjectAndWait solution (section 3.4) because + * it want the 2nd argument (type uv_mutex_t) of uv_cond_wait() and + * uv_cond_timedwait() to be HANDLEs, but we use CRITICAL_SECTIONs. + */ + +typedef union { + CONDITION_VARIABLE cond_var; + struct { + unsigned int waiters_count; + CRITICAL_SECTION waiters_count_lock; + HANDLE signal_event; + HANDLE broadcast_event; + } unused_; /* TODO: retained for ABI compatibility; remove me in v2.x. */ +} uv_cond_t; + +typedef struct { + SRWLOCK read_write_lock_; + /* TODO: retained for ABI compatibility; remove me in v2.x */ +#ifdef _WIN64 + unsigned char padding_[72]; +#else + unsigned char padding_[44]; +#endif +} uv_rwlock_t; + +typedef struct { + unsigned int n; + unsigned int count; + uv_mutex_t mutex; + uv_sem_t turnstile1; + uv_sem_t turnstile2; +} uv_barrier_t; + +typedef struct { + DWORD tls_index; +} uv_key_t; + +#define UV_ONCE_INIT { 0, NULL } + +typedef struct uv_once_s { + unsigned char ran; + HANDLE event; +} uv_once_t; + +/* Platform-specific definitions for uv_spawn support. */ +typedef unsigned char uv_uid_t; +typedef unsigned char uv_gid_t; + +typedef struct uv__dirent_s { + int d_type; + char d_name[1]; +} uv__dirent_t; + +#define UV_DIR_PRIVATE_FIELDS \ + HANDLE dir_handle; \ + WIN32_FIND_DATAW find_data; \ + BOOL need_find_call; + +#define HAVE_DIRENT_TYPES +#define UV__DT_DIR UV_DIRENT_DIR +#define UV__DT_FILE UV_DIRENT_FILE +#define UV__DT_LINK UV_DIRENT_LINK +#define UV__DT_FIFO UV_DIRENT_FIFO +#define UV__DT_SOCKET UV_DIRENT_SOCKET +#define UV__DT_CHAR UV_DIRENT_CHAR +#define UV__DT_BLOCK UV_DIRENT_BLOCK + +/* Platform-specific definitions for uv_dlopen support. */ +#define UV_DYNAMIC FAR WINAPI +typedef struct { + HMODULE handle; + char* errmsg; +} uv_lib_t; + +#define UV_LOOP_PRIVATE_FIELDS \ + /* The loop's I/O completion port */ \ + HANDLE iocp; \ + /* The current time according to the event loop. in msecs. */ \ + uint64_t time; \ + /* Tail of a single-linked circular queue of pending reqs. If the queue */ \ + /* is empty, tail_ is NULL. If there is only one item, */ \ + /* tail_->next_req == tail_ */ \ + uv_req_t* pending_reqs_tail; \ + /* Head of a single-linked list of closed handles */ \ + uv_handle_t* endgame_handles; \ + /* TODO(bnoordhuis) Stop heap-allocating |timer_heap| in libuv v2.x. */ \ + void* timer_heap; \ + /* Lists of active loop (prepare / check / idle) watchers */ \ + uv_prepare_t* prepare_handles; \ + uv_check_t* check_handles; \ + uv_idle_t* idle_handles; \ + /* This pointer will refer to the prepare/check/idle handle whose */ \ + /* callback is scheduled to be called next. This is needed to allow */ \ + /* safe removal from one of the lists above while that list being */ \ + /* iterated over. */ \ + uv_prepare_t* next_prepare_handle; \ + uv_check_t* next_check_handle; \ + uv_idle_t* next_idle_handle; \ + /* This handle holds the peer sockets for the fast variant of uv_poll_t */ \ + SOCKET poll_peer_sockets[UV_MSAFD_PROVIDER_COUNT]; \ + /* Counter to keep track of active tcp streams */ \ + unsigned int active_tcp_streams; \ + /* Counter to keep track of active udp streams */ \ + unsigned int active_udp_streams; \ + /* Counter to started timer */ \ + uint64_t timer_counter; \ + /* Threadpool */ \ + void* wq[2]; \ + uv_mutex_t wq_mutex; \ + uv_async_t wq_async; + +#define UV_REQ_TYPE_PRIVATE \ + /* TODO: remove the req suffix */ \ + UV_ACCEPT, \ + UV_FS_EVENT_REQ, \ + UV_POLL_REQ, \ + UV_PROCESS_EXIT, \ + UV_READ, \ + UV_UDP_RECV, \ + UV_WAKEUP, \ + UV_SIGNAL_REQ, + +#define UV_REQ_PRIVATE_FIELDS \ + union { \ + /* Used by I/O operations */ \ + struct { \ + OVERLAPPED overlapped; \ + size_t queued_bytes; \ + } io; \ + } u; \ + struct uv_req_s* next_req; + +#define UV_WRITE_PRIVATE_FIELDS \ + int coalesced; \ + uv_buf_t write_buffer; \ + HANDLE event_handle; \ + HANDLE wait_handle; + +#define UV_CONNECT_PRIVATE_FIELDS \ + /* empty */ + +#define UV_SHUTDOWN_PRIVATE_FIELDS \ + /* empty */ + +#define UV_UDP_SEND_PRIVATE_FIELDS \ + /* empty */ + +#define UV_PRIVATE_REQ_TYPES \ + typedef struct uv_pipe_accept_s { \ + UV_REQ_FIELDS \ + HANDLE pipeHandle; \ + struct uv_pipe_accept_s* next_pending; \ + } uv_pipe_accept_t; \ + \ + typedef struct uv_tcp_accept_s { \ + UV_REQ_FIELDS \ + SOCKET accept_socket; \ + char accept_buffer[sizeof(struct sockaddr_storage) * 2 + 32]; \ + HANDLE event_handle; \ + HANDLE wait_handle; \ + struct uv_tcp_accept_s* next_pending; \ + } uv_tcp_accept_t; \ + \ + typedef struct uv_read_s { \ + UV_REQ_FIELDS \ + HANDLE event_handle; \ + HANDLE wait_handle; \ + } uv_read_t; + +#define uv_stream_connection_fields \ + unsigned int write_reqs_pending; \ + uv_shutdown_t* shutdown_req; + +#define uv_stream_server_fields \ + uv_connection_cb connection_cb; + +#define UV_STREAM_PRIVATE_FIELDS \ + unsigned int reqs_pending; \ + int activecnt; \ + uv_read_t read_req; \ + union { \ + struct { uv_stream_connection_fields } conn; \ + struct { uv_stream_server_fields } serv; \ + } stream; + +#define uv_tcp_server_fields \ + uv_tcp_accept_t* accept_reqs; \ + unsigned int processed_accepts; \ + uv_tcp_accept_t* pending_accepts; \ + LPFN_ACCEPTEX func_acceptex; + +#define uv_tcp_connection_fields \ + uv_buf_t read_buffer; \ + LPFN_CONNECTEX func_connectex; + +#define UV_TCP_PRIVATE_FIELDS \ + SOCKET socket; \ + int delayed_error; \ + union { \ + struct { uv_tcp_server_fields } serv; \ + struct { uv_tcp_connection_fields } conn; \ + } tcp; + +#define UV_UDP_PRIVATE_FIELDS \ + SOCKET socket; \ + unsigned int reqs_pending; \ + int activecnt; \ + uv_req_t recv_req; \ + uv_buf_t recv_buffer; \ + struct sockaddr_storage recv_from; \ + int recv_from_len; \ + uv_udp_recv_cb recv_cb; \ + uv_alloc_cb alloc_cb; \ + LPFN_WSARECV func_wsarecv; \ + LPFN_WSARECVFROM func_wsarecvfrom; + +#define uv_pipe_server_fields \ + int pending_instances; \ + uv_pipe_accept_t* accept_reqs; \ + uv_pipe_accept_t* pending_accepts; + +#define uv_pipe_connection_fields \ + uv_timer_t* eof_timer; \ + uv_write_t dummy; /* TODO: retained for ABI compat; remove this in v2.x. */ \ + DWORD ipc_remote_pid; \ + union { \ + uint32_t payload_remaining; \ + uint64_t dummy; /* TODO: retained for ABI compat; remove this in v2.x. */ \ + } ipc_data_frame; \ + void* ipc_xfer_queue[2]; \ + int ipc_xfer_queue_length; \ + uv_write_t* non_overlapped_writes_tail; \ + CRITICAL_SECTION readfile_thread_lock; \ + volatile HANDLE readfile_thread_handle; + +#define UV_PIPE_PRIVATE_FIELDS \ + HANDLE handle; \ + WCHAR* name; \ + union { \ + struct { uv_pipe_server_fields } serv; \ + struct { uv_pipe_connection_fields } conn; \ + } pipe; + +/* TODO: put the parser states in an union - TTY handles are always half-duplex + * so read-state can safely overlap write-state. */ +#define UV_TTY_PRIVATE_FIELDS \ + HANDLE handle; \ + union { \ + struct { \ + /* Used for readable TTY handles */ \ + /* TODO: remove me in v2.x. */ \ + HANDLE unused_; \ + uv_buf_t read_line_buffer; \ + HANDLE read_raw_wait; \ + /* Fields used for translating win keystrokes into vt100 characters */ \ + char last_key[8]; \ + unsigned char last_key_offset; \ + unsigned char last_key_len; \ + WCHAR last_utf16_high_surrogate; \ + INPUT_RECORD last_input_record; \ + } rd; \ + struct { \ + /* Used for writable TTY handles */ \ + /* utf8-to-utf16 conversion state */ \ + unsigned int utf8_codepoint; \ + unsigned char utf8_bytes_left; \ + /* eol conversion state */ \ + unsigned char previous_eol; \ + /* ansi parser state */ \ + unsigned short ansi_parser_state; \ + unsigned char ansi_csi_argc; \ + unsigned short ansi_csi_argv[4]; \ + COORD saved_position; \ + WORD saved_attributes; \ + } wr; \ + } tty; + +#define UV_POLL_PRIVATE_FIELDS \ + SOCKET socket; \ + /* Used in fast mode */ \ + SOCKET peer_socket; \ + AFD_POLL_INFO afd_poll_info_1; \ + AFD_POLL_INFO afd_poll_info_2; \ + /* Used in fast and slow mode. */ \ + uv_req_t poll_req_1; \ + uv_req_t poll_req_2; \ + unsigned char submitted_events_1; \ + unsigned char submitted_events_2; \ + unsigned char mask_events_1; \ + unsigned char mask_events_2; \ + unsigned char events; + +#define UV_TIMER_PRIVATE_FIELDS \ + void* heap_node[3]; \ + int unused; \ + uint64_t timeout; \ + uint64_t repeat; \ + uint64_t start_id; \ + uv_timer_cb timer_cb; + +#define UV_ASYNC_PRIVATE_FIELDS \ + struct uv_req_s async_req; \ + uv_async_cb async_cb; \ + /* char to avoid alignment issues */ \ + char volatile async_sent; + +#define UV_PREPARE_PRIVATE_FIELDS \ + uv_prepare_t* prepare_prev; \ + uv_prepare_t* prepare_next; \ + uv_prepare_cb prepare_cb; + +#define UV_CHECK_PRIVATE_FIELDS \ + uv_check_t* check_prev; \ + uv_check_t* check_next; \ + uv_check_cb check_cb; + +#define UV_IDLE_PRIVATE_FIELDS \ + uv_idle_t* idle_prev; \ + uv_idle_t* idle_next; \ + uv_idle_cb idle_cb; + +#define UV_HANDLE_PRIVATE_FIELDS \ + uv_handle_t* endgame_next; \ + unsigned int flags; + +#define UV_GETADDRINFO_PRIVATE_FIELDS \ + struct uv__work work_req; \ + uv_getaddrinfo_cb getaddrinfo_cb; \ + void* alloc; \ + WCHAR* node; \ + WCHAR* service; \ + /* The addrinfoW field is used to store a pointer to the hints, and */ \ + /* later on to store the result of GetAddrInfoW. The final result will */ \ + /* be converted to struct addrinfo* and stored in the addrinfo field. */ \ + struct addrinfoW* addrinfow; \ + struct addrinfo* addrinfo; \ + int retcode; + +#define UV_GETNAMEINFO_PRIVATE_FIELDS \ + struct uv__work work_req; \ + uv_getnameinfo_cb getnameinfo_cb; \ + struct sockaddr_storage storage; \ + int flags; \ + char host[NI_MAXHOST]; \ + char service[NI_MAXSERV]; \ + int retcode; + +#define UV_PROCESS_PRIVATE_FIELDS \ + struct uv_process_exit_s { \ + UV_REQ_FIELDS \ + } exit_req; \ + BYTE* child_stdio_buffer; \ + int exit_signal; \ + HANDLE wait_handle; \ + HANDLE process_handle; \ + volatile char exit_cb_pending; + +#define UV_FS_PRIVATE_FIELDS \ + struct uv__work work_req; \ + int flags; \ + DWORD sys_errno_; \ + union { \ + /* TODO: remove me in 0.9. */ \ + WCHAR* pathw; \ + int fd; \ + } file; \ + union { \ + struct { \ + int mode; \ + WCHAR* new_pathw; \ + int file_flags; \ + int fd_out; \ + unsigned int nbufs; \ + uv_buf_t* bufs; \ + int64_t offset; \ + uv_buf_t bufsml[4]; \ + } info; \ + struct { \ + double atime; \ + double mtime; \ + } time; \ + } fs; + +#define UV_WORK_PRIVATE_FIELDS \ + struct uv__work work_req; + +#define UV_FS_EVENT_PRIVATE_FIELDS \ + struct uv_fs_event_req_s { \ + UV_REQ_FIELDS \ + } req; \ + HANDLE dir_handle; \ + int req_pending; \ + uv_fs_event_cb cb; \ + WCHAR* filew; \ + WCHAR* short_filew; \ + WCHAR* dirw; \ + char* buffer; + +#define UV_SIGNAL_PRIVATE_FIELDS \ + RB_ENTRY(uv_signal_s) tree_entry; \ + struct uv_req_s signal_req; \ + unsigned long pending_signum; + +#ifndef F_OK +#define F_OK 0 +#endif +#ifndef R_OK +#define R_OK 4 +#endif +#ifndef W_OK +#define W_OK 2 +#endif +#ifndef X_OK +#define X_OK 1 +#endif + +/* fs open() flags supported on this platform: */ +#define UV_FS_O_APPEND _O_APPEND +#define UV_FS_O_CREAT _O_CREAT +#define UV_FS_O_EXCL _O_EXCL +#define UV_FS_O_FILEMAP 0x20000000 +#define UV_FS_O_RANDOM _O_RANDOM +#define UV_FS_O_RDONLY _O_RDONLY +#define UV_FS_O_RDWR _O_RDWR +#define UV_FS_O_SEQUENTIAL _O_SEQUENTIAL +#define UV_FS_O_SHORT_LIVED _O_SHORT_LIVED +#define UV_FS_O_TEMPORARY _O_TEMPORARY +#define UV_FS_O_TRUNC _O_TRUNC +#define UV_FS_O_WRONLY _O_WRONLY + +/* fs open() flags supported on other platforms (or mapped on this platform): */ +#define UV_FS_O_DIRECT 0x02000000 /* FILE_FLAG_NO_BUFFERING */ +#define UV_FS_O_DIRECTORY 0 +#define UV_FS_O_DSYNC 0x04000000 /* FILE_FLAG_WRITE_THROUGH */ +#define UV_FS_O_EXLOCK 0x10000000 /* EXCLUSIVE SHARING MODE */ +#define UV_FS_O_NOATIME 0 +#define UV_FS_O_NOCTTY 0 +#define UV_FS_O_NOFOLLOW 0 +#define UV_FS_O_NONBLOCK 0 +#define UV_FS_O_SYMLINK 0 +#define UV_FS_O_SYNC 0x08000000 /* FILE_FLAG_WRITE_THROUGH */ diff --git a/third_party/libuv/include/uv_ndk/uv.h b/third_party/libuv/include/uv_ndk/uv.h new file mode 100644 index 0000000000000000000000000000000000000000..d1b0ada672d5bce0b2e8f6ab94a9a4e143a2120a --- /dev/null +++ b/third_party/libuv/include/uv_ndk/uv.h @@ -0,0 +1,1826 @@ +/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. + * + * 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 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. + */ + +/* See https://github.com/libuv/libuv#documentation for documentation. */ + +#ifndef UV_H +#define UV_H +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_UV_SHARED) && defined(USING_UV_SHARED) +#error "Define either BUILDING_UV_SHARED or USING_UV_SHARED, not both." +#endif + +#ifdef _WIN32 + /* Windows - set up dll import/export decorators. */ +# if defined(BUILDING_UV_SHARED) + /* Building shared library. */ +# define UV_EXTERN __declspec(dllexport) +# elif defined(USING_UV_SHARED) + /* Using shared library. */ +# define UV_EXTERN __declspec(dllimport) +# else + /* Building static library. */ +# define UV_EXTERN /* nothing */ +# endif +#elif __GNUC__ >= 4 +# define UV_EXTERN __attribute__((visibility("default"))) +#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) /* Sun Studio >= 8 */ +# define UV_EXTERN __global +#else +# define UV_EXTERN /* nothing */ +#endif + +#include "uv/errno.h" +#include "uv/version.h" +#include +#include + +#if defined(_MSC_VER) && _MSC_VER < 1600 +# include "uv/stdint-msvc2008.h" +#else +# include +#endif + +#if defined(_WIN32) +# include "uv/win.h" +#else +# include "uv/unix.h" +#endif + +/* Expand this list if necessary. */ +#define UV_ERRNO_MAP(XX) \ + XX(E2BIG, "argument list too long") \ + XX(EACCES, "permission denied") \ + XX(EADDRINUSE, "address already in use") \ + XX(EADDRNOTAVAIL, "address not available") \ + XX(EAFNOSUPPORT, "address family not supported") \ + XX(EAGAIN, "resource temporarily unavailable") \ + XX(EAI_ADDRFAMILY, "address family not supported") \ + XX(EAI_AGAIN, "temporary failure") \ + XX(EAI_BADFLAGS, "bad ai_flags value") \ + XX(EAI_BADHINTS, "invalid value for hints") \ + XX(EAI_CANCELED, "request canceled") \ + XX(EAI_FAIL, "permanent failure") \ + XX(EAI_FAMILY, "ai_family not supported") \ + XX(EAI_MEMORY, "out of memory") \ + XX(EAI_NODATA, "no address") \ + XX(EAI_NONAME, "unknown node or service") \ + XX(EAI_OVERFLOW, "argument buffer overflow") \ + XX(EAI_PROTOCOL, "resolved protocol is unknown") \ + XX(EAI_SERVICE, "service not available for socket type") \ + XX(EAI_SOCKTYPE, "socket type not supported") \ + XX(EALREADY, "connection already in progress") \ + XX(EBADF, "bad file descriptor") \ + XX(EBUSY, "resource busy or locked") \ + XX(ECANCELED, "operation canceled") \ + XX(ECHARSET, "invalid Unicode character") \ + XX(ECONNABORTED, "software caused connection abort") \ + XX(ECONNREFUSED, "connection refused") \ + XX(ECONNRESET, "connection reset by peer") \ + XX(EDESTADDRREQ, "destination address required") \ + XX(EEXIST, "file already exists") \ + XX(EFAULT, "bad address in system call argument") \ + XX(EFBIG, "file too large") \ + XX(EHOSTUNREACH, "host is unreachable") \ + XX(EINTR, "interrupted system call") \ + XX(EINVAL, "invalid argument") \ + XX(EIO, "i/o error") \ + XX(EISCONN, "socket is already connected") \ + XX(EISDIR, "illegal operation on a directory") \ + XX(ELOOP, "too many symbolic links encountered") \ + XX(EMFILE, "too many open files") \ + XX(EMSGSIZE, "message too long") \ + XX(ENAMETOOLONG, "name too long") \ + XX(ENETDOWN, "network is down") \ + XX(ENETUNREACH, "network is unreachable") \ + XX(ENFILE, "file table overflow") \ + XX(ENOBUFS, "no buffer space available") \ + XX(ENODEV, "no such device") \ + XX(ENOENT, "no such file or directory") \ + XX(ENOMEM, "not enough memory") \ + XX(ENONET, "machine is not on the network") \ + XX(ENOPROTOOPT, "protocol not available") \ + XX(ENOSPC, "no space left on device") \ + XX(ENOSYS, "function not implemented") \ + XX(ENOTCONN, "socket is not connected") \ + XX(ENOTDIR, "not a directory") \ + XX(ENOTEMPTY, "directory not empty") \ + XX(ENOTSOCK, "socket operation on non-socket") \ + XX(ENOTSUP, "operation not supported on socket") \ + XX(EOVERFLOW, "value too large for defined data type") \ + XX(EPERM, "operation not permitted") \ + XX(EPIPE, "broken pipe") \ + XX(EPROTO, "protocol error") \ + XX(EPROTONOSUPPORT, "protocol not supported") \ + XX(EPROTOTYPE, "protocol wrong type for socket") \ + XX(ERANGE, "result too large") \ + XX(EROFS, "read-only file system") \ + XX(ESHUTDOWN, "cannot send after transport endpoint shutdown") \ + XX(ESPIPE, "invalid seek") \ + XX(ESRCH, "no such process") \ + XX(ETIMEDOUT, "connection timed out") \ + XX(ETXTBSY, "text file is busy") \ + XX(EXDEV, "cross-device link not permitted") \ + XX(UNKNOWN, "unknown error") \ + XX(EOF, "end of file") \ + XX(ENXIO, "no such device or address") \ + XX(EMLINK, "too many links") \ + XX(EHOSTDOWN, "host is down") \ + XX(EREMOTEIO, "remote I/O error") \ + XX(ENOTTY, "inappropriate ioctl for device") \ + XX(EFTYPE, "inappropriate file type or format") \ + XX(EILSEQ, "illegal byte sequence") \ + XX(ESOCKTNOSUPPORT, "socket type not supported") \ + +#define UV_HANDLE_TYPE_MAP(XX) \ + XX(ASYNC, async) \ + XX(CHECK, check) \ + XX(FS_EVENT, fs_event) \ + XX(FS_POLL, fs_poll) \ + XX(HANDLE, handle) \ + XX(IDLE, idle) \ + XX(NAMED_PIPE, pipe) \ + XX(POLL, poll) \ + XX(PREPARE, prepare) \ + XX(PROCESS, process) \ + XX(STREAM, stream) \ + XX(TCP, tcp) \ + XX(TIMER, timer) \ + XX(TTY, tty) \ + XX(UDP, udp) \ + XX(SIGNAL, signal) \ + +#define UV_REQ_TYPE_MAP(XX) \ + XX(REQ, req) \ + XX(CONNECT, connect) \ + XX(WRITE, write) \ + XX(SHUTDOWN, shutdown) \ + XX(UDP_SEND, udp_send) \ + XX(FS, fs) \ + XX(WORK, work) \ + XX(GETADDRINFO, getaddrinfo) \ + XX(GETNAMEINFO, getnameinfo) \ + XX(RANDOM, random) \ + +typedef enum { +#define XX(code, _) UV_ ## code = UV__ ## code, + UV_ERRNO_MAP(XX) +#undef XX + UV_ERRNO_MAX = UV__EOF - 1 +} uv_errno_t; + +typedef enum { + UV_UNKNOWN_HANDLE = 0, +#define XX(uc, lc) UV_##uc, + UV_HANDLE_TYPE_MAP(XX) +#undef XX + UV_FILE, + UV_HANDLE_TYPE_MAX +} uv_handle_type; + +typedef enum { + UV_UNKNOWN_REQ = 0, +#define XX(uc, lc) UV_##uc, + UV_REQ_TYPE_MAP(XX) +#undef XX + UV_REQ_TYPE_PRIVATE + UV_REQ_TYPE_MAX +} uv_req_type; + + +/* Handle types. */ +typedef struct uv_loop_s uv_loop_t; +typedef struct uv_handle_s uv_handle_t; +typedef struct uv_dir_s uv_dir_t; +typedef struct uv_stream_s uv_stream_t; +typedef struct uv_tcp_s uv_tcp_t; +typedef struct uv_udp_s uv_udp_t; +typedef struct uv_pipe_s uv_pipe_t; +typedef struct uv_tty_s uv_tty_t; +typedef struct uv_poll_s uv_poll_t; +typedef struct uv_timer_s uv_timer_t; +typedef struct uv_prepare_s uv_prepare_t; +typedef struct uv_check_s uv_check_t; +typedef struct uv_idle_s uv_idle_t; +typedef struct uv_async_s uv_async_t; +typedef struct uv_process_s uv_process_t; +typedef struct uv_fs_event_s uv_fs_event_t; +typedef struct uv_fs_poll_s uv_fs_poll_t; +typedef struct uv_signal_s uv_signal_t; + +/* Request types. */ +typedef struct uv_req_s uv_req_t; +typedef struct uv_getaddrinfo_s uv_getaddrinfo_t; +typedef struct uv_getnameinfo_s uv_getnameinfo_t; +typedef struct uv_shutdown_s uv_shutdown_t; +typedef struct uv_write_s uv_write_t; +typedef struct uv_connect_s uv_connect_t; +typedef struct uv_udp_send_s uv_udp_send_t; +typedef struct uv_fs_s uv_fs_t; +typedef struct uv_work_s uv_work_t; +typedef struct uv_random_s uv_random_t; + +/* None of the above. */ +typedef struct uv_env_item_s uv_env_item_t; +typedef struct uv_cpu_info_s uv_cpu_info_t; +typedef struct uv_interface_address_s uv_interface_address_t; +typedef struct uv_dirent_s uv_dirent_t; +typedef struct uv_passwd_s uv_passwd_t; +typedef struct uv_utsname_s uv_utsname_t; +typedef struct uv_statfs_s uv_statfs_t; + +typedef enum { + UV_LOOP_BLOCK_SIGNAL = 0, + UV_METRICS_IDLE_TIME +} uv_loop_option; + +typedef enum { + UV_RUN_DEFAULT = 0, + UV_RUN_ONCE, + UV_RUN_NOWAIT +} uv_run_mode; + + +UV_EXTERN unsigned int uv_version(void); +UV_EXTERN const char* uv_version_string(void); + +typedef void* (*uv_malloc_func)(size_t size); +typedef void* (*uv_realloc_func)(void* ptr, size_t size); +typedef void* (*uv_calloc_func)(size_t count, size_t size); +typedef void (*uv_free_func)(void* ptr); + +UV_EXTERN int uv_replace_allocator(uv_malloc_func malloc_func, + uv_realloc_func realloc_func, + uv_calloc_func calloc_func, + uv_free_func free_func); + +UV_EXTERN uv_loop_t* uv_default_loop(void); +UV_EXTERN int uv_loop_init(uv_loop_t* loop); +UV_EXTERN int uv_loop_close(uv_loop_t* loop); +/* + * NOTE: + * This function is DEPRECATED (to be removed after 0.12), users should + * allocate the loop manually and use uv_loop_init instead. + */ +UV_EXTERN uv_loop_t* uv_loop_new(void); +/* + * NOTE: + * This function is DEPRECATED (to be removed after 0.12). Users should use + * uv_loop_close and free the memory manually instead. + */ +UV_EXTERN void uv_loop_delete(uv_loop_t*); +UV_EXTERN size_t uv_loop_size(void); +UV_EXTERN int uv_loop_alive(const uv_loop_t* loop); +UV_EXTERN int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...); +UV_EXTERN int uv_loop_fork(uv_loop_t* loop); + +UV_EXTERN int uv_run(uv_loop_t*, uv_run_mode mode); +UV_EXTERN void uv_stop(uv_loop_t*); + +UV_EXTERN void uv_ref(uv_handle_t*); +UV_EXTERN void uv_unref(uv_handle_t*); +UV_EXTERN int uv_has_ref(const uv_handle_t*); + +UV_EXTERN void uv_update_time(uv_loop_t*); +UV_EXTERN uint64_t uv_now(const uv_loop_t*); + +UV_EXTERN int uv_backend_fd(const uv_loop_t*); +UV_EXTERN int uv_backend_timeout(const uv_loop_t*); + +typedef void (*uv_alloc_cb)(uv_handle_t* handle, + size_t suggested_size, + uv_buf_t* buf); +typedef void (*uv_read_cb)(uv_stream_t* stream, + ssize_t nread, + const uv_buf_t* buf); +typedef void (*uv_write_cb)(uv_write_t* req, int status); +typedef void (*uv_connect_cb)(uv_connect_t* req, int status); +typedef void (*uv_shutdown_cb)(uv_shutdown_t* req, int status); +typedef void (*uv_connection_cb)(uv_stream_t* server, int status); +typedef void (*uv_close_cb)(uv_handle_t* handle); +typedef void (*uv_poll_cb)(uv_poll_t* handle, int status, int events); +typedef void (*uv_timer_cb)(uv_timer_t* handle); +typedef void (*uv_async_cb)(uv_async_t* handle); +typedef void (*uv_prepare_cb)(uv_prepare_t* handle); +typedef void (*uv_check_cb)(uv_check_t* handle); +typedef void (*uv_idle_cb)(uv_idle_t* handle); +typedef void (*uv_exit_cb)(uv_process_t*, int64_t exit_status, int term_signal); +typedef void (*uv_walk_cb)(uv_handle_t* handle, void* arg); +typedef void (*uv_fs_cb)(uv_fs_t* req); +typedef void (*uv_work_cb)(uv_work_t* req); +typedef void (*uv_after_work_cb)(uv_work_t* req, int status); +typedef void (*uv_getaddrinfo_cb)(uv_getaddrinfo_t* req, + int status, + struct addrinfo* res); +typedef void (*uv_getnameinfo_cb)(uv_getnameinfo_t* req, + int status, + const char* hostname, + const char* service); +typedef void (*uv_random_cb)(uv_random_t* req, + int status, + void* buf, + size_t buflen); + +typedef struct { + long tv_sec; + long tv_nsec; +} uv_timespec_t; + + +typedef struct { + uint64_t st_dev; + uint64_t st_mode; + uint64_t st_nlink; + uint64_t st_uid; + uint64_t st_gid; + uint64_t st_rdev; + uint64_t st_ino; + uint64_t st_size; + uint64_t st_blksize; + uint64_t st_blocks; + uint64_t st_flags; + uint64_t st_gen; + uv_timespec_t st_atim; + uv_timespec_t st_mtim; + uv_timespec_t st_ctim; + uv_timespec_t st_birthtim; +} uv_stat_t; + + +typedef void (*uv_fs_event_cb)(uv_fs_event_t* handle, + const char* filename, + int events, + int status); + +typedef void (*uv_fs_poll_cb)(uv_fs_poll_t* handle, + int status, + const uv_stat_t* prev, + const uv_stat_t* curr); + +typedef void (*uv_signal_cb)(uv_signal_t* handle, int signum); + + +typedef enum { + UV_LEAVE_GROUP = 0, + UV_JOIN_GROUP +} uv_membership; + + +UV_EXTERN int uv_translate_sys_error(int sys_errno); + +UV_EXTERN const char* uv_strerror(int err); +UV_EXTERN char* uv_strerror_r(int err, char* buf, size_t buflen); + +UV_EXTERN const char* uv_err_name(int err); +UV_EXTERN char* uv_err_name_r(int err, char* buf, size_t buflen); + + +#define UV_REQ_FIELDS \ + /* public */ \ + void* data; \ + /* read-only */ \ + uv_req_type type; \ + /* private */ \ + void* reserved[6]; \ + UV_REQ_PRIVATE_FIELDS \ + +/* Abstract base class of all requests. */ +struct uv_req_s { + UV_REQ_FIELDS +}; + + +/* Platform-specific request types. */ +UV_PRIVATE_REQ_TYPES + + +UV_EXTERN int uv_shutdown(uv_shutdown_t* req, + uv_stream_t* handle, + uv_shutdown_cb cb); + +struct uv_shutdown_s { + UV_REQ_FIELDS + uv_stream_t* handle; + uv_shutdown_cb cb; + UV_SHUTDOWN_PRIVATE_FIELDS +}; + + +#define UV_HANDLE_FIELDS \ + /* public */ \ + void* data; \ + /* read-only */ \ + uv_loop_t* loop; \ + uv_handle_type type; \ + /* private */ \ + uv_close_cb close_cb; \ + void* handle_queue[2]; \ + union { \ + int fd; \ + void* reserved[4]; \ + } u; \ + UV_HANDLE_PRIVATE_FIELDS \ + +/* The abstract base class of all handles. */ +struct uv_handle_s { + UV_HANDLE_FIELDS +}; + +UV_EXTERN size_t uv_handle_size(uv_handle_type type); +UV_EXTERN uv_handle_type uv_handle_get_type(const uv_handle_t* handle); +UV_EXTERN const char* uv_handle_type_name(uv_handle_type type); +UV_EXTERN void* uv_handle_get_data(const uv_handle_t* handle); +UV_EXTERN uv_loop_t* uv_handle_get_loop(const uv_handle_t* handle); +UV_EXTERN void uv_handle_set_data(uv_handle_t* handle, void* data); + +UV_EXTERN size_t uv_req_size(uv_req_type type); +UV_EXTERN void* uv_req_get_data(const uv_req_t* req); +UV_EXTERN void uv_req_set_data(uv_req_t* req, void* data); +UV_EXTERN uv_req_type uv_req_get_type(const uv_req_t* req); +UV_EXTERN const char* uv_req_type_name(uv_req_type type); + +UV_EXTERN int uv_is_active(const uv_handle_t* handle); + +UV_EXTERN void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg); + +/* Helpers for ad hoc debugging, no API/ABI stability guaranteed. */ +UV_EXTERN void uv_print_all_handles(uv_loop_t* loop, FILE* stream); +UV_EXTERN void uv_print_active_handles(uv_loop_t* loop, FILE* stream); + +UV_EXTERN void uv_close(uv_handle_t* handle, uv_close_cb close_cb); + +UV_EXTERN int uv_send_buffer_size(uv_handle_t* handle, int* value); +UV_EXTERN int uv_recv_buffer_size(uv_handle_t* handle, int* value); + +UV_EXTERN int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd); + +UV_EXTERN uv_buf_t uv_buf_init(char* base, unsigned int len); + + +#define UV_STREAM_FIELDS \ + /* number of bytes queued for writing */ \ + size_t write_queue_size; \ + uv_alloc_cb alloc_cb; \ + uv_read_cb read_cb; \ + /* private */ \ + UV_STREAM_PRIVATE_FIELDS + +/* + * uv_stream_t is a subclass of uv_handle_t. + * + * uv_stream is an abstract class. + * + * uv_stream_t is the parent class of uv_tcp_t, uv_pipe_t and uv_tty_t. + */ +struct uv_stream_s { + UV_HANDLE_FIELDS + UV_STREAM_FIELDS +}; + +UV_EXTERN size_t uv_stream_get_write_queue_size(const uv_stream_t* stream); + +UV_EXTERN int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb); +UV_EXTERN int uv_accept(uv_stream_t* server, uv_stream_t* client); + +UV_EXTERN int uv_read_start(uv_stream_t*, + uv_alloc_cb alloc_cb, + uv_read_cb read_cb); +UV_EXTERN int uv_read_stop(uv_stream_t*); + +UV_EXTERN int uv_write(uv_write_t* req, + uv_stream_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_write_cb cb); +UV_EXTERN int uv_write2(uv_write_t* req, + uv_stream_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + uv_stream_t* send_handle, + uv_write_cb cb); +UV_EXTERN int uv_try_write(uv_stream_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs); + +/* uv_write_t is a subclass of uv_req_t. */ +struct uv_write_s { + UV_REQ_FIELDS + uv_write_cb cb; + uv_stream_t* send_handle; /* TODO: make private and unix-only in v2.x. */ + uv_stream_t* handle; + UV_WRITE_PRIVATE_FIELDS +}; + + +UV_EXTERN int uv_is_readable(const uv_stream_t* handle); +UV_EXTERN int uv_is_writable(const uv_stream_t* handle); + +UV_EXTERN int uv_stream_set_blocking(uv_stream_t* handle, int blocking); + +UV_EXTERN int uv_is_closing(const uv_handle_t* handle); + + +/* + * uv_tcp_t is a subclass of uv_stream_t. + * + * Represents a TCP stream or TCP server. + */ +struct uv_tcp_s { + UV_HANDLE_FIELDS + UV_STREAM_FIELDS + UV_TCP_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_tcp_init(uv_loop_t*, uv_tcp_t* handle); +UV_EXTERN int uv_tcp_init_ex(uv_loop_t*, uv_tcp_t* handle, unsigned int flags); +UV_EXTERN int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock); +UV_EXTERN int uv_tcp_nodelay(uv_tcp_t* handle, int enable); +UV_EXTERN int uv_tcp_keepalive(uv_tcp_t* handle, + int enable, + unsigned int delay); +UV_EXTERN int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable); + +enum uv_tcp_flags { + /* Used with uv_tcp_bind, when an IPv6 address is used. */ + UV_TCP_IPV6ONLY = 1 +}; + +UV_EXTERN int uv_tcp_bind(uv_tcp_t* handle, + const struct sockaddr* addr, + unsigned int flags); +UV_EXTERN int uv_tcp_getsockname(const uv_tcp_t* handle, + struct sockaddr* name, + int* namelen); +UV_EXTERN int uv_tcp_getpeername(const uv_tcp_t* handle, + struct sockaddr* name, + int* namelen); +UV_EXTERN int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb); +UV_EXTERN int uv_tcp_connect(uv_connect_t* req, + uv_tcp_t* handle, + const struct sockaddr* addr, + uv_connect_cb cb); + +/* uv_connect_t is a subclass of uv_req_t. */ +struct uv_connect_s { + UV_REQ_FIELDS + uv_connect_cb cb; + uv_stream_t* handle; + UV_CONNECT_PRIVATE_FIELDS +}; + + +/* + * UDP support. + */ + +enum uv_udp_flags { + /* Disables dual stack mode. */ + UV_UDP_IPV6ONLY = 1, + /* + * Indicates message was truncated because read buffer was too small. The + * remainder was discarded by the OS. Used in uv_udp_recv_cb. + */ + UV_UDP_PARTIAL = 2, + /* + * Indicates if SO_REUSEADDR will be set when binding the handle. + * This sets the SO_REUSEPORT socket flag on the BSDs and OS X. On other + * Unix platforms, it sets the SO_REUSEADDR flag. What that means is that + * multiple threads or processes can bind to the same address without error + * (provided they all set the flag) but only the last one to bind will receive + * any traffic, in effect "stealing" the port from the previous listener. + */ + UV_UDP_REUSEADDR = 4, + /* + * Indicates that the message was received by recvmmsg, so the buffer provided + * must not be freed by the recv_cb callback. + */ + UV_UDP_MMSG_CHUNK = 8, + /* + * Indicates that the buffer provided has been fully utilized by recvmmsg and + * that it should now be freed by the recv_cb callback. When this flag is set + * in uv_udp_recv_cb, nread will always be 0 and addr will always be NULL. + */ + UV_UDP_MMSG_FREE = 16, + /* + * Indicates if IP_RECVERR/IPV6_RECVERR will be set when binding the handle. + * This sets IP_RECVERR for IPv4 and IPV6_RECVERR for IPv6 UDP sockets on + * Linux. This stops the Linux kernel from suppressing some ICMP error + * messages and enables full ICMP error reporting for faster failover. + * This flag is no-op on platforms other than Linux. + */ + UV_UDP_LINUX_RECVERR = 32, + /* + * Indicates that recvmmsg should be used, if available. + */ + UV_UDP_RECVMMSG = 256 +}; + +typedef void (*uv_udp_send_cb)(uv_udp_send_t* req, int status); +typedef void (*uv_udp_recv_cb)(uv_udp_t* handle, + ssize_t nread, + const uv_buf_t* buf, + const struct sockaddr* addr, + unsigned flags); + +/* uv_udp_t is a subclass of uv_handle_t. */ +struct uv_udp_s { + UV_HANDLE_FIELDS + /* read-only */ + /* + * Number of bytes queued for sending. This field strictly shows how much + * information is currently queued. + */ + size_t send_queue_size; + /* + * Number of send requests currently in the queue awaiting to be processed. + */ + size_t send_queue_count; + UV_UDP_PRIVATE_FIELDS +}; + +/* uv_udp_send_t is a subclass of uv_req_t. */ +struct uv_udp_send_s { + UV_REQ_FIELDS + uv_udp_t* handle; + uv_udp_send_cb cb; + UV_UDP_SEND_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_udp_init(uv_loop_t*, uv_udp_t* handle); +UV_EXTERN int uv_udp_init_ex(uv_loop_t*, uv_udp_t* handle, unsigned int flags); +UV_EXTERN int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock); +UV_EXTERN int uv_udp_bind(uv_udp_t* handle, + const struct sockaddr* addr, + unsigned int flags); +UV_EXTERN int uv_udp_connect(uv_udp_t* handle, const struct sockaddr* addr); + +UV_EXTERN int uv_udp_getpeername(const uv_udp_t* handle, + struct sockaddr* name, + int* namelen); +UV_EXTERN int uv_udp_getsockname(const uv_udp_t* handle, + struct sockaddr* name, + int* namelen); +UV_EXTERN int uv_udp_set_membership(uv_udp_t* handle, + const char* multicast_addr, + const char* interface_addr, + uv_membership membership); +UV_EXTERN int uv_udp_set_source_membership(uv_udp_t* handle, + const char* multicast_addr, + const char* interface_addr, + const char* source_addr, + uv_membership membership); +UV_EXTERN int uv_udp_set_multicast_loop(uv_udp_t* handle, int on); +UV_EXTERN int uv_udp_set_multicast_ttl(uv_udp_t* handle, int ttl); +UV_EXTERN int uv_udp_set_multicast_interface(uv_udp_t* handle, + const char* interface_addr); +UV_EXTERN int uv_udp_set_broadcast(uv_udp_t* handle, int on); +UV_EXTERN int uv_udp_set_ttl(uv_udp_t* handle, int ttl); +UV_EXTERN int uv_udp_send(uv_udp_send_t* req, + uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr, + uv_udp_send_cb send_cb); +UV_EXTERN int uv_udp_try_send(uv_udp_t* handle, + const uv_buf_t bufs[], + unsigned int nbufs, + const struct sockaddr* addr); +UV_EXTERN int uv_udp_recv_start(uv_udp_t* handle, + uv_alloc_cb alloc_cb, + uv_udp_recv_cb recv_cb); +UV_EXTERN int uv_udp_recv_stop(uv_udp_t* handle); +UV_EXTERN size_t uv_udp_get_send_queue_size(const uv_udp_t* handle); +UV_EXTERN size_t uv_udp_get_send_queue_count(const uv_udp_t* handle); + + +/* + * uv_tty_t is a subclass of uv_stream_t. + * + * Representing a stream for the console. + */ +struct uv_tty_s { + UV_HANDLE_FIELDS + UV_STREAM_FIELDS + UV_TTY_PRIVATE_FIELDS +}; + +typedef enum { + /* Initial/normal terminal mode */ + UV_TTY_MODE_NORMAL, + /* Raw input mode (On Windows, ENABLE_WINDOW_INPUT is also enabled) */ + UV_TTY_MODE_RAW, + /* Binary-safe I/O mode for IPC (Unix-only) */ + UV_TTY_MODE_IO +} uv_tty_mode_t; + +typedef enum { + /* + * The console supports handling of virtual terminal sequences + * (Windows10 new console, ConEmu) + */ + UV_TTY_SUPPORTED, + /* The console cannot process the virtual terminal sequence. (Legacy + * console) + */ + UV_TTY_UNSUPPORTED +} uv_tty_vtermstate_t; + + +UV_EXTERN int uv_tty_init(uv_loop_t*, uv_tty_t*, uv_file fd, int readable); +UV_EXTERN int uv_tty_set_mode(uv_tty_t*, uv_tty_mode_t mode); +UV_EXTERN int uv_tty_reset_mode(void); +UV_EXTERN int uv_tty_get_winsize(uv_tty_t*, int* width, int* height); +UV_EXTERN void uv_tty_set_vterm_state(uv_tty_vtermstate_t state); +UV_EXTERN int uv_tty_get_vterm_state(uv_tty_vtermstate_t* state); + +#ifdef __cplusplus +extern "C++" { + +inline int uv_tty_set_mode(uv_tty_t* handle, int mode) { + return uv_tty_set_mode(handle, static_cast(mode)); +} + +} +#endif + +UV_EXTERN uv_handle_type uv_guess_handle(uv_file file); + +/* + * uv_pipe_t is a subclass of uv_stream_t. + * + * Representing a pipe stream or pipe server. On Windows this is a Named + * Pipe. On Unix this is a Unix domain socket. + */ +struct uv_pipe_s { + UV_HANDLE_FIELDS + UV_STREAM_FIELDS + int ipc; /* non-zero if this pipe is used for passing handles */ + UV_PIPE_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_pipe_init(uv_loop_t*, uv_pipe_t* handle, int ipc); +UV_EXTERN int uv_pipe_open(uv_pipe_t*, uv_file file); +UV_EXTERN int uv_pipe_bind(uv_pipe_t* handle, const char* name); +UV_EXTERN void uv_pipe_connect(uv_connect_t* req, + uv_pipe_t* handle, + const char* name, + uv_connect_cb cb); +UV_EXTERN int uv_pipe_getsockname(const uv_pipe_t* handle, + char* buffer, + size_t* size); +UV_EXTERN int uv_pipe_getpeername(const uv_pipe_t* handle, + char* buffer, + size_t* size); +UV_EXTERN void uv_pipe_pending_instances(uv_pipe_t* handle, int count); +UV_EXTERN int uv_pipe_pending_count(uv_pipe_t* handle); +UV_EXTERN uv_handle_type uv_pipe_pending_type(uv_pipe_t* handle); +UV_EXTERN int uv_pipe_chmod(uv_pipe_t* handle, int flags); + + +struct uv_poll_s { + UV_HANDLE_FIELDS + uv_poll_cb poll_cb; + UV_POLL_PRIVATE_FIELDS +}; + +enum uv_poll_event { + UV_READABLE = 1, + UV_WRITABLE = 2, + UV_DISCONNECT = 4, + UV_PRIORITIZED = 8 +}; + +UV_EXTERN int uv_poll_init(uv_loop_t* loop, uv_poll_t* handle, int fd); +UV_EXTERN int uv_poll_init_socket(uv_loop_t* loop, + uv_poll_t* handle, + uv_os_sock_t socket); +UV_EXTERN int uv_poll_start(uv_poll_t* handle, int events, uv_poll_cb cb); +UV_EXTERN int uv_poll_stop(uv_poll_t* handle); + + +struct uv_prepare_s { + UV_HANDLE_FIELDS + UV_PREPARE_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_prepare_init(uv_loop_t*, uv_prepare_t* prepare); +UV_EXTERN int uv_prepare_start(uv_prepare_t* prepare, uv_prepare_cb cb); +UV_EXTERN int uv_prepare_stop(uv_prepare_t* prepare); + + +struct uv_check_s { + UV_HANDLE_FIELDS + UV_CHECK_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_check_init(uv_loop_t*, uv_check_t* check); +UV_EXTERN int uv_check_start(uv_check_t* check, uv_check_cb cb); +UV_EXTERN int uv_check_stop(uv_check_t* check); + + +struct uv_idle_s { + UV_HANDLE_FIELDS + UV_IDLE_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_idle_init(uv_loop_t*, uv_idle_t* idle); +UV_EXTERN int uv_idle_start(uv_idle_t* idle, uv_idle_cb cb); +UV_EXTERN int uv_idle_stop(uv_idle_t* idle); + + +struct uv_async_s { + UV_HANDLE_FIELDS + UV_ASYNC_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_async_init(uv_loop_t*, + uv_async_t* async, + uv_async_cb async_cb); +UV_EXTERN int uv_async_send(uv_async_t* async); + + +/* + * uv_timer_t is a subclass of uv_handle_t. + * + * Used to get woken up at a specified time in the future. + */ +struct uv_timer_s { + UV_HANDLE_FIELDS + UV_TIMER_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_timer_init(uv_loop_t*, uv_timer_t* handle); +UV_EXTERN int uv_timer_start(uv_timer_t* handle, + uv_timer_cb cb, + uint64_t timeout, + uint64_t repeat); +UV_EXTERN int uv_timer_stop(uv_timer_t* handle); +UV_EXTERN int uv_timer_again(uv_timer_t* handle); +UV_EXTERN void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat); +UV_EXTERN uint64_t uv_timer_get_repeat(const uv_timer_t* handle); + + +/* + * uv_getaddrinfo_t is a subclass of uv_req_t. + * + * Request object for uv_getaddrinfo. + */ +struct uv_getaddrinfo_s { + UV_REQ_FIELDS + /* read-only */ + uv_loop_t* loop; + /* struct addrinfo* addrinfo is marked as private, but it really isn't. */ + UV_GETADDRINFO_PRIVATE_FIELDS +}; + + +UV_EXTERN int uv_getaddrinfo(uv_loop_t* loop, + uv_getaddrinfo_t* req, + uv_getaddrinfo_cb getaddrinfo_cb, + const char* node, + const char* service, + const struct addrinfo* hints); +UV_EXTERN void uv_freeaddrinfo(struct addrinfo* ai); + + +/* +* uv_getnameinfo_t is a subclass of uv_req_t. +* +* Request object for uv_getnameinfo. +*/ +struct uv_getnameinfo_s { + UV_REQ_FIELDS + /* read-only */ + uv_loop_t* loop; + /* host and service are marked as private, but they really aren't. */ + UV_GETNAMEINFO_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_getnameinfo(uv_loop_t* loop, + uv_getnameinfo_t* req, + uv_getnameinfo_cb getnameinfo_cb, + const struct sockaddr* addr, + int flags); + + +/* uv_spawn() options. */ +typedef enum { + UV_IGNORE = 0x00, + UV_CREATE_PIPE = 0x01, + UV_INHERIT_FD = 0x02, + UV_INHERIT_STREAM = 0x04, + + /* + * When UV_CREATE_PIPE is specified, UV_READABLE_PIPE and UV_WRITABLE_PIPE + * determine the direction of flow, from the child process' perspective. Both + * flags may be specified to create a duplex data stream. + */ + UV_READABLE_PIPE = 0x10, + UV_WRITABLE_PIPE = 0x20, + + /* + * When UV_CREATE_PIPE is specified, specifying UV_NONBLOCK_PIPE opens the + * handle in non-blocking mode in the child. This may cause loss of data, + * if the child is not designed to handle to encounter this mode, + * but can also be significantly more efficient. + */ + UV_NONBLOCK_PIPE = 0x40, + UV_OVERLAPPED_PIPE = 0x40 /* old name, for compatibility */ +} uv_stdio_flags; + +typedef struct uv_stdio_container_s { + uv_stdio_flags flags; + + union { + uv_stream_t* stream; + int fd; + } data; +} uv_stdio_container_t; + +typedef struct uv_process_options_s { + uv_exit_cb exit_cb; /* Called after the process exits. */ + const char* file; /* Path to program to execute. */ + /* + * Command line arguments. args[0] should be the path to the program. On + * Windows this uses CreateProcess which concatenates the arguments into a + * string this can cause some strange errors. See the note at + * windows_verbatim_arguments. + */ + char** args; + /* + * This will be set as the environ variable in the subprocess. If this is + * NULL then the parents environ will be used. + */ + char** env; + /* + * If non-null this represents a directory the subprocess should execute + * in. Stands for current working directory. + */ + const char* cwd; + /* + * Various flags that control how uv_spawn() behaves. See the definition of + * `enum uv_process_flags` below. + */ + unsigned int flags; + /* + * The `stdio` field points to an array of uv_stdio_container_t structs that + * describe the file descriptors that will be made available to the child + * process. The convention is that stdio[0] points to stdin, fd 1 is used for + * stdout, and fd 2 is stderr. + * + * Note that on windows file descriptors greater than 2 are available to the + * child process only if the child processes uses the MSVCRT runtime. + */ + int stdio_count; + uv_stdio_container_t* stdio; + /* + * Libuv can change the child process' user/group id. This happens only when + * the appropriate bits are set in the flags fields. This is not supported on + * windows; uv_spawn() will fail and set the error to UV_ENOTSUP. + */ + uv_uid_t uid; + uv_gid_t gid; +} uv_process_options_t; + +/* + * These are the flags that can be used for the uv_process_options.flags field. + */ +enum uv_process_flags { + /* + * Set the child process' user id. The user id is supplied in the `uid` field + * of the options struct. This does not work on windows; setting this flag + * will cause uv_spawn() to fail. + */ + UV_PROCESS_SETUID = (1 << 0), + /* + * Set the child process' group id. The user id is supplied in the `gid` + * field of the options struct. This does not work on windows; setting this + * flag will cause uv_spawn() to fail. + */ + UV_PROCESS_SETGID = (1 << 1), + /* + * Do not wrap any arguments in quotes, or perform any other escaping, when + * converting the argument list into a command line string. This option is + * only meaningful on Windows systems. On Unix it is silently ignored. + */ + UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS = (1 << 2), + /* + * Spawn the child process in a detached state - this will make it a process + * group leader, and will effectively enable the child to keep running after + * the parent exits. Note that the child process will still keep the + * parent's event loop alive unless the parent process calls uv_unref() on + * the child's process handle. + */ + UV_PROCESS_DETACHED = (1 << 3), + /* + * Hide the subprocess window that would normally be created. This option is + * only meaningful on Windows systems. On Unix it is silently ignored. + */ + UV_PROCESS_WINDOWS_HIDE = (1 << 4), + /* + * Hide the subprocess console window that would normally be created. This + * option is only meaningful on Windows systems. On Unix it is silently + * ignored. + */ + UV_PROCESS_WINDOWS_HIDE_CONSOLE = (1 << 5), + /* + * Hide the subprocess GUI window that would normally be created. This + * option is only meaningful on Windows systems. On Unix it is silently + * ignored. + */ + UV_PROCESS_WINDOWS_HIDE_GUI = (1 << 6) +}; + +/* + * uv_process_t is a subclass of uv_handle_t. + */ +struct uv_process_s { + UV_HANDLE_FIELDS + uv_exit_cb exit_cb; + int pid; + UV_PROCESS_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_spawn(uv_loop_t* loop, + uv_process_t* handle, + const uv_process_options_t* options); +UV_EXTERN int uv_process_kill(uv_process_t*, int signum); +UV_EXTERN int uv_kill(int pid, int signum); +UV_EXTERN uv_pid_t uv_process_get_pid(const uv_process_t*); + + +/* + * uv_work_t is a subclass of uv_req_t. + */ +struct uv_work_s { + UV_REQ_FIELDS + uv_loop_t* loop; + uv_work_cb work_cb; + uv_after_work_cb after_work_cb; + UV_WORK_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_queue_work(uv_loop_t* loop, + uv_work_t* req, + uv_work_cb work_cb, + uv_after_work_cb after_work_cb); + +UV_EXTERN int uv_cancel(uv_req_t* req); + + +struct uv_cpu_times_s { + uint64_t user; /* milliseconds */ + uint64_t nice; /* milliseconds */ + uint64_t sys; /* milliseconds */ + uint64_t idle; /* milliseconds */ + uint64_t irq; /* milliseconds */ +}; + +struct uv_cpu_info_s { + char* model; + int speed; + struct uv_cpu_times_s cpu_times; +}; + +struct uv_interface_address_s { + char* name; + char phys_addr[6]; + int is_internal; + union { + struct sockaddr_in address4; + struct sockaddr_in6 address6; + } address; + union { + struct sockaddr_in netmask4; + struct sockaddr_in6 netmask6; + } netmask; +}; + +struct uv_passwd_s { + char* username; + unsigned long uid; + unsigned long gid; + char* shell; + char* homedir; +}; + +struct uv_utsname_s { + char sysname[256]; + char release[256]; + char version[256]; + char machine[256]; + /* This struct does not contain the nodename and domainname fields present in + the utsname type. domainname is a GNU extension. Both fields are referred + to as meaningless in the docs. */ +}; + +struct uv_statfs_s { + uint64_t f_type; + uint64_t f_bsize; + uint64_t f_blocks; + uint64_t f_bfree; + uint64_t f_bavail; + uint64_t f_files; + uint64_t f_ffree; + uint64_t f_spare[4]; +}; + +typedef enum { + UV_DIRENT_UNKNOWN, + UV_DIRENT_FILE, + UV_DIRENT_DIR, + UV_DIRENT_LINK, + UV_DIRENT_FIFO, + UV_DIRENT_SOCKET, + UV_DIRENT_CHAR, + UV_DIRENT_BLOCK +} uv_dirent_type_t; + +struct uv_dirent_s { + const char* name; + uv_dirent_type_t type; +}; + +UV_EXTERN char** uv_setup_args(int argc, char** argv); +UV_EXTERN int uv_get_process_title(char* buffer, size_t size); +UV_EXTERN int uv_set_process_title(const char* title); +UV_EXTERN int uv_resident_set_memory(size_t* rss); +UV_EXTERN int uv_uptime(double* uptime); +UV_EXTERN uv_os_fd_t uv_get_osfhandle(int fd); +UV_EXTERN int uv_open_osfhandle(uv_os_fd_t os_fd); + +typedef struct { + long tv_sec; + long tv_usec; +} uv_timeval_t; + +typedef struct { + int64_t tv_sec; + int32_t tv_usec; +} uv_timeval64_t; + +typedef struct { + uv_timeval_t ru_utime; /* user CPU time used */ + uv_timeval_t ru_stime; /* system CPU time used */ + uint64_t ru_maxrss; /* maximum resident set size */ + uint64_t ru_ixrss; /* integral shared memory size */ + uint64_t ru_idrss; /* integral unshared data size */ + uint64_t ru_isrss; /* integral unshared stack size */ + uint64_t ru_minflt; /* page reclaims (soft page faults) */ + uint64_t ru_majflt; /* page faults (hard page faults) */ + uint64_t ru_nswap; /* swaps */ + uint64_t ru_inblock; /* block input operations */ + uint64_t ru_oublock; /* block output operations */ + uint64_t ru_msgsnd; /* IPC messages sent */ + uint64_t ru_msgrcv; /* IPC messages received */ + uint64_t ru_nsignals; /* signals received */ + uint64_t ru_nvcsw; /* voluntary context switches */ + uint64_t ru_nivcsw; /* involuntary context switches */ +} uv_rusage_t; + +UV_EXTERN int uv_getrusage(uv_rusage_t* rusage); + +UV_EXTERN int uv_os_homedir(char* buffer, size_t* size); +UV_EXTERN int uv_os_tmpdir(char* buffer, size_t* size); +UV_EXTERN int uv_os_get_passwd(uv_passwd_t* pwd); +UV_EXTERN void uv_os_free_passwd(uv_passwd_t* pwd); +UV_EXTERN uv_pid_t uv_os_getpid(void); +UV_EXTERN uv_pid_t uv_os_getppid(void); + +#if defined(__PASE__) +/* On IBM i PASE, the highest process priority is -10 */ +# define UV_PRIORITY_LOW 39 /* RUNPTY(99) */ +# define UV_PRIORITY_BELOW_NORMAL 15 /* RUNPTY(50) */ +# define UV_PRIORITY_NORMAL 0 /* RUNPTY(20) */ +# define UV_PRIORITY_ABOVE_NORMAL -4 /* RUNTY(12) */ +# define UV_PRIORITY_HIGH -7 /* RUNPTY(6) */ +# define UV_PRIORITY_HIGHEST -10 /* RUNPTY(1) */ +#else +# define UV_PRIORITY_LOW 19 +# define UV_PRIORITY_BELOW_NORMAL 10 +# define UV_PRIORITY_NORMAL 0 +# define UV_PRIORITY_ABOVE_NORMAL -7 +# define UV_PRIORITY_HIGH -14 +# define UV_PRIORITY_HIGHEST -20 +#endif + +UV_EXTERN int uv_os_getpriority(uv_pid_t pid, int* priority); +UV_EXTERN int uv_os_setpriority(uv_pid_t pid, int priority); + +UV_EXTERN int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count); +UV_EXTERN void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count); + +UV_EXTERN int uv_interface_addresses(uv_interface_address_t** addresses, + int* count); +UV_EXTERN void uv_free_interface_addresses(uv_interface_address_t* addresses, + int count); + +struct uv_env_item_s { + char* name; + char* value; +}; + +UV_EXTERN int uv_os_environ(uv_env_item_t** envitems, int* count); +UV_EXTERN void uv_os_free_environ(uv_env_item_t* envitems, int count); +UV_EXTERN int uv_os_getenv(const char* name, char* buffer, size_t* size); +UV_EXTERN int uv_os_setenv(const char* name, const char* value); +UV_EXTERN int uv_os_unsetenv(const char* name); + +#ifdef MAXHOSTNAMELEN +# define UV_MAXHOSTNAMESIZE (MAXHOSTNAMELEN + 1) +#else + /* + Fallback for the maximum hostname size, including the null terminator. The + Windows gethostname() documentation states that 256 bytes will always be + large enough to hold the null-terminated hostname. + */ +# define UV_MAXHOSTNAMESIZE 256 +#endif + +UV_EXTERN int uv_os_gethostname(char* buffer, size_t* size); + +UV_EXTERN int uv_os_uname(uv_utsname_t* buffer); + + +typedef enum { + UV_FS_UNKNOWN = -1, + UV_FS_CUSTOM, + UV_FS_OPEN, + UV_FS_CLOSE, + UV_FS_READ, + UV_FS_WRITE, + UV_FS_SENDFILE, + UV_FS_STAT, + UV_FS_LSTAT, + UV_FS_FSTAT, + UV_FS_FTRUNCATE, + UV_FS_UTIME, + UV_FS_FUTIME, + UV_FS_ACCESS, + UV_FS_CHMOD, + UV_FS_FCHMOD, + UV_FS_FSYNC, + UV_FS_FDATASYNC, + UV_FS_UNLINK, + UV_FS_RMDIR, + UV_FS_MKDIR, + UV_FS_MKDTEMP, + UV_FS_RENAME, + UV_FS_SCANDIR, + UV_FS_LINK, + UV_FS_SYMLINK, + UV_FS_READLINK, + UV_FS_CHOWN, + UV_FS_FCHOWN, + UV_FS_REALPATH, + UV_FS_COPYFILE, + UV_FS_LCHOWN, + UV_FS_OPENDIR, + UV_FS_READDIR, + UV_FS_CLOSEDIR, + UV_FS_STATFS, + UV_FS_MKSTEMP, + UV_FS_LUTIME +} uv_fs_type; + +struct uv_dir_s { + uv_dirent_t* dirents; + size_t nentries; + void* reserved[4]; + UV_DIR_PRIVATE_FIELDS +}; + +/* uv_fs_t is a subclass of uv_req_t. */ +struct uv_fs_s { + UV_REQ_FIELDS + uv_fs_type fs_type; + uv_loop_t* loop; + uv_fs_cb cb; + ssize_t result; + void* ptr; + const char* path; + uv_stat_t statbuf; /* Stores the result of uv_fs_stat() and uv_fs_fstat(). */ + UV_FS_PRIVATE_FIELDS +}; + +UV_EXTERN uv_fs_type uv_fs_get_type(const uv_fs_t*); +UV_EXTERN ssize_t uv_fs_get_result(const uv_fs_t*); +UV_EXTERN void* uv_fs_get_ptr(const uv_fs_t*); +UV_EXTERN const char* uv_fs_get_path(const uv_fs_t*); +UV_EXTERN uv_stat_t* uv_fs_get_statbuf(uv_fs_t*); + +UV_EXTERN void uv_fs_req_cleanup(uv_fs_t* req); +UV_EXTERN int uv_fs_close(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_fs_cb cb); +UV_EXTERN int uv_fs_open(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int flags, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_read(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + const uv_buf_t bufs[], + unsigned int nbufs, + int64_t offset, + uv_fs_cb cb); +UV_EXTERN int uv_fs_unlink(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_write(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + const uv_buf_t bufs[], + unsigned int nbufs, + int64_t offset, + uv_fs_cb cb); +/* + * This flag can be used with uv_fs_copyfile() to return an error if the + * destination already exists. + */ +#define UV_FS_COPYFILE_EXCL 0x0001 + +/* + * This flag can be used with uv_fs_copyfile() to attempt to create a reflink. + * If copy-on-write is not supported, a fallback copy mechanism is used. + */ +#define UV_FS_COPYFILE_FICLONE 0x0002 + +/* + * This flag can be used with uv_fs_copyfile() to attempt to create a reflink. + * If copy-on-write is not supported, an error is returned. + */ +#define UV_FS_COPYFILE_FICLONE_FORCE 0x0004 + +UV_EXTERN int uv_fs_copyfile(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + int flags, + uv_fs_cb cb); +UV_EXTERN int uv_fs_mkdir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_mkdtemp(uv_loop_t* loop, + uv_fs_t* req, + const char* tpl, + uv_fs_cb cb); +UV_EXTERN int uv_fs_mkstemp(uv_loop_t* loop, + uv_fs_t* req, + const char* tpl, + uv_fs_cb cb); +UV_EXTERN int uv_fs_rmdir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_scandir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int flags, + uv_fs_cb cb); +UV_EXTERN int uv_fs_scandir_next(uv_fs_t* req, + uv_dirent_t* ent); +UV_EXTERN int uv_fs_opendir(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_readdir(uv_loop_t* loop, + uv_fs_t* req, + uv_dir_t* dir, + uv_fs_cb cb); +UV_EXTERN int uv_fs_closedir(uv_loop_t* loop, + uv_fs_t* req, + uv_dir_t* dir, + uv_fs_cb cb); +UV_EXTERN int uv_fs_stat(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fstat(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_fs_cb cb); +UV_EXTERN int uv_fs_rename(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fsync(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fdatasync(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_fs_cb cb); +UV_EXTERN int uv_fs_ftruncate(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + int64_t offset, + uv_fs_cb cb); +UV_EXTERN int uv_fs_sendfile(uv_loop_t* loop, + uv_fs_t* req, + uv_file out_fd, + uv_file in_fd, + int64_t in_offset, + size_t length, + uv_fs_cb cb); +UV_EXTERN int uv_fs_access(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_chmod(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_utime(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + double atime, + double mtime, + uv_fs_cb cb); +UV_EXTERN int uv_fs_futime(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + double atime, + double mtime, + uv_fs_cb cb); +UV_EXTERN int uv_fs_lstat(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_link(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + uv_fs_cb cb); + +/* + * This flag can be used with uv_fs_symlink() on Windows to specify whether + * path argument points to a directory. + */ +#define UV_FS_SYMLINK_DIR 0x0001 + +/* + * This flag can be used with uv_fs_symlink() on Windows to specify whether + * the symlink is to be created using junction points. + */ +#define UV_FS_SYMLINK_JUNCTION 0x0002 + +UV_EXTERN int uv_fs_symlink(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + const char* new_path, + int flags, + uv_fs_cb cb); +UV_EXTERN int uv_fs_readlink(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_realpath(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fchmod(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + int mode, + uv_fs_cb cb); +UV_EXTERN int uv_fs_chown(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_uid_t uid, + uv_gid_t gid, + uv_fs_cb cb); +UV_EXTERN int uv_fs_fchown(uv_loop_t* loop, + uv_fs_t* req, + uv_file file, + uv_uid_t uid, + uv_gid_t gid, + uv_fs_cb cb); +UV_EXTERN int uv_fs_lchown(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_uid_t uid, + uv_gid_t gid, + uv_fs_cb cb); +UV_EXTERN int uv_fs_statfs(uv_loop_t* loop, + uv_fs_t* req, + const char* path, + uv_fs_cb cb); + + +enum uv_fs_event { + UV_RENAME = 1, + UV_CHANGE = 2 +}; + + +struct uv_fs_event_s { + UV_HANDLE_FIELDS + /* private */ + char* path; + UV_FS_EVENT_PRIVATE_FIELDS +}; + + +/* + * uv_fs_stat() based polling file watcher. + */ +struct uv_fs_poll_s { + UV_HANDLE_FIELDS + /* Private, don't touch. */ + void* poll_ctx; +}; + +UV_EXTERN int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle); +UV_EXTERN int uv_fs_poll_start(uv_fs_poll_t* handle, + uv_fs_poll_cb poll_cb, + const char* path, + unsigned int interval); +UV_EXTERN int uv_fs_poll_stop(uv_fs_poll_t* handle); +UV_EXTERN int uv_fs_poll_getpath(uv_fs_poll_t* handle, + char* buffer, + size_t* size); + + +struct uv_signal_s { + UV_HANDLE_FIELDS + uv_signal_cb signal_cb; + int signum; + UV_SIGNAL_PRIVATE_FIELDS +}; + +UV_EXTERN int uv_signal_init(uv_loop_t* loop, uv_signal_t* handle); +UV_EXTERN int uv_signal_start(uv_signal_t* handle, + uv_signal_cb signal_cb, + int signum); +UV_EXTERN int uv_signal_start_oneshot(uv_signal_t* handle, + uv_signal_cb signal_cb, + int signum); +UV_EXTERN int uv_signal_stop(uv_signal_t* handle); + +UV_EXTERN void uv_loadavg(double avg[3]); + + +/* + * Flags to be passed to uv_fs_event_start(). + */ +enum uv_fs_event_flags { + /* + * By default, if the fs event watcher is given a directory name, we will + * watch for all events in that directory. This flags overrides this behavior + * and makes fs_event report only changes to the directory entry itself. This + * flag does not affect individual files watched. + * This flag is currently not implemented yet on any backend. + */ + UV_FS_EVENT_WATCH_ENTRY = 1, + + /* + * By default uv_fs_event will try to use a kernel interface such as inotify + * or kqueue to detect events. This may not work on remote filesystems such + * as NFS mounts. This flag makes fs_event fall back to calling stat() on a + * regular interval. + * This flag is currently not implemented yet on any backend. + */ + UV_FS_EVENT_STAT = 2, + + /* + * By default, event watcher, when watching directory, is not registering + * (is ignoring) changes in it's subdirectories. + * This flag will override this behaviour on platforms that support it. + */ + UV_FS_EVENT_RECURSIVE = 4 +}; + + +UV_EXTERN int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle); +UV_EXTERN int uv_fs_event_start(uv_fs_event_t* handle, + uv_fs_event_cb cb, + const char* path, + unsigned int flags); +UV_EXTERN int uv_fs_event_stop(uv_fs_event_t* handle); +UV_EXTERN int uv_fs_event_getpath(uv_fs_event_t* handle, + char* buffer, + size_t* size); + +UV_EXTERN int uv_ip4_addr(const char* ip, int port, struct sockaddr_in* addr); +UV_EXTERN int uv_ip6_addr(const char* ip, int port, struct sockaddr_in6* addr); + +UV_EXTERN int uv_ip4_name(const struct sockaddr_in* src, char* dst, size_t size); +UV_EXTERN int uv_ip6_name(const struct sockaddr_in6* src, char* dst, size_t size); + +UV_EXTERN int uv_inet_ntop(int af, const void* src, char* dst, size_t size); +UV_EXTERN int uv_inet_pton(int af, const char* src, void* dst); + + +struct uv_random_s { + UV_REQ_FIELDS + /* read-only */ + uv_loop_t* loop; + /* private */ + int status; + void* buf; + size_t buflen; + uv_random_cb cb; + struct uv__work work_req; +}; + +UV_EXTERN int uv_random(uv_loop_t* loop, + uv_random_t* req, + void *buf, + size_t buflen, + unsigned flags, /* For future extension; must be 0. */ + uv_random_cb cb); + +#if defined(IF_NAMESIZE) +# define UV_IF_NAMESIZE (IF_NAMESIZE + 1) +#elif defined(IFNAMSIZ) +# define UV_IF_NAMESIZE (IFNAMSIZ + 1) +#else +# define UV_IF_NAMESIZE (16 + 1) +#endif + +UV_EXTERN int uv_if_indextoname(unsigned int ifindex, + char* buffer, + size_t* size); +UV_EXTERN int uv_if_indextoiid(unsigned int ifindex, + char* buffer, + size_t* size); + +UV_EXTERN int uv_exepath(char* buffer, size_t* size); + +UV_EXTERN int uv_cwd(char* buffer, size_t* size); + +UV_EXTERN int uv_chdir(const char* dir); + +UV_EXTERN uint64_t uv_get_free_memory(void); +UV_EXTERN uint64_t uv_get_total_memory(void); +UV_EXTERN uint64_t uv_get_constrained_memory(void); + +UV_EXTERN uint64_t uv_hrtime(void); +UV_EXTERN void uv_sleep(unsigned int msec); + +UV_EXTERN void uv_disable_stdio_inheritance(void); + +UV_EXTERN int uv_dlopen(const char* filename, uv_lib_t* lib); +UV_EXTERN void uv_dlclose(uv_lib_t* lib); +UV_EXTERN int uv_dlsym(uv_lib_t* lib, const char* name, void** ptr); +UV_EXTERN const char* uv_dlerror(const uv_lib_t* lib); + +UV_EXTERN int uv_mutex_init(uv_mutex_t* handle); +UV_EXTERN int uv_mutex_init_recursive(uv_mutex_t* handle); +UV_EXTERN void uv_mutex_destroy(uv_mutex_t* handle); +UV_EXTERN void uv_mutex_lock(uv_mutex_t* handle); +UV_EXTERN int uv_mutex_trylock(uv_mutex_t* handle); +UV_EXTERN void uv_mutex_unlock(uv_mutex_t* handle); + +UV_EXTERN int uv_rwlock_init(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_destroy(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_rdlock(uv_rwlock_t* rwlock); +UV_EXTERN int uv_rwlock_tryrdlock(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_rdunlock(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_wrlock(uv_rwlock_t* rwlock); +UV_EXTERN int uv_rwlock_trywrlock(uv_rwlock_t* rwlock); +UV_EXTERN void uv_rwlock_wrunlock(uv_rwlock_t* rwlock); + +UV_EXTERN int uv_sem_init(uv_sem_t* sem, unsigned int value); +UV_EXTERN void uv_sem_destroy(uv_sem_t* sem); +UV_EXTERN void uv_sem_post(uv_sem_t* sem); +UV_EXTERN void uv_sem_wait(uv_sem_t* sem); +UV_EXTERN int uv_sem_trywait(uv_sem_t* sem); + +UV_EXTERN int uv_cond_init(uv_cond_t* cond); +UV_EXTERN void uv_cond_destroy(uv_cond_t* cond); +UV_EXTERN void uv_cond_signal(uv_cond_t* cond); +UV_EXTERN void uv_cond_broadcast(uv_cond_t* cond); + +UV_EXTERN int uv_barrier_init(uv_barrier_t* barrier, unsigned int count); +UV_EXTERN void uv_barrier_destroy(uv_barrier_t* barrier); +UV_EXTERN int uv_barrier_wait(uv_barrier_t* barrier); + +UV_EXTERN void uv_cond_wait(uv_cond_t* cond, uv_mutex_t* mutex); +UV_EXTERN int uv_cond_timedwait(uv_cond_t* cond, + uv_mutex_t* mutex, + uint64_t timeout); + +UV_EXTERN void uv_once(uv_once_t* guard, void (*callback)(void)); + +UV_EXTERN int uv_key_create(uv_key_t* key); +UV_EXTERN void uv_key_delete(uv_key_t* key); +UV_EXTERN void* uv_key_get(uv_key_t* key); +UV_EXTERN void uv_key_set(uv_key_t* key, void* value); + +UV_EXTERN int uv_gettimeofday(uv_timeval64_t* tv); + +typedef void (*uv_thread_cb)(void* arg); + +UV_EXTERN int uv_thread_create(uv_thread_t* tid, uv_thread_cb entry, void* arg); + +typedef enum { + UV_THREAD_NO_FLAGS = 0x00, + UV_THREAD_HAS_STACK_SIZE = 0x01 +} uv_thread_create_flags; + +struct uv_thread_options_s { + unsigned int flags; + size_t stack_size; + /* More fields may be added at any time. */ +}; + +typedef struct uv_thread_options_s uv_thread_options_t; + +UV_EXTERN int uv_thread_create_ex(uv_thread_t* tid, + const uv_thread_options_t* params, + uv_thread_cb entry, + void* arg); +UV_EXTERN uv_thread_t uv_thread_self(void); +UV_EXTERN int uv_thread_join(uv_thread_t *tid); +UV_EXTERN int uv_thread_equal(const uv_thread_t* t1, const uv_thread_t* t2); + +/* The presence of these unions force similar struct layout. */ +#define XX(_, name) uv_ ## name ## _t name; +union uv_any_handle { + UV_HANDLE_TYPE_MAP(XX) +}; + +union uv_any_req { + UV_REQ_TYPE_MAP(XX) +}; +#undef XX + + +struct uv_loop_s { + /* User data - use this for whatever. */ + void* data; + /* Loop reference counting. */ + unsigned int active_handles; + void* handle_queue[2]; + union { + void* unused; + unsigned int count; + } active_reqs; + /* Internal storage for future extensions. */ + void* internal_fields; + /* Internal flag to signal loop stop. */ + unsigned int stop_flag; + UV_LOOP_PRIVATE_FIELDS +}; + +UV_EXTERN void* uv_loop_get_data(const uv_loop_t*); +UV_EXTERN void uv_loop_set_data(uv_loop_t*, void* data); + +/* Don't export the private CPP symbols. */ +#undef UV_HANDLE_TYPE_PRIVATE +#undef UV_REQ_TYPE_PRIVATE +#undef UV_REQ_PRIVATE_FIELDS +#undef UV_STREAM_PRIVATE_FIELDS +#undef UV_TCP_PRIVATE_FIELDS +#undef UV_PREPARE_PRIVATE_FIELDS +#undef UV_CHECK_PRIVATE_FIELDS +#undef UV_IDLE_PRIVATE_FIELDS +#undef UV_ASYNC_PRIVATE_FIELDS +#undef UV_TIMER_PRIVATE_FIELDS +#undef UV_GETADDRINFO_PRIVATE_FIELDS +#undef UV_GETNAMEINFO_PRIVATE_FIELDS +#undef UV_FS_REQ_PRIVATE_FIELDS +#undef UV_WORK_PRIVATE_FIELDS +#undef UV_FS_EVENT_PRIVATE_FIELDS +#undef UV_SIGNAL_PRIVATE_FIELDS +#undef UV_LOOP_PRIVATE_FIELDS +#undef UV_LOOP_PRIVATE_PLATFORM_FIELDS +#undef UV__ERR + +#ifdef __cplusplus +} +#endif +#endif /* UV_H */ diff --git a/third_party/libuv/libuv.ndk.json b/third_party/libuv/libuv.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..aeff061feeb2d620d78d62283890ab0ecc1f7516 --- /dev/null +++ b/third_party/libuv/libuv.ndk.json @@ -0,0 +1,284 @@ +[ + {"name":"uv_version"}, + {"name":"uv_version_string"}, + {"name":"uv_replace_allocator"}, + {"name":"uv_default_loop"}, + {"name":"uv_loop_init"}, + {"name":"uv_loop_close"}, + {"name":"uv_loop_new"}, + {"name":"uv_loop_delete"}, + {"name":"uv_loop_size"}, + {"name":"uv_loop_alive"}, + {"name":"uv_loop_configure"}, + {"name":"uv_loop_fork"}, + {"name":"uv_run"}, + {"name":"uv_stop"}, + {"name":"uv_ref"}, + {"name":"uv_unref"}, + {"name":"uv_has_ref"}, + {"name":"uv_update_time"}, + {"name":"uv_now"}, + {"name":"uv_backend_fd"}, + {"name":"uv_backend_timeout"}, + {"name":"uv_translate_sys_error"}, + {"name":"uv_strerror"}, + {"name":"uv_strerror_r"}, + {"name":"uv_err_name"}, + {"name":"uv_err_name_r"}, + {"name":"uv_shutdown"}, + {"name":"uv_handle_size"}, + {"name":"uv_handle_get_type"}, + {"name":"uv_handle_type_name"}, + {"name":"uv_handle_get_data"}, + {"name":"uv_handle_get_loop"}, + {"name":"uv_handle_set_data"}, + {"name":"uv_req_size"}, + {"name":"uv_req_get_data"}, + {"name":"uv_req_set_data"}, + {"name":"uv_req_get_type"}, + {"name":"uv_req_type_name"}, + {"name":"uv_is_active"}, + {"name":"uv_walk"}, + {"name":"uv_print_all_handles"}, + {"name":"uv_print_active_handles"}, + {"name":"uv_close"}, + {"name":"uv_send_buffer_size"}, + {"name":"uv_recv_buffer_size"}, + {"name":"uv_fileno"}, + {"name":"uv_buf_init"}, + {"name":"uv_stream_get_write_queue_size"}, + {"name":"uv_listen"}, + {"name":"uv_accept"}, + {"name":"uv_read_start"}, + {"name":"uv_read_stop"}, + {"name":"uv_write"}, + {"name":"uv_write2"}, + {"name":"uv_try_write"}, + {"name":"uv_is_readable"}, + {"name":"uv_is_writable"}, + {"name":"uv_stream_set_blocking"}, + {"name":"uv_is_closing"}, + {"name":"uv_tcp_init"}, + {"name":"uv_tcp_init_ex"}, + {"name":"uv_tcp_open"}, + {"name":"uv_tcp_nodelay"}, + {"name":"uv_tcp_keepalive"}, + {"name":"uv_tcp_simultaneous_accepts"}, + {"name":"uv_tcp_bind"}, + {"name":"uv_tcp_getsockname"}, + {"name":"uv_tcp_getpeername"}, + {"name":"uv_tcp_close_reset"}, + {"name":"uv_tcp_connect"}, + {"name":"uv_udp_init"}, + {"name":"uv_udp_init_ex"}, + {"name":"uv_udp_open"}, + {"name":"uv_udp_bind"}, + {"name":"uv_udp_connect"}, + {"name":"uv_udp_getpeername"}, + {"name":"uv_udp_getsockname"}, + {"name":"uv_udp_set_membership"}, + {"name":"uv_udp_set_source_membership"}, + {"name":"uv_udp_set_multicast_loop"}, + {"name":"uv_udp_set_multicast_ttl"}, + {"name":"uv_udp_set_multicast_interface"}, + {"name":"uv_udp_set_broadcast"}, + {"name":"uv_udp_set_ttl"}, + {"name":"uv_udp_send"}, + {"name":"uv_udp_try_send"}, + {"name":"uv_udp_recv_start"}, + {"name":"uv_udp_recv_stop"}, + {"name":"uv_udp_get_send_queue_size"}, + {"name":"uv_udp_get_send_queue_count"}, + {"name":"uv_tty_init"}, + {"name":"uv_tty_set_mode"}, + {"name":"uv_tty_reset_mode"}, + {"name":"uv_tty_get_winsize"}, + {"name":"uv_tty_set_vterm_state"}, + {"name":"uv_tty_get_vterm_state"}, + {"name":"uv_guess_handle"}, + {"name":"uv_pipe_init"}, + {"name":"uv_pipe_open"}, + {"name":"uv_pipe_bind"}, + {"name":"uv_pipe_connect"}, + {"name":"uv_pipe_getsockname"}, + {"name":"uv_pipe_getpeername"}, + {"name":"uv_pipe_pending_instances"}, + {"name":"uv_pipe_pending_count"}, + {"name":"uv_pipe_pending_type"}, + {"name":"uv_pipe_chmod"}, + {"name":"uv_poll_init"}, + {"name":"uv_poll_init_socket"}, + {"name":"uv_poll_start"}, + {"name":"uv_poll_stop"}, + {"name":"uv_prepare_init"}, + {"name":"uv_prepare_start"}, + {"name":"uv_prepare_stop"}, + {"name":"uv_check_init"}, + {"name":"uv_check_start"}, + {"name":"uv_check_stop"}, + {"name":"uv_idle_init"}, + {"name":"uv_idle_start"}, + {"name":"uv_idle_stop"}, + {"name":"uv_async_init"}, + {"name":"uv_async_send"}, + {"name":"uv_timer_init"}, + {"name":"uv_timer_start"}, + {"name":"uv_timer_stop"}, + {"name":"uv_timer_again"}, + {"name":"uv_timer_set_repeat"}, + {"name":"uv_timer_get_repeat"}, + {"name":"uv_getaddrinfo"}, + {"name":"uv_freeaddrinfo"}, + {"name":"uv_getnameinfo"}, + {"name":"uv_spawn"}, + {"name":"uv_process_kill"}, + {"name":"uv_kill"}, + {"name":"uv_process_get_pid"}, + {"name":"uv_queue_work"}, + {"name":"uv_cancel"}, + {"name":"uv_setup_args"}, + {"name":"uv_get_process_title"}, + {"name":"uv_set_process_title"}, + {"name":"uv_resident_set_memory"}, + {"name":"uv_uptime"}, + {"name":"uv_get_osfhandle"}, + {"name":"uv_open_osfhandle"}, + {"name":"uv_getrusage"}, + {"name":"uv_os_homedir"}, + {"name":"uv_os_tmpdir"}, + {"name":"uv_os_get_passwd"}, + {"name":"uv_os_free_passwd"}, + {"name":"uv_os_getpid"}, + {"name":"uv_os_getppid"}, + {"name":"uv_os_getpriority"}, + {"name":"uv_os_setpriority"}, + {"name":"uv_cpu_info"}, + {"name":"uv_free_cpu_info"}, + {"name":"uv_interface_addresses"}, + {"name":"uv_free_interface_addresses"}, + {"name":"uv_os_environ"}, + {"name":"uv_os_free_environ"}, + {"name":"uv_os_getenv"}, + {"name":"uv_os_setenv"}, + {"name":"uv_os_unsetenv"}, + {"name":"uv_os_gethostname"}, + {"name":"uv_os_uname"}, + {"name":"uv_fs_get_type"}, + {"name":"uv_fs_get_result"}, + {"name":"uv_fs_get_ptr"}, + {"name":"uv_fs_get_path"}, + {"name":"uv_fs_get_statbuf"}, + {"name":"uv_fs_req_cleanup"}, + {"name":"uv_fs_close"}, + {"name":"uv_fs_open"}, + {"name":"uv_fs_read"}, + {"name":"uv_fs_unlink"}, + {"name":"uv_fs_write"}, + {"name":"uv_fs_copyfile"}, + {"name":"uv_fs_mkdir"}, + {"name":"uv_fs_mkdtemp"}, + {"name":"uv_fs_mkstemp"}, + {"name":"uv_fs_rmdir"}, + {"name":"uv_fs_scandir"}, + {"name":"uv_fs_scandir_next"}, + {"name":"uv_fs_opendir"}, + {"name":"uv_fs_readdir"}, + {"name":"uv_fs_closedir"}, + {"name":"uv_fs_stat"}, + {"name":"uv_fs_fstat"}, + {"name":"uv_fs_rename"}, + {"name":"uv_fs_fsync"}, + {"name":"uv_fs_fdatasync"}, + {"name":"uv_fs_ftruncate"}, + {"name":"uv_fs_sendfile"}, + {"name":"uv_fs_access"}, + {"name":"uv_fs_chmod"}, + {"name":"uv_fs_utime"}, + {"name":"uv_fs_futime"}, + {"name":"uv_fs_lstat"}, + {"name":"uv_fs_link"}, + {"name":"uv_fs_symlink"}, + {"name":"uv_fs_readlink"}, + {"name":"uv_fs_realpath"}, + {"name":"uv_fs_fchmod"}, + {"name":"uv_fs_chown"}, + {"name":"uv_fs_fchown"}, + {"name":"uv_fs_lchown"}, + {"name":"uv_fs_statfs"}, + {"name":"uv_fs_poll_init"}, + {"name":"uv_fs_poll_start"}, + {"name":"uv_fs_poll_stop"}, + {"name":"uv_fs_poll_getpath"}, + {"name":"uv_signal_init"}, + {"name":"uv_signal_start"}, + {"name":"uv_signal_start_oneshot"}, + {"name":"uv_signal_stop"}, + {"name":"uv_loadavg"}, + {"name":"uv_fs_event_init"}, + {"name":"uv_fs_event_start"}, + {"name":"uv_fs_event_stop"}, + {"name":"uv_fs_event_getpath"}, + {"name":"uv_ip4_addr"}, + {"name":"uv_ip6_addr"}, + {"name":"uv_ip4_name"}, + {"name":"uv_ip6_name"}, + {"name":"uv_inet_ntop"}, + {"name":"uv_inet_pton"}, + {"name":"uv_random"}, + {"name":"uv_if_indextoname"}, + {"name":"uv_if_indextoiid"}, + {"name":"uv_exepath"}, + {"name":"uv_cwd"}, + {"name":"uv_chdir"}, + {"name":"uv_get_free_memory"}, + {"name":"uv_get_total_memory"}, + {"name":"uv_get_constrained_memory"}, + {"name":"uv_hrtime"}, + {"name":"uv_sleep"}, + {"name":"uv_disable_stdio_inheritance"}, + {"name":"uv_dlopen"}, + {"name":"uv_dlclose"}, + {"name":"uv_dlsym"}, + {"name":"uv_dlerror"}, + {"name":"uv_mutex_init"}, + {"name":"uv_mutex_init_recursive"}, + {"name":"uv_mutex_destroy"}, + {"name":"uv_mutex_lock"}, + {"name":"uv_mutex_trylock"}, + {"name":"uv_mutex_unlock"}, + {"name":"uv_rwlock_init"}, + {"name":"uv_rwlock_destroy"}, + {"name":"uv_rwlock_rdlock"}, + {"name":"uv_rwlock_tryrdlock"}, + {"name":"uv_rwlock_rdunlock"}, + {"name":"uv_rwlock_wrlock"}, + {"name":"uv_rwlock_trywrlock"}, + {"name":"uv_rwlock_wrunlock"}, + {"name":"uv_sem_init"}, + {"name":"uv_sem_destroy"}, + {"name":"uv_sem_post"}, + {"name":"uv_sem_wait"}, + {"name":"uv_sem_trywait"}, + {"name":"uv_cond_init"}, + {"name":"uv_cond_destroy"}, + {"name":"uv_cond_signal"}, + {"name":"uv_cond_broadcast"}, + {"name":"uv_barrier_init"}, + {"name":"uv_barrier_destroy"}, + {"name":"uv_barrier_wait"}, + {"name":"uv_cond_wait"}, + {"name":"uv_cond_timedwait"}, + {"name":"uv_once"}, + {"name":"uv_key_create"}, + {"name":"uv_key_delete"}, + {"name":"uv_key_get"}, + {"name":"uv_key_set"}, + {"name":"uv_gettimeofday"}, + {"name":"uv_thread_create"}, + {"name":"uv_thread_create_ex"}, + {"name":"uv_thread_self"}, + {"name":"uv_thread_join"}, + {"name":"uv_thread_equal"}, + {"name":"uv_loop_get_data"}, + {"name":"uv_loop_set_data"} +] diff --git a/third_party/mindspore/BUILD.gn b/third_party/mindspore/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..de586fbb605c45f2df311b7bca74d72d43db90af --- /dev/null +++ b/third_party/mindspore/BUILD.gn @@ -0,0 +1,37 @@ +# Copyright 2022 Huawei Technologies Co., Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================ + +import("//build/ohos.gni") + +ohos_ndk_headers("mindspore_header") { + dest_dir = "$ndk_headers_out_dir/mindspore" + sources = [ + "context.h", + "data_type.h", + "format.h", + "model.h", + "status.h", + "tensor.h", + "types.h", + ] +} + +ohos_ndk_library("mindspore_lib") { + output_name = "mindspore_lite_ndk" + output_extension = "so" + ndk_description_file = "./mindspore_lib.ndk.json" + system_capability = "SystemCapability.Ai.MindSpore" + min_compact_version = "9" +} diff --git a/third_party/mindspore/LICENSE b/third_party/mindspore/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..29f81d812f3e768fa89638d1f72920dbfd1413a8 --- /dev/null +++ b/third_party/mindspore/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/third_party/mindspore/OAT.xml b/third_party/mindspore/OAT.xml new file mode 100644 index 0000000000000000000000000000000000000000..a075e6c90c2d753901a31e214ac815c6fd18c7ee --- /dev/null +++ b/third_party/mindspore/OAT.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third_party/mindspore/README.OpenSource b/third_party/mindspore/README.OpenSource new file mode 100644 index 0000000000000000000000000000000000000000..212d67dc56908627588d7ca1d0c7f1ead2f06b1b --- /dev/null +++ b/third_party/mindspore/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "MindSpore", + "License": "Apache License 2.0", + "License File": "LICENSE.txt", + "Version Number": "1.8.1", + "Owner": "zhuguodong0001@163.com", + "Upstream URL": "https://gitee.com/mindspore/mindspore/repository/archive/v1.8.1", + "Description": "MindSpore is a new open source deep learning training/inference framework that could be used for mobile, edge and cloud scenarios." + } +] diff --git a/third_party/mindspore/context.h b/third_party/mindspore/context.h new file mode 100644 index 0000000000000000000000000000000000000000..0e5ff02311f9e8c5985d492820b38079a3de448e --- /dev/null +++ b/third_party/mindspore/context.h @@ -0,0 +1,338 @@ +/** + * Copyright 2021 Huawei Technologies Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MINDSPORE_INCLUDE_C_API_CONTEXT_C_H +#define MINDSPORE_INCLUDE_C_API_CONTEXT_C_H + +#include +#include +#include +#include "mindspore/types.h" +#include "mindspore/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *OH_AI_ContextHandle; +typedef void *OH_AI_DeviceInfoHandle; + +/** + * @brief Create a context object. + * @return Context object handle. + * @since 9 + */ +OH_AI_API OH_AI_ContextHandle OH_AI_ContextCreate(); + +/** + * @brief Destroy the context object. + * @param context Context object handle address. + * @since 9 + */ +OH_AI_API void OH_AI_ContextDestroy(OH_AI_ContextHandle *context); + +/** + * @brief Set the number of threads at runtime. + * @param context Context object handle. + * @param thread_num the number of threads at runtime. + * @since 9 + */ +OH_AI_API void OH_AI_ContextSetThreadNum(OH_AI_ContextHandle context, int32_t thread_num); + +/** + * @brief Obtain the current thread number setting. + * @param context Context object handle. + * @return The current thread number setting. + * @since 9 + */ +OH_AI_API int32_t OH_AI_ContextGetThreadNum(const OH_AI_ContextHandle context); + +/** + * @brief Set the thread affinity to CPU cores. + * @param context Context object handle. + * @param mode: 0: no affinities, 1: big cores first, 2: little cores first + * @since 9 + */ +OH_AI_API void OH_AI_ContextSetThreadAffinityMode(OH_AI_ContextHandle context, int mode); + +/** + * @brief Obtain the thread affinity of CPU cores. + * @param context Context object handle. + * @return Thread affinity to CPU cores. 0: no affinities, 1: big cores first, 2: little cores first + * @since 9 + */ +OH_AI_API int OH_AI_ContextGetThreadAffinityMode(const OH_AI_ContextHandle context); + +/** + * @brief Set the thread lists to CPU cores. + * + * If core_list and mode are set by OH_AI_ContextSetThreadAffinityMode at the same time, + * the core_list is effective, but the mode is not effective. \n + * + * @param context Context object handle. + * @param core_list: a array of thread core lists. + * @param core_num The number of core. + * @since 9 + */ +OH_AI_API void OH_AI_ContextSetThreadAffinityCoreList(OH_AI_ContextHandle context, const int32_t *core_list, + size_t core_num); + +/** + * @brief Obtain the thread lists of CPU cores. + * @param context Context object handle. + * @param core_num The number of core. + * @return a array of thread core lists. + * @since 9 + */ +OH_AI_API const int32_t *OH_AI_ContextGetThreadAffinityCoreList(const OH_AI_ContextHandle context, size_t *core_num); + +/** + * @brief Set the status whether to perform model inference or training in parallel. + * @param context Context object handle. + * @param is_parallel: true, parallel; false, not in parallel. + * @since 9 + */ +OH_AI_API void OH_AI_ContextSetEnableParallel(OH_AI_ContextHandle context, bool is_parallel); + +/** + * @brief Obtain the status whether to perform model inference or training in parallel. + * @param context Context object handle. + * @return Bool value that indicates whether in parallel. + * @since 9 + */ + OH_AI_API bool OH_AI_ContextGetEnableParallel(const OH_AI_ContextHandle context); + +/** + * @brief Add device info to context object. + * @param context Context object handle. + * @param device_info Device info object handle. + * @since 9 + */ +OH_AI_API void OH_AI_ContextAddDeviceInfo(OH_AI_ContextHandle context, OH_AI_DeviceInfoHandle device_info); + +/** + * @brief Create a device info object. + * @param device_info Device info object handle. + * @return Device info object handle. + * @since 9 + */ +OH_AI_API OH_AI_DeviceInfoHandle OH_AI_DeviceInfoCreate(OH_AI_DeviceType device_type); + +/** + * @brief Destroy the device info object. + * @param device_info Device info object handle address. + * @since 9 + */ +OH_AI_API void OH_AI_DeviceInfoDestroy(OH_AI_DeviceInfoHandle *device_info); + +/** + * @brief Set provider's name. + * @param device_info Device info object handle. + * @param provider define the provider's name. + * @since 9 + */ +OH_AI_API void OH_AI_DeviceInfoSetProvider(OH_AI_DeviceInfoHandle device_info, const char *provider); + +/** + * @brief Obtain provider's name + * @param device_info Device info object handle. + * @return provider's name. + * @since 9 + */ +OH_AI_API const char *OH_AI_DeviceInfoGetProvider(const OH_AI_DeviceInfoHandle device_info); + +/** + * @brief Set provider's device type. + * @param device_info Device info object handle. + * @param device define the provider's device type. EG: CPU. + * @since 9 + */ +OH_AI_API void OH_AI_DeviceInfoSetProviderDevice(OH_AI_DeviceInfoHandle device_info, const char *device); + +/** + * @brief Obtain provider's device type. + * @param device_info Device info object handle. + * @return provider's device type. + * @since 9 + */ +OH_AI_API const char *OH_AI_DeviceInfoGetProviderDevice(const OH_AI_DeviceInfoHandle device_info); + +/** + * @brief Obtain the device type of the device info. + * @param device_info Device info object handle. + * @return Device Type of the device info. + * @since 9 + */ +OH_AI_API OH_AI_DeviceType OH_AI_DeviceInfoGetDeviceType(const OH_AI_DeviceInfoHandle device_info); + +/** + * @brief Set enables to perform the float16 inference, Only valid for CPU/GPU. + * @param device_info Device info object handle. + * @param is_fp16 Enable float16 inference or not. + * @since 9 + */ +OH_AI_API void OH_AI_DeviceInfoSetEnableFP16(OH_AI_DeviceInfoHandle device_info, bool is_fp16); + +/** + * @brief Obtain enables to perform the float16 inference, Only valid for CPU/GPU. + * @param device_info Device info object handle. + * @return Whether enable float16 inference. + * @since 9 + */ +OH_AI_API bool OH_AI_DeviceInfoGetEnableFP16(const OH_AI_DeviceInfoHandle device_info); + +/** + * @brief Set the NPU frequency, Only valid for NPU. + * @param device_info Device info object handle. + * @param frequency Can be set to 1 (low power consumption), 2 (balanced), 3 (high performance), 4 (extreme + * performance), default as 3. + * @since 9 + */ +OH_AI_API void OH_AI_DeviceInfoSetFrequency(OH_AI_DeviceInfoHandle device_info, int frequency); + +/** + * @brief Obtain the NPU frequency, Only valid for NPU. + * @param device_info Device info object handle. + * @return NPU frequency + * @since 9 + */ +OH_AI_API int OH_AI_DeviceInfoGetFrequency(const OH_AI_DeviceInfoHandle device_info); + +/** + * @brief Obtain the all device descriptions in NNRT. + * @param num Number of NNRT device description. + * @return NNRT device description array. + * @since 10 + */ +OH_AI_API NNRTDeviceDesc *OH_AI_GetAllNNRTDeviceDescs(size_t *num); + +/** + * @brief Obtain the specified element in NNRt device description array. + * @param descs NNRT device description array. + * @param index Element index. + * @return NNRT device description. + * @since 10 + */ +OH_AI_API NNRTDeviceDesc *OH_AI_GetElementOfNNRTDeviceDescs(NNRTDeviceDesc *descs, size_t index); + +/** + * @brief Destroy the NNRT device descriptions returned by OH_AI_NNRTGetAllDeviceDescs(). + * @param desc NNRT device description array. + * @since 10 + */ +OH_AI_API void OH_AI_DestroyAllNNRTDeviceDescs(NNRTDeviceDesc **desc); + +/** + * @brief Obtain the device id in NNRT device description. + * @param desc pointer to the NNRT device description instance. + * @return NNRT device id. + * @since 10 + */ +OH_AI_API size_t OH_AI_GetDeviceIdFromNNRTDeviceDesc(const NNRTDeviceDesc *desc); + +/** + * @brief Obtain the device name in NNRT device description. + * @param desc pointer to the NNRT device description instance. + * @return NNRT device name. + * @since 10 + */ +OH_AI_API const char *OH_AI_GetNameFromNNRTDeviceDesc(const NNRTDeviceDesc *desc); + +/** + * @brief Obtain the device type in NNRT device description. + * @param desc pointer to the NNRT device description instance. + * @return NNRT device type. + * @since 10 + */ +OH_AI_API OH_AI_NNRTDeviceType OH_AI_GetTypeFromNNRTDeviceDesc(const NNRTDeviceDesc *desc); + +/** + * @brief Create the NNRT device info by exactly matching the specific device name. + * @param name NNRt device name. + * @return Device info object handle. + * @since 10 + */ +OH_AI_API OH_AI_DeviceInfoHandle OH_AI_CreateNNRTDeviceInfoByName(const char *name); + +/** + * @brief Create the NNRT device info by finding the first device with the specific device type. + * @param name NNRt device type. + * @return Device info object handle. + * @since 10 + */ +OH_AI_API OH_AI_DeviceInfoHandle OH_AI_CreateNNRTDeviceInfoByType(OH_AI_NNRTDeviceType type); + +/** + * @brief Set the NNRT device id, Only valid for NNRT. + * @param device_info Device info object handle. + * @param device_id NNRT device id. + * @since 10 + */ +OH_AI_API void OH_AI_DeviceInfoSetDeviceId(OH_AI_DeviceInfoHandle device_info, size_t device_id); + +/** + * @brief Obtain the NNRT device id, Only valid for NNRT. + * @param device_info Device info object handle. + * @return NNRT device id. + * @since 10 + */ +OH_AI_API size_t OH_AI_DeviceInfoGetDeviceId(const OH_AI_DeviceInfoHandle device_info); + +/** + * @brief Set the NNRT performance mode, Only valid for NNRT. + * @param device_info Device info object handle. + * @param device_id NNRT performance mode. + * @since 10 + */ +OH_AI_API void OH_AI_DeviceInfoSetPerformanceMode(OH_AI_DeviceInfoHandle device_info, OH_AI_PerformanceMode mode); + +/** + * @brief Obtain the NNRT performance mode, Only valid for NNRT. + * @param device_info Device info object handle. + * @return NNRT performance mode. + * @since 10 + */ +OH_AI_API OH_AI_PerformanceMode OH_AI_DeviceInfoGetPerformanceMode(const OH_AI_DeviceInfoHandle device_info); + +/** + * @brief Set the NNRT priority, Only valid for NNRT. + * @param device_info Device info object handle. + * @param device_id NNRT priority. + * @since 10 + */ +OH_AI_API void OH_AI_DeviceInfoSetPriority(OH_AI_DeviceInfoHandle device_info, OH_AI_Priority priority); + +/** + * @brief Obtain the NNRT priority, Only valid for NNRT. + * @param device_info Device info object handle. + * @return NNRT priority. + * @since 10 + */ +OH_AI_API OH_AI_Priority OH_AI_DeviceInfoGetPriority(const OH_AI_DeviceInfoHandle device_info); + +/** + * @brief Add extension of key/value format to device info, Only valid for NNRT. + * @param device_info Device info object handle. + * @param name The content of key as a C string. + * @param value The pointer to the value, which is a byte array. + * @param value_size The size of the value, which is a byte array. + * @return OH_AI_STATUS_SUCCESS if success, or detail error code if failed. + * @since 10 + */ +OH_AI_API OH_AI_Status OH_AI_DeviceInfoAddExtension(OH_AI_DeviceInfoHandle device_info, const char *name, const char *value, size_t value_size); +#ifdef __cplusplus +} +#endif +#endif // MINDSPORE_INCLUDE_C_API_CONTEXT_C_H diff --git a/third_party/mindspore/data_type.h b/third_party/mindspore/data_type.h new file mode 100644 index 0000000000000000000000000000000000000000..124ed17b3cdeca57eafa9b1e945160bf6fefc30b --- /dev/null +++ b/third_party/mindspore/data_type.h @@ -0,0 +1,52 @@ +/** + * Copyright 2021 Huawei Technologies Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MINDSPORE_INCLUDE_C_API_DATA_TYPE_C_H +#define MINDSPORE_INCLUDE_C_API_DATA_TYPE_C_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum OH_AI_DataType { + OH_AI_DATATYPE_UNKNOWN = 0, + OH_AI_DATATYPE_OBJECTTYPE_STRING = 12, + OH_AI_DATATYPE_OBJECTTYPE_LIST = 13, + OH_AI_DATATYPE_OBJECTTYPE_TUPLE = 14, + OH_AI_DATATYPE_OBJECTTYPE_TENSOR = 17, + OH_AI_DATATYPE_NUMBERTYPE_BEGIN = 29, + OH_AI_DATATYPE_NUMBERTYPE_BOOL = 30, + OH_AI_DATATYPE_NUMBERTYPE_INT8 = 32, + OH_AI_DATATYPE_NUMBERTYPE_INT16 = 33, + OH_AI_DATATYPE_NUMBERTYPE_INT32 = 34, + OH_AI_DATATYPE_NUMBERTYPE_INT64 = 35, + OH_AI_DATATYPE_NUMBERTYPE_UINT8 = 37, + OH_AI_DATATYPE_NUMBERTYPE_UINT16 = 38, + OH_AI_DATATYPE_NUMBERTYPE_UINT32 = 39, + OH_AI_DATATYPE_NUMBERTYPE_UINT64 = 40, + OH_AI_DATATYPE_NUMBERTYPE_FLOAT16 = 42, + OH_AI_DATATYPE_NUMBERTYPE_FLOAT32 = 43, + OH_AI_DATATYPE_NUMBERTYPE_FLOAT64 = 44, + OH_AI_DATATYPE_NUMBERTYPE_END = 46, + // add new enum here + OH_AI_DataTypeInvalid = INT32_MAX, +} OH_AI_DataType; + +#ifdef __cplusplus +} +#endif +#endif // MINDSPORE_INCLUDE_C_API_DATA_TYPE_C_H diff --git a/third_party/mindspore/format.h b/third_party/mindspore/format.h new file mode 100644 index 0000000000000000000000000000000000000000..36b355fe6eead8465cf82b26972196b8d93f9a72 --- /dev/null +++ b/third_party/mindspore/format.h @@ -0,0 +1,46 @@ +/** + * Copyright 2021 Huawei Technologies Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MINDSPORE_INCLUDE_C_API_FORMAT_C_H +#define MINDSPORE_INCLUDE_C_API_FORMAT_C_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum OH_AI_Format { + OH_AI_FORMAT_NCHW = 0, + OH_AI_FORMAT_NHWC = 1, + OH_AI_FORMAT_NHWC4 = 2, + OH_AI_FORMAT_HWKC = 3, + OH_AI_FORMAT_HWCK = 4, + OH_AI_FORMAT_KCHW = 5, + OH_AI_FORMAT_CKHW = 6, + OH_AI_FORMAT_KHWC = 7, + OH_AI_FORMAT_CHWK = 8, + OH_AI_FORMAT_HW = 9, + OH_AI_FORMAT_HW4 = 10, + OH_AI_FORMAT_NC = 11, + OH_AI_FORMAT_NC4 = 12, + OH_AI_FORMAT_NC4HW4 = 13, + OH_AI_FORMAT_NCDHW = 15, + OH_AI_FORMAT_NWC = 16, + OH_AI_FORMAT_NCW = 17 +} OH_AI_Format; + +#ifdef __cplusplus +} +#endif +#endif // MINDSPORE_INCLUDE_C_API_FORMAT_C_H diff --git a/third_party/mindspore/mindspore_lib.ndk.json b/third_party/mindspore/mindspore_lib.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..c4c8193e90024f1b9c0ea022e42ac90205dc7685 --- /dev/null +++ b/third_party/mindspore/mindspore_lib.ndk.json @@ -0,0 +1,254 @@ +[ + { + "first_introduced": "9", + "name": "OH_AI_ContextCreate" + }, + { + "first_introduced": "9", + "name": "OH_AI_ContextDestroy" + }, + { + "first_introduced": "9", + "name": "OH_AI_ContextSetThreadNum" + }, + { + "first_introduced": "9", + "name": "OH_AI_ContextGetThreadNum" + }, + { + "first_introduced": "9", + "name": "OH_AI_ContextSetThreadAffinityMode" + }, + { + "first_introduced": "9", + "name": "OH_AI_ContextGetThreadAffinityMode" + }, + { + "first_introduced": "9", + "name": "OH_AI_ContextSetThreadAffinityCoreList" + }, + { + "first_introduced": "9", + "name": "OH_AI_ContextGetThreadAffinityCoreList" + }, + { + "first_introduced": "9", + "name": "OH_AI_ContextSetEnableParallel" + }, + { + "first_introduced": "9", + "name": "OH_AI_ContextGetEnableParallel" + }, + { + "first_introduced": "9", + "name": "OH_AI_ContextAddDeviceInfo" + }, + { + "first_introduced": "9", + "name": "OH_AI_DeviceInfoCreate" + }, + { + "first_introduced": "9", + "name": "OH_AI_DeviceInfoDestroy" + }, + { + "first_introduced": "9", + "name": "OH_AI_DeviceInfoSetProvider" + }, + { + "first_introduced": "9", + "name": "OH_AI_DeviceInfoGetProvider" + }, + { + "first_introduced": "9", + "name": "OH_AI_DeviceInfoSetProviderDevice" + }, + { + "first_introduced": "9", + "name": "OH_AI_DeviceInfoGetProviderDevice" + }, + { + "first_introduced": "9", + "name": "OH_AI_DeviceInfoGetDeviceType" + }, + { + "first_introduced": "9", + "name": "OH_AI_DeviceInfoSetEnableFP16" + }, + { + "first_introduced": "9", + "name": "OH_AI_DeviceInfoGetEnableFP16" + }, + { + "first_introduced": "9", + "name": "OH_AI_DeviceInfoSetFrequency" + }, + { + "first_introduced": "9", + "name": "OH_AI_DeviceInfoGetFrequency" + }, + { + "first_introduced": "9", + "name": "OH_AI_ModelCreate" + }, + { + "first_introduced": "9", + "name": "OH_AI_ModelDestroy" + }, + { + "first_introduced": "9", + "name": "OH_AI_ModelBuild" + }, + { + "first_introduced": "9", + "name": "OH_AI_ModelBuildFromFile" + }, + { + "first_introduced": "9", + "name": "OH_AI_ModelResize" + }, + { + "first_introduced": "9", + "name": "OH_AI_ModelPredict" + }, + { + "first_introduced": "9", + "name": "OH_AI_ModelGetInputs" + }, + { + "first_introduced": "9", + "name": "OH_AI_ModelGetOutputs" + }, + { + "first_introduced": "9", + "name": "OH_AI_ModelGetInputByTensorName" + }, + { + "first_introduced": "9", + "name": "OH_AI_ModelGetOutputByTensorName" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorCreate" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorDestroy" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorClone" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorSetName" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorGetName" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorSetDataType" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorGetDataType" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorSetShape" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorGetShape" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorSetFormat" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorGetFormat" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorSetData" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorGetData" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorGetMutableData" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorGetElementNum" + }, + { + "first_introduced": "9", + "name": "OH_AI_TensorGetDataSize" + }, + { + "first_introduced": "10", + "name": "OH_AI_GetAllNNRTDeviceDescs" + }, + { + "first_introduced": "10", + "name": "OH_AI_DestroyAllNNRTDeviceDescs" + }, + { + "first_introduced": "10", + "name": "OH_AI_GetDeviceIdFromNNRTDeviceDesc" + }, + { + "first_introduced": "10", + "name": "OH_AI_GetNameFromNNRTDeviceDesc" + }, + { + "first_introduced": "10", + "name": "OH_AI_GetTypeFromNNRTDeviceDesc" + }, + { + "first_introduced": "10", + "name": "OH_AI_CreateNNRTDeviceInfoByName" + }, + { + "first_introduced": "10", + "name": "OH_AI_CreateNNRTDeviceInfoByType" + }, + { + "first_introduced": "10", + "name": "OH_AI_DeviceInfoSetDeviceId" + }, + { + "first_introduced": "10", + "name": "OH_AI_DeviceInfoGetDeviceId" + }, + { + "first_introduced": "10", + "name": "OH_AI_DeviceInfoSetPerformanceMode" + }, + { + "first_introduced": "10", + "name": "OH_AI_DeviceInfoGetPerformanceMode" + }, + { + "first_introduced": "10", + "name": "OH_AI_DeviceInfoSetPriority" + }, + { + "first_introduced": "10", + "name": "OH_AI_GetElementOfNNRTDeviceDescs" + }, + { + "first_introduced": "10", + "name": "OH_AI_DeviceInfoAddExtension" + }, + { + "first_introduced": "10", + "name": "OH_AI_TensorSetUserData" + } +] diff --git a/third_party/mindspore/model.h b/third_party/mindspore/model.h new file mode 100644 index 0000000000000000000000000000000000000000..870b9be3a7c0506a14880bb2aa2c32bf9b958da4 --- /dev/null +++ b/third_party/mindspore/model.h @@ -0,0 +1,150 @@ +/** + * Copyright 2021 Huawei Technologies Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MINDSPORE_INCLUDE_C_API_MODEL_C_H +#define MINDSPORE_INCLUDE_C_API_MODEL_C_H + +#include "mindspore/tensor.h" +#include "mindspore/context.h" +#include "mindspore/status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *OH_AI_ModelHandle; + +typedef struct OH_AI_TensorHandleArray { + size_t handle_num; + OH_AI_TensorHandle *handle_list; +} OH_AI_TensorHandleArray; + +#define OH_AI_MAX_SHAPE_NUM 32 +typedef struct OH_AI_ShapeInfo { + size_t shape_num; + int64_t shape[OH_AI_MAX_SHAPE_NUM]; +} OH_AI_ShapeInfo; + +typedef struct OH_AI_CallBackParam { + char *node_name; + char *node_type; +} OH_AI_CallBackParam; + +typedef bool (*OH_AI_KernelCallBack)(const OH_AI_TensorHandleArray inputs, const OH_AI_TensorHandleArray outputs, + const OH_AI_CallBackParam kernel_Info); + +/** + * @brief Create a model object. + * @return Model object handle. + * @since 9 + */ +OH_AI_API OH_AI_ModelHandle OH_AI_ModelCreate(); + +/** + * @brief Destroy the model object. + * @param model Model object handle address. + * @since 9 + */ +OH_AI_API void OH_AI_ModelDestroy(OH_AI_ModelHandle *model); + +/** + * @brief Build the model from model file buffer so that it can run on a device. + * @param model Model object handle. + * @param model_data Define the buffer read from a model file. + * @param data_size Define bytes number of model file buffer. + * @param model_type Define The type of model file. + * @param model_context Define the context used to store options during execution. + * @return OH_AI_Status. + * @since 9 + */ +OH_AI_API OH_AI_Status OH_AI_ModelBuild(OH_AI_ModelHandle model, const void *model_data, size_t data_size, + OH_AI_ModelType model_type, const OH_AI_ContextHandle model_context); + +/** + * @brief Load and build the model from model path so that it can run on a device. + * @param model Model object handle. + * @param model_path Define the model file path. + * @param model_type Define The type of model file. + * @param model_context Define the context used to store options during execution. + * @return OH_AI_Status. + * @since 9 + */ +OH_AI_API OH_AI_Status OH_AI_ModelBuildFromFile(OH_AI_ModelHandle model, const char *model_path, + OH_AI_ModelType model_type, const OH_AI_ContextHandle model_context); + +/** + * @brief Resizes the shapes of inputs. + * @param model Model object handle. + * @param inputs The array that includes all input tensor handles. + * @param shape_infos Defines the new shapes of inputs, should be consistent with inputs. + * @param shape_info_num The num of shape_infos. + * @return OH_AI_Status. + * @since 9 + */ +OH_AI_API OH_AI_Status OH_AI_ModelResize(OH_AI_ModelHandle model, const OH_AI_TensorHandleArray inputs, + OH_AI_ShapeInfo *shape_infos, size_t shape_info_num); + +/** + * @brief Inference model. + * @param model Model object handle. + * @param inputs The array that includes all input tensor handles. + * @param outputs The array that includes all output tensor handles. + * @param before CallBack before predict. + * @param after CallBack after predict. + * @return OH_AI_Status. + * @since 9 + */ +OH_AI_API OH_AI_Status OH_AI_ModelPredict(OH_AI_ModelHandle model, const OH_AI_TensorHandleArray inputs, + OH_AI_TensorHandleArray *outputs, const OH_AI_KernelCallBack before, + const OH_AI_KernelCallBack after); + +/** + * @brief Obtains all input tensor handles of the model. + * @param model Model object handle. + * @return The array that includes all input tensor handles. + * @since 9 + */ +OH_AI_API OH_AI_TensorHandleArray OH_AI_ModelGetInputs(const OH_AI_ModelHandle model); + +/** + * @brief Obtains all output tensor handles of the model. + * @param model Model object handle. + * @return The array that includes all output tensor handles. + * @since 9 + */ +OH_AI_API OH_AI_TensorHandleArray OH_AI_ModelGetOutputs(const OH_AI_ModelHandle model); + +/** + * @brief Obtains the input tensor handle of the model by name. + * @param model Model object handle. + * @param tensor_name The name of tensor. + * @return The input tensor handle with the given name, if the name is not found, an NULL is returned. + * @since 9 + */ +OH_AI_API OH_AI_TensorHandle OH_AI_ModelGetInputByTensorName(const OH_AI_ModelHandle model, const char *tensor_name); + +/** + * @brief Obtains the output tensor handle of the model by name. + * @param model Model object handle. + * @param tensor_name The name of tensor. + * @return The output tensor handle with the given name, if the name is not found, an NULL is returned. + * @since 9 + */ +OH_AI_API OH_AI_TensorHandle OH_AI_ModelGetOutputByTensorName(const OH_AI_ModelHandle model, const char *tensor_name); + +#ifdef __cplusplus +} +#endif +#endif // MINDSPORE_INCLUDE_C_API_MODEL_C_H diff --git a/third_party/mindspore/status.h b/third_party/mindspore/status.h new file mode 100644 index 0000000000000000000000000000000000000000..102c7962a11294d75580d481305d702ee003e3e3 --- /dev/null +++ b/third_party/mindspore/status.h @@ -0,0 +1,80 @@ +/** + * Copyright 2021 Huawei Technologies Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MINDSPORE_INCLUDE_C_API_STATUS_C_H +#define MINDSPORE_INCLUDE_C_API_STATUS_C_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +enum OH_AI_CompCode { + OH_AI_COMPCODE_CORE = 0x00000000u, + OH_AI_COMPCODE_MD = 0x10000000u, + OH_AI_COMPCODE_ME = 0x20000000u, + OH_AI_COMPCODE_MC = 0x30000000u, + OH_AI_COMPCODE_LITE = 0xF0000000u, +}; + +typedef enum OH_AI_Status { + OH_AI_STATUS_SUCCESS = 0, + // Core + OH_AI_STATUS_CORE_FAILED = OH_AI_COMPCODE_CORE | 0x1, + + // Lite // Common error code, range: [-1, -100) + OH_AI_STATUS_LITE_ERROR = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -1), /**< Common error code. */ + OH_AI_STATUS_LITE_NULLPTR = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -2), /**< NULL pointer returned.*/ + OH_AI_STATUS_LITE_PARAM_INVALID = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -3), /**< Invalid parameter.*/ + OH_AI_STATUS_LITE_NO_CHANGE = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -4), /**< No change. */ + OH_AI_STATUS_LITE_SUCCESS_EXIT = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -5), /**< No error but exit. */ + OH_AI_STATUS_LITE_MEMORY_FAILED = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -6), /**< Fail to create memory. */ + OH_AI_STATUS_LITE_NOT_SUPPORT = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -7), /**< Fail to support. */ + OH_AI_STATUS_LITE_THREADPOOL_ERROR = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -8), /**< Error occur in thread pool. */ + OH_AI_STATUS_LITE_UNINITIALIZED_OBJ = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -9), /**< Object is not initialized. */ + + // Executor error code, range: [-100,-200) + OH_AI_STATUS_LITE_OUT_OF_TENSOR_RANGE = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -100), /**< Failed to check range. */ + OH_AI_STATUS_LITE_INPUT_TENSOR_ERROR = + OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -101), /**< Failed to check input tensor. */ + OH_AI_STATUS_LITE_REENTRANT_ERROR = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -102), /**< Exist executor running. */ + + // Graph error code, range: [-200,-300) + OH_AI_STATUS_LITE_GRAPH_FILE_ERROR = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -200), /**< Failed to verify graph file. */ + + // Node error code, range: [-300,-400) + OH_AI_STATUS_LITE_NOT_FIND_OP = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -300), /**< Failed to find operator. */ + OH_AI_STATUS_LITE_INVALID_OP_NAME = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -301), /**< Invalid operator name. */ + OH_AI_STATUS_LITE_INVALID_OP_ATTR = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -302), /**< Invalid operator attr. */ + OH_AI_STATUS_LITE_OP_EXECUTE_FAILURE = + OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -303), /**< Failed to execution operator. */ + + // Tensor error code, range: [-400,-500) + OH_AI_STATUS_LITE_FORMAT_ERROR = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -400), /**< Failed to checking tensor format. */ + + // InferShape error code, range: [-500,-600) + OH_AI_STATUS_LITE_INFER_ERROR = OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -500), /**< Failed to infer shape. */ + OH_AI_STATUS_LITE_INFER_INVALID = + OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -501), /**< Invalid infer shape before runtime. */ + + // User input param error code, range: [-600, 700) + OH_AI_STATUS_LITE_INPUT_PARAM_INVALID = + OH_AI_COMPCODE_LITE | (0x0FFFFFFF & -600), /**< Invalid input param by user. */ +} OH_AI_Status; +#ifdef __cplusplus +} +#endif +#endif // MINDSPORE_INCLUDE_C_API_STATUS_C_H diff --git a/third_party/mindspore/tensor.h b/third_party/mindspore/tensor.h new file mode 100644 index 0000000000000000000000000000000000000000..ab936299f53cf3238ffbbe3b819ed26a466179fe --- /dev/null +++ b/third_party/mindspore/tensor.h @@ -0,0 +1,185 @@ +/** + * Copyright 2021 Huawei Technologies Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MINDSPORE_INCLUDE_C_API_TENSOE_C_H +#define MINDSPORE_INCLUDE_C_API_TENSOE_C_H + +#include +#include "mindspore/status.h" +#include "mindspore/types.h" +#include "mindspore/data_type.h" +#include "mindspore/format.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *OH_AI_TensorHandle; + +/** + * @brief Create a tensor object. + * @param name The name of the tensor. + * @param type The data type of the tensor. + * @param shape The shape of the tensor. + * @param shape_num The num of the shape. + * @param data The data pointer that points to allocated memory. + * @param data_len The length of the memory, in bytes. + * @return Tensor object handle. + * @since 9 + */ +OH_AI_API OH_AI_TensorHandle OH_AI_TensorCreate(const char *name, OH_AI_DataType type, const int64_t *shape, + size_t shape_num, const void *data, size_t data_len); + +/** + * @brief Destroy the tensor object. + * @param tensor Tensor object handle address. + * @since 9 + */ +OH_AI_API void OH_AI_TensorDestroy(OH_AI_TensorHandle *tensor); + +/** + * @brief Obtain a deep copy of the tensor. + * @param tensor Tensor object handle. + * @return Tensor object handle. + * @since 9 + */ +OH_AI_API OH_AI_TensorHandle OH_AI_TensorClone(OH_AI_TensorHandle tensor); + +/** + * @brief Set the name for the tensor. + * @param tensor Tensor object handle. + * @param name The name of the tensor. + * @since 9 + */ +OH_AI_API void OH_AI_TensorSetName(OH_AI_TensorHandle tensor, const char *name); + +/** + * @brief Obtain the name of the tensor. + * @param tensor Tensor object handle. + * @return The name of the tensor. + * @since 9 + */ +OH_AI_API const char *OH_AI_TensorGetName(const OH_AI_TensorHandle tensor); + +/** + * @brief Set the data type for the tensor. + * @param tensor Tensor object handle. + * @param type The data type of the tensor. + * @since 9 + */ +OH_AI_API void OH_AI_TensorSetDataType(OH_AI_TensorHandle tensor, OH_AI_DataType type); + +/** + * @brief Obtain the data type of the tensor. + * @param tensor Tensor object handle. + * @return The date type of the tensor. + * @since 9 + */ +OH_AI_API OH_AI_DataType OH_AI_TensorGetDataType(const OH_AI_TensorHandle tensor); + +/** + * @brief Set the shape for the tensor. + * @param tensor Tensor object handle. + * @param shape The shape array. + * @param shape_num Dimension of shape. + * @since 9 + */ +OH_AI_API void OH_AI_TensorSetShape(OH_AI_TensorHandle tensor, const int64_t *shape, size_t shape_num); + +/** + * @brief Obtain the shape of the tensor. + * @param tensor Tensor object handle. + * @param shape_num Dimension of shape. + * @return The shape array of the tensor. + * @since 9 + */ +OH_AI_API const int64_t *OH_AI_TensorGetShape(const OH_AI_TensorHandle tensor, size_t *shape_num); + +/** + * @brief Set the format for the tensor. + * @param tensor Tensor object handle. + * @param format The format of the tensor. + * @since 9 + */ +OH_AI_API void OH_AI_TensorSetFormat(OH_AI_TensorHandle tensor, OH_AI_Format format); + +/** + * @brief Obtain the format of the tensor. + * @param tensor Tensor object handle. + * @return The format of the tensor. + * @since 9 + */ +OH_AI_API OH_AI_Format OH_AI_TensorGetFormat(const OH_AI_TensorHandle tensor); + +/** + * @brief Obtain the data for the tensor. + * @param tensor Tensor object handle. + * @param data A pointer to the data of the tensor. + * @since 9 + */ +OH_AI_API void OH_AI_TensorSetData(OH_AI_TensorHandle tensor, void *data); + +/** + * @brief Obtain the data pointer of the tensor. + * @param tensor Tensor object handle. + * @return The data pointer of the tensor. + * @since 9 + */ +OH_AI_API const void *OH_AI_TensorGetData(const OH_AI_TensorHandle tensor); + +/** + * @brief Obtain the mutable data pointer of the tensor. If the internal data is empty, it will allocate memory. + * @param tensor Tensor object handle. + * @return The data pointer of the tensor. + * @since 9 + */ +OH_AI_API void *OH_AI_TensorGetMutableData(const OH_AI_TensorHandle tensor); + +/** + * @brief Obtain the element number of the tensor. + * @param tensor Tensor object handle. + * @return The element number of the tensor. + * @since 9 + */ +OH_AI_API int64_t OH_AI_TensorGetElementNum(const OH_AI_TensorHandle tensor); + +/** + * @brief Obtain the data size fo the tensor. + * @param tensor Tensor object handle. + * @return The data size of the tensor. + * @since 9 + */ +OH_AI_API size_t OH_AI_TensorGetDataSize(const OH_AI_TensorHandle tensor); + +/** + * @brief Set the data for the tensor with user-allocated data buffer. + * + * The main purpose of this interface is providing a way of using memory already allocated by user as the Model's + * input, but not which allocated inside the Model object. It can reduce one copy. \n + * Note: The tensor won't free the data provided by invoker. Invoker has the responsibility to free it. And this + * free action should not be preformed before destruction of the tensor. \n + * + * @param tensor Tensor object handle. + * @param data A pointer to the user data buffer. + * @param data the byte size of the user data buffer. + * @return OH_AI_STATUS_SUCCESS if success, or detail error code if failed. + * @since 10 + */ +OH_AI_API OH_AI_Status OH_AI_TensorSetUserData(OH_AI_TensorHandle tensor, void *data, size_t data_size); + +#ifdef __cplusplus +} +#endif +#endif // MINDSPORE_INCLUDE_C_API_TENSOE_C_H diff --git a/third_party/mindspore/types.h b/third_party/mindspore/types.h new file mode 100644 index 0000000000000000000000000000000000000000..d38660b0dac183a4aed6771085d094c27a221953 --- /dev/null +++ b/third_party/mindspore/types.h @@ -0,0 +1,86 @@ +/** + * Copyright 2021 Huawei Technologies Co., Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MINDSPORE_INCLUDE_C_API_TYPES_C_H +#define MINDSPORE_INCLUDE_C_API_TYPES_C_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef OH_AI_API +#ifdef _WIN32 +#define OH_AI_API __declspec(dllexport) +#else +#define OH_AI_API __attribute__((visibility("default"))) +#endif +#endif + +typedef enum OH_AI_ModelType { + OH_AI_MODELTYPE_MINDIR = 0, + // insert new data type here + OH_AI_MODELTYPE_INVALID = 0xFFFFFFFF +} OH_AI_ModelType; + +typedef enum OH_AI_DeviceType { + OH_AI_DEVICETYPE_CPU = 0, + OH_AI_DEVICETYPE_GPU, + OH_AI_DEVICETYPE_KIRIN_NPU, + // add new type here + // ohos-only device range: [60, 80) + OH_AI_DEVICETYPE_NNRT = 60, + OH_AI_DEVICETYPE_INVALID = 100, +} OH_AI_DeviceType; + +typedef enum OH_AI_NNRTDeviceType { + /** Devices that are not CPU, GPU, or dedicated accelerator */ + OH_AI_NNRTDEVICE_OTHERS = 0, + /** CPU device */ + OH_AI_NNRTDEVICE_CPU = 1, + /** GPU device */ + OH_AI_NNRTDEVICE_GPU = 2, + /** Dedicated hardware accelerator */ + OH_AI_NNRTDEVICE_ACCELERATOR = 3, +} OH_AI_NNRTDeviceType; + +typedef enum OH_AI_PerformanceMode { + /** No performance mode preference */ + OH_AI_PERFORMANCE_NONE = 0, + /** Low power consumption mode*/ + OH_AI_PERFORMANCE_LOW = 1, + /** Medium performance mode */ + OH_AI_PERFORMANCE_MEDIUM = 2, + /** High performance mode */ + OH_AI_PERFORMANCE_HIGH = 3, + /** Ultimate performance mode */ + OH_AI_PERFORMANCE_EXTREME = 4 +} OH_AI_PerformanceMode; + +typedef enum OH_AI_Priority { + /** No priority preference */ + OH_AI_PRIORITY_NONE = 0, + /** Low priority */ + OH_AI_PRIORITY_LOW = 1, + /** Medium priority */ + OH_AI_PRIORITY_MEDIUM = 2, + /** High priority */ + OH_AI_PRIORITY_HIGH = 3 +} OH_AI_Priority; + +typedef struct NNRTDeviceDesc NNRTDeviceDesc; +#ifdef __cplusplus +} +#endif +#endif // MINDSPORE_INCLUDE_C_API_TYPES_C_H diff --git a/third_party/musl/COPYRIGHT b/third_party/musl/COPYRIGHT new file mode 100644 index 0000000000000000000000000000000000000000..d2115cde1041d01e80831d7d78b92112f0bf993e --- /dev/null +++ b/third_party/musl/COPYRIGHT @@ -0,0 +1,193 @@ +musl as a whole is licensed under the following standard MIT license: + +---------------------------------------------------------------------- +Copyright © 2005-2020 Rich Felker, et al. + +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 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. +---------------------------------------------------------------------- + +Authors/contributors include: + +A. Wilcox +Ada Worcester +Alex Dowad +Alex Suykov +Alexander Monakov +Andre McCurdy +Andrew Kelley +Anthony G. Basile +Aric Belsito +Arvid Picciani +Bartosz Brachaczek +Benjamin Peterson +Bobby Bingham +Boris Brezillon +Brent Cook +Chris Spiegel +Clément Vasseur +Daniel Micay +Daniel Sabogal +Daurnimator +David Carlier +David Edelsohn +Denys Vlasenko +Dmitry Ivanov +Dmitry V. Levin +Drew DeVault +Emil Renner Berthing +Fangrui Song +Felix Fietkau +Felix Janda +Gianluca Anzolin +Hauke Mehrtens +He X +Hiltjo Posthuma +Isaac Dunham +Jaydeep Patil +Jens Gustedt +Jeremy Huntwork +Jo-Philipp Wich +Joakim Sindholt +John Spencer +Julien Ramseier +Justin Cormack +Kaarle Ritvanen +Khem Raj +Kylie McClain +Leah Neukirchen +Luca Barbato +Luka Perkov +M Farkas-Dyck (Strake) +Mahesh Bodapati +Markus Wichmann +Masanori Ogino +Michael Clark +Michael Forney +Mikhail Kremnyov +Natanael Copa +Nicholas J. Kain +orc +Pascal Cuoq +Patrick Oppenlander +Petr Hosek +Petr Skocik +Pierre Carrier +Reini Urban +Rich Felker +Richard Pennington +Ryan Fairfax +Samuel Holland +Segev Finer +Shiz +sin +Solar Designer +Stefan Kristiansson +Stefan O'Rear +Szabolcs Nagy +Timo Teräs +Trutz Behn +Valentin Ochs +Will Dietz +William Haddon +William Pitcock + +Portions of this software are derived from third-party works licensed +under terms compatible with the above MIT license: + +The TRE regular expression implementation (src/regex/reg* and +src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed +under a 2-clause BSD license (license text in the source files). The +included version has been heavily modified by Rich Felker in 2012, in +the interests of size, simplicity, and namespace cleanliness. + +Much of the math library code (src/math/* and src/complex/*) is +Copyright © 1993,2004 Sun Microsystems or +Copyright © 2003-2011 David Schultz or +Copyright © 2003-2009 Steven G. Kargl or +Copyright © 2003-2009 Bruce D. Evans or +Copyright © 2008 Stephen L. Moshier or +Copyright © 2017-2018 Arm Limited +and labelled as such in comments in the individual source files. All +have been licensed under extremely permissive terms. + +The ARM memcpy code (src/string/arm/memcpy.S) is Copyright © 2008 +The Android Open Source Project and is licensed under a two-clause BSD +license. It was taken from Bionic libc, used on Android. + +The AArch64 memcpy and memset code (src/string/aarch64/*) are +Copyright © 1999-2019, Arm Limited. + +The implementation of DES for crypt (src/crypt/crypt_des.c) is +Copyright © 1994 David Burren. It is licensed under a BSD license. + +The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was +originally written by Solar Designer and placed into the public +domain. The code also comes with a fallback permissive license for use +in jurisdictions that may not recognize the public domain. + +The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011 +Valentin Ochs and is licensed under an MIT-style license. + +The x86_64 port was written by Nicholas J. Kain and is licensed under +the standard MIT terms. + +The mips and microblaze ports were originally written by Richard +Pennington for use in the ellcc project. The original code was adapted +by Rich Felker for build system and code conventions during upstream +integration. It is licensed under the standard MIT terms. + +The mips64 port was contributed by Imagination Technologies and is +licensed under the standard MIT terms. + +The powerpc port was also originally written by Richard Pennington, +and later supplemented and integrated by John Spencer. It is licensed +under the standard MIT terms. + +All other files which have no copyright comments are original works +produced specifically for use as part of this library, written either +by Rich Felker, the main author of the library, or by one or more +contibutors listed above. Details on authorship of individual files +can be found in the git version control history of the project. The +omission of copyright and license comments in each file is in the +interest of source tree size. + +In addition, permission is hereby granted for all public header files +(include/* and arch/*/bits/*) and crt files intended to be linked into +applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit +the copyright notice and permission notice otherwise required by the +license, and to use these files without any requirement of +attribution. These files include substantial contributions from: + +Bobby Bingham +John Spencer +Nicholas J. Kain +Rich Felker +Richard Pennington +Stefan Kristiansson +Szabolcs Nagy + +all of whom have explicitly granted such permission. + +This file previously contained text expressing a belief that most of +the files covered by the above exception were sufficiently trivial not +to be subject to copyright, resulting in confusion over whether it +negated the permissions granted in the license. In the spirit of +permissive licensing, and of not having licensing issues being an +obstacle to adoption, that text has been removed. diff --git a/third_party/musl/OAT.xml b/third_party/musl/OAT.xml new file mode 100644 index 0000000000000000000000000000000000000000..4d66ebc58841d9b07cfd490c3a0e3e738ee6ad0b --- /dev/null +++ b/third_party/musl/OAT.xml @@ -0,0 +1,92 @@ + + + + + + COPYRIGHT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third_party/musl/README.OpenSource b/third_party/musl/README.OpenSource new file mode 100644 index 0000000000000000000000000000000000000000..f152ae8110a215e3a56e6a723a2308fb5967f857 --- /dev/null +++ b/third_party/musl/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name" : "OpenEuler: musl", + "License" : "MIT License", + "License File" : "COPYRIGHT", + "Version Number" : "1.2.3-1.oe2203sp1", + "Owner" : "jianghan2@huawei.com", + "Upstream URL" : "https://repo.openeuler.org/openEuler-22.03-LTS-SP1/source/Packages/musl-1.2.3-1.oe2203sp1.src.rpm", + "Description" : "musl is an MIT-licensed implementation of the standard C library" + } +] diff --git a/third_party/musl/ndk_musl_include/aio.h b/third_party/musl/ndk_musl_include/aio.h new file mode 100644 index 0000000000000000000000000000000000000000..0368ada8ac284cce688ebcee5ee046026b2ced5c --- /dev/null +++ b/third_party/musl/ndk_musl_include/aio.h @@ -0,0 +1,55 @@ +#ifndef _AIO_H +#define _AIO_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#define __NEED_ssize_t +#define __NEED_off_t + +#include + +struct aiocb { + int aio_fildes, aio_lio_opcode, aio_reqprio; + volatile void *aio_buf; + size_t aio_nbytes; + struct sigevent aio_sigevent; + void *__td; + int __lock[2]; + volatile int __err; + ssize_t __ret; + off_t aio_offset; + void *__next, *__prev; + char __dummy4[32-2*sizeof(void *)]; +}; + +#define AIO_CANCELED 0 +#define AIO_NOTCANCELED 1 +#define AIO_ALLDONE 2 + +#define LIO_READ 0 +#define LIO_WRITE 1 +#define LIO_NOP 2 + +#define LIO_WAIT 0 +#define LIO_NOWAIT 1 + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define aiocb64 aiocb +#define off64_t off_t +#endif + +#if _REDIR_TIME64 +__REDIR(aio_suspend, __aio_suspend_time64); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/alloca.h b/third_party/musl/ndk_musl_include/alloca.h new file mode 100644 index 0000000000000000000000000000000000000000..96d6cafbdcf5cab6cc68eb7f0baac91fab49bfd6 --- /dev/null +++ b/third_party/musl/ndk_musl_include/alloca.h @@ -0,0 +1,17 @@ +#ifndef _ALLOCA_H +#define _ALLOCA_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define __NEED_size_t +#include + +#define alloca __builtin_alloca + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/ar.h b/third_party/musl/ndk_musl_include/ar.h new file mode 100644 index 0000000000000000000000000000000000000000..05c9e3550fcb1b4374ee355f3a8a58e96b88d913 --- /dev/null +++ b/third_party/musl/ndk_musl_include/ar.h @@ -0,0 +1,25 @@ +#ifndef _AR_H +#define _AR_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define ARMAG "!\n" +#define SARMAG 8 +#define ARFMAG "`\n" + +struct ar_hdr { + char ar_name[16]; + char ar_date[12]; + char ar_uid[6], ar_gid[6]; + char ar_mode[8]; + char ar_size[10]; + char ar_fmag[2]; +}; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/arpa/ftp.h b/third_party/musl/ndk_musl_include/arpa/ftp.h new file mode 100644 index 0000000000000000000000000000000000000000..96b0dedb7434e01244c845e912995dee5848ea89 --- /dev/null +++ b/third_party/musl/ndk_musl_include/arpa/ftp.h @@ -0,0 +1,35 @@ +#ifndef _ARPA_FTP_H +#define _ARPA_FTP_H +#define PRELIM 1 +#define COMPLETE 2 +#define CONTINUE 3 +#define TRANSIENT 4 +#define ERROR 5 +#define TYPE_A 1 +#define TYPE_E 2 +#define TYPE_I 3 +#define TYPE_L 4 +#define FORM_N 1 +#define FORM_T 2 +#define FORM_C 3 +#define STRU_F 1 +#define STRU_R 2 +#define STRU_P 3 +#define MODE_S 1 +#define MODE_B 2 +#define MODE_C 3 +#define REC_ESC '\377' +#define REC_EOR '\001' +#define REC_EOF '\002' +#define BLK_EOR 0x80 +#define BLK_EOF 0x40 +#define BLK_ERRORS 0x20 +#define BLK_RESTART 0x10 +#define BLK_BYTECOUNT 2 +#ifdef FTP_NAMES +char *modenames[] = {"0", "Stream", "Block", "Compressed" }; +char *strunames[] = {"0", "File", "Record", "Page" }; +char *typenames[] = {"0", "ASCII", "EBCDIC", "Image", "Local" }; +char *formnames[] = {"0", "Nonprint", "Telnet", "Carriage-control" }; +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/arpa/inet.h b/third_party/musl/ndk_musl_include/arpa/inet.h new file mode 100644 index 0000000000000000000000000000000000000000..6614e1d16b83bcc8960a9346c8a7047c8240e966 --- /dev/null +++ b/third_party/musl/ndk_musl_include/arpa/inet.h @@ -0,0 +1,36 @@ +#ifndef _ARPA_INET_H +#define _ARPA_INET_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +uint32_t htonl(uint32_t); +uint16_t htons(uint16_t); +uint32_t ntohl(uint32_t); +uint16_t ntohs(uint16_t); + +in_addr_t inet_addr (const char *); +in_addr_t inet_network (const char *); +char *inet_ntoa (struct in_addr); +int inet_pton (int, const char *__restrict, void *__restrict); +const char *inet_ntop (int, const void *__restrict, char *__restrict, socklen_t); + +int inet_aton (const char *, struct in_addr *); +struct in_addr inet_makeaddr(in_addr_t, in_addr_t); +in_addr_t inet_lnaof(struct in_addr); +in_addr_t inet_netof(struct in_addr); + +#undef INET_ADDRSTRLEN +#undef INET6_ADDRSTRLEN +#define INET_ADDRSTRLEN 16 +#define INET6_ADDRSTRLEN 46 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/arpa/nameser.h b/third_party/musl/ndk_musl_include/arpa/nameser.h new file mode 100644 index 0000000000000000000000000000000000000000..6f36f8cbe263aad04a2d8f4062ba0761fb8147ad --- /dev/null +++ b/third_party/musl/ndk_musl_include/arpa/nameser.h @@ -0,0 +1,455 @@ +#ifndef _ARPA_NAMESER_H +#define _ARPA_NAMESER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#define __NAMESER 19991006 +#define NS_PACKETSZ 512 +#define NS_MAXDNAME 1025 +#define NS_MAXMSG 65535 +#define NS_MAXCDNAME 255 +#define NS_MAXLABEL 63 +#define NS_HFIXEDSZ 12 +#define NS_QFIXEDSZ 4 +#define NS_RRFIXEDSZ 10 +#define NS_INT32SZ 4 +#define NS_INT16SZ 2 +#define NS_INT8SZ 1 +#define NS_INADDRSZ 4 +#define NS_IN6ADDRSZ 16 +#define NS_CMPRSFLGS 0xc0 +#define NS_DEFAULTPORT 53 + +typedef enum __ns_sect { + ns_s_qd = 0, + ns_s_zn = 0, + ns_s_an = 1, + ns_s_pr = 1, + ns_s_ns = 2, + ns_s_ud = 2, + ns_s_ar = 3, + ns_s_max = 4 +} ns_sect; + +typedef struct __ns_msg { + const unsigned char *_msg, *_eom; + uint16_t _id, _flags, _counts[ns_s_max]; + const unsigned char *_sections[ns_s_max]; + ns_sect _sect; + int _rrnum; + const unsigned char *_msg_ptr; +} ns_msg; + +struct _ns_flagdata { int mask, shift; }; +extern const struct _ns_flagdata _ns_flagdata[]; + +#define ns_msg_id(handle) ((handle)._id + 0) +#define ns_msg_base(handle) ((handle)._msg + 0) +#define ns_msg_end(handle) ((handle)._eom + 0) +#define ns_msg_size(handle) ((handle)._eom - (handle)._msg) +#define ns_msg_count(handle, section) ((handle)._counts[section] + 0) +#define ns_msg_getflag(handle, flag) \ + (((handle)._flags & _ns_flagdata[flag].mask) >> _ns_flagdata[flag].shift) + +typedef struct __ns_rr { + char name[NS_MAXDNAME]; + uint16_t type; + uint16_t rr_class; + uint32_t ttl; + uint16_t rdlength; + const unsigned char *rdata; +} ns_rr; + +#define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".") +#define ns_rr_type(rr) ((ns_type)((rr).type + 0)) +#define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0)) +#define ns_rr_ttl(rr) ((rr).ttl + 0) +#define ns_rr_rdlen(rr) ((rr).rdlength + 0) +#define ns_rr_rdata(rr) ((rr).rdata + 0) + +typedef enum __ns_flag { + ns_f_qr, + ns_f_opcode, + ns_f_aa, + ns_f_tc, + ns_f_rd, + ns_f_ra, + ns_f_z, + ns_f_ad, + ns_f_cd, + ns_f_rcode, + ns_f_max +} ns_flag; + +typedef enum __ns_opcode { + ns_o_query = 0, + ns_o_iquery = 1, + ns_o_status = 2, + ns_o_notify = 4, + ns_o_update = 5, + ns_o_max = 6 +} ns_opcode; + +typedef enum __ns_rcode { + ns_r_noerror = 0, + ns_r_formerr = 1, + ns_r_servfail = 2, + ns_r_nxdomain = 3, + ns_r_notimpl = 4, + ns_r_refused = 5, + ns_r_yxdomain = 6, + ns_r_yxrrset = 7, + ns_r_nxrrset = 8, + ns_r_notauth = 9, + ns_r_notzone = 10, + ns_r_max = 11, + ns_r_badvers = 16, + ns_r_badsig = 16, + ns_r_badkey = 17, + ns_r_badtime = 18 +} ns_rcode; + +typedef enum __ns_update_operation { + ns_uop_delete = 0, + ns_uop_add = 1, + ns_uop_max = 2 +} ns_update_operation; + +struct ns_tsig_key { + char name[NS_MAXDNAME], alg[NS_MAXDNAME]; + unsigned char *data; + int len; +}; +typedef struct ns_tsig_key ns_tsig_key; + +struct ns_tcp_tsig_state { + int counter; + struct dst_key *key; + void *ctx; + unsigned char sig[NS_PACKETSZ]; + int siglen; +}; +typedef struct ns_tcp_tsig_state ns_tcp_tsig_state; + +#define NS_TSIG_FUDGE 300 +#define NS_TSIG_TCP_COUNT 100 +#define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT" + +#define NS_TSIG_ERROR_NO_TSIG -10 +#define NS_TSIG_ERROR_NO_SPACE -11 +#define NS_TSIG_ERROR_FORMERR -12 + +typedef enum __ns_type { + ns_t_invalid = 0, + ns_t_a = 1, + ns_t_ns = 2, + ns_t_md = 3, + ns_t_mf = 4, + ns_t_cname = 5, + ns_t_soa = 6, + ns_t_mb = 7, + ns_t_mg = 8, + ns_t_mr = 9, + ns_t_null = 10, + ns_t_wks = 11, + ns_t_ptr = 12, + ns_t_hinfo = 13, + ns_t_minfo = 14, + ns_t_mx = 15, + ns_t_txt = 16, + ns_t_rp = 17, + ns_t_afsdb = 18, + ns_t_x25 = 19, + ns_t_isdn = 20, + ns_t_rt = 21, + ns_t_nsap = 22, + ns_t_nsap_ptr = 23, + ns_t_sig = 24, + ns_t_key = 25, + ns_t_px = 26, + ns_t_gpos = 27, + ns_t_aaaa = 28, + ns_t_loc = 29, + ns_t_nxt = 30, + ns_t_eid = 31, + ns_t_nimloc = 32, + ns_t_srv = 33, + ns_t_atma = 34, + ns_t_naptr = 35, + ns_t_kx = 36, + ns_t_cert = 37, + ns_t_a6 = 38, + ns_t_dname = 39, + ns_t_sink = 40, + ns_t_opt = 41, + ns_t_apl = 42, + ns_t_tkey = 249, + ns_t_tsig = 250, + ns_t_ixfr = 251, + ns_t_axfr = 252, + ns_t_mailb = 253, + ns_t_maila = 254, + ns_t_any = 255, + ns_t_zxfr = 256, + ns_t_max = 65536 +} ns_type; + +#define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \ + (t) == ns_t_mailb || (t) == ns_t_maila) +#define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt) +#define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t)) +#define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr) +#define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \ + (t) == ns_t_zxfr) + +typedef enum __ns_class { + ns_c_invalid = 0, + ns_c_in = 1, + ns_c_2 = 2, + ns_c_chaos = 3, + ns_c_hs = 4, + ns_c_none = 254, + ns_c_any = 255, + ns_c_max = 65536 +} ns_class; + +typedef enum __ns_key_types { + ns_kt_rsa = 1, + ns_kt_dh = 2, + ns_kt_dsa = 3, + ns_kt_private = 254 +} ns_key_types; + +typedef enum __ns_cert_types { + cert_t_pkix = 1, + cert_t_spki = 2, + cert_t_pgp = 3, + cert_t_url = 253, + cert_t_oid = 254 +} ns_cert_types; + +#define NS_KEY_TYPEMASK 0xC000 +#define NS_KEY_TYPE_AUTH_CONF 0x0000 +#define NS_KEY_TYPE_CONF_ONLY 0x8000 +#define NS_KEY_TYPE_AUTH_ONLY 0x4000 +#define NS_KEY_TYPE_NO_KEY 0xC000 +#define NS_KEY_NO_AUTH 0x8000 +#define NS_KEY_NO_CONF 0x4000 +#define NS_KEY_RESERVED2 0x2000 +#define NS_KEY_EXTENDED_FLAGS 0x1000 +#define NS_KEY_RESERVED4 0x0800 +#define NS_KEY_RESERVED5 0x0400 +#define NS_KEY_NAME_TYPE 0x0300 +#define NS_KEY_NAME_USER 0x0000 +#define NS_KEY_NAME_ENTITY 0x0200 +#define NS_KEY_NAME_ZONE 0x0100 +#define NS_KEY_NAME_RESERVED 0x0300 +#define NS_KEY_RESERVED8 0x0080 +#define NS_KEY_RESERVED9 0x0040 +#define NS_KEY_RESERVED10 0x0020 +#define NS_KEY_RESERVED11 0x0010 +#define NS_KEY_SIGNATORYMASK 0x000F +#define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \ + NS_KEY_RESERVED4 | \ + NS_KEY_RESERVED5 | \ + NS_KEY_RESERVED8 | \ + NS_KEY_RESERVED9 | \ + NS_KEY_RESERVED10 | \ + NS_KEY_RESERVED11 ) +#define NS_KEY_RESERVED_BITMASK2 0xFFFF +#define NS_ALG_MD5RSA 1 +#define NS_ALG_DH 2 +#define NS_ALG_DSA 3 +#define NS_ALG_DSS NS_ALG_DSA +#define NS_ALG_EXPIRE_ONLY 253 +#define NS_ALG_PRIVATE_OID 254 + +#define NS_KEY_PROT_TLS 1 +#define NS_KEY_PROT_EMAIL 2 +#define NS_KEY_PROT_DNSSEC 3 +#define NS_KEY_PROT_IPSEC 4 +#define NS_KEY_PROT_ANY 255 + +#define NS_MD5RSA_MIN_BITS 512 +#define NS_MD5RSA_MAX_BITS 4096 +#define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3) +#define NS_MD5RSA_MAX_BASE64 (((NS_MD5RSA_MAX_BYTES+2)/3)*4) +#define NS_MD5RSA_MIN_SIZE ((NS_MD5RSA_MIN_BITS+7)/8) +#define NS_MD5RSA_MAX_SIZE ((NS_MD5RSA_MAX_BITS+7)/8) + +#define NS_DSA_SIG_SIZE 41 +#define NS_DSA_MIN_SIZE 213 +#define NS_DSA_MAX_BYTES 405 + +#define NS_SIG_TYPE 0 +#define NS_SIG_ALG 2 +#define NS_SIG_LABELS 3 +#define NS_SIG_OTTL 4 +#define NS_SIG_EXPIR 8 +#define NS_SIG_SIGNED 12 +#define NS_SIG_FOOT 16 +#define NS_SIG_SIGNER 18 +#define NS_NXT_BITS 8 +#define NS_NXT_BIT_SET( n,p) (p[(n)/NS_NXT_BITS] |= (0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] & (0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_MAX 127 + +#define NS_OPT_DNSSEC_OK 0x8000U +#define NS_OPT_NSID 3 + +#define NS_GET16(s, cp) (void)((s) = ns_get16(((cp)+=2)-2)) +#define NS_GET32(l, cp) (void)((l) = ns_get32(((cp)+=4)-4)) +#define NS_PUT16(s, cp) ns_put16((s), ((cp)+=2)-2) +#define NS_PUT32(l, cp) ns_put32((l), ((cp)+=4)-4) + +unsigned ns_get16(const unsigned char *); +unsigned long ns_get32(const unsigned char *); +void ns_put16(unsigned, unsigned char *); +void ns_put32(unsigned long, unsigned char *); + +int ns_initparse(const unsigned char *, int, ns_msg *); +int ns_parserr(ns_msg *, ns_sect, int, ns_rr *); +int ns_skiprr(const unsigned char *, const unsigned char *, ns_sect, int); +int ns_name_uncompress(const unsigned char *, const unsigned char *, const unsigned char *, char *, size_t); + + +#define __BIND 19950621 + +typedef struct { + unsigned id :16; +#if __BYTE_ORDER == __BIG_ENDIAN + unsigned qr: 1; + unsigned opcode: 4; + unsigned aa: 1; + unsigned tc: 1; + unsigned rd: 1; + unsigned ra: 1; + unsigned unused :1; + unsigned ad: 1; + unsigned cd: 1; + unsigned rcode :4; +#else + unsigned rd :1; + unsigned tc :1; + unsigned aa :1; + unsigned opcode :4; + unsigned qr :1; + unsigned rcode :4; + unsigned cd: 1; + unsigned ad: 1; + unsigned unused :1; + unsigned ra :1; +#endif + unsigned qdcount :16; + unsigned ancount :16; + unsigned nscount :16; + unsigned arcount :16; +} HEADER; + +#define PACKETSZ NS_PACKETSZ +#define MAXDNAME NS_MAXDNAME +#define MAXCDNAME NS_MAXCDNAME +#define MAXLABEL NS_MAXLABEL +#define HFIXEDSZ NS_HFIXEDSZ +#define QFIXEDSZ NS_QFIXEDSZ +#define RRFIXEDSZ NS_RRFIXEDSZ +#define INT32SZ NS_INT32SZ +#define INT16SZ NS_INT16SZ +#define INT8SZ NS_INT8SZ +#define INADDRSZ NS_INADDRSZ +#define IN6ADDRSZ NS_IN6ADDRSZ +#define INDIR_MASK NS_CMPRSFLGS +#define NAMESERVER_PORT NS_DEFAULTPORT + +#define S_ZONE ns_s_zn +#define S_PREREQ ns_s_pr +#define S_UPDATE ns_s_ud +#define S_ADDT ns_s_ar + +#define QUERY ns_o_query +#define IQUERY ns_o_iquery +#define STATUS ns_o_status +#define NS_NOTIFY_OP ns_o_notify +#define NS_UPDATE_OP ns_o_update + +#define NOERROR ns_r_noerror +#define FORMERR ns_r_formerr +#define SERVFAIL ns_r_servfail +#define NXDOMAIN ns_r_nxdomain +#define NOTIMP ns_r_notimpl +#define REFUSED ns_r_refused +#define YXDOMAIN ns_r_yxdomain +#define YXRRSET ns_r_yxrrset +#define NXRRSET ns_r_nxrrset +#define NOTAUTH ns_r_notauth +#define NOTZONE ns_r_notzone + +#define DELETE ns_uop_delete +#define ADD ns_uop_add + +#define T_A ns_t_a +#define T_NS ns_t_ns +#define T_MD ns_t_md +#define T_MF ns_t_mf +#define T_CNAME ns_t_cname +#define T_SOA ns_t_soa +#define T_MB ns_t_mb +#define T_MG ns_t_mg +#define T_MR ns_t_mr +#define T_NULL ns_t_null +#define T_WKS ns_t_wks +#define T_PTR ns_t_ptr +#define T_HINFO ns_t_hinfo +#define T_MINFO ns_t_minfo +#define T_MX ns_t_mx +#define T_TXT ns_t_txt +#define T_RP ns_t_rp +#define T_AFSDB ns_t_afsdb +#define T_X25 ns_t_x25 +#define T_ISDN ns_t_isdn +#define T_RT ns_t_rt +#define T_NSAP ns_t_nsap +#define T_NSAP_PTR ns_t_nsap_ptr +#define T_SIG ns_t_sig +#define T_KEY ns_t_key +#define T_PX ns_t_px +#define T_GPOS ns_t_gpos +#define T_AAAA ns_t_aaaa +#define T_LOC ns_t_loc +#define T_NXT ns_t_nxt +#define T_EID ns_t_eid +#define T_NIMLOC ns_t_nimloc +#define T_SRV ns_t_srv +#define T_ATMA ns_t_atma +#define T_NAPTR ns_t_naptr +#define T_A6 ns_t_a6 +#define T_DNAME ns_t_dname +#define T_TSIG ns_t_tsig +#define T_IXFR ns_t_ixfr +#define T_AXFR ns_t_axfr +#define T_MAILB ns_t_mailb +#define T_MAILA ns_t_maila +#define T_ANY ns_t_any + +#define C_IN ns_c_in +#define C_CHAOS ns_c_chaos +#define C_HS ns_c_hs +#define C_NONE ns_c_none +#define C_ANY ns_c_any + +#define GETSHORT NS_GET16 +#define GETLONG NS_GET32 +#define PUTSHORT NS_PUT16 +#define PUTLONG NS_PUT32 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/arpa/nameser_compat.h b/third_party/musl/ndk_musl_include/arpa/nameser_compat.h new file mode 100644 index 0000000000000000000000000000000000000000..c69721e5d4ca88182ca1ce61424579984c2592b4 --- /dev/null +++ b/third_party/musl/ndk_musl_include/arpa/nameser_compat.h @@ -0,0 +1,2 @@ +#include + diff --git a/third_party/musl/ndk_musl_include/arpa/telnet.h b/third_party/musl/ndk_musl_include/arpa/telnet.h new file mode 100644 index 0000000000000000000000000000000000000000..284a8c2b48eea741d9ebcbf7a108f6bdbd8f25e0 --- /dev/null +++ b/third_party/musl/ndk_musl_include/arpa/telnet.h @@ -0,0 +1,251 @@ +#ifndef _ARPA_TELNET_H +#define _ARPA_TELNET_H + +#define IAC 255 +#define DONT 254 +#define DO 253 +#define WONT 252 +#define WILL 251 +#define SB 250 +#define GA 249 +#define EL 248 +#define EC 247 +#define AYT 246 +#define AO 245 +#define IP 244 +#define BREAK 243 +#define DM 242 +#define NOP 241 +#define SE 240 +#define EOR 239 +#define ABORT 238 +#define SUSP 237 +#define xEOF 236 + +#define SYNCH 242 + +#define telcmds ((char [][6]){ "EOF", "SUSP", "ABORT", "EOR", "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC", "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", 0 }) + +#define TELCMD_FIRST xEOF +#define TELCMD_LAST IAC +#define TELCMD_OK(x) ((unsigned int)(x) <= TELCMD_LAST && \ + (unsigned int)(x) >= TELCMD_FIRST) +#define TELCMD(x) telcmds[(x)-TELCMD_FIRST] + +#define TELOPT_BINARY 0 +#define TELOPT_ECHO 1 +#define TELOPT_RCP 2 +#define TELOPT_SGA 3 +#define TELOPT_NAMS 4 +#define TELOPT_STATUS 5 +#define TELOPT_TM 6 +#define TELOPT_RCTE 7 +#define TELOPT_NAOL 8 +#define TELOPT_NAOP 9 +#define TELOPT_NAOCRD 10 +#define TELOPT_NAOHTS 11 +#define TELOPT_NAOHTD 12 +#define TELOPT_NAOFFD 13 +#define TELOPT_NAOVTS 14 +#define TELOPT_NAOVTD 15 +#define TELOPT_NAOLFD 16 +#define TELOPT_XASCII 17 +#define TELOPT_LOGOUT 18 +#define TELOPT_BM 19 +#define TELOPT_DET 20 +#define TELOPT_SUPDUP 21 +#define TELOPT_SUPDUPOUTPUT 22 +#define TELOPT_SNDLOC 23 +#define TELOPT_TTYPE 24 +#define TELOPT_EOR 25 +#define TELOPT_TUID 26 +#define TELOPT_OUTMRK 27 +#define TELOPT_TTYLOC 28 +#define TELOPT_3270REGIME 29 +#define TELOPT_X3PAD 30 +#define TELOPT_NAWS 31 +#define TELOPT_TSPEED 32 +#define TELOPT_LFLOW 33 +#define TELOPT_LINEMODE 34 +#define TELOPT_XDISPLOC 35 +#define TELOPT_OLD_ENVIRON 36 +#define TELOPT_AUTHENTICATION 37/* Authenticate */ +#define TELOPT_ENCRYPT 38 +#define TELOPT_NEW_ENVIRON 39 +#define TELOPT_EXOPL 255 + + +#define NTELOPTS (1+TELOPT_NEW_ENVIRON) +#ifdef TELOPTS +char *telopts[NTELOPTS+1] = { + "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME", + "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP", + "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS", + "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO", + "DATA ENTRY TERMINAL", "SUPDUP", "SUPDUP OUTPUT", + "SEND LOCATION", "TERMINAL TYPE", "END OF RECORD", + "TACACS UID", "OUTPUT MARKING", "TTYLOC", + "3270 REGIME", "X.3 PAD", "NAWS", "TSPEED", "LFLOW", + "LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION", + "ENCRYPT", "NEW-ENVIRON", + 0, +}; +#define TELOPT_FIRST TELOPT_BINARY +#define TELOPT_LAST TELOPT_NEW_ENVIRON +#define TELOPT_OK(x) ((unsigned int)(x) <= TELOPT_LAST) +#define TELOPT(x) telopts[(x)-TELOPT_FIRST] +#endif + +#define TELQUAL_IS 0 +#define TELQUAL_SEND 1 +#define TELQUAL_INFO 2 +#define TELQUAL_REPLY 2 +#define TELQUAL_NAME 3 + +#define LFLOW_OFF 0 +#define LFLOW_ON 1 +#define LFLOW_RESTART_ANY 2 +#define LFLOW_RESTART_XON 3 + + +#define LM_MODE 1 +#define LM_FORWARDMASK 2 +#define LM_SLC 3 + +#define MODE_EDIT 0x01 +#define MODE_TRAPSIG 0x02 +#define MODE_ACK 0x04 +#define MODE_SOFT_TAB 0x08 +#define MODE_LIT_ECHO 0x10 + +#define MODE_MASK 0x1f + +#define MODE_FLOW 0x0100 +#define MODE_ECHO 0x0200 +#define MODE_INBIN 0x0400 +#define MODE_OUTBIN 0x0800 +#define MODE_FORCE 0x1000 + +#define SLC_SYNCH 1 +#define SLC_BRK 2 +#define SLC_IP 3 +#define SLC_AO 4 +#define SLC_AYT 5 +#define SLC_EOR 6 +#define SLC_ABORT 7 +#define SLC_EOF 8 +#define SLC_SUSP 9 +#define SLC_EC 10 +#define SLC_EL 11 +#define SLC_EW 12 +#define SLC_RP 13 +#define SLC_LNEXT 14 +#define SLC_XON 15 +#define SLC_XOFF 16 +#define SLC_FORW1 17 +#define SLC_FORW2 18 + +#define NSLC 18 + +#define SLC_NAMELIST "0", "SYNCH", "BRK", "IP", "AO", "AYT", "EOR", \ + "ABORT", "EOF", "SUSP", "EC", "EL", "EW", "RP", \ + "LNEXT", "XON", "XOFF", "FORW1", "FORW2", 0, +#ifdef SLC_NAMES +char *slc_names[] = { + SLC_NAMELIST +}; +#else +extern char *slc_names[]; +#define SLC_NAMES SLC_NAMELIST +#endif + +#define SLC_NAME_OK(x) ((unsigned int)(x) <= NSLC) +#define SLC_NAME(x) slc_names[x] + +#define SLC_NOSUPPORT 0 +#define SLC_CANTCHANGE 1 +#define SLC_VARIABLE 2 +#define SLC_DEFAULT 3 +#define SLC_LEVELBITS 0x03 + +#define SLC_FUNC 0 +#define SLC_FLAGS 1 +#define SLC_VALUE 2 + +#define SLC_ACK 0x80 +#define SLC_FLUSHIN 0x40 +#define SLC_FLUSHOUT 0x20 + +#define OLD_ENV_VAR 1 +#define OLD_ENV_VALUE 0 +#define NEW_ENV_VAR 0 +#define NEW_ENV_VALUE 1 +#define ENV_ESC 2 +#define ENV_USERVAR 3 + +#define AUTH_WHO_CLIENT 0 +#define AUTH_WHO_SERVER 1 +#define AUTH_WHO_MASK 1 + +#define AUTH_HOW_ONE_WAY 0 +#define AUTH_HOW_MUTUAL 2 +#define AUTH_HOW_MASK 2 + +#define AUTHTYPE_NULL 0 +#define AUTHTYPE_KERBEROS_V4 1 +#define AUTHTYPE_KERBEROS_V5 2 +#define AUTHTYPE_SPX 3 +#define AUTHTYPE_MINK 4 +#define AUTHTYPE_CNT 5 + +#define AUTHTYPE_TEST 99 + +#ifdef AUTH_NAMES +char *authtype_names[] = { + "NULL", "KERBEROS_V4", "KERBEROS_V5", "SPX", "MINK", 0, +}; +#else +extern char *authtype_names[]; +#endif + +#define AUTHTYPE_NAME_OK(x) ((unsigned int)(x) < AUTHTYPE_CNT) +#define AUTHTYPE_NAME(x) authtype_names[x] + +#define ENCRYPT_IS 0 +#define ENCRYPT_SUPPORT 1 +#define ENCRYPT_REPLY 2 +#define ENCRYPT_START 3 +#define ENCRYPT_END 4 +#define ENCRYPT_REQSTART 5 +#define ENCRYPT_REQEND 6 +#define ENCRYPT_ENC_KEYID 7 +#define ENCRYPT_DEC_KEYID 8 +#define ENCRYPT_CNT 9 + +#define ENCTYPE_ANY 0 +#define ENCTYPE_DES_CFB64 1 +#define ENCTYPE_DES_OFB64 2 +#define ENCTYPE_CNT 3 + +#ifdef ENCRYPT_NAMES +char *encrypt_names[] = { + "IS", "SUPPORT", "REPLY", "START", "END", + "REQUEST-START", "REQUEST-END", "ENC-KEYID", "DEC-KEYID", + 0, +}; +char *enctype_names[] = { + "ANY", "DES_CFB64", "DES_OFB64", 0, +}; +#else +extern char *encrypt_names[]; +extern char *enctype_names[]; +#endif + + +#define ENCRYPT_NAME_OK(x) ((unsigned int)(x) < ENCRYPT_CNT) +#define ENCRYPT_NAME(x) encrypt_names[x] + +#define ENCTYPE_NAME_OK(x) ((unsigned int)(x) < ENCTYPE_CNT) +#define ENCTYPE_NAME(x) enctype_names[x] + +#endif diff --git a/third_party/musl/ndk_musl_include/arpa/tftp.h b/third_party/musl/ndk_musl_include/arpa/tftp.h new file mode 100644 index 0000000000000000000000000000000000000000..7e45e4e76dec43cf231ed3d8ed54ae5a7dbffd8b --- /dev/null +++ b/third_party/musl/ndk_musl_include/arpa/tftp.h @@ -0,0 +1,31 @@ +#ifndef _ARPA_TFTP_H +#define _ARPA_TFTP_H +#define SEGSIZE 512 +#define RRQ 01 +#define WRQ 02 +#define DATA 03 +#define ACK 04 +#define ERROR 05 +struct tftphdr { + short th_opcode; + union { + unsigned short tu_block; + short tu_code; + char tu_stuff[1]; + } th_u; + char th_data[1]; +}; +#define th_block th_u.tu_block +#define th_code th_u.tu_code +#define th_stuff th_u.tu_stuff +#define th_msg th_data +#define EUNDEF 0 +#define ENOTFOUND 1 +#define EACCESS 2 +#define ENOSPACE 3 +#define EBADOP 4 +#define EBADID 5 +#define EEXISTS 6 +#define ENOUSER 7 +#endif + diff --git a/third_party/musl/ndk_musl_include/assert.h b/third_party/musl/ndk_musl_include/assert.h new file mode 100644 index 0000000000000000000000000000000000000000..ff1573040469607fad483ee1f25fb1ca24e3b0c7 --- /dev/null +++ b/third_party/musl/ndk_musl_include/assert.h @@ -0,0 +1,23 @@ +#include + +#undef assert + +#ifdef NDEBUG +#define assert(x) (void)0 +#else +#define assert(x) ((void)((x) || (__assert_fail(#x, __FILE__, __LINE__, __func__),0))) +#endif + +#if __STDC_VERSION__ >= 201112L && !defined(__cplusplus) +#define static_assert _Static_assert +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_Noreturn void __assert_fail (const char *, const char *, int, const char *); + +#ifdef __cplusplus +} +#endif diff --git a/third_party/musl/ndk_musl_include/byteswap.h b/third_party/musl/ndk_musl_include/byteswap.h new file mode 100644 index 0000000000000000000000000000000000000000..aa4acbbe123f01b10dfd31da9aa894ebe6811b37 --- /dev/null +++ b/third_party/musl/ndk_musl_include/byteswap.h @@ -0,0 +1,26 @@ +#ifndef _BYTESWAP_H +#define _BYTESWAP_H + +#include +#include + +static __inline uint16_t __bswap_16(uint16_t __x) +{ + return __x<<8 | __x>>8; +} + +static __inline uint32_t __bswap_32(uint32_t __x) +{ + return __x>>24 | __x>>8&0xff00 | __x<<8&0xff0000 | __x<<24; +} + +static __inline uint64_t __bswap_64(uint64_t __x) +{ + return __bswap_32(__x)+0ULL<<32 | __bswap_32(__x>>32); +} + +#define bswap_16(x) __bswap_16(x) +#define bswap_32(x) __bswap_32(x) +#define bswap_64(x) __bswap_64(x) + +#endif diff --git a/third_party/musl/ndk_musl_include/complex.h b/third_party/musl/ndk_musl_include/complex.h new file mode 100644 index 0000000000000000000000000000000000000000..3ff6e1ad415c7f058908c00b953efe44e74cb739 --- /dev/null +++ b/third_party/musl/ndk_musl_include/complex.h @@ -0,0 +1,133 @@ +#ifndef _COMPLEX_H +#define _COMPLEX_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define complex _Complex +#ifdef __GNUC__ +#define _Complex_I (__extension__ (0.0f+1.0fi)) +#else +#define _Complex_I (0.0f+1.0fi) +#endif +#define I _Complex_I + +double complex cacos(double complex); +float complex cacosf(float complex); +long double complex cacosl(long double complex); + +double complex casin(double complex); +float complex casinf(float complex); +long double complex casinl(long double complex); + +double complex catan(double complex); +float complex catanf(float complex); +long double complex catanl(long double complex); + +double complex ccos(double complex); +float complex ccosf(float complex); +long double complex ccosl(long double complex); + +double complex csin(double complex); +float complex csinf(float complex); +long double complex csinl(long double complex); + +double complex ctan(double complex); +float complex ctanf(float complex); +long double complex ctanl(long double complex); + +double complex cacosh(double complex); +float complex cacoshf(float complex); +long double complex cacoshl(long double complex); + +double complex casinh(double complex); +float complex casinhf(float complex); +long double complex casinhl(long double complex); + +double complex catanh(double complex); +float complex catanhf(float complex); +long double complex catanhl(long double complex); + +double complex ccosh(double complex); +float complex ccoshf(float complex); +long double complex ccoshl(long double complex); + +double complex csinh(double complex); +float complex csinhf(float complex); +long double complex csinhl(long double complex); + +double complex ctanh(double complex); +float complex ctanhf(float complex); +long double complex ctanhl(long double complex); + +double complex cexp(double complex); +float complex cexpf(float complex); +long double complex cexpl(long double complex); + +double complex clog(double complex); +float complex clogf(float complex); +long double complex clogl(long double complex); + +double cabs(double complex); +float cabsf(float complex); +long double cabsl(long double complex); + +double complex cpow(double complex, double complex); +float complex cpowf(float complex, float complex); +long double complex cpowl(long double complex, long double complex); + +double complex csqrt(double complex); +float complex csqrtf(float complex); +long double complex csqrtl(long double complex); + +double carg(double complex); +float cargf(float complex); +long double cargl(long double complex); + +double cimag(double complex); +float cimagf(float complex); +long double cimagl(long double complex); + +double complex conj(double complex); +float complex conjf(float complex); +long double complex conjl(long double complex); + +double complex cproj(double complex); +float complex cprojf(float complex); +long double complex cprojl(long double complex); + +double creal(double complex); +float crealf(float complex); +long double creall(long double complex); + +#ifndef __cplusplus +#define __CIMAG(x, t) \ + (+(union { _Complex t __z; t __xy[2]; }){(_Complex t)(x)}.__xy[1]) + +#define creal(x) ((double)(x)) +#define crealf(x) ((float)(x)) +#define creall(x) ((long double)(x)) + +#define cimag(x) __CIMAG(x, double) +#define cimagf(x) __CIMAG(x, float) +#define cimagl(x) __CIMAG(x, long double) +#endif + +#if __STDC_VERSION__ >= 201112L +#if defined(_Imaginary_I) +#define __CMPLX(x, y, t) ((t)(x) + _Imaginary_I*(t)(y)) +#elif defined(__clang__) +#define __CMPLX(x, y, t) (+(_Complex t){ (t)(x), (t)(y) }) +#else +#define __CMPLX(x, y, t) (__builtin_complex((t)(x), (t)(y))) +#endif +#define CMPLX(x, y) __CMPLX(x, y, double) +#define CMPLXF(x, y) __CMPLX(x, y, float) +#define CMPLXL(x, y) __CMPLX(x, y, long double) +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/cpio.h b/third_party/musl/ndk_musl_include/cpio.h new file mode 100644 index 0000000000000000000000000000000000000000..e34e2b30156e6f36503b8eb0f06aa176ef90fcb2 --- /dev/null +++ b/third_party/musl/ndk_musl_include/cpio.h @@ -0,0 +1,29 @@ +#ifndef _CPIO_H +#define _CPIO_H + +#define MAGIC "070707" + +#define C_IRUSR 000400 +#define C_IWUSR 000200 +#define C_IXUSR 000100 +#define C_IRGRP 000040 +#define C_IWGRP 000020 +#define C_IXGRP 000010 +#define C_IROTH 000004 +#define C_IWOTH 000002 +#define C_IXOTH 000001 + +#define C_ISUID 004000 +#define C_ISGID 002000 +#define C_ISVTX 001000 + +#define C_ISBLK 060000 +#define C_ISCHR 020000 +#define C_ISDIR 040000 +#define C_ISFIFO 010000 +#define C_ISSOCK 0140000 +#define C_ISLNK 0120000 +#define C_ISCTG 0110000 +#define C_ISREG 0100000 + +#endif diff --git a/third_party/musl/ndk_musl_include/crypt.h b/third_party/musl/ndk_musl_include/crypt.h new file mode 100644 index 0000000000000000000000000000000000000000..014dee376b8233e41092b57838d5f8f9aa56c07c --- /dev/null +++ b/third_party/musl/ndk_musl_include/crypt.h @@ -0,0 +1,17 @@ +#ifndef _CRYPT_H +#define _CRYPT_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct crypt_data { + int initialized; + char __buf[256]; +}; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/ctype.h b/third_party/musl/ndk_musl_include/ctype.h new file mode 100644 index 0000000000000000000000000000000000000000..fbdba6e3fd9bfdac1c8dc4683aa001fbb9f69c74 --- /dev/null +++ b/third_party/musl/ndk_musl_include/ctype.h @@ -0,0 +1,77 @@ +#ifndef _CTYPE_H +#define _CTYPE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +int isalnum(int); +int isalpha(int); +int isblank(int); +int iscntrl(int); +int isdigit(int); +int isgraph(int); +int islower(int); +int isprint(int); +int ispunct(int); +int isspace(int); +int isupper(int); +int isxdigit(int); +int tolower(int); +int toupper(int); + +#ifndef __cplusplus +static __inline int __isspace(int _c) +{ + return _c == ' ' || (unsigned)_c-'\t' < 5; +} + +#define isalpha(a) (0 ? isalpha(a) : (((unsigned)(a)|32)-'a') < 26) +#define isdigit(a) (0 ? isdigit(a) : ((unsigned)(a)-'0') < 10) +#define islower(a) (0 ? islower(a) : ((unsigned)(a)-'a') < 26) +#define isupper(a) (0 ? isupper(a) : ((unsigned)(a)-'A') < 26) +#define isprint(a) (0 ? isprint(a) : ((unsigned)(a)-0x20) < 0x5f) +#define isgraph(a) (0 ? isgraph(a) : ((unsigned)(a)-0x21) < 0x5e) +#define isspace(a) __isspace(a) +#endif + + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) + +#define __NEED_locale_t +#include + +int isalnum_l(int, locale_t); +int isalpha_l(int, locale_t); +int isblank_l(int, locale_t); +int iscntrl_l(int, locale_t); +int isdigit_l(int, locale_t); +int isgraph_l(int, locale_t); +int islower_l(int, locale_t); +int isprint_l(int, locale_t); +int ispunct_l(int, locale_t); +int isspace_l(int, locale_t); +int isupper_l(int, locale_t); +int isxdigit_l(int, locale_t); +int tolower_l(int, locale_t); +int toupper_l(int, locale_t); + +int isascii(int); +int toascii(int); +#define _tolower(a) ((a)|0x20) +#define _toupper(a) ((a)&0x5f) +#define isascii(a) (0 ? isascii(a) : (unsigned)(a) < 128) + +#include + +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/dirent.h b/third_party/musl/ndk_musl_include/dirent.h new file mode 100644 index 0000000000000000000000000000000000000000..214c81ff8ccde45f67c41aa3856a206a0c0ff4e5 --- /dev/null +++ b/third_party/musl/ndk_musl_include/dirent.h @@ -0,0 +1,70 @@ +#ifndef _DIRENT_H +#define _DIRENT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_ino_t +#define __NEED_off_t +#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE) +#define __NEED_size_t +#endif + +#include + +#include + +typedef struct __dirstream DIR; + +#define d_fileno d_ino + +int closedir(DIR *); +DIR *fdopendir(int); +DIR *opendir(const char *); +struct dirent *readdir(DIR *); +int readdir_r(DIR *__restrict, struct dirent *__restrict, struct dirent **__restrict); +void rewinddir(DIR *); +int dirfd(DIR *); + +int alphasort(const struct dirent **, const struct dirent **); +int scandir(const char *, struct dirent ***, int (*)(const struct dirent *), int (*)(const struct dirent **, const struct dirent **)); + +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +void seekdir(DIR *, long); +long telldir(DIR *); +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define DT_UNKNOWN 0 +#define DT_FIFO 1 +#define DT_CHR 2 +#define DT_DIR 4 +#define DT_BLK 6 +#define DT_REG 8 +#define DT_LNK 10 +#define DT_SOCK 12 +#define DT_WHT 14 +#define IFTODT(x) ((x)>>12 & 017) +#define DTTOIF(x) ((x)<<12) +int getdents(int, struct dirent *, size_t); +#endif + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define dirent64 dirent +#define readdir64 readdir +#define readdir64_r readdir_r +#define scandir64 scandir +#define alphasort64 alphasort +#define off64_t off_t +#define ino64_t ino_t +#define getdents64 getdents +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/dlfcn.h b/third_party/musl/ndk_musl_include/dlfcn.h new file mode 100644 index 0000000000000000000000000000000000000000..c764c8bed96614f79c99eae433d3563f355ab96e --- /dev/null +++ b/third_party/musl/ndk_musl_include/dlfcn.h @@ -0,0 +1,52 @@ +#ifndef _DLFCN_H +#define _DLFCN_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define RTLD_LAZY 1 +#define RTLD_NOW 2 +#define RTLD_NOLOAD 4 +#define RTLD_NODELETE 4096 +#define RTLD_GLOBAL 256 +#define RTLD_LOCAL 0 + +#define RTLD_NEXT ((void *)-1) +#define RTLD_DEFAULT ((void *)0) + +#define RTLD_DI_LINKMAP 2 + +int dlclose(void *); +char *dlerror(void); +void *dlopen(const char *, int); +void *dlsym(void *__restrict, const char *__restrict); + +/* namespace apis */ +#define NS_NAME_MAX 255 +typedef struct { + char name[NS_NAME_MAX+1]; +} Dl_namespace; + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +typedef struct { + const char *dli_fname; + void *dli_fbase; + const char *dli_sname; + void *dli_saddr; +} Dl_info; +int dladdr(const void *, Dl_info *); +#endif + +#if _REDIR_TIME64 +__REDIR(dlsym, __dlsym_time64); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/elf.h b/third_party/musl/ndk_musl_include/elf.h new file mode 100644 index 0000000000000000000000000000000000000000..2acb0ae423cd2107c87bdc0ef2b4ef4f36cee13b --- /dev/null +++ b/third_party/musl/ndk_musl_include/elf.h @@ -0,0 +1,3292 @@ +#ifndef _ELF_H +#define _ELF_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +typedef uint16_t Elf32_Half; +typedef uint16_t Elf64_Half; + +typedef uint32_t Elf32_Word; +typedef int32_t Elf32_Sword; +typedef uint32_t Elf64_Word; +typedef int32_t Elf64_Sword; + +typedef uint64_t Elf32_Xword; +typedef int64_t Elf32_Sxword; +typedef uint64_t Elf64_Xword; +typedef int64_t Elf64_Sxword; + +typedef uint32_t Elf32_Addr; +typedef uint64_t Elf64_Addr; + +typedef uint32_t Elf32_Off; +typedef uint64_t Elf64_Off; + +typedef uint16_t Elf32_Section; +typedef uint16_t Elf64_Section; + +typedef Elf32_Half Elf32_Versym; +typedef Elf64_Half Elf64_Versym; + +#define EI_NIDENT (16) + +typedef struct { + unsigned char e_ident[EI_NIDENT]; + Elf32_Half e_type; + Elf32_Half e_machine; + Elf32_Word e_version; + Elf32_Addr e_entry; + Elf32_Off e_phoff; + Elf32_Off e_shoff; + Elf32_Word e_flags; + Elf32_Half e_ehsize; + Elf32_Half e_phentsize; + Elf32_Half e_phnum; + Elf32_Half e_shentsize; + Elf32_Half e_shnum; + Elf32_Half e_shstrndx; +} Elf32_Ehdr; + +typedef struct { + unsigned char e_ident[EI_NIDENT]; + Elf64_Half e_type; + Elf64_Half e_machine; + Elf64_Word e_version; + Elf64_Addr e_entry; + Elf64_Off e_phoff; + Elf64_Off e_shoff; + Elf64_Word e_flags; + Elf64_Half e_ehsize; + Elf64_Half e_phentsize; + Elf64_Half e_phnum; + Elf64_Half e_shentsize; + Elf64_Half e_shnum; + Elf64_Half e_shstrndx; +} Elf64_Ehdr; + +#define EI_MAG0 0 +#define ELFMAG0 0x7f + +#define EI_MAG1 1 +#define ELFMAG1 'E' + +#define EI_MAG2 2 +#define ELFMAG2 'L' + +#define EI_MAG3 3 +#define ELFMAG3 'F' + + +#define ELFMAG "\177ELF" +#define SELFMAG 4 + +#define EI_CLASS 4 +#define ELFCLASSNONE 0 +#define ELFCLASS32 1 +#define ELFCLASS64 2 +#define ELFCLASSNUM 3 + +#define EI_DATA 5 +#define ELFDATANONE 0 +#define ELFDATA2LSB 1 +#define ELFDATA2MSB 2 +#define ELFDATANUM 3 + +#define EI_VERSION 6 + + +#define EI_OSABI 7 +#define ELFOSABI_NONE 0 +#define ELFOSABI_SYSV 0 +#define ELFOSABI_HPUX 1 +#define ELFOSABI_NETBSD 2 +#define ELFOSABI_LINUX 3 +#define ELFOSABI_GNU 3 +#define ELFOSABI_SOLARIS 6 +#define ELFOSABI_AIX 7 +#define ELFOSABI_IRIX 8 +#define ELFOSABI_FREEBSD 9 +#define ELFOSABI_TRU64 10 +#define ELFOSABI_MODESTO 11 +#define ELFOSABI_OPENBSD 12 +#define ELFOSABI_ARM 97 +#define ELFOSABI_STANDALONE 255 + +#define EI_ABIVERSION 8 + +#define EI_PAD 9 + + + +#define ET_NONE 0 +#define ET_REL 1 +#define ET_EXEC 2 +#define ET_DYN 3 +#define ET_CORE 4 +#define ET_NUM 5 +#define ET_LOOS 0xfe00 +#define ET_HIOS 0xfeff +#define ET_LOPROC 0xff00 +#define ET_HIPROC 0xffff + + + +#define EM_NONE 0 +#define EM_M32 1 +#define EM_SPARC 2 +#define EM_386 3 +#define EM_68K 4 +#define EM_88K 5 +#define EM_860 7 +#define EM_MIPS 8 +#define EM_S370 9 +#define EM_MIPS_RS3_LE 10 + +#define EM_PARISC 15 +#define EM_VPP500 17 +#define EM_SPARC32PLUS 18 +#define EM_960 19 +#define EM_PPC 20 +#define EM_PPC64 21 +#define EM_S390 22 + +#define EM_V800 36 +#define EM_FR20 37 +#define EM_RH32 38 +#define EM_RCE 39 +#define EM_ARM 40 +#define EM_FAKE_ALPHA 41 +#define EM_SH 42 +#define EM_SPARCV9 43 +#define EM_TRICORE 44 +#define EM_ARC 45 +#define EM_H8_300 46 +#define EM_H8_300H 47 +#define EM_H8S 48 +#define EM_H8_500 49 +#define EM_IA_64 50 +#define EM_MIPS_X 51 +#define EM_COLDFIRE 52 +#define EM_68HC12 53 +#define EM_MMA 54 +#define EM_PCP 55 +#define EM_NCPU 56 +#define EM_NDR1 57 +#define EM_STARCORE 58 +#define EM_ME16 59 +#define EM_ST100 60 +#define EM_TINYJ 61 +#define EM_X86_64 62 +#define EM_PDSP 63 + +#define EM_FX66 66 +#define EM_ST9PLUS 67 +#define EM_ST7 68 +#define EM_68HC16 69 +#define EM_68HC11 70 +#define EM_68HC08 71 +#define EM_68HC05 72 +#define EM_SVX 73 +#define EM_ST19 74 +#define EM_VAX 75 +#define EM_CRIS 76 +#define EM_JAVELIN 77 +#define EM_FIREPATH 78 +#define EM_ZSP 79 +#define EM_MMIX 80 +#define EM_HUANY 81 +#define EM_PRISM 82 +#define EM_AVR 83 +#define EM_FR30 84 +#define EM_D10V 85 +#define EM_D30V 86 +#define EM_V850 87 +#define EM_M32R 88 +#define EM_MN10300 89 +#define EM_MN10200 90 +#define EM_PJ 91 +#define EM_OR1K 92 +#define EM_OPENRISC 92 +#define EM_ARC_A5 93 +#define EM_ARC_COMPACT 93 +#define EM_XTENSA 94 +#define EM_VIDEOCORE 95 +#define EM_TMM_GPP 96 +#define EM_NS32K 97 +#define EM_TPC 98 +#define EM_SNP1K 99 +#define EM_ST200 100 +#define EM_IP2K 101 +#define EM_MAX 102 +#define EM_CR 103 +#define EM_F2MC16 104 +#define EM_MSP430 105 +#define EM_BLACKFIN 106 +#define EM_SE_C33 107 +#define EM_SEP 108 +#define EM_ARCA 109 +#define EM_UNICORE 110 +#define EM_EXCESS 111 +#define EM_DXP 112 +#define EM_ALTERA_NIOS2 113 +#define EM_CRX 114 +#define EM_XGATE 115 +#define EM_C166 116 +#define EM_M16C 117 +#define EM_DSPIC30F 118 +#define EM_CE 119 +#define EM_M32C 120 +#define EM_TSK3000 131 +#define EM_RS08 132 +#define EM_SHARC 133 +#define EM_ECOG2 134 +#define EM_SCORE7 135 +#define EM_DSP24 136 +#define EM_VIDEOCORE3 137 +#define EM_LATTICEMICO32 138 +#define EM_SE_C17 139 +#define EM_TI_C6000 140 +#define EM_TI_C2000 141 +#define EM_TI_C5500 142 +#define EM_TI_ARP32 143 +#define EM_TI_PRU 144 +#define EM_MMDSP_PLUS 160 +#define EM_CYPRESS_M8C 161 +#define EM_R32C 162 +#define EM_TRIMEDIA 163 +#define EM_QDSP6 164 +#define EM_8051 165 +#define EM_STXP7X 166 +#define EM_NDS32 167 +#define EM_ECOG1X 168 +#define EM_MAXQ30 169 +#define EM_XIMO16 170 +#define EM_MANIK 171 +#define EM_CRAYNV2 172 +#define EM_RX 173 +#define EM_METAG 174 +#define EM_MCST_ELBRUS 175 +#define EM_ECOG16 176 +#define EM_CR16 177 +#define EM_ETPU 178 +#define EM_SLE9X 179 +#define EM_L10M 180 +#define EM_K10M 181 +#define EM_AARCH64 183 +#define EM_AVR32 185 +#define EM_STM8 186 +#define EM_TILE64 187 +#define EM_TILEPRO 188 +#define EM_MICROBLAZE 189 +#define EM_CUDA 190 +#define EM_TILEGX 191 +#define EM_CLOUDSHIELD 192 +#define EM_COREA_1ST 193 +#define EM_COREA_2ND 194 +#define EM_ARC_COMPACT2 195 +#define EM_OPEN8 196 +#define EM_RL78 197 +#define EM_VIDEOCORE5 198 +#define EM_78KOR 199 +#define EM_56800EX 200 +#define EM_BA1 201 +#define EM_BA2 202 +#define EM_XCORE 203 +#define EM_MCHP_PIC 204 +#define EM_KM32 210 +#define EM_KMX32 211 +#define EM_EMX16 212 +#define EM_EMX8 213 +#define EM_KVARC 214 +#define EM_CDP 215 +#define EM_COGE 216 +#define EM_COOL 217 +#define EM_NORC 218 +#define EM_CSR_KALIMBA 219 +#define EM_Z80 220 +#define EM_VISIUM 221 +#define EM_FT32 222 +#define EM_MOXIE 223 +#define EM_AMDGPU 224 +#define EM_RISCV 243 +#define EM_BPF 247 +#define EM_CSKY 252 +#define EM_NUM 253 + +#define EM_ALPHA 0x9026 + +#define EV_NONE 0 +#define EV_CURRENT 1 +#define EV_NUM 2 + +typedef struct { + Elf32_Word sh_name; + Elf32_Word sh_type; + Elf32_Word sh_flags; + Elf32_Addr sh_addr; + Elf32_Off sh_offset; + Elf32_Word sh_size; + Elf32_Word sh_link; + Elf32_Word sh_info; + Elf32_Word sh_addralign; + Elf32_Word sh_entsize; +} Elf32_Shdr; + +typedef struct { + Elf64_Word sh_name; + Elf64_Word sh_type; + Elf64_Xword sh_flags; + Elf64_Addr sh_addr; + Elf64_Off sh_offset; + Elf64_Xword sh_size; + Elf64_Word sh_link; + Elf64_Word sh_info; + Elf64_Xword sh_addralign; + Elf64_Xword sh_entsize; +} Elf64_Shdr; + + + +#define SHN_UNDEF 0 +#define SHN_LORESERVE 0xff00 +#define SHN_LOPROC 0xff00 +#define SHN_BEFORE 0xff00 + +#define SHN_AFTER 0xff01 + +#define SHN_HIPROC 0xff1f +#define SHN_LOOS 0xff20 +#define SHN_HIOS 0xff3f +#define SHN_ABS 0xfff1 +#define SHN_COMMON 0xfff2 +#define SHN_XINDEX 0xffff +#define SHN_HIRESERVE 0xffff + + + +#define SHT_NULL 0 +#define SHT_PROGBITS 1 +#define SHT_SYMTAB 2 +#define SHT_STRTAB 3 +#define SHT_RELA 4 +#define SHT_HASH 5 +#define SHT_DYNAMIC 6 +#define SHT_NOTE 7 +#define SHT_NOBITS 8 +#define SHT_REL 9 +#define SHT_SHLIB 10 +#define SHT_DYNSYM 11 +#define SHT_INIT_ARRAY 14 +#define SHT_FINI_ARRAY 15 +#define SHT_PREINIT_ARRAY 16 +#define SHT_GROUP 17 +#define SHT_SYMTAB_SHNDX 18 +#define SHT_NUM 19 +#define SHT_LOOS 0x60000000 +#define SHT_GNU_ATTRIBUTES 0x6ffffff5 +#define SHT_GNU_HASH 0x6ffffff6 +#define SHT_GNU_LIBLIST 0x6ffffff7 +#define SHT_CHECKSUM 0x6ffffff8 +#define SHT_LOSUNW 0x6ffffffa +#define SHT_SUNW_move 0x6ffffffa +#define SHT_SUNW_COMDAT 0x6ffffffb +#define SHT_SUNW_syminfo 0x6ffffffc +#define SHT_GNU_verdef 0x6ffffffd +#define SHT_GNU_verneed 0x6ffffffe +#define SHT_GNU_versym 0x6fffffff +#define SHT_HISUNW 0x6fffffff +#define SHT_HIOS 0x6fffffff +#define SHT_LOPROC 0x70000000 +#define SHT_HIPROC 0x7fffffff +#define SHT_LOUSER 0x80000000 +#define SHT_HIUSER 0x8fffffff + +#define SHF_WRITE (1 << 0) +#define SHF_ALLOC (1 << 1) +#define SHF_EXECINSTR (1 << 2) +#define SHF_MERGE (1 << 4) +#define SHF_STRINGS (1 << 5) +#define SHF_INFO_LINK (1 << 6) +#define SHF_LINK_ORDER (1 << 7) +#define SHF_OS_NONCONFORMING (1 << 8) + +#define SHF_GROUP (1 << 9) +#define SHF_TLS (1 << 10) +#define SHF_COMPRESSED (1 << 11) +#define SHF_MASKOS 0x0ff00000 +#define SHF_MASKPROC 0xf0000000 +#define SHF_ORDERED (1 << 30) +#define SHF_EXCLUDE (1U << 31) + +typedef struct { + Elf32_Word ch_type; + Elf32_Word ch_size; + Elf32_Word ch_addralign; +} Elf32_Chdr; + +typedef struct { + Elf64_Word ch_type; + Elf64_Word ch_reserved; + Elf64_Xword ch_size; + Elf64_Xword ch_addralign; +} Elf64_Chdr; + +#define ELFCOMPRESS_ZLIB 1 +#define ELFCOMPRESS_LOOS 0x60000000 +#define ELFCOMPRESS_HIOS 0x6fffffff +#define ELFCOMPRESS_LOPROC 0x70000000 +#define ELFCOMPRESS_HIPROC 0x7fffffff + + +#define GRP_COMDAT 0x1 + +typedef struct { + Elf32_Word st_name; + Elf32_Addr st_value; + Elf32_Word st_size; + unsigned char st_info; + unsigned char st_other; + Elf32_Section st_shndx; +} Elf32_Sym; + +typedef struct { + Elf64_Word st_name; + unsigned char st_info; + unsigned char st_other; + Elf64_Section st_shndx; + Elf64_Addr st_value; + Elf64_Xword st_size; +} Elf64_Sym; + +typedef struct { + Elf32_Half si_boundto; + Elf32_Half si_flags; +} Elf32_Syminfo; + +typedef struct { + Elf64_Half si_boundto; + Elf64_Half si_flags; +} Elf64_Syminfo; + +#define SYMINFO_BT_SELF 0xffff +#define SYMINFO_BT_PARENT 0xfffe +#define SYMINFO_BT_LOWRESERVE 0xff00 + +#define SYMINFO_FLG_DIRECT 0x0001 +#define SYMINFO_FLG_PASSTHRU 0x0002 +#define SYMINFO_FLG_COPY 0x0004 +#define SYMINFO_FLG_LAZYLOAD 0x0008 + +#define SYMINFO_NONE 0 +#define SYMINFO_CURRENT 1 +#define SYMINFO_NUM 2 + +#define ELF32_ST_BIND(val) (((unsigned char) (val)) >> 4) +#define ELF32_ST_TYPE(val) ((val) & 0xf) +#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf)) + +#define ELF64_ST_BIND(val) ELF32_ST_BIND (val) +#define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val) +#define ELF64_ST_INFO(bind, type) ELF32_ST_INFO ((bind), (type)) + +#define STB_LOCAL 0 +#define STB_GLOBAL 1 +#define STB_WEAK 2 +#define STB_NUM 3 +#define STB_LOOS 10 +#define STB_GNU_UNIQUE 10 +#define STB_HIOS 12 +#define STB_LOPROC 13 +#define STB_HIPROC 15 + +#define STT_NOTYPE 0 +#define STT_OBJECT 1 +#define STT_FUNC 2 +#define STT_SECTION 3 +#define STT_FILE 4 +#define STT_COMMON 5 +#define STT_TLS 6 +#define STT_NUM 7 +#define STT_LOOS 10 +#define STT_GNU_IFUNC 10 +#define STT_HIOS 12 +#define STT_LOPROC 13 +#define STT_HIPROC 15 + +#define STN_UNDEF 0 + +#define ELF32_ST_VISIBILITY(o) ((o) & 0x03) +#define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o) + +#define STV_DEFAULT 0 +#define STV_INTERNAL 1 +#define STV_HIDDEN 2 +#define STV_PROTECTED 3 + + + + +typedef struct { + Elf32_Addr r_offset; + Elf32_Word r_info; +} Elf32_Rel; + +typedef struct { + Elf64_Addr r_offset; + Elf64_Xword r_info; +} Elf64_Rel; + + + +typedef struct { + Elf32_Addr r_offset; + Elf32_Word r_info; + Elf32_Sword r_addend; +} Elf32_Rela; + +typedef struct { + Elf64_Addr r_offset; + Elf64_Xword r_info; + Elf64_Sxword r_addend; +} Elf64_Rela; + + + +#define ELF32_R_SYM(val) ((val) >> 8) +#define ELF32_R_TYPE(val) ((val) & 0xff) +#define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff)) + +#define ELF64_R_SYM(i) ((i) >> 32) +#define ELF64_R_TYPE(i) ((i) & 0xffffffff) +#define ELF64_R_INFO(sym,type) ((((Elf64_Xword) (sym)) << 32) + (type)) + + + +typedef struct { + Elf32_Word p_type; + Elf32_Off p_offset; + Elf32_Addr p_vaddr; + Elf32_Addr p_paddr; + Elf32_Word p_filesz; + Elf32_Word p_memsz; + Elf32_Word p_flags; + Elf32_Word p_align; +} Elf32_Phdr; + +typedef struct { + Elf64_Word p_type; + Elf64_Word p_flags; + Elf64_Off p_offset; + Elf64_Addr p_vaddr; + Elf64_Addr p_paddr; + Elf64_Xword p_filesz; + Elf64_Xword p_memsz; + Elf64_Xword p_align; +} Elf64_Phdr; + + + +#define PT_NULL 0 +#define PT_LOAD 1 +#define PT_DYNAMIC 2 +#define PT_INTERP 3 +#define PT_NOTE 4 +#define PT_SHLIB 5 +#define PT_PHDR 6 +#define PT_TLS 7 +#define PT_NUM 8 +#define PT_LOOS 0x60000000 +#define PT_GNU_EH_FRAME 0x6474e550 +#define PT_GNU_STACK 0x6474e551 +#define PT_GNU_RELRO 0x6474e552 +#define PT_LOSUNW 0x6ffffffa +#define PT_SUNWBSS 0x6ffffffa +#define PT_SUNWSTACK 0x6ffffffb +#define PT_HISUNW 0x6fffffff +#define PT_HIOS 0x6fffffff +#define PT_LOPROC 0x70000000 +#define PT_HIPROC 0x7fffffff + + +#define PN_XNUM 0xffff + + +#define PF_X (1 << 0) +#define PF_W (1 << 1) +#define PF_R (1 << 2) +#define PF_MASKOS 0x0ff00000 +#define PF_MASKPROC 0xf0000000 + + + +#define NT_PRSTATUS 1 +#define NT_PRFPREG 2 +#define NT_FPREGSET 2 +#define NT_PRPSINFO 3 +#define NT_PRXREG 4 +#define NT_TASKSTRUCT 4 +#define NT_PLATFORM 5 +#define NT_AUXV 6 +#define NT_GWINDOWS 7 +#define NT_ASRS 8 +#define NT_PSTATUS 10 +#define NT_PSINFO 13 +#define NT_PRCRED 14 +#define NT_UTSNAME 15 +#define NT_LWPSTATUS 16 +#define NT_LWPSINFO 17 +#define NT_PRFPXREG 20 +#define NT_SIGINFO 0x53494749 +#define NT_FILE 0x46494c45 +#define NT_PRXFPREG 0x46e62b7f +#define NT_PPC_VMX 0x100 +#define NT_PPC_SPE 0x101 +#define NT_PPC_VSX 0x102 +#define NT_PPC_TAR 0x103 +#define NT_PPC_PPR 0x104 +#define NT_PPC_DSCR 0x105 +#define NT_PPC_EBB 0x106 +#define NT_PPC_PMU 0x107 +#define NT_PPC_TM_CGPR 0x108 +#define NT_PPC_TM_CFPR 0x109 +#define NT_PPC_TM_CVMX 0x10a +#define NT_PPC_TM_CVSX 0x10b +#define NT_PPC_TM_SPR 0x10c +#define NT_PPC_TM_CTAR 0x10d +#define NT_PPC_TM_CPPR 0x10e +#define NT_PPC_TM_CDSCR 0x10f +#define NT_386_TLS 0x200 +#define NT_386_IOPERM 0x201 +#define NT_X86_XSTATE 0x202 +#define NT_S390_HIGH_GPRS 0x300 +#define NT_S390_TIMER 0x301 +#define NT_S390_TODCMP 0x302 +#define NT_S390_TODPREG 0x303 +#define NT_S390_CTRS 0x304 +#define NT_S390_PREFIX 0x305 +#define NT_S390_LAST_BREAK 0x306 +#define NT_S390_SYSTEM_CALL 0x307 +#define NT_S390_TDB 0x308 +#define NT_S390_VXRS_LOW 0x309 +#define NT_S390_VXRS_HIGH 0x30a +#define NT_S390_GS_CB 0x30b +#define NT_S390_GS_BC 0x30c +#define NT_S390_RI_CB 0x30d +#define NT_ARM_VFP 0x400 +#define NT_ARM_TLS 0x401 +#define NT_ARM_HW_BREAK 0x402 +#define NT_ARM_HW_WATCH 0x403 +#define NT_ARM_SYSTEM_CALL 0x404 +#define NT_ARM_SVE 0x405 +#define NT_ARM_PAC_MASK 0x406 +#define NT_ARM_PACA_KEYS 0x407 +#define NT_ARM_PACG_KEYS 0x408 +#define NT_METAG_CBUF 0x500 +#define NT_METAG_RPIPE 0x501 +#define NT_METAG_TLS 0x502 +#define NT_ARC_V2 0x600 +#define NT_VMCOREDD 0x700 +#define NT_MIPS_DSP 0x800 +#define NT_MIPS_FP_MODE 0x801 +#define NT_MIPS_MSA 0x802 +#define NT_VERSION 1 + + + + +typedef struct { + Elf32_Sword d_tag; + union { + Elf32_Word d_val; + Elf32_Addr d_ptr; + } d_un; +} Elf32_Dyn; + +typedef struct { + Elf64_Sxword d_tag; + union { + Elf64_Xword d_val; + Elf64_Addr d_ptr; + } d_un; +} Elf64_Dyn; + + + +#define DT_NULL 0 +#define DT_NEEDED 1 +#define DT_PLTRELSZ 2 +#define DT_PLTGOT 3 +#define DT_HASH 4 +#define DT_STRTAB 5 +#define DT_SYMTAB 6 +#define DT_RELA 7 +#define DT_RELASZ 8 +#define DT_RELAENT 9 +#define DT_STRSZ 10 +#define DT_SYMENT 11 +#define DT_INIT 12 +#define DT_FINI 13 +#define DT_SONAME 14 +#define DT_RPATH 15 +#define DT_SYMBOLIC 16 +#define DT_REL 17 +#define DT_RELSZ 18 +#define DT_RELENT 19 +#define DT_PLTREL 20 +#define DT_DEBUG 21 +#define DT_TEXTREL 22 +#define DT_JMPREL 23 +#define DT_BIND_NOW 24 +#define DT_INIT_ARRAY 25 +#define DT_FINI_ARRAY 26 +#define DT_INIT_ARRAYSZ 27 +#define DT_FINI_ARRAYSZ 28 +#define DT_RUNPATH 29 +#define DT_FLAGS 30 +#define DT_ENCODING 32 +#define DT_PREINIT_ARRAY 32 +#define DT_PREINIT_ARRAYSZ 33 +#define DT_SYMTAB_SHNDX 34 +#define DT_NUM 35 +#define DT_LOOS 0x6000000d +#define DT_HIOS 0x6ffff000 +#define DT_LOPROC 0x70000000 +#define DT_HIPROC 0x7fffffff +#define DT_PROCNUM DT_MIPS_NUM + +#define DT_VALRNGLO 0x6ffffd00 +#define DT_GNU_PRELINKED 0x6ffffdf5 +#define DT_GNU_CONFLICTSZ 0x6ffffdf6 +#define DT_GNU_LIBLISTSZ 0x6ffffdf7 +#define DT_CHECKSUM 0x6ffffdf8 +#define DT_PLTPADSZ 0x6ffffdf9 +#define DT_MOVEENT 0x6ffffdfa +#define DT_MOVESZ 0x6ffffdfb +#define DT_FEATURE_1 0x6ffffdfc +#define DT_POSFLAG_1 0x6ffffdfd + +#define DT_SYMINSZ 0x6ffffdfe +#define DT_SYMINENT 0x6ffffdff +#define DT_VALRNGHI 0x6ffffdff +#define DT_VALTAGIDX(tag) (DT_VALRNGHI - (tag)) +#define DT_VALNUM 12 + +#define DT_ADDRRNGLO 0x6ffffe00 +#define DT_GNU_HASH 0x6ffffef5 +#define DT_TLSDESC_PLT 0x6ffffef6 +#define DT_TLSDESC_GOT 0x6ffffef7 +#define DT_GNU_CONFLICT 0x6ffffef8 +#define DT_GNU_LIBLIST 0x6ffffef9 +#define DT_CONFIG 0x6ffffefa +#define DT_DEPAUDIT 0x6ffffefb +#define DT_AUDIT 0x6ffffefc +#define DT_PLTPAD 0x6ffffefd +#define DT_MOVETAB 0x6ffffefe +#define DT_SYMINFO 0x6ffffeff +#define DT_ADDRRNGHI 0x6ffffeff +#define DT_ADDRTAGIDX(tag) (DT_ADDRRNGHI - (tag)) +#define DT_ADDRNUM 11 + + + +#define DT_VERSYM 0x6ffffff0 + +#define DT_RELACOUNT 0x6ffffff9 +#define DT_RELCOUNT 0x6ffffffa + + +#define DT_FLAGS_1 0x6ffffffb +#define DT_VERDEF 0x6ffffffc + +#define DT_VERDEFNUM 0x6ffffffd +#define DT_VERNEED 0x6ffffffe + +#define DT_VERNEEDNUM 0x6fffffff +#define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) +#define DT_VERSIONTAGNUM 16 + + + +#define DT_AUXILIARY 0x7ffffffd +#define DT_FILTER 0x7fffffff +#define DT_EXTRATAGIDX(tag) ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1) +#define DT_EXTRANUM 3 + + +#define DF_ORIGIN 0x00000001 +#define DF_SYMBOLIC 0x00000002 +#define DF_TEXTREL 0x00000004 +#define DF_BIND_NOW 0x00000008 +#define DF_STATIC_TLS 0x00000010 + + + +#define DF_1_NOW 0x00000001 +#define DF_1_GLOBAL 0x00000002 +#define DF_1_GROUP 0x00000004 +#define DF_1_NODELETE 0x00000008 +#define DF_1_LOADFLTR 0x00000010 +#define DF_1_INITFIRST 0x00000020 +#define DF_1_NOOPEN 0x00000040 +#define DF_1_ORIGIN 0x00000080 +#define DF_1_DIRECT 0x00000100 +#define DF_1_TRANS 0x00000200 +#define DF_1_INTERPOSE 0x00000400 +#define DF_1_NODEFLIB 0x00000800 +#define DF_1_NODUMP 0x00001000 +#define DF_1_CONFALT 0x00002000 +#define DF_1_ENDFILTEE 0x00004000 +#define DF_1_DISPRELDNE 0x00008000 +#define DF_1_DISPRELPND 0x00010000 +#define DF_1_NODIRECT 0x00020000 +#define DF_1_IGNMULDEF 0x00040000 +#define DF_1_NOKSYMS 0x00080000 +#define DF_1_NOHDR 0x00100000 +#define DF_1_EDITED 0x00200000 +#define DF_1_NORELOC 0x00400000 +#define DF_1_SYMINTPOSE 0x00800000 +#define DF_1_GLOBAUDIT 0x01000000 +#define DF_1_SINGLETON 0x02000000 +#define DF_1_STUB 0x04000000 +#define DF_1_PIE 0x08000000 + +#define DTF_1_PARINIT 0x00000001 +#define DTF_1_CONFEXP 0x00000002 + + +#define DF_P1_LAZYLOAD 0x00000001 +#define DF_P1_GROUPPERM 0x00000002 + + + + +typedef struct { + Elf32_Half vd_version; + Elf32_Half vd_flags; + Elf32_Half vd_ndx; + Elf32_Half vd_cnt; + Elf32_Word vd_hash; + Elf32_Word vd_aux; + Elf32_Word vd_next; +} Elf32_Verdef; + +typedef struct { + Elf64_Half vd_version; + Elf64_Half vd_flags; + Elf64_Half vd_ndx; + Elf64_Half vd_cnt; + Elf64_Word vd_hash; + Elf64_Word vd_aux; + Elf64_Word vd_next; +} Elf64_Verdef; + + + +#define VER_DEF_NONE 0 +#define VER_DEF_CURRENT 1 +#define VER_DEF_NUM 2 + + +#define VER_FLG_BASE 0x1 +#define VER_FLG_WEAK 0x2 + + +#define VER_NDX_LOCAL 0 +#define VER_NDX_GLOBAL 1 +#define VER_NDX_LORESERVE 0xff00 +#define VER_NDX_ELIMINATE 0xff01 + + + +typedef struct { + Elf32_Word vda_name; + Elf32_Word vda_next; +} Elf32_Verdaux; + +typedef struct { + Elf64_Word vda_name; + Elf64_Word vda_next; +} Elf64_Verdaux; + + + + +typedef struct { + Elf32_Half vn_version; + Elf32_Half vn_cnt; + Elf32_Word vn_file; + Elf32_Word vn_aux; + Elf32_Word vn_next; +} Elf32_Verneed; + +typedef struct { + Elf64_Half vn_version; + Elf64_Half vn_cnt; + Elf64_Word vn_file; + Elf64_Word vn_aux; + Elf64_Word vn_next; +} Elf64_Verneed; + + + +#define VER_NEED_NONE 0 +#define VER_NEED_CURRENT 1 +#define VER_NEED_NUM 2 + + + +typedef struct { + Elf32_Word vna_hash; + Elf32_Half vna_flags; + Elf32_Half vna_other; + Elf32_Word vna_name; + Elf32_Word vna_next; +} Elf32_Vernaux; + +typedef struct { + Elf64_Word vna_hash; + Elf64_Half vna_flags; + Elf64_Half vna_other; + Elf64_Word vna_name; + Elf64_Word vna_next; +} Elf64_Vernaux; + + + +#define VER_FLG_WEAK 0x2 + + + +typedef struct { + uint32_t a_type; + union { + uint32_t a_val; + } a_un; +} Elf32_auxv_t; + +typedef struct { + uint64_t a_type; + union { + uint64_t a_val; + } a_un; +} Elf64_auxv_t; + + + +#define AT_NULL 0 +#define AT_IGNORE 1 +#define AT_EXECFD 2 +#define AT_PHDR 3 +#define AT_PHENT 4 +#define AT_PHNUM 5 +#define AT_PAGESZ 6 +#define AT_BASE 7 +#define AT_FLAGS 8 +#define AT_ENTRY 9 +#define AT_NOTELF 10 +#define AT_UID 11 +#define AT_EUID 12 +#define AT_GID 13 +#define AT_EGID 14 +#define AT_CLKTCK 17 + + +#define AT_PLATFORM 15 +#define AT_HWCAP 16 + + + + +#define AT_FPUCW 18 + + +#define AT_DCACHEBSIZE 19 +#define AT_ICACHEBSIZE 20 +#define AT_UCACHEBSIZE 21 + + + +#define AT_IGNOREPPC 22 + +#define AT_SECURE 23 + +#define AT_BASE_PLATFORM 24 + +#define AT_RANDOM 25 + +#define AT_HWCAP2 26 + +#define AT_EXECFN 31 + + + +#define AT_SYSINFO 32 +#define AT_SYSINFO_EHDR 33 + + + +#define AT_L1I_CACHESHAPE 34 +#define AT_L1D_CACHESHAPE 35 +#define AT_L2_CACHESHAPE 36 +#define AT_L3_CACHESHAPE 37 + +#define AT_L1I_CACHESIZE 40 +#define AT_L1I_CACHEGEOMETRY 41 +#define AT_L1D_CACHESIZE 42 +#define AT_L1D_CACHEGEOMETRY 43 +#define AT_L2_CACHESIZE 44 +#define AT_L2_CACHEGEOMETRY 45 +#define AT_L3_CACHESIZE 46 +#define AT_L3_CACHEGEOMETRY 47 + +#define AT_MINSIGSTKSZ 51 + + +typedef struct { + Elf32_Word n_namesz; + Elf32_Word n_descsz; + Elf32_Word n_type; +} Elf32_Nhdr; + +typedef struct { + Elf64_Word n_namesz; + Elf64_Word n_descsz; + Elf64_Word n_type; +} Elf64_Nhdr; + + + + +#define ELF_NOTE_SOLARIS "SUNW Solaris" + + +#define ELF_NOTE_GNU "GNU" + + + + + +#define ELF_NOTE_PAGESIZE_HINT 1 + + +#define NT_GNU_ABI_TAG 1 +#define ELF_NOTE_ABI NT_GNU_ABI_TAG + + + +#define ELF_NOTE_OS_LINUX 0 +#define ELF_NOTE_OS_GNU 1 +#define ELF_NOTE_OS_SOLARIS2 2 +#define ELF_NOTE_OS_FREEBSD 3 + +#define NT_GNU_BUILD_ID 3 +#define NT_GNU_GOLD_VERSION 4 + + + +typedef struct { + Elf32_Xword m_value; + Elf32_Word m_info; + Elf32_Word m_poffset; + Elf32_Half m_repeat; + Elf32_Half m_stride; +} Elf32_Move; + +typedef struct { + Elf64_Xword m_value; + Elf64_Xword m_info; + Elf64_Xword m_poffset; + Elf64_Half m_repeat; + Elf64_Half m_stride; +} Elf64_Move; + + +#define ELF32_M_SYM(info) ((info) >> 8) +#define ELF32_M_SIZE(info) ((unsigned char) (info)) +#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size)) + +#define ELF64_M_SYM(info) ELF32_M_SYM (info) +#define ELF64_M_SIZE(info) ELF32_M_SIZE (info) +#define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size) + +#define EF_CPU32 0x00810000 + +#define R_68K_NONE 0 +#define R_68K_32 1 +#define R_68K_16 2 +#define R_68K_8 3 +#define R_68K_PC32 4 +#define R_68K_PC16 5 +#define R_68K_PC8 6 +#define R_68K_GOT32 7 +#define R_68K_GOT16 8 +#define R_68K_GOT8 9 +#define R_68K_GOT32O 10 +#define R_68K_GOT16O 11 +#define R_68K_GOT8O 12 +#define R_68K_PLT32 13 +#define R_68K_PLT16 14 +#define R_68K_PLT8 15 +#define R_68K_PLT32O 16 +#define R_68K_PLT16O 17 +#define R_68K_PLT8O 18 +#define R_68K_COPY 19 +#define R_68K_GLOB_DAT 20 +#define R_68K_JMP_SLOT 21 +#define R_68K_RELATIVE 22 +#define R_68K_TLS_GD32 25 +#define R_68K_TLS_GD16 26 +#define R_68K_TLS_GD8 27 +#define R_68K_TLS_LDM32 28 +#define R_68K_TLS_LDM16 29 +#define R_68K_TLS_LDM8 30 +#define R_68K_TLS_LDO32 31 +#define R_68K_TLS_LDO16 32 +#define R_68K_TLS_LDO8 33 +#define R_68K_TLS_IE32 34 +#define R_68K_TLS_IE16 35 +#define R_68K_TLS_IE8 36 +#define R_68K_TLS_LE32 37 +#define R_68K_TLS_LE16 38 +#define R_68K_TLS_LE8 39 +#define R_68K_TLS_DTPMOD32 40 +#define R_68K_TLS_DTPREL32 41 +#define R_68K_TLS_TPREL32 42 +#define R_68K_NUM 43 + +#define R_386_NONE 0 +#define R_386_32 1 +#define R_386_PC32 2 +#define R_386_GOT32 3 +#define R_386_PLT32 4 +#define R_386_COPY 5 +#define R_386_GLOB_DAT 6 +#define R_386_JMP_SLOT 7 +#define R_386_RELATIVE 8 +#define R_386_GOTOFF 9 +#define R_386_GOTPC 10 +#define R_386_32PLT 11 +#define R_386_TLS_TPOFF 14 +#define R_386_TLS_IE 15 +#define R_386_TLS_GOTIE 16 +#define R_386_TLS_LE 17 +#define R_386_TLS_GD 18 +#define R_386_TLS_LDM 19 +#define R_386_16 20 +#define R_386_PC16 21 +#define R_386_8 22 +#define R_386_PC8 23 +#define R_386_TLS_GD_32 24 +#define R_386_TLS_GD_PUSH 25 +#define R_386_TLS_GD_CALL 26 +#define R_386_TLS_GD_POP 27 +#define R_386_TLS_LDM_32 28 +#define R_386_TLS_LDM_PUSH 29 +#define R_386_TLS_LDM_CALL 30 +#define R_386_TLS_LDM_POP 31 +#define R_386_TLS_LDO_32 32 +#define R_386_TLS_IE_32 33 +#define R_386_TLS_LE_32 34 +#define R_386_TLS_DTPMOD32 35 +#define R_386_TLS_DTPOFF32 36 +#define R_386_TLS_TPOFF32 37 +#define R_386_SIZE32 38 +#define R_386_TLS_GOTDESC 39 +#define R_386_TLS_DESC_CALL 40 +#define R_386_TLS_DESC 41 +#define R_386_IRELATIVE 42 +#define R_386_GOT32X 43 +#define R_386_NUM 44 + + + + + +#define STT_SPARC_REGISTER 13 + + + +#define EF_SPARCV9_MM 3 +#define EF_SPARCV9_TSO 0 +#define EF_SPARCV9_PSO 1 +#define EF_SPARCV9_RMO 2 +#define EF_SPARC_LEDATA 0x800000 +#define EF_SPARC_EXT_MASK 0xFFFF00 +#define EF_SPARC_32PLUS 0x000100 +#define EF_SPARC_SUN_US1 0x000200 +#define EF_SPARC_HAL_R1 0x000400 +#define EF_SPARC_SUN_US3 0x000800 + + + +#define R_SPARC_NONE 0 +#define R_SPARC_8 1 +#define R_SPARC_16 2 +#define R_SPARC_32 3 +#define R_SPARC_DISP8 4 +#define R_SPARC_DISP16 5 +#define R_SPARC_DISP32 6 +#define R_SPARC_WDISP30 7 +#define R_SPARC_WDISP22 8 +#define R_SPARC_HI22 9 +#define R_SPARC_22 10 +#define R_SPARC_13 11 +#define R_SPARC_LO10 12 +#define R_SPARC_GOT10 13 +#define R_SPARC_GOT13 14 +#define R_SPARC_GOT22 15 +#define R_SPARC_PC10 16 +#define R_SPARC_PC22 17 +#define R_SPARC_WPLT30 18 +#define R_SPARC_COPY 19 +#define R_SPARC_GLOB_DAT 20 +#define R_SPARC_JMP_SLOT 21 +#define R_SPARC_RELATIVE 22 +#define R_SPARC_UA32 23 + + + +#define R_SPARC_PLT32 24 +#define R_SPARC_HIPLT22 25 +#define R_SPARC_LOPLT10 26 +#define R_SPARC_PCPLT32 27 +#define R_SPARC_PCPLT22 28 +#define R_SPARC_PCPLT10 29 +#define R_SPARC_10 30 +#define R_SPARC_11 31 +#define R_SPARC_64 32 +#define R_SPARC_OLO10 33 +#define R_SPARC_HH22 34 +#define R_SPARC_HM10 35 +#define R_SPARC_LM22 36 +#define R_SPARC_PC_HH22 37 +#define R_SPARC_PC_HM10 38 +#define R_SPARC_PC_LM22 39 +#define R_SPARC_WDISP16 40 +#define R_SPARC_WDISP19 41 +#define R_SPARC_GLOB_JMP 42 +#define R_SPARC_7 43 +#define R_SPARC_5 44 +#define R_SPARC_6 45 +#define R_SPARC_DISP64 46 +#define R_SPARC_PLT64 47 +#define R_SPARC_HIX22 48 +#define R_SPARC_LOX10 49 +#define R_SPARC_H44 50 +#define R_SPARC_M44 51 +#define R_SPARC_L44 52 +#define R_SPARC_REGISTER 53 +#define R_SPARC_UA64 54 +#define R_SPARC_UA16 55 +#define R_SPARC_TLS_GD_HI22 56 +#define R_SPARC_TLS_GD_LO10 57 +#define R_SPARC_TLS_GD_ADD 58 +#define R_SPARC_TLS_GD_CALL 59 +#define R_SPARC_TLS_LDM_HI22 60 +#define R_SPARC_TLS_LDM_LO10 61 +#define R_SPARC_TLS_LDM_ADD 62 +#define R_SPARC_TLS_LDM_CALL 63 +#define R_SPARC_TLS_LDO_HIX22 64 +#define R_SPARC_TLS_LDO_LOX10 65 +#define R_SPARC_TLS_LDO_ADD 66 +#define R_SPARC_TLS_IE_HI22 67 +#define R_SPARC_TLS_IE_LO10 68 +#define R_SPARC_TLS_IE_LD 69 +#define R_SPARC_TLS_IE_LDX 70 +#define R_SPARC_TLS_IE_ADD 71 +#define R_SPARC_TLS_LE_HIX22 72 +#define R_SPARC_TLS_LE_LOX10 73 +#define R_SPARC_TLS_DTPMOD32 74 +#define R_SPARC_TLS_DTPMOD64 75 +#define R_SPARC_TLS_DTPOFF32 76 +#define R_SPARC_TLS_DTPOFF64 77 +#define R_SPARC_TLS_TPOFF32 78 +#define R_SPARC_TLS_TPOFF64 79 +#define R_SPARC_GOTDATA_HIX22 80 +#define R_SPARC_GOTDATA_LOX10 81 +#define R_SPARC_GOTDATA_OP_HIX22 82 +#define R_SPARC_GOTDATA_OP_LOX10 83 +#define R_SPARC_GOTDATA_OP 84 +#define R_SPARC_H34 85 +#define R_SPARC_SIZE32 86 +#define R_SPARC_SIZE64 87 +#define R_SPARC_GNU_VTINHERIT 250 +#define R_SPARC_GNU_VTENTRY 251 +#define R_SPARC_REV32 252 + +#define R_SPARC_NUM 253 + + + +#define DT_SPARC_REGISTER 0x70000001 +#define DT_SPARC_NUM 2 + + +#define EF_MIPS_NOREORDER 1 +#define EF_MIPS_PIC 2 +#define EF_MIPS_CPIC 4 +#define EF_MIPS_XGOT 8 +#define EF_MIPS_64BIT_WHIRL 16 +#define EF_MIPS_ABI2 32 +#define EF_MIPS_ABI_ON32 64 +#define EF_MIPS_FP64 512 +#define EF_MIPS_NAN2008 1024 +#define EF_MIPS_ARCH 0xf0000000 + + + +#define EF_MIPS_ARCH_1 0x00000000 +#define EF_MIPS_ARCH_2 0x10000000 +#define EF_MIPS_ARCH_3 0x20000000 +#define EF_MIPS_ARCH_4 0x30000000 +#define EF_MIPS_ARCH_5 0x40000000 +#define EF_MIPS_ARCH_32 0x50000000 +#define EF_MIPS_ARCH_64 0x60000000 +#define EF_MIPS_ARCH_32R2 0x70000000 +#define EF_MIPS_ARCH_64R2 0x80000000 + + +#define E_MIPS_ARCH_1 0x00000000 +#define E_MIPS_ARCH_2 0x10000000 +#define E_MIPS_ARCH_3 0x20000000 +#define E_MIPS_ARCH_4 0x30000000 +#define E_MIPS_ARCH_5 0x40000000 +#define E_MIPS_ARCH_32 0x50000000 +#define E_MIPS_ARCH_64 0x60000000 + + + +#define SHN_MIPS_ACOMMON 0xff00 +#define SHN_MIPS_TEXT 0xff01 +#define SHN_MIPS_DATA 0xff02 +#define SHN_MIPS_SCOMMON 0xff03 +#define SHN_MIPS_SUNDEFINED 0xff04 + + + +#define SHT_MIPS_LIBLIST 0x70000000 +#define SHT_MIPS_MSYM 0x70000001 +#define SHT_MIPS_CONFLICT 0x70000002 +#define SHT_MIPS_GPTAB 0x70000003 +#define SHT_MIPS_UCODE 0x70000004 +#define SHT_MIPS_DEBUG 0x70000005 +#define SHT_MIPS_REGINFO 0x70000006 +#define SHT_MIPS_PACKAGE 0x70000007 +#define SHT_MIPS_PACKSYM 0x70000008 +#define SHT_MIPS_RELD 0x70000009 +#define SHT_MIPS_IFACE 0x7000000b +#define SHT_MIPS_CONTENT 0x7000000c +#define SHT_MIPS_OPTIONS 0x7000000d +#define SHT_MIPS_SHDR 0x70000010 +#define SHT_MIPS_FDESC 0x70000011 +#define SHT_MIPS_EXTSYM 0x70000012 +#define SHT_MIPS_DENSE 0x70000013 +#define SHT_MIPS_PDESC 0x70000014 +#define SHT_MIPS_LOCSYM 0x70000015 +#define SHT_MIPS_AUXSYM 0x70000016 +#define SHT_MIPS_OPTSYM 0x70000017 +#define SHT_MIPS_LOCSTR 0x70000018 +#define SHT_MIPS_LINE 0x70000019 +#define SHT_MIPS_RFDESC 0x7000001a +#define SHT_MIPS_DELTASYM 0x7000001b +#define SHT_MIPS_DELTAINST 0x7000001c +#define SHT_MIPS_DELTACLASS 0x7000001d +#define SHT_MIPS_DWARF 0x7000001e +#define SHT_MIPS_DELTADECL 0x7000001f +#define SHT_MIPS_SYMBOL_LIB 0x70000020 +#define SHT_MIPS_EVENTS 0x70000021 +#define SHT_MIPS_TRANSLATE 0x70000022 +#define SHT_MIPS_PIXIE 0x70000023 +#define SHT_MIPS_XLATE 0x70000024 +#define SHT_MIPS_XLATE_DEBUG 0x70000025 +#define SHT_MIPS_WHIRL 0x70000026 +#define SHT_MIPS_EH_REGION 0x70000027 +#define SHT_MIPS_XLATE_OLD 0x70000028 +#define SHT_MIPS_PDR_EXCEPTION 0x70000029 + + + +#define SHF_MIPS_GPREL 0x10000000 +#define SHF_MIPS_MERGE 0x20000000 +#define SHF_MIPS_ADDR 0x40000000 +#define SHF_MIPS_STRINGS 0x80000000 +#define SHF_MIPS_NOSTRIP 0x08000000 +#define SHF_MIPS_LOCAL 0x04000000 +#define SHF_MIPS_NAMES 0x02000000 +#define SHF_MIPS_NODUPE 0x01000000 + + + + + +#define STO_MIPS_DEFAULT 0x0 +#define STO_MIPS_INTERNAL 0x1 +#define STO_MIPS_HIDDEN 0x2 +#define STO_MIPS_PROTECTED 0x3 +#define STO_MIPS_PLT 0x8 +#define STO_MIPS_SC_ALIGN_UNUSED 0xff + + +#define STB_MIPS_SPLIT_COMMON 13 + + + +typedef union { + struct { + Elf32_Word gt_current_g_value; + Elf32_Word gt_unused; + } gt_header; + struct { + Elf32_Word gt_g_value; + Elf32_Word gt_bytes; + } gt_entry; +} Elf32_gptab; + + + +typedef struct { + Elf32_Word ri_gprmask; + Elf32_Word ri_cprmask[4]; + Elf32_Sword ri_gp_value; +} Elf32_RegInfo; + + + +typedef struct { + unsigned char kind; + + unsigned char size; + Elf32_Section section; + + Elf32_Word info; +} Elf_Options; + + + +#define ODK_NULL 0 +#define ODK_REGINFO 1 +#define ODK_EXCEPTIONS 2 +#define ODK_PAD 3 +#define ODK_HWPATCH 4 +#define ODK_FILL 5 +#define ODK_TAGS 6 +#define ODK_HWAND 7 +#define ODK_HWOR 8 + + + +#define OEX_FPU_MIN 0x1f +#define OEX_FPU_MAX 0x1f00 +#define OEX_PAGE0 0x10000 +#define OEX_SMM 0x20000 +#define OEX_FPDBUG 0x40000 +#define OEX_PRECISEFP OEX_FPDBUG +#define OEX_DISMISS 0x80000 + +#define OEX_FPU_INVAL 0x10 +#define OEX_FPU_DIV0 0x08 +#define OEX_FPU_OFLO 0x04 +#define OEX_FPU_UFLO 0x02 +#define OEX_FPU_INEX 0x01 + + + +#define OHW_R4KEOP 0x1 +#define OHW_R8KPFETCH 0x2 +#define OHW_R5KEOP 0x4 +#define OHW_R5KCVTL 0x8 + +#define OPAD_PREFIX 0x1 +#define OPAD_POSTFIX 0x2 +#define OPAD_SYMBOL 0x4 + + + +typedef struct { + Elf32_Word hwp_flags1; + Elf32_Word hwp_flags2; +} Elf_Options_Hw; + + + +#define OHWA0_R4KEOP_CHECKED 0x00000001 +#define OHWA1_R4KEOP_CLEAN 0x00000002 + + + +#define R_MIPS_NONE 0 +#define R_MIPS_16 1 +#define R_MIPS_32 2 +#define R_MIPS_REL32 3 +#define R_MIPS_26 4 +#define R_MIPS_HI16 5 +#define R_MIPS_LO16 6 +#define R_MIPS_GPREL16 7 +#define R_MIPS_LITERAL 8 +#define R_MIPS_GOT16 9 +#define R_MIPS_PC16 10 +#define R_MIPS_CALL16 11 +#define R_MIPS_GPREL32 12 + +#define R_MIPS_SHIFT5 16 +#define R_MIPS_SHIFT6 17 +#define R_MIPS_64 18 +#define R_MIPS_GOT_DISP 19 +#define R_MIPS_GOT_PAGE 20 +#define R_MIPS_GOT_OFST 21 +#define R_MIPS_GOT_HI16 22 +#define R_MIPS_GOT_LO16 23 +#define R_MIPS_SUB 24 +#define R_MIPS_INSERT_A 25 +#define R_MIPS_INSERT_B 26 +#define R_MIPS_DELETE 27 +#define R_MIPS_HIGHER 28 +#define R_MIPS_HIGHEST 29 +#define R_MIPS_CALL_HI16 30 +#define R_MIPS_CALL_LO16 31 +#define R_MIPS_SCN_DISP 32 +#define R_MIPS_REL16 33 +#define R_MIPS_ADD_IMMEDIATE 34 +#define R_MIPS_PJUMP 35 +#define R_MIPS_RELGOT 36 +#define R_MIPS_JALR 37 +#define R_MIPS_TLS_DTPMOD32 38 +#define R_MIPS_TLS_DTPREL32 39 +#define R_MIPS_TLS_DTPMOD64 40 +#define R_MIPS_TLS_DTPREL64 41 +#define R_MIPS_TLS_GD 42 +#define R_MIPS_TLS_LDM 43 +#define R_MIPS_TLS_DTPREL_HI16 44 +#define R_MIPS_TLS_DTPREL_LO16 45 +#define R_MIPS_TLS_GOTTPREL 46 +#define R_MIPS_TLS_TPREL32 47 +#define R_MIPS_TLS_TPREL64 48 +#define R_MIPS_TLS_TPREL_HI16 49 +#define R_MIPS_TLS_TPREL_LO16 50 +#define R_MIPS_GLOB_DAT 51 +#define R_MIPS_COPY 126 +#define R_MIPS_JUMP_SLOT 127 + +#define R_MIPS_NUM 128 + + + +#define PT_MIPS_REGINFO 0x70000000 +#define PT_MIPS_RTPROC 0x70000001 +#define PT_MIPS_OPTIONS 0x70000002 +#define PT_MIPS_ABIFLAGS 0x70000003 + + + +#define PF_MIPS_LOCAL 0x10000000 + + + +#define DT_MIPS_RLD_VERSION 0x70000001 +#define DT_MIPS_TIME_STAMP 0x70000002 +#define DT_MIPS_ICHECKSUM 0x70000003 +#define DT_MIPS_IVERSION 0x70000004 +#define DT_MIPS_FLAGS 0x70000005 +#define DT_MIPS_BASE_ADDRESS 0x70000006 +#define DT_MIPS_MSYM 0x70000007 +#define DT_MIPS_CONFLICT 0x70000008 +#define DT_MIPS_LIBLIST 0x70000009 +#define DT_MIPS_LOCAL_GOTNO 0x7000000a +#define DT_MIPS_CONFLICTNO 0x7000000b +#define DT_MIPS_LIBLISTNO 0x70000010 +#define DT_MIPS_SYMTABNO 0x70000011 +#define DT_MIPS_UNREFEXTNO 0x70000012 +#define DT_MIPS_GOTSYM 0x70000013 +#define DT_MIPS_HIPAGENO 0x70000014 +#define DT_MIPS_RLD_MAP 0x70000016 +#define DT_MIPS_DELTA_CLASS 0x70000017 +#define DT_MIPS_DELTA_CLASS_NO 0x70000018 + +#define DT_MIPS_DELTA_INSTANCE 0x70000019 +#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a + +#define DT_MIPS_DELTA_RELOC 0x7000001b +#define DT_MIPS_DELTA_RELOC_NO 0x7000001c + +#define DT_MIPS_DELTA_SYM 0x7000001d + +#define DT_MIPS_DELTA_SYM_NO 0x7000001e + +#define DT_MIPS_DELTA_CLASSSYM 0x70000020 + +#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 + +#define DT_MIPS_CXX_FLAGS 0x70000022 +#define DT_MIPS_PIXIE_INIT 0x70000023 +#define DT_MIPS_SYMBOL_LIB 0x70000024 +#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025 +#define DT_MIPS_LOCAL_GOTIDX 0x70000026 +#define DT_MIPS_HIDDEN_GOTIDX 0x70000027 +#define DT_MIPS_PROTECTED_GOTIDX 0x70000028 +#define DT_MIPS_OPTIONS 0x70000029 +#define DT_MIPS_INTERFACE 0x7000002a +#define DT_MIPS_DYNSTR_ALIGN 0x7000002b +#define DT_MIPS_INTERFACE_SIZE 0x7000002c +#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d + +#define DT_MIPS_PERF_SUFFIX 0x7000002e + +#define DT_MIPS_COMPACT_SIZE 0x7000002f +#define DT_MIPS_GP_VALUE 0x70000030 +#define DT_MIPS_AUX_DYNAMIC 0x70000031 + +#define DT_MIPS_PLTGOT 0x70000032 + +#define DT_MIPS_RWPLT 0x70000034 +#define DT_MIPS_RLD_MAP_REL 0x70000035 +#define DT_MIPS_NUM 0x36 + + + +#define RHF_NONE 0 +#define RHF_QUICKSTART (1 << 0) +#define RHF_NOTPOT (1 << 1) +#define RHF_NO_LIBRARY_REPLACEMENT (1 << 2) +#define RHF_NO_MOVE (1 << 3) +#define RHF_SGI_ONLY (1 << 4) +#define RHF_GUARANTEE_INIT (1 << 5) +#define RHF_DELTA_C_PLUS_PLUS (1 << 6) +#define RHF_GUARANTEE_START_INIT (1 << 7) +#define RHF_PIXIE (1 << 8) +#define RHF_DEFAULT_DELAY_LOAD (1 << 9) +#define RHF_REQUICKSTART (1 << 10) +#define RHF_REQUICKSTARTED (1 << 11) +#define RHF_CORD (1 << 12) +#define RHF_NO_UNRES_UNDEF (1 << 13) +#define RHF_RLD_ORDER_SAFE (1 << 14) + + + +typedef struct { + Elf32_Word l_name; + Elf32_Word l_time_stamp; + Elf32_Word l_checksum; + Elf32_Word l_version; + Elf32_Word l_flags; +} Elf32_Lib; + +typedef struct { + Elf64_Word l_name; + Elf64_Word l_time_stamp; + Elf64_Word l_checksum; + Elf64_Word l_version; + Elf64_Word l_flags; +} Elf64_Lib; + + + + +#define LL_NONE 0 +#define LL_EXACT_MATCH (1 << 0) +#define LL_IGNORE_INT_VER (1 << 1) +#define LL_REQUIRE_MINOR (1 << 2) +#define LL_EXPORTS (1 << 3) +#define LL_DELAY_LOAD (1 << 4) +#define LL_DELTA (1 << 5) + + + +typedef Elf32_Addr Elf32_Conflict; + +typedef struct { + Elf32_Half version; + unsigned char isa_level; + unsigned char isa_rev; + unsigned char gpr_size; + unsigned char cpr1_size; + unsigned char cpr2_size; + unsigned char fp_abi; + Elf32_Word isa_ext; + Elf32_Word ases; + Elf32_Word flags1; + Elf32_Word flags2; +} Elf_MIPS_ABIFlags_v0; + +#define MIPS_AFL_REG_NONE 0x00 +#define MIPS_AFL_REG_32 0x01 +#define MIPS_AFL_REG_64 0x02 +#define MIPS_AFL_REG_128 0x03 + +#define MIPS_AFL_ASE_DSP 0x00000001 +#define MIPS_AFL_ASE_DSPR2 0x00000002 +#define MIPS_AFL_ASE_EVA 0x00000004 +#define MIPS_AFL_ASE_MCU 0x00000008 +#define MIPS_AFL_ASE_MDMX 0x00000010 +#define MIPS_AFL_ASE_MIPS3D 0x00000020 +#define MIPS_AFL_ASE_MT 0x00000040 +#define MIPS_AFL_ASE_SMARTMIPS 0x00000080 +#define MIPS_AFL_ASE_VIRT 0x00000100 +#define MIPS_AFL_ASE_MSA 0x00000200 +#define MIPS_AFL_ASE_MIPS16 0x00000400 +#define MIPS_AFL_ASE_MICROMIPS 0x00000800 +#define MIPS_AFL_ASE_XPA 0x00001000 +#define MIPS_AFL_ASE_MASK 0x00001fff + +#define MIPS_AFL_EXT_XLR 1 +#define MIPS_AFL_EXT_OCTEON2 2 +#define MIPS_AFL_EXT_OCTEONP 3 +#define MIPS_AFL_EXT_LOONGSON_3A 4 +#define MIPS_AFL_EXT_OCTEON 5 +#define MIPS_AFL_EXT_5900 6 +#define MIPS_AFL_EXT_4650 7 +#define MIPS_AFL_EXT_4010 8 +#define MIPS_AFL_EXT_4100 9 +#define MIPS_AFL_EXT_3900 10 +#define MIPS_AFL_EXT_10000 11 +#define MIPS_AFL_EXT_SB1 12 +#define MIPS_AFL_EXT_4111 13 +#define MIPS_AFL_EXT_4120 14 +#define MIPS_AFL_EXT_5400 15 +#define MIPS_AFL_EXT_5500 16 +#define MIPS_AFL_EXT_LOONGSON_2E 17 +#define MIPS_AFL_EXT_LOONGSON_2F 18 + +#define MIPS_AFL_FLAGS1_ODDSPREG 1 + +enum +{ + Val_GNU_MIPS_ABI_FP_ANY = 0, + Val_GNU_MIPS_ABI_FP_DOUBLE = 1, + Val_GNU_MIPS_ABI_FP_SINGLE = 2, + Val_GNU_MIPS_ABI_FP_SOFT = 3, + Val_GNU_MIPS_ABI_FP_OLD_64 = 4, + Val_GNU_MIPS_ABI_FP_XX = 5, + Val_GNU_MIPS_ABI_FP_64 = 6, + Val_GNU_MIPS_ABI_FP_64A = 7, + Val_GNU_MIPS_ABI_FP_MAX = 7 +}; + + + + +#define EF_PARISC_TRAPNIL 0x00010000 +#define EF_PARISC_EXT 0x00020000 +#define EF_PARISC_LSB 0x00040000 +#define EF_PARISC_WIDE 0x00080000 +#define EF_PARISC_NO_KABP 0x00100000 + +#define EF_PARISC_LAZYSWAP 0x00400000 +#define EF_PARISC_ARCH 0x0000ffff + + + +#define EFA_PARISC_1_0 0x020b +#define EFA_PARISC_1_1 0x0210 +#define EFA_PARISC_2_0 0x0214 + + + +#define SHN_PARISC_ANSI_COMMON 0xff00 + +#define SHN_PARISC_HUGE_COMMON 0xff01 + + + +#define SHT_PARISC_EXT 0x70000000 +#define SHT_PARISC_UNWIND 0x70000001 +#define SHT_PARISC_DOC 0x70000002 + + + +#define SHF_PARISC_SHORT 0x20000000 +#define SHF_PARISC_HUGE 0x40000000 +#define SHF_PARISC_SBP 0x80000000 + + + +#define STT_PARISC_MILLICODE 13 + +#define STT_HP_OPAQUE (STT_LOOS + 0x1) +#define STT_HP_STUB (STT_LOOS + 0x2) + + + +#define R_PARISC_NONE 0 +#define R_PARISC_DIR32 1 +#define R_PARISC_DIR21L 2 +#define R_PARISC_DIR17R 3 +#define R_PARISC_DIR17F 4 +#define R_PARISC_DIR14R 6 +#define R_PARISC_PCREL32 9 +#define R_PARISC_PCREL21L 10 +#define R_PARISC_PCREL17R 11 +#define R_PARISC_PCREL17F 12 +#define R_PARISC_PCREL14R 14 +#define R_PARISC_DPREL21L 18 +#define R_PARISC_DPREL14R 22 +#define R_PARISC_GPREL21L 26 +#define R_PARISC_GPREL14R 30 +#define R_PARISC_LTOFF21L 34 +#define R_PARISC_LTOFF14R 38 +#define R_PARISC_SECREL32 41 +#define R_PARISC_SEGBASE 48 +#define R_PARISC_SEGREL32 49 +#define R_PARISC_PLTOFF21L 50 +#define R_PARISC_PLTOFF14R 54 +#define R_PARISC_LTOFF_FPTR32 57 +#define R_PARISC_LTOFF_FPTR21L 58 +#define R_PARISC_LTOFF_FPTR14R 62 +#define R_PARISC_FPTR64 64 +#define R_PARISC_PLABEL32 65 +#define R_PARISC_PLABEL21L 66 +#define R_PARISC_PLABEL14R 70 +#define R_PARISC_PCREL64 72 +#define R_PARISC_PCREL22F 74 +#define R_PARISC_PCREL14WR 75 +#define R_PARISC_PCREL14DR 76 +#define R_PARISC_PCREL16F 77 +#define R_PARISC_PCREL16WF 78 +#define R_PARISC_PCREL16DF 79 +#define R_PARISC_DIR64 80 +#define R_PARISC_DIR14WR 83 +#define R_PARISC_DIR14DR 84 +#define R_PARISC_DIR16F 85 +#define R_PARISC_DIR16WF 86 +#define R_PARISC_DIR16DF 87 +#define R_PARISC_GPREL64 88 +#define R_PARISC_GPREL14WR 91 +#define R_PARISC_GPREL14DR 92 +#define R_PARISC_GPREL16F 93 +#define R_PARISC_GPREL16WF 94 +#define R_PARISC_GPREL16DF 95 +#define R_PARISC_LTOFF64 96 +#define R_PARISC_LTOFF14WR 99 +#define R_PARISC_LTOFF14DR 100 +#define R_PARISC_LTOFF16F 101 +#define R_PARISC_LTOFF16WF 102 +#define R_PARISC_LTOFF16DF 103 +#define R_PARISC_SECREL64 104 +#define R_PARISC_SEGREL64 112 +#define R_PARISC_PLTOFF14WR 115 +#define R_PARISC_PLTOFF14DR 116 +#define R_PARISC_PLTOFF16F 117 +#define R_PARISC_PLTOFF16WF 118 +#define R_PARISC_PLTOFF16DF 119 +#define R_PARISC_LTOFF_FPTR64 120 +#define R_PARISC_LTOFF_FPTR14WR 123 +#define R_PARISC_LTOFF_FPTR14DR 124 +#define R_PARISC_LTOFF_FPTR16F 125 +#define R_PARISC_LTOFF_FPTR16WF 126 +#define R_PARISC_LTOFF_FPTR16DF 127 +#define R_PARISC_LORESERVE 128 +#define R_PARISC_COPY 128 +#define R_PARISC_IPLT 129 +#define R_PARISC_EPLT 130 +#define R_PARISC_TPREL32 153 +#define R_PARISC_TPREL21L 154 +#define R_PARISC_TPREL14R 158 +#define R_PARISC_LTOFF_TP21L 162 +#define R_PARISC_LTOFF_TP14R 166 +#define R_PARISC_LTOFF_TP14F 167 +#define R_PARISC_TPREL64 216 +#define R_PARISC_TPREL14WR 219 +#define R_PARISC_TPREL14DR 220 +#define R_PARISC_TPREL16F 221 +#define R_PARISC_TPREL16WF 222 +#define R_PARISC_TPREL16DF 223 +#define R_PARISC_LTOFF_TP64 224 +#define R_PARISC_LTOFF_TP14WR 227 +#define R_PARISC_LTOFF_TP14DR 228 +#define R_PARISC_LTOFF_TP16F 229 +#define R_PARISC_LTOFF_TP16WF 230 +#define R_PARISC_LTOFF_TP16DF 231 +#define R_PARISC_GNU_VTENTRY 232 +#define R_PARISC_GNU_VTINHERIT 233 +#define R_PARISC_TLS_GD21L 234 +#define R_PARISC_TLS_GD14R 235 +#define R_PARISC_TLS_GDCALL 236 +#define R_PARISC_TLS_LDM21L 237 +#define R_PARISC_TLS_LDM14R 238 +#define R_PARISC_TLS_LDMCALL 239 +#define R_PARISC_TLS_LDO21L 240 +#define R_PARISC_TLS_LDO14R 241 +#define R_PARISC_TLS_DTPMOD32 242 +#define R_PARISC_TLS_DTPMOD64 243 +#define R_PARISC_TLS_DTPOFF32 244 +#define R_PARISC_TLS_DTPOFF64 245 +#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L +#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R +#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L +#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R +#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32 +#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64 +#define R_PARISC_HIRESERVE 255 + + + +#define PT_HP_TLS (PT_LOOS + 0x0) +#define PT_HP_CORE_NONE (PT_LOOS + 0x1) +#define PT_HP_CORE_VERSION (PT_LOOS + 0x2) +#define PT_HP_CORE_KERNEL (PT_LOOS + 0x3) +#define PT_HP_CORE_COMM (PT_LOOS + 0x4) +#define PT_HP_CORE_PROC (PT_LOOS + 0x5) +#define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6) +#define PT_HP_CORE_STACK (PT_LOOS + 0x7) +#define PT_HP_CORE_SHM (PT_LOOS + 0x8) +#define PT_HP_CORE_MMF (PT_LOOS + 0x9) +#define PT_HP_PARALLEL (PT_LOOS + 0x10) +#define PT_HP_FASTBIND (PT_LOOS + 0x11) +#define PT_HP_OPT_ANNOT (PT_LOOS + 0x12) +#define PT_HP_HSL_ANNOT (PT_LOOS + 0x13) +#define PT_HP_STACK (PT_LOOS + 0x14) + +#define PT_PARISC_ARCHEXT 0x70000000 +#define PT_PARISC_UNWIND 0x70000001 + + + +#define PF_PARISC_SBP 0x08000000 + +#define PF_HP_PAGE_SIZE 0x00100000 +#define PF_HP_FAR_SHARED 0x00200000 +#define PF_HP_NEAR_SHARED 0x00400000 +#define PF_HP_CODE 0x01000000 +#define PF_HP_MODIFY 0x02000000 +#define PF_HP_LAZYSWAP 0x04000000 +#define PF_HP_SBP 0x08000000 + + + + + + +#define EF_ALPHA_32BIT 1 +#define EF_ALPHA_CANRELAX 2 + + + + +#define SHT_ALPHA_DEBUG 0x70000001 +#define SHT_ALPHA_REGINFO 0x70000002 + + + +#define SHF_ALPHA_GPREL 0x10000000 + + +#define STO_ALPHA_NOPV 0x80 +#define STO_ALPHA_STD_GPLOAD 0x88 + + + +#define R_ALPHA_NONE 0 +#define R_ALPHA_REFLONG 1 +#define R_ALPHA_REFQUAD 2 +#define R_ALPHA_GPREL32 3 +#define R_ALPHA_LITERAL 4 +#define R_ALPHA_LITUSE 5 +#define R_ALPHA_GPDISP 6 +#define R_ALPHA_BRADDR 7 +#define R_ALPHA_HINT 8 +#define R_ALPHA_SREL16 9 +#define R_ALPHA_SREL32 10 +#define R_ALPHA_SREL64 11 +#define R_ALPHA_GPRELHIGH 17 +#define R_ALPHA_GPRELLOW 18 +#define R_ALPHA_GPREL16 19 +#define R_ALPHA_COPY 24 +#define R_ALPHA_GLOB_DAT 25 +#define R_ALPHA_JMP_SLOT 26 +#define R_ALPHA_RELATIVE 27 +#define R_ALPHA_TLS_GD_HI 28 +#define R_ALPHA_TLSGD 29 +#define R_ALPHA_TLS_LDM 30 +#define R_ALPHA_DTPMOD64 31 +#define R_ALPHA_GOTDTPREL 32 +#define R_ALPHA_DTPREL64 33 +#define R_ALPHA_DTPRELHI 34 +#define R_ALPHA_DTPRELLO 35 +#define R_ALPHA_DTPREL16 36 +#define R_ALPHA_GOTTPREL 37 +#define R_ALPHA_TPREL64 38 +#define R_ALPHA_TPRELHI 39 +#define R_ALPHA_TPRELLO 40 +#define R_ALPHA_TPREL16 41 + +#define R_ALPHA_NUM 46 + + +#define LITUSE_ALPHA_ADDR 0 +#define LITUSE_ALPHA_BASE 1 +#define LITUSE_ALPHA_BYTOFF 2 +#define LITUSE_ALPHA_JSR 3 +#define LITUSE_ALPHA_TLS_GD 4 +#define LITUSE_ALPHA_TLS_LDM 5 + + +#define DT_ALPHA_PLTRO (DT_LOPROC + 0) +#define DT_ALPHA_NUM 1 + + + + +#define EF_PPC_EMB 0x80000000 + + +#define EF_PPC_RELOCATABLE 0x00010000 +#define EF_PPC_RELOCATABLE_LIB 0x00008000 + + + +#define R_PPC_NONE 0 +#define R_PPC_ADDR32 1 +#define R_PPC_ADDR24 2 +#define R_PPC_ADDR16 3 +#define R_PPC_ADDR16_LO 4 +#define R_PPC_ADDR16_HI 5 +#define R_PPC_ADDR16_HA 6 +#define R_PPC_ADDR14 7 +#define R_PPC_ADDR14_BRTAKEN 8 +#define R_PPC_ADDR14_BRNTAKEN 9 +#define R_PPC_REL24 10 +#define R_PPC_REL14 11 +#define R_PPC_REL14_BRTAKEN 12 +#define R_PPC_REL14_BRNTAKEN 13 +#define R_PPC_GOT16 14 +#define R_PPC_GOT16_LO 15 +#define R_PPC_GOT16_HI 16 +#define R_PPC_GOT16_HA 17 +#define R_PPC_PLTREL24 18 +#define R_PPC_COPY 19 +#define R_PPC_GLOB_DAT 20 +#define R_PPC_JMP_SLOT 21 +#define R_PPC_RELATIVE 22 +#define R_PPC_LOCAL24PC 23 +#define R_PPC_UADDR32 24 +#define R_PPC_UADDR16 25 +#define R_PPC_REL32 26 +#define R_PPC_PLT32 27 +#define R_PPC_PLTREL32 28 +#define R_PPC_PLT16_LO 29 +#define R_PPC_PLT16_HI 30 +#define R_PPC_PLT16_HA 31 +#define R_PPC_SDAREL16 32 +#define R_PPC_SECTOFF 33 +#define R_PPC_SECTOFF_LO 34 +#define R_PPC_SECTOFF_HI 35 +#define R_PPC_SECTOFF_HA 36 + + +#define R_PPC_TLS 67 +#define R_PPC_DTPMOD32 68 +#define R_PPC_TPREL16 69 +#define R_PPC_TPREL16_LO 70 +#define R_PPC_TPREL16_HI 71 +#define R_PPC_TPREL16_HA 72 +#define R_PPC_TPREL32 73 +#define R_PPC_DTPREL16 74 +#define R_PPC_DTPREL16_LO 75 +#define R_PPC_DTPREL16_HI 76 +#define R_PPC_DTPREL16_HA 77 +#define R_PPC_DTPREL32 78 +#define R_PPC_GOT_TLSGD16 79 +#define R_PPC_GOT_TLSGD16_LO 80 +#define R_PPC_GOT_TLSGD16_HI 81 +#define R_PPC_GOT_TLSGD16_HA 82 +#define R_PPC_GOT_TLSLD16 83 +#define R_PPC_GOT_TLSLD16_LO 84 +#define R_PPC_GOT_TLSLD16_HI 85 +#define R_PPC_GOT_TLSLD16_HA 86 +#define R_PPC_GOT_TPREL16 87 +#define R_PPC_GOT_TPREL16_LO 88 +#define R_PPC_GOT_TPREL16_HI 89 +#define R_PPC_GOT_TPREL16_HA 90 +#define R_PPC_GOT_DTPREL16 91 +#define R_PPC_GOT_DTPREL16_LO 92 +#define R_PPC_GOT_DTPREL16_HI 93 +#define R_PPC_GOT_DTPREL16_HA 94 +#define R_PPC_TLSGD 95 +#define R_PPC_TLSLD 96 + + +#define R_PPC_EMB_NADDR32 101 +#define R_PPC_EMB_NADDR16 102 +#define R_PPC_EMB_NADDR16_LO 103 +#define R_PPC_EMB_NADDR16_HI 104 +#define R_PPC_EMB_NADDR16_HA 105 +#define R_PPC_EMB_SDAI16 106 +#define R_PPC_EMB_SDA2I16 107 +#define R_PPC_EMB_SDA2REL 108 +#define R_PPC_EMB_SDA21 109 +#define R_PPC_EMB_MRKREF 110 +#define R_PPC_EMB_RELSEC16 111 +#define R_PPC_EMB_RELST_LO 112 +#define R_PPC_EMB_RELST_HI 113 +#define R_PPC_EMB_RELST_HA 114 +#define R_PPC_EMB_BIT_FLD 115 +#define R_PPC_EMB_RELSDA 116 + + +#define R_PPC_DIAB_SDA21_LO 180 +#define R_PPC_DIAB_SDA21_HI 181 +#define R_PPC_DIAB_SDA21_HA 182 +#define R_PPC_DIAB_RELSDA_LO 183 +#define R_PPC_DIAB_RELSDA_HI 184 +#define R_PPC_DIAB_RELSDA_HA 185 + + +#define R_PPC_IRELATIVE 248 + + +#define R_PPC_REL16 249 +#define R_PPC_REL16_LO 250 +#define R_PPC_REL16_HI 251 +#define R_PPC_REL16_HA 252 + + + +#define R_PPC_TOC16 255 + + +#define DT_PPC_GOT (DT_LOPROC + 0) +#define DT_PPC_OPT (DT_LOPROC + 1) +#define DT_PPC_NUM 2 + +#define PPC_OPT_TLS 1 + + +#define R_PPC64_NONE R_PPC_NONE +#define R_PPC64_ADDR32 R_PPC_ADDR32 +#define R_PPC64_ADDR24 R_PPC_ADDR24 +#define R_PPC64_ADDR16 R_PPC_ADDR16 +#define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO +#define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI +#define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA +#define R_PPC64_ADDR14 R_PPC_ADDR14 +#define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN +#define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN +#define R_PPC64_REL24 R_PPC_REL24 +#define R_PPC64_REL14 R_PPC_REL14 +#define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN +#define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN +#define R_PPC64_GOT16 R_PPC_GOT16 +#define R_PPC64_GOT16_LO R_PPC_GOT16_LO +#define R_PPC64_GOT16_HI R_PPC_GOT16_HI +#define R_PPC64_GOT16_HA R_PPC_GOT16_HA + +#define R_PPC64_COPY R_PPC_COPY +#define R_PPC64_GLOB_DAT R_PPC_GLOB_DAT +#define R_PPC64_JMP_SLOT R_PPC_JMP_SLOT +#define R_PPC64_RELATIVE R_PPC_RELATIVE + +#define R_PPC64_UADDR32 R_PPC_UADDR32 +#define R_PPC64_UADDR16 R_PPC_UADDR16 +#define R_PPC64_REL32 R_PPC_REL32 +#define R_PPC64_PLT32 R_PPC_PLT32 +#define R_PPC64_PLTREL32 R_PPC_PLTREL32 +#define R_PPC64_PLT16_LO R_PPC_PLT16_LO +#define R_PPC64_PLT16_HI R_PPC_PLT16_HI +#define R_PPC64_PLT16_HA R_PPC_PLT16_HA + +#define R_PPC64_SECTOFF R_PPC_SECTOFF +#define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO +#define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI +#define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA +#define R_PPC64_ADDR30 37 +#define R_PPC64_ADDR64 38 +#define R_PPC64_ADDR16_HIGHER 39 +#define R_PPC64_ADDR16_HIGHERA 40 +#define R_PPC64_ADDR16_HIGHEST 41 +#define R_PPC64_ADDR16_HIGHESTA 42 +#define R_PPC64_UADDR64 43 +#define R_PPC64_REL64 44 +#define R_PPC64_PLT64 45 +#define R_PPC64_PLTREL64 46 +#define R_PPC64_TOC16 47 +#define R_PPC64_TOC16_LO 48 +#define R_PPC64_TOC16_HI 49 +#define R_PPC64_TOC16_HA 50 +#define R_PPC64_TOC 51 +#define R_PPC64_PLTGOT16 52 +#define R_PPC64_PLTGOT16_LO 53 +#define R_PPC64_PLTGOT16_HI 54 +#define R_PPC64_PLTGOT16_HA 55 + +#define R_PPC64_ADDR16_DS 56 +#define R_PPC64_ADDR16_LO_DS 57 +#define R_PPC64_GOT16_DS 58 +#define R_PPC64_GOT16_LO_DS 59 +#define R_PPC64_PLT16_LO_DS 60 +#define R_PPC64_SECTOFF_DS 61 +#define R_PPC64_SECTOFF_LO_DS 62 +#define R_PPC64_TOC16_DS 63 +#define R_PPC64_TOC16_LO_DS 64 +#define R_PPC64_PLTGOT16_DS 65 +#define R_PPC64_PLTGOT16_LO_DS 66 + + +#define R_PPC64_TLS 67 +#define R_PPC64_DTPMOD64 68 +#define R_PPC64_TPREL16 69 +#define R_PPC64_TPREL16_LO 70 +#define R_PPC64_TPREL16_HI 71 +#define R_PPC64_TPREL16_HA 72 +#define R_PPC64_TPREL64 73 +#define R_PPC64_DTPREL16 74 +#define R_PPC64_DTPREL16_LO 75 +#define R_PPC64_DTPREL16_HI 76 +#define R_PPC64_DTPREL16_HA 77 +#define R_PPC64_DTPREL64 78 +#define R_PPC64_GOT_TLSGD16 79 +#define R_PPC64_GOT_TLSGD16_LO 80 +#define R_PPC64_GOT_TLSGD16_HI 81 +#define R_PPC64_GOT_TLSGD16_HA 82 +#define R_PPC64_GOT_TLSLD16 83 +#define R_PPC64_GOT_TLSLD16_LO 84 +#define R_PPC64_GOT_TLSLD16_HI 85 +#define R_PPC64_GOT_TLSLD16_HA 86 +#define R_PPC64_GOT_TPREL16_DS 87 +#define R_PPC64_GOT_TPREL16_LO_DS 88 +#define R_PPC64_GOT_TPREL16_HI 89 +#define R_PPC64_GOT_TPREL16_HA 90 +#define R_PPC64_GOT_DTPREL16_DS 91 +#define R_PPC64_GOT_DTPREL16_LO_DS 92 +#define R_PPC64_GOT_DTPREL16_HI 93 +#define R_PPC64_GOT_DTPREL16_HA 94 +#define R_PPC64_TPREL16_DS 95 +#define R_PPC64_TPREL16_LO_DS 96 +#define R_PPC64_TPREL16_HIGHER 97 +#define R_PPC64_TPREL16_HIGHERA 98 +#define R_PPC64_TPREL16_HIGHEST 99 +#define R_PPC64_TPREL16_HIGHESTA 100 +#define R_PPC64_DTPREL16_DS 101 +#define R_PPC64_DTPREL16_LO_DS 102 +#define R_PPC64_DTPREL16_HIGHER 103 +#define R_PPC64_DTPREL16_HIGHERA 104 +#define R_PPC64_DTPREL16_HIGHEST 105 +#define R_PPC64_DTPREL16_HIGHESTA 106 +#define R_PPC64_TLSGD 107 +#define R_PPC64_TLSLD 108 +#define R_PPC64_TOCSAVE 109 +#define R_PPC64_ADDR16_HIGH 110 +#define R_PPC64_ADDR16_HIGHA 111 +#define R_PPC64_TPREL16_HIGH 112 +#define R_PPC64_TPREL16_HIGHA 113 +#define R_PPC64_DTPREL16_HIGH 114 +#define R_PPC64_DTPREL16_HIGHA 115 + + +#define R_PPC64_JMP_IREL 247 +#define R_PPC64_IRELATIVE 248 +#define R_PPC64_REL16 249 +#define R_PPC64_REL16_LO 250 +#define R_PPC64_REL16_HI 251 +#define R_PPC64_REL16_HA 252 + +#define EF_PPC64_ABI 3 + +#define DT_PPC64_GLINK (DT_LOPROC + 0) +#define DT_PPC64_OPD (DT_LOPROC + 1) +#define DT_PPC64_OPDSZ (DT_LOPROC + 2) +#define DT_PPC64_OPT (DT_LOPROC + 3) +#define DT_PPC64_NUM 4 + +#define PPC64_OPT_TLS 1 +#define PPC64_OPT_MULTI_TOC 2 +#define PPC64_OPT_LOCALENTRY 4 + +#define STO_PPC64_LOCAL_BIT 5 +#define STO_PPC64_LOCAL_MASK 0xe0 +#define PPC64_LOCAL_ENTRY_OFFSET(x) (1 << (((x)&0xe0)>>5) & 0xfc) + + +#define EF_ARM_RELEXEC 0x01 +#define EF_ARM_HASENTRY 0x02 +#define EF_ARM_INTERWORK 0x04 +#define EF_ARM_APCS_26 0x08 +#define EF_ARM_APCS_FLOAT 0x10 +#define EF_ARM_PIC 0x20 +#define EF_ARM_ALIGN8 0x40 +#define EF_ARM_NEW_ABI 0x80 +#define EF_ARM_OLD_ABI 0x100 +#define EF_ARM_SOFT_FLOAT 0x200 +#define EF_ARM_VFP_FLOAT 0x400 +#define EF_ARM_MAVERICK_FLOAT 0x800 + +#define EF_ARM_ABI_FLOAT_SOFT 0x200 +#define EF_ARM_ABI_FLOAT_HARD 0x400 + + +#define EF_ARM_SYMSARESORTED 0x04 +#define EF_ARM_DYNSYMSUSESEGIDX 0x08 +#define EF_ARM_MAPSYMSFIRST 0x10 +#define EF_ARM_EABIMASK 0XFF000000 + + +#define EF_ARM_BE8 0x00800000 +#define EF_ARM_LE8 0x00400000 + +#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK) +#define EF_ARM_EABI_UNKNOWN 0x00000000 +#define EF_ARM_EABI_VER1 0x01000000 +#define EF_ARM_EABI_VER2 0x02000000 +#define EF_ARM_EABI_VER3 0x03000000 +#define EF_ARM_EABI_VER4 0x04000000 +#define EF_ARM_EABI_VER5 0x05000000 + + +#define STT_ARM_TFUNC STT_LOPROC +#define STT_ARM_16BIT STT_HIPROC + + +#define SHF_ARM_ENTRYSECT 0x10000000 +#define SHF_ARM_COMDEF 0x80000000 + + + +#define PF_ARM_SB 0x10000000 + +#define PF_ARM_PI 0x20000000 +#define PF_ARM_ABS 0x40000000 + + +#define PT_ARM_EXIDX (PT_LOPROC + 1) + + +#define SHT_ARM_EXIDX (SHT_LOPROC + 1) +#define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2) +#define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) + +#define R_AARCH64_NONE 0 +#define R_AARCH64_P32_ABS32 1 +#define R_AARCH64_P32_COPY 180 +#define R_AARCH64_P32_GLOB_DAT 181 +#define R_AARCH64_P32_JUMP_SLOT 182 +#define R_AARCH64_P32_RELATIVE 183 +#define R_AARCH64_P32_TLS_DTPMOD 184 +#define R_AARCH64_P32_TLS_DTPREL 185 +#define R_AARCH64_P32_TLS_TPREL 186 +#define R_AARCH64_P32_TLSDESC 187 +#define R_AARCH64_P32_IRELATIVE 188 +#define R_AARCH64_ABS64 257 +#define R_AARCH64_ABS32 258 +#define R_AARCH64_ABS16 259 +#define R_AARCH64_PREL64 260 +#define R_AARCH64_PREL32 261 +#define R_AARCH64_PREL16 262 +#define R_AARCH64_MOVW_UABS_G0 263 +#define R_AARCH64_MOVW_UABS_G0_NC 264 +#define R_AARCH64_MOVW_UABS_G1 265 +#define R_AARCH64_MOVW_UABS_G1_NC 266 +#define R_AARCH64_MOVW_UABS_G2 267 +#define R_AARCH64_MOVW_UABS_G2_NC 268 +#define R_AARCH64_MOVW_UABS_G3 269 +#define R_AARCH64_MOVW_SABS_G0 270 +#define R_AARCH64_MOVW_SABS_G1 271 +#define R_AARCH64_MOVW_SABS_G2 272 +#define R_AARCH64_LD_PREL_LO19 273 +#define R_AARCH64_ADR_PREL_LO21 274 +#define R_AARCH64_ADR_PREL_PG_HI21 275 +#define R_AARCH64_ADR_PREL_PG_HI21_NC 276 +#define R_AARCH64_ADD_ABS_LO12_NC 277 +#define R_AARCH64_LDST8_ABS_LO12_NC 278 +#define R_AARCH64_TSTBR14 279 +#define R_AARCH64_CONDBR19 280 +#define R_AARCH64_JUMP26 282 +#define R_AARCH64_CALL26 283 +#define R_AARCH64_LDST16_ABS_LO12_NC 284 +#define R_AARCH64_LDST32_ABS_LO12_NC 285 +#define R_AARCH64_LDST64_ABS_LO12_NC 286 +#define R_AARCH64_MOVW_PREL_G0 287 +#define R_AARCH64_MOVW_PREL_G0_NC 288 +#define R_AARCH64_MOVW_PREL_G1 289 +#define R_AARCH64_MOVW_PREL_G1_NC 290 +#define R_AARCH64_MOVW_PREL_G2 291 +#define R_AARCH64_MOVW_PREL_G2_NC 292 +#define R_AARCH64_MOVW_PREL_G3 293 +#define R_AARCH64_LDST128_ABS_LO12_NC 299 +#define R_AARCH64_MOVW_GOTOFF_G0 300 +#define R_AARCH64_MOVW_GOTOFF_G0_NC 301 +#define R_AARCH64_MOVW_GOTOFF_G1 302 +#define R_AARCH64_MOVW_GOTOFF_G1_NC 303 +#define R_AARCH64_MOVW_GOTOFF_G2 304 +#define R_AARCH64_MOVW_GOTOFF_G2_NC 305 +#define R_AARCH64_MOVW_GOTOFF_G3 306 +#define R_AARCH64_GOTREL64 307 +#define R_AARCH64_GOTREL32 308 +#define R_AARCH64_GOT_LD_PREL19 309 +#define R_AARCH64_LD64_GOTOFF_LO15 310 +#define R_AARCH64_ADR_GOT_PAGE 311 +#define R_AARCH64_LD64_GOT_LO12_NC 312 +#define R_AARCH64_LD64_GOTPAGE_LO15 313 +#define R_AARCH64_TLSGD_ADR_PREL21 512 +#define R_AARCH64_TLSGD_ADR_PAGE21 513 +#define R_AARCH64_TLSGD_ADD_LO12_NC 514 +#define R_AARCH64_TLSGD_MOVW_G1 515 +#define R_AARCH64_TLSGD_MOVW_G0_NC 516 +#define R_AARCH64_TLSLD_ADR_PREL21 517 +#define R_AARCH64_TLSLD_ADR_PAGE21 518 +#define R_AARCH64_TLSLD_ADD_LO12_NC 519 +#define R_AARCH64_TLSLD_MOVW_G1 520 +#define R_AARCH64_TLSLD_MOVW_G0_NC 521 +#define R_AARCH64_TLSLD_LD_PREL19 522 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G2 523 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G1 524 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC 525 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G0 526 +#define R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC 527 +#define R_AARCH64_TLSLD_ADD_DTPREL_HI12 528 +#define R_AARCH64_TLSLD_ADD_DTPREL_LO12 529 +#define R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC 530 +#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12 531 +#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC 532 +#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12 533 +#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC 534 +#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12 535 +#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC 536 +#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12 537 +#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC 538 +#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 539 +#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC 540 +#define R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 541 +#define R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC 542 +#define R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 543 +#define R_AARCH64_TLSLE_MOVW_TPREL_G2 544 +#define R_AARCH64_TLSLE_MOVW_TPREL_G1 545 +#define R_AARCH64_TLSLE_MOVW_TPREL_G1_NC 546 +#define R_AARCH64_TLSLE_MOVW_TPREL_G0 547 +#define R_AARCH64_TLSLE_MOVW_TPREL_G0_NC 548 +#define R_AARCH64_TLSLE_ADD_TPREL_HI12 549 +#define R_AARCH64_TLSLE_ADD_TPREL_LO12 550 +#define R_AARCH64_TLSLE_ADD_TPREL_LO12_NC 551 +#define R_AARCH64_TLSLE_LDST8_TPREL_LO12 552 +#define R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC 553 +#define R_AARCH64_TLSLE_LDST16_TPREL_LO12 554 +#define R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC 555 +#define R_AARCH64_TLSLE_LDST32_TPREL_LO12 556 +#define R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC 557 +#define R_AARCH64_TLSLE_LDST64_TPREL_LO12 558 +#define R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC 559 +#define R_AARCH64_TLSDESC_LD_PREL19 560 +#define R_AARCH64_TLSDESC_ADR_PREL21 561 +#define R_AARCH64_TLSDESC_ADR_PAGE21 562 +#define R_AARCH64_TLSDESC_LD64_LO12 563 +#define R_AARCH64_TLSDESC_ADD_LO12 564 +#define R_AARCH64_TLSDESC_OFF_G1 565 +#define R_AARCH64_TLSDESC_OFF_G0_NC 566 +#define R_AARCH64_TLSDESC_LDR 567 +#define R_AARCH64_TLSDESC_ADD 568 +#define R_AARCH64_TLSDESC_CALL 569 +#define R_AARCH64_TLSLE_LDST128_TPREL_LO12 570 +#define R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC 571 +#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12 572 +#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC 573 +#define R_AARCH64_COPY 1024 +#define R_AARCH64_GLOB_DAT 1025 +#define R_AARCH64_JUMP_SLOT 1026 +#define R_AARCH64_RELATIVE 1027 +#define R_AARCH64_TLS_DTPMOD 1028 +#define R_AARCH64_TLS_DTPMOD64 1028 +#define R_AARCH64_TLS_DTPREL 1029 +#define R_AARCH64_TLS_DTPREL64 1029 +#define R_AARCH64_TLS_TPREL 1030 +#define R_AARCH64_TLS_TPREL64 1030 +#define R_AARCH64_TLSDESC 1031 + + +#define R_ARM_NONE 0 +#define R_ARM_PC24 1 +#define R_ARM_ABS32 2 +#define R_ARM_REL32 3 +#define R_ARM_PC13 4 +#define R_ARM_ABS16 5 +#define R_ARM_ABS12 6 +#define R_ARM_THM_ABS5 7 +#define R_ARM_ABS8 8 +#define R_ARM_SBREL32 9 +#define R_ARM_THM_PC22 10 +#define R_ARM_THM_PC8 11 +#define R_ARM_AMP_VCALL9 12 +#define R_ARM_TLS_DESC 13 +#define R_ARM_THM_SWI8 14 +#define R_ARM_XPC25 15 +#define R_ARM_THM_XPC22 16 +#define R_ARM_TLS_DTPMOD32 17 +#define R_ARM_TLS_DTPOFF32 18 +#define R_ARM_TLS_TPOFF32 19 +#define R_ARM_COPY 20 +#define R_ARM_GLOB_DAT 21 +#define R_ARM_JUMP_SLOT 22 +#define R_ARM_RELATIVE 23 +#define R_ARM_GOTOFF 24 +#define R_ARM_GOTPC 25 +#define R_ARM_GOT32 26 +#define R_ARM_PLT32 27 +#define R_ARM_CALL 28 +#define R_ARM_JUMP24 29 +#define R_ARM_THM_JUMP24 30 +#define R_ARM_BASE_ABS 31 +#define R_ARM_ALU_PCREL_7_0 32 +#define R_ARM_ALU_PCREL_15_8 33 +#define R_ARM_ALU_PCREL_23_15 34 +#define R_ARM_LDR_SBREL_11_0 35 +#define R_ARM_ALU_SBREL_19_12 36 +#define R_ARM_ALU_SBREL_27_20 37 +#define R_ARM_TARGET1 38 +#define R_ARM_SBREL31 39 +#define R_ARM_V4BX 40 +#define R_ARM_TARGET2 41 +#define R_ARM_PREL31 42 +#define R_ARM_MOVW_ABS_NC 43 +#define R_ARM_MOVT_ABS 44 +#define R_ARM_MOVW_PREL_NC 45 +#define R_ARM_MOVT_PREL 46 +#define R_ARM_THM_MOVW_ABS_NC 47 +#define R_ARM_THM_MOVT_ABS 48 +#define R_ARM_THM_MOVW_PREL_NC 49 +#define R_ARM_THM_MOVT_PREL 50 +#define R_ARM_THM_JUMP19 51 +#define R_ARM_THM_JUMP6 52 +#define R_ARM_THM_ALU_PREL_11_0 53 +#define R_ARM_THM_PC12 54 +#define R_ARM_ABS32_NOI 55 +#define R_ARM_REL32_NOI 56 +#define R_ARM_ALU_PC_G0_NC 57 +#define R_ARM_ALU_PC_G0 58 +#define R_ARM_ALU_PC_G1_NC 59 +#define R_ARM_ALU_PC_G1 60 +#define R_ARM_ALU_PC_G2 61 +#define R_ARM_LDR_PC_G1 62 +#define R_ARM_LDR_PC_G2 63 +#define R_ARM_LDRS_PC_G0 64 +#define R_ARM_LDRS_PC_G1 65 +#define R_ARM_LDRS_PC_G2 66 +#define R_ARM_LDC_PC_G0 67 +#define R_ARM_LDC_PC_G1 68 +#define R_ARM_LDC_PC_G2 69 +#define R_ARM_ALU_SB_G0_NC 70 +#define R_ARM_ALU_SB_G0 71 +#define R_ARM_ALU_SB_G1_NC 72 +#define R_ARM_ALU_SB_G1 73 +#define R_ARM_ALU_SB_G2 74 +#define R_ARM_LDR_SB_G0 75 +#define R_ARM_LDR_SB_G1 76 +#define R_ARM_LDR_SB_G2 77 +#define R_ARM_LDRS_SB_G0 78 +#define R_ARM_LDRS_SB_G1 79 +#define R_ARM_LDRS_SB_G2 80 +#define R_ARM_LDC_SB_G0 81 +#define R_ARM_LDC_SB_G1 82 +#define R_ARM_LDC_SB_G2 83 +#define R_ARM_MOVW_BREL_NC 84 +#define R_ARM_MOVT_BREL 85 +#define R_ARM_MOVW_BREL 86 +#define R_ARM_THM_MOVW_BREL_NC 87 +#define R_ARM_THM_MOVT_BREL 88 +#define R_ARM_THM_MOVW_BREL 89 +#define R_ARM_TLS_GOTDESC 90 +#define R_ARM_TLS_CALL 91 +#define R_ARM_TLS_DESCSEQ 92 +#define R_ARM_THM_TLS_CALL 93 +#define R_ARM_PLT32_ABS 94 +#define R_ARM_GOT_ABS 95 +#define R_ARM_GOT_PREL 96 +#define R_ARM_GOT_BREL12 97 +#define R_ARM_GOTOFF12 98 +#define R_ARM_GOTRELAX 99 +#define R_ARM_GNU_VTENTRY 100 +#define R_ARM_GNU_VTINHERIT 101 +#define R_ARM_THM_PC11 102 +#define R_ARM_THM_PC9 103 +#define R_ARM_TLS_GD32 104 + +#define R_ARM_TLS_LDM32 105 + +#define R_ARM_TLS_LDO32 106 + +#define R_ARM_TLS_IE32 107 + +#define R_ARM_TLS_LE32 108 +#define R_ARM_TLS_LDO12 109 +#define R_ARM_TLS_LE12 110 +#define R_ARM_TLS_IE12GP 111 +#define R_ARM_ME_TOO 128 +#define R_ARM_THM_TLS_DESCSEQ 129 +#define R_ARM_THM_TLS_DESCSEQ16 129 +#define R_ARM_THM_TLS_DESCSEQ32 130 +#define R_ARM_THM_GOT_BREL12 131 +#define R_ARM_IRELATIVE 160 +#define R_ARM_RXPC25 249 +#define R_ARM_RSBREL32 250 +#define R_ARM_THM_RPC22 251 +#define R_ARM_RREL32 252 +#define R_ARM_RABS22 253 +#define R_ARM_RPC24 254 +#define R_ARM_RBASE 255 + +#define R_ARM_NUM 256 + + +#define R_CKCORE_NONE 0 +#define R_CKCORE_ADDR32 1 +#define R_CKCORE_PCRELIMM8BY4 2 +#define R_CKCORE_PCRELIMM11BY2 3 +#define R_CKCORE_PCREL32 5 +#define R_CKCORE_PCRELJSR_IMM11BY2 6 +#define R_CKCORE_RELATIVE 9 +#define R_CKCORE_COPY 10 +#define R_CKCORE_GLOB_DAT 11 +#define R_CKCORE_JUMP_SLOT 12 +#define R_CKCORE_GOTOFF 13 +#define R_CKCORE_GOTPC 14 +#define R_CKCORE_GOT32 15 +#define R_CKCORE_PLT32 16 +#define R_CKCORE_ADDRGOT 17 +#define R_CKCORE_ADDRPLT 18 +#define R_CKCORE_PCREL_IMM26BY2 19 +#define R_CKCORE_PCREL_IMM16BY2 20 +#define R_CKCORE_PCREL_IMM16BY4 21 +#define R_CKCORE_PCREL_IMM10BY2 22 +#define R_CKCORE_PCREL_IMM10BY4 23 +#define R_CKCORE_ADDR_HI16 24 +#define R_CKCORE_ADDR_LO16 25 +#define R_CKCORE_GOTPC_HI16 26 +#define R_CKCORE_GOTPC_LO16 27 +#define R_CKCORE_GOTOFF_HI16 28 +#define R_CKCORE_GOTOFF_LO16 29 +#define R_CKCORE_GOT12 30 +#define R_CKCORE_GOT_HI16 31 +#define R_CKCORE_GOT_LO16 32 +#define R_CKCORE_PLT12 33 +#define R_CKCORE_PLT_HI16 34 +#define R_CKCORE_PLT_LO16 35 +#define R_CKCORE_ADDRGOT_HI16 36 +#define R_CKCORE_ADDRGOT_LO16 37 +#define R_CKCORE_ADDRPLT_HI16 38 +#define R_CKCORE_ADDRPLT_LO16 39 +#define R_CKCORE_PCREL_JSR_IMM26BY2 40 +#define R_CKCORE_TOFFSET_LO16 41 +#define R_CKCORE_DOFFSET_LO16 42 +#define R_CKCORE_PCREL_IMM18BY2 43 +#define R_CKCORE_DOFFSET_IMM18 44 +#define R_CKCORE_DOFFSET_IMM18BY2 45 +#define R_CKCORE_DOFFSET_IMM18BY4 46 +#define R_CKCORE_GOT_IMM18BY4 48 +#define R_CKCORE_PLT_IMM18BY4 49 +#define R_CKCORE_PCREL_IMM7BY4 50 +#define R_CKCORE_TLS_LE32 51 +#define R_CKCORE_TLS_IE32 52 +#define R_CKCORE_TLS_GD32 53 +#define R_CKCORE_TLS_LDM32 54 +#define R_CKCORE_TLS_LDO32 55 +#define R_CKCORE_TLS_DTPMOD32 56 +#define R_CKCORE_TLS_DTPOFF32 57 +#define R_CKCORE_TLS_TPOFF32 58 + + +#define EF_IA_64_MASKOS 0x0000000f +#define EF_IA_64_ABI64 0x00000010 +#define EF_IA_64_ARCH 0xff000000 + + +#define PT_IA_64_ARCHEXT (PT_LOPROC + 0) +#define PT_IA_64_UNWIND (PT_LOPROC + 1) +#define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12) +#define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13) +#define PT_IA_64_HP_STACK (PT_LOOS + 0x14) + + +#define PF_IA_64_NORECOV 0x80000000 + + +#define SHT_IA_64_EXT (SHT_LOPROC + 0) +#define SHT_IA_64_UNWIND (SHT_LOPROC + 1) + + +#define SHF_IA_64_SHORT 0x10000000 +#define SHF_IA_64_NORECOV 0x20000000 + + +#define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0) +#define DT_IA_64_NUM 1 + + +#define R_IA64_NONE 0x00 +#define R_IA64_IMM14 0x21 +#define R_IA64_IMM22 0x22 +#define R_IA64_IMM64 0x23 +#define R_IA64_DIR32MSB 0x24 +#define R_IA64_DIR32LSB 0x25 +#define R_IA64_DIR64MSB 0x26 +#define R_IA64_DIR64LSB 0x27 +#define R_IA64_GPREL22 0x2a +#define R_IA64_GPREL64I 0x2b +#define R_IA64_GPREL32MSB 0x2c +#define R_IA64_GPREL32LSB 0x2d +#define R_IA64_GPREL64MSB 0x2e +#define R_IA64_GPREL64LSB 0x2f +#define R_IA64_LTOFF22 0x32 +#define R_IA64_LTOFF64I 0x33 +#define R_IA64_PLTOFF22 0x3a +#define R_IA64_PLTOFF64I 0x3b +#define R_IA64_PLTOFF64MSB 0x3e +#define R_IA64_PLTOFF64LSB 0x3f +#define R_IA64_FPTR64I 0x43 +#define R_IA64_FPTR32MSB 0x44 +#define R_IA64_FPTR32LSB 0x45 +#define R_IA64_FPTR64MSB 0x46 +#define R_IA64_FPTR64LSB 0x47 +#define R_IA64_PCREL60B 0x48 +#define R_IA64_PCREL21B 0x49 +#define R_IA64_PCREL21M 0x4a +#define R_IA64_PCREL21F 0x4b +#define R_IA64_PCREL32MSB 0x4c +#define R_IA64_PCREL32LSB 0x4d +#define R_IA64_PCREL64MSB 0x4e +#define R_IA64_PCREL64LSB 0x4f +#define R_IA64_LTOFF_FPTR22 0x52 +#define R_IA64_LTOFF_FPTR64I 0x53 +#define R_IA64_LTOFF_FPTR32MSB 0x54 +#define R_IA64_LTOFF_FPTR32LSB 0x55 +#define R_IA64_LTOFF_FPTR64MSB 0x56 +#define R_IA64_LTOFF_FPTR64LSB 0x57 +#define R_IA64_SEGREL32MSB 0x5c +#define R_IA64_SEGREL32LSB 0x5d +#define R_IA64_SEGREL64MSB 0x5e +#define R_IA64_SEGREL64LSB 0x5f +#define R_IA64_SECREL32MSB 0x64 +#define R_IA64_SECREL32LSB 0x65 +#define R_IA64_SECREL64MSB 0x66 +#define R_IA64_SECREL64LSB 0x67 +#define R_IA64_REL32MSB 0x6c +#define R_IA64_REL32LSB 0x6d +#define R_IA64_REL64MSB 0x6e +#define R_IA64_REL64LSB 0x6f +#define R_IA64_LTV32MSB 0x74 +#define R_IA64_LTV32LSB 0x75 +#define R_IA64_LTV64MSB 0x76 +#define R_IA64_LTV64LSB 0x77 +#define R_IA64_PCREL21BI 0x79 +#define R_IA64_PCREL22 0x7a +#define R_IA64_PCREL64I 0x7b +#define R_IA64_IPLTMSB 0x80 +#define R_IA64_IPLTLSB 0x81 +#define R_IA64_COPY 0x84 +#define R_IA64_SUB 0x85 +#define R_IA64_LTOFF22X 0x86 +#define R_IA64_LDXMOV 0x87 +#define R_IA64_TPREL14 0x91 +#define R_IA64_TPREL22 0x92 +#define R_IA64_TPREL64I 0x93 +#define R_IA64_TPREL64MSB 0x96 +#define R_IA64_TPREL64LSB 0x97 +#define R_IA64_LTOFF_TPREL22 0x9a +#define R_IA64_DTPMOD64MSB 0xa6 +#define R_IA64_DTPMOD64LSB 0xa7 +#define R_IA64_LTOFF_DTPMOD22 0xaa +#define R_IA64_DTPREL14 0xb1 +#define R_IA64_DTPREL22 0xb2 +#define R_IA64_DTPREL64I 0xb3 +#define R_IA64_DTPREL32MSB 0xb4 +#define R_IA64_DTPREL32LSB 0xb5 +#define R_IA64_DTPREL64MSB 0xb6 +#define R_IA64_DTPREL64LSB 0xb7 +#define R_IA64_LTOFF_DTPREL22 0xba + + +#define EF_SH_MACH_MASK 0x1f +#define EF_SH_UNKNOWN 0x0 +#define EF_SH1 0x1 +#define EF_SH2 0x2 +#define EF_SH3 0x3 +#define EF_SH_DSP 0x4 +#define EF_SH3_DSP 0x5 +#define EF_SH4AL_DSP 0x6 +#define EF_SH3E 0x8 +#define EF_SH4 0x9 +#define EF_SH2E 0xb +#define EF_SH4A 0xc +#define EF_SH2A 0xd +#define EF_SH4_NOFPU 0x10 +#define EF_SH4A_NOFPU 0x11 +#define EF_SH4_NOMMU_NOFPU 0x12 +#define EF_SH2A_NOFPU 0x13 +#define EF_SH3_NOMMU 0x14 +#define EF_SH2A_SH4_NOFPU 0x15 +#define EF_SH2A_SH3_NOFPU 0x16 +#define EF_SH2A_SH4 0x17 +#define EF_SH2A_SH3E 0x18 + +#define R_SH_NONE 0 +#define R_SH_DIR32 1 +#define R_SH_REL32 2 +#define R_SH_DIR8WPN 3 +#define R_SH_IND12W 4 +#define R_SH_DIR8WPL 5 +#define R_SH_DIR8WPZ 6 +#define R_SH_DIR8BP 7 +#define R_SH_DIR8W 8 +#define R_SH_DIR8L 9 +#define R_SH_SWITCH16 25 +#define R_SH_SWITCH32 26 +#define R_SH_USES 27 +#define R_SH_COUNT 28 +#define R_SH_ALIGN 29 +#define R_SH_CODE 30 +#define R_SH_DATA 31 +#define R_SH_LABEL 32 +#define R_SH_SWITCH8 33 +#define R_SH_GNU_VTINHERIT 34 +#define R_SH_GNU_VTENTRY 35 +#define R_SH_TLS_GD_32 144 +#define R_SH_TLS_LD_32 145 +#define R_SH_TLS_LDO_32 146 +#define R_SH_TLS_IE_32 147 +#define R_SH_TLS_LE_32 148 +#define R_SH_TLS_DTPMOD32 149 +#define R_SH_TLS_DTPOFF32 150 +#define R_SH_TLS_TPOFF32 151 +#define R_SH_GOT32 160 +#define R_SH_PLT32 161 +#define R_SH_COPY 162 +#define R_SH_GLOB_DAT 163 +#define R_SH_JMP_SLOT 164 +#define R_SH_RELATIVE 165 +#define R_SH_GOTOFF 166 +#define R_SH_GOTPC 167 +#define R_SH_GOT20 201 +#define R_SH_GOTOFF20 202 +#define R_SH_GOTFUNCDESC 203 +#define R_SH_GOTFUNCDEST20 204 +#define R_SH_GOTOFFFUNCDESC 205 +#define R_SH_GOTOFFFUNCDEST20 206 +#define R_SH_FUNCDESC 207 +#define R_SH_FUNCDESC_VALUE 208 + +#define R_SH_NUM 256 + + + +#define R_390_NONE 0 +#define R_390_8 1 +#define R_390_12 2 +#define R_390_16 3 +#define R_390_32 4 +#define R_390_PC32 5 +#define R_390_GOT12 6 +#define R_390_GOT32 7 +#define R_390_PLT32 8 +#define R_390_COPY 9 +#define R_390_GLOB_DAT 10 +#define R_390_JMP_SLOT 11 +#define R_390_RELATIVE 12 +#define R_390_GOTOFF32 13 +#define R_390_GOTPC 14 +#define R_390_GOT16 15 +#define R_390_PC16 16 +#define R_390_PC16DBL 17 +#define R_390_PLT16DBL 18 +#define R_390_PC32DBL 19 +#define R_390_PLT32DBL 20 +#define R_390_GOTPCDBL 21 +#define R_390_64 22 +#define R_390_PC64 23 +#define R_390_GOT64 24 +#define R_390_PLT64 25 +#define R_390_GOTENT 26 +#define R_390_GOTOFF16 27 +#define R_390_GOTOFF64 28 +#define R_390_GOTPLT12 29 +#define R_390_GOTPLT16 30 +#define R_390_GOTPLT32 31 +#define R_390_GOTPLT64 32 +#define R_390_GOTPLTENT 33 +#define R_390_PLTOFF16 34 +#define R_390_PLTOFF32 35 +#define R_390_PLTOFF64 36 +#define R_390_TLS_LOAD 37 +#define R_390_TLS_GDCALL 38 + +#define R_390_TLS_LDCALL 39 + +#define R_390_TLS_GD32 40 + +#define R_390_TLS_GD64 41 + +#define R_390_TLS_GOTIE12 42 + +#define R_390_TLS_GOTIE32 43 + +#define R_390_TLS_GOTIE64 44 + +#define R_390_TLS_LDM32 45 + +#define R_390_TLS_LDM64 46 + +#define R_390_TLS_IE32 47 + +#define R_390_TLS_IE64 48 + +#define R_390_TLS_IEENT 49 + +#define R_390_TLS_LE32 50 + +#define R_390_TLS_LE64 51 + +#define R_390_TLS_LDO32 52 + +#define R_390_TLS_LDO64 53 + +#define R_390_TLS_DTPMOD 54 +#define R_390_TLS_DTPOFF 55 +#define R_390_TLS_TPOFF 56 + +#define R_390_20 57 +#define R_390_GOT20 58 +#define R_390_GOTPLT20 59 +#define R_390_TLS_GOTIE20 60 + + +#define R_390_NUM 61 + + + +#define R_CRIS_NONE 0 +#define R_CRIS_8 1 +#define R_CRIS_16 2 +#define R_CRIS_32 3 +#define R_CRIS_8_PCREL 4 +#define R_CRIS_16_PCREL 5 +#define R_CRIS_32_PCREL 6 +#define R_CRIS_GNU_VTINHERIT 7 +#define R_CRIS_GNU_VTENTRY 8 +#define R_CRIS_COPY 9 +#define R_CRIS_GLOB_DAT 10 +#define R_CRIS_JUMP_SLOT 11 +#define R_CRIS_RELATIVE 12 +#define R_CRIS_16_GOT 13 +#define R_CRIS_32_GOT 14 +#define R_CRIS_16_GOTPLT 15 +#define R_CRIS_32_GOTPLT 16 +#define R_CRIS_32_GOTREL 17 +#define R_CRIS_32_PLT_GOTREL 18 +#define R_CRIS_32_PLT_PCREL 19 + +#define R_CRIS_NUM 20 + + + +#define R_X86_64_NONE 0 +#define R_X86_64_64 1 +#define R_X86_64_PC32 2 +#define R_X86_64_GOT32 3 +#define R_X86_64_PLT32 4 +#define R_X86_64_COPY 5 +#define R_X86_64_GLOB_DAT 6 +#define R_X86_64_JUMP_SLOT 7 +#define R_X86_64_RELATIVE 8 +#define R_X86_64_GOTPCREL 9 + +#define R_X86_64_32 10 +#define R_X86_64_32S 11 +#define R_X86_64_16 12 +#define R_X86_64_PC16 13 +#define R_X86_64_8 14 +#define R_X86_64_PC8 15 +#define R_X86_64_DTPMOD64 16 +#define R_X86_64_DTPOFF64 17 +#define R_X86_64_TPOFF64 18 +#define R_X86_64_TLSGD 19 + +#define R_X86_64_TLSLD 20 + +#define R_X86_64_DTPOFF32 21 +#define R_X86_64_GOTTPOFF 22 + +#define R_X86_64_TPOFF32 23 +#define R_X86_64_PC64 24 +#define R_X86_64_GOTOFF64 25 +#define R_X86_64_GOTPC32 26 +#define R_X86_64_GOT64 27 +#define R_X86_64_GOTPCREL64 28 +#define R_X86_64_GOTPC64 29 +#define R_X86_64_GOTPLT64 30 +#define R_X86_64_PLTOFF64 31 +#define R_X86_64_SIZE32 32 +#define R_X86_64_SIZE64 33 + +#define R_X86_64_GOTPC32_TLSDESC 34 +#define R_X86_64_TLSDESC_CALL 35 + +#define R_X86_64_TLSDESC 36 +#define R_X86_64_IRELATIVE 37 +#define R_X86_64_RELATIVE64 38 +#define R_X86_64_GOTPCRELX 41 +#define R_X86_64_REX_GOTPCRELX 42 +#define R_X86_64_NUM 43 + + + +#define R_MN10300_NONE 0 +#define R_MN10300_32 1 +#define R_MN10300_16 2 +#define R_MN10300_8 3 +#define R_MN10300_PCREL32 4 +#define R_MN10300_PCREL16 5 +#define R_MN10300_PCREL8 6 +#define R_MN10300_GNU_VTINHERIT 7 +#define R_MN10300_GNU_VTENTRY 8 +#define R_MN10300_24 9 +#define R_MN10300_GOTPC32 10 +#define R_MN10300_GOTPC16 11 +#define R_MN10300_GOTOFF32 12 +#define R_MN10300_GOTOFF24 13 +#define R_MN10300_GOTOFF16 14 +#define R_MN10300_PLT32 15 +#define R_MN10300_PLT16 16 +#define R_MN10300_GOT32 17 +#define R_MN10300_GOT24 18 +#define R_MN10300_GOT16 19 +#define R_MN10300_COPY 20 +#define R_MN10300_GLOB_DAT 21 +#define R_MN10300_JMP_SLOT 22 +#define R_MN10300_RELATIVE 23 + +#define R_MN10300_NUM 24 + + + +#define R_M32R_NONE 0 +#define R_M32R_16 1 +#define R_M32R_32 2 +#define R_M32R_24 3 +#define R_M32R_10_PCREL 4 +#define R_M32R_18_PCREL 5 +#define R_M32R_26_PCREL 6 +#define R_M32R_HI16_ULO 7 +#define R_M32R_HI16_SLO 8 +#define R_M32R_LO16 9 +#define R_M32R_SDA16 10 +#define R_M32R_GNU_VTINHERIT 11 +#define R_M32R_GNU_VTENTRY 12 + +#define R_M32R_16_RELA 33 +#define R_M32R_32_RELA 34 +#define R_M32R_24_RELA 35 +#define R_M32R_10_PCREL_RELA 36 +#define R_M32R_18_PCREL_RELA 37 +#define R_M32R_26_PCREL_RELA 38 +#define R_M32R_HI16_ULO_RELA 39 +#define R_M32R_HI16_SLO_RELA 40 +#define R_M32R_LO16_RELA 41 +#define R_M32R_SDA16_RELA 42 +#define R_M32R_RELA_GNU_VTINHERIT 43 +#define R_M32R_RELA_GNU_VTENTRY 44 +#define R_M32R_REL32 45 + +#define R_M32R_GOT24 48 +#define R_M32R_26_PLTREL 49 +#define R_M32R_COPY 50 +#define R_M32R_GLOB_DAT 51 +#define R_M32R_JMP_SLOT 52 +#define R_M32R_RELATIVE 53 +#define R_M32R_GOTOFF 54 +#define R_M32R_GOTPC24 55 +#define R_M32R_GOT16_HI_ULO 56 + +#define R_M32R_GOT16_HI_SLO 57 + +#define R_M32R_GOT16_LO 58 +#define R_M32R_GOTPC_HI_ULO 59 + +#define R_M32R_GOTPC_HI_SLO 60 + +#define R_M32R_GOTPC_LO 61 + +#define R_M32R_GOTOFF_HI_ULO 62 + +#define R_M32R_GOTOFF_HI_SLO 63 + +#define R_M32R_GOTOFF_LO 64 +#define R_M32R_NUM 256 + +#define R_MICROBLAZE_NONE 0 +#define R_MICROBLAZE_32 1 +#define R_MICROBLAZE_32_PCREL 2 +#define R_MICROBLAZE_64_PCREL 3 +#define R_MICROBLAZE_32_PCREL_LO 4 +#define R_MICROBLAZE_64 5 +#define R_MICROBLAZE_32_LO 6 +#define R_MICROBLAZE_SRO32 7 +#define R_MICROBLAZE_SRW32 8 +#define R_MICROBLAZE_64_NONE 9 +#define R_MICROBLAZE_32_SYM_OP_SYM 10 +#define R_MICROBLAZE_GNU_VTINHERIT 11 +#define R_MICROBLAZE_GNU_VTENTRY 12 +#define R_MICROBLAZE_GOTPC_64 13 +#define R_MICROBLAZE_GOT_64 14 +#define R_MICROBLAZE_PLT_64 15 +#define R_MICROBLAZE_REL 16 +#define R_MICROBLAZE_JUMP_SLOT 17 +#define R_MICROBLAZE_GLOB_DAT 18 +#define R_MICROBLAZE_GOTOFF_64 19 +#define R_MICROBLAZE_GOTOFF_32 20 +#define R_MICROBLAZE_COPY 21 +#define R_MICROBLAZE_TLS 22 +#define R_MICROBLAZE_TLSGD 23 +#define R_MICROBLAZE_TLSLD 24 +#define R_MICROBLAZE_TLSDTPMOD32 25 +#define R_MICROBLAZE_TLSDTPREL32 26 +#define R_MICROBLAZE_TLSDTPREL64 27 +#define R_MICROBLAZE_TLSGOTTPREL32 28 +#define R_MICROBLAZE_TLSTPREL32 29 + +#define DT_NIOS2_GP 0x70000002 + +#define R_NIOS2_NONE 0 +#define R_NIOS2_S16 1 +#define R_NIOS2_U16 2 +#define R_NIOS2_PCREL16 3 +#define R_NIOS2_CALL26 4 +#define R_NIOS2_IMM5 5 +#define R_NIOS2_CACHE_OPX 6 +#define R_NIOS2_IMM6 7 +#define R_NIOS2_IMM8 8 +#define R_NIOS2_HI16 9 +#define R_NIOS2_LO16 10 +#define R_NIOS2_HIADJ16 11 +#define R_NIOS2_BFD_RELOC_32 12 +#define R_NIOS2_BFD_RELOC_16 13 +#define R_NIOS2_BFD_RELOC_8 14 +#define R_NIOS2_GPREL 15 +#define R_NIOS2_GNU_VTINHERIT 16 +#define R_NIOS2_GNU_VTENTRY 17 +#define R_NIOS2_UJMP 18 +#define R_NIOS2_CJMP 19 +#define R_NIOS2_CALLR 20 +#define R_NIOS2_ALIGN 21 +#define R_NIOS2_GOT16 22 +#define R_NIOS2_CALL16 23 +#define R_NIOS2_GOTOFF_LO 24 +#define R_NIOS2_GOTOFF_HA 25 +#define R_NIOS2_PCREL_LO 26 +#define R_NIOS2_PCREL_HA 27 +#define R_NIOS2_TLS_GD16 28 +#define R_NIOS2_TLS_LDM16 29 +#define R_NIOS2_TLS_LDO16 30 +#define R_NIOS2_TLS_IE16 31 +#define R_NIOS2_TLS_LE16 32 +#define R_NIOS2_TLS_DTPMOD 33 +#define R_NIOS2_TLS_DTPREL 34 +#define R_NIOS2_TLS_TPREL 35 +#define R_NIOS2_COPY 36 +#define R_NIOS2_GLOB_DAT 37 +#define R_NIOS2_JUMP_SLOT 38 +#define R_NIOS2_RELATIVE 39 +#define R_NIOS2_GOTOFF 40 +#define R_NIOS2_CALL26_NOAT 41 +#define R_NIOS2_GOT_LO 42 +#define R_NIOS2_GOT_HA 43 +#define R_NIOS2_CALL_LO 44 +#define R_NIOS2_CALL_HA 45 + +#define R_OR1K_NONE 0 +#define R_OR1K_32 1 +#define R_OR1K_16 2 +#define R_OR1K_8 3 +#define R_OR1K_LO_16_IN_INSN 4 +#define R_OR1K_HI_16_IN_INSN 5 +#define R_OR1K_INSN_REL_26 6 +#define R_OR1K_GNU_VTENTRY 7 +#define R_OR1K_GNU_VTINHERIT 8 +#define R_OR1K_32_PCREL 9 +#define R_OR1K_16_PCREL 10 +#define R_OR1K_8_PCREL 11 +#define R_OR1K_GOTPC_HI16 12 +#define R_OR1K_GOTPC_LO16 13 +#define R_OR1K_GOT16 14 +#define R_OR1K_PLT26 15 +#define R_OR1K_GOTOFF_HI16 16 +#define R_OR1K_GOTOFF_LO16 17 +#define R_OR1K_COPY 18 +#define R_OR1K_GLOB_DAT 19 +#define R_OR1K_JMP_SLOT 20 +#define R_OR1K_RELATIVE 21 +#define R_OR1K_TLS_GD_HI16 22 +#define R_OR1K_TLS_GD_LO16 23 +#define R_OR1K_TLS_LDM_HI16 24 +#define R_OR1K_TLS_LDM_LO16 25 +#define R_OR1K_TLS_LDO_HI16 26 +#define R_OR1K_TLS_LDO_LO16 27 +#define R_OR1K_TLS_IE_HI16 28 +#define R_OR1K_TLS_IE_LO16 29 +#define R_OR1K_TLS_LE_HI16 30 +#define R_OR1K_TLS_LE_LO16 31 +#define R_OR1K_TLS_TPOFF 32 +#define R_OR1K_TLS_DTPOFF 33 +#define R_OR1K_TLS_DTPMOD 34 + +#define R_BPF_NONE 0 +#define R_BPF_MAP_FD 1 + +#define R_RISCV_NONE 0 +#define R_RISCV_32 1 +#define R_RISCV_64 2 +#define R_RISCV_RELATIVE 3 +#define R_RISCV_COPY 4 +#define R_RISCV_JUMP_SLOT 5 +#define R_RISCV_TLS_DTPMOD32 6 +#define R_RISCV_TLS_DTPMOD64 7 +#define R_RISCV_TLS_DTPREL32 8 +#define R_RISCV_TLS_DTPREL64 9 +#define R_RISCV_TLS_TPREL32 10 +#define R_RISCV_TLS_TPREL64 11 + +#define R_RISCV_BRANCH 16 +#define R_RISCV_JAL 17 +#define R_RISCV_CALL 18 +#define R_RISCV_CALL_PLT 19 +#define R_RISCV_GOT_HI20 20 +#define R_RISCV_TLS_GOT_HI20 21 +#define R_RISCV_TLS_GD_HI20 22 +#define R_RISCV_PCREL_HI20 23 +#define R_RISCV_PCREL_LO12_I 24 +#define R_RISCV_PCREL_LO12_S 25 +#define R_RISCV_HI20 26 +#define R_RISCV_LO12_I 27 +#define R_RISCV_LO12_S 28 +#define R_RISCV_TPREL_HI20 29 +#define R_RISCV_TPREL_LO12_I 30 +#define R_RISCV_TPREL_LO12_S 31 +#define R_RISCV_TPREL_ADD 32 +#define R_RISCV_ADD8 33 +#define R_RISCV_ADD16 34 +#define R_RISCV_ADD32 35 +#define R_RISCV_ADD64 36 +#define R_RISCV_SUB8 37 +#define R_RISCV_SUB16 38 +#define R_RISCV_SUB32 39 +#define R_RISCV_SUB64 40 +#define R_RISCV_GNU_VTINHERIT 41 +#define R_RISCV_GNU_VTENTRY 42 +#define R_RISCV_ALIGN 43 +#define R_RISCV_RVC_BRANCH 44 +#define R_RISCV_RVC_JUMP 45 +#define R_RISCV_RVC_LUI 46 +#define R_RISCV_GPREL_I 47 +#define R_RISCV_GPREL_S 48 +#define R_RISCV_TPREL_I 49 +#define R_RISCV_TPREL_S 50 +#define R_RISCV_RELAX 51 +#define R_RISCV_SUB6 52 +#define R_RISCV_SET6 53 +#define R_RISCV_SET8 54 +#define R_RISCV_SET16 55 +#define R_RISCV_SET32 56 +#define R_RISCV_32_PCREL 57 + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/third_party/musl/ndk_musl_include/endian.h b/third_party/musl/ndk_musl_include/endian.h new file mode 100644 index 0000000000000000000000000000000000000000..e876b55215a785c6e18e39fec2053905fba874d5 --- /dev/null +++ b/third_party/musl/ndk_musl_include/endian.h @@ -0,0 +1,80 @@ +#ifndef _ENDIAN_H +#define _ENDIAN_H + +#include + +#define __NEED_uint16_t +#define __NEED_uint32_t +#define __NEED_uint64_t + +#include + +#define __PDP_ENDIAN 3412 + +#define BIG_ENDIAN __BIG_ENDIAN +#define LITTLE_ENDIAN __LITTLE_ENDIAN +#define PDP_ENDIAN __PDP_ENDIAN +#define BYTE_ORDER __BYTE_ORDER + +static __inline uint16_t __bswap16(uint16_t __x) +{ + return __x<<8 | __x>>8; +} + +static __inline uint32_t __bswap32(uint32_t __x) +{ + return __x>>24 | __x>>8&0xff00 | __x<<8&0xff0000 | __x<<24; +} + +static __inline uint64_t __bswap64(uint64_t __x) +{ + return __bswap32(__x)+0ULL<<32 | __bswap32(__x>>32); +} + +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define htobe16(x) __bswap16(x) +#define be16toh(x) __bswap16(x) +#define htobe32(x) __bswap32(x) +#define be32toh(x) __bswap32(x) +#define htobe64(x) __bswap64(x) +#define be64toh(x) __bswap64(x) +#define htole16(x) (uint16_t)(x) +#define le16toh(x) (uint16_t)(x) +#define htole32(x) (uint32_t)(x) +#define le32toh(x) (uint32_t)(x) +#define htole64(x) (uint64_t)(x) +#define le64toh(x) (uint64_t)(x) +#else +#define htobe16(x) (uint16_t)(x) +#define be16toh(x) (uint16_t)(x) +#define htobe32(x) (uint32_t)(x) +#define be32toh(x) (uint32_t)(x) +#define htobe64(x) (uint64_t)(x) +#define be64toh(x) (uint64_t)(x) +#define htole16(x) __bswap16(x) +#define le16toh(x) __bswap16(x) +#define htole32(x) __bswap32(x) +#define le32toh(x) __bswap32(x) +#define htole64(x) __bswap64(x) +#define le64toh(x) __bswap64(x) +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define betoh16(x) __bswap16(x) +#define betoh32(x) __bswap32(x) +#define betoh64(x) __bswap64(x) +#define letoh16(x) (uint16_t)(x) +#define letoh32(x) (uint32_t)(x) +#define letoh64(x) (uint64_t)(x) +#else +#define betoh16(x) (uint16_t)(x) +#define betoh32(x) (uint32_t)(x) +#define betoh64(x) (uint64_t)(x) +#define letoh16(x) __bswap16(x) +#define letoh32(x) __bswap32(x) +#define letoh64(x) __bswap64(x) +#endif +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/err.h b/third_party/musl/ndk_musl_include/err.h new file mode 100644 index 0000000000000000000000000000000000000000..96754a4650e63452722fb27d3fc788b101e3371f --- /dev/null +++ b/third_party/musl/ndk_musl_include/err.h @@ -0,0 +1,25 @@ +#ifndef _ERR_H +#define _ERR_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void warn(const char *, ...); +void vwarn(const char *, va_list); +void warnx(const char *, ...); +void vwarnx(const char *, va_list); + +_Noreturn void err(int, const char *, ...); +_Noreturn void verr(int, const char *, va_list); +_Noreturn void errx(int, const char *, ...); +_Noreturn void verrx(int, const char *, va_list); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/errno.h b/third_party/musl/ndk_musl_include/errno.h new file mode 100644 index 0000000000000000000000000000000000000000..9ebe0f75e17165b51c3bbca0dc137abb55ba60e7 --- /dev/null +++ b/third_party/musl/ndk_musl_include/errno.h @@ -0,0 +1,27 @@ +#ifndef _ERRNO_H +#define _ERRNO_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include + +#ifdef __GNUC__ +__attribute__((const)) +#endif +int *__errno_location(void); +#define errno (*__errno_location()) + +#ifdef _GNU_SOURCE +extern char *program_invocation_short_name, *program_invocation_name; +#endif + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/third_party/musl/ndk_musl_include/fcntl.h b/third_party/musl/ndk_musl_include/fcntl.h new file mode 100644 index 0000000000000000000000000000000000000000..3a3e0d1294b9dbcae459d6b2af91970fec003226 --- /dev/null +++ b/third_party/musl/ndk_musl_include/fcntl.h @@ -0,0 +1,217 @@ +#ifndef _FCNTL_H +#define _FCNTL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_off_t +#define __NEED_pid_t +#define __NEED_mode_t + +#ifdef _GNU_SOURCE +#define __NEED_size_t +#define __NEED_ssize_t +#define __NEED_struct_iovec +#endif + +#include + +#include +#include + +struct flock { + short l_type; + short l_whence; + off_t l_start; + off_t l_len; + pid_t l_pid; +}; + +int creat(const char *, mode_t); +int fcntl(int, int, ...); +int open(const char *, int, ...); +int openat(int, const char *, int, ...); +int posix_fadvise(int, off_t, off_t, int); +int posix_fallocate(int, off_t, off_t); + +#define O_SEARCH O_PATH +#define O_EXEC O_PATH +#define O_TTY_INIT 0 + +#define O_ACCMODE (03|O_SEARCH) +#define O_RDONLY 00 +#define O_WRONLY 01 +#define O_RDWR 02 + +#define F_OFD_GETLK 36 +#define F_OFD_SETLK 37 +#define F_OFD_SETLKW 38 + +#define F_DUPFD_CLOEXEC 1030 + +#define F_RDLCK 0 +#define F_WRLCK 1 +#define F_UNLCK 2 + +#define FD_CLOEXEC 1 + +#define AT_FDCWD (-100) +#define AT_SYMLINK_NOFOLLOW 0x100 +#define AT_REMOVEDIR 0x200 +#define AT_SYMLINK_FOLLOW 0x400 +#define AT_EACCESS 0x200 + +#define POSIX_FADV_NORMAL 0 +#define POSIX_FADV_RANDOM 1 +#define POSIX_FADV_SEQUENTIAL 2 +#define POSIX_FADV_WILLNEED 3 +#ifndef POSIX_FADV_DONTNEED +#define POSIX_FADV_DONTNEED 4 +#define POSIX_FADV_NOREUSE 5 +#endif + +#undef SEEK_SET +#undef SEEK_CUR +#undef SEEK_END +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +#ifndef S_IRUSR +#define S_ISUID 04000 +#define S_ISGID 02000 +#define S_ISVTX 01000 +#define S_IRUSR 0400 +#define S_IWUSR 0200 +#define S_IXUSR 0100 +#define S_IRWXU 0700 +#define S_IRGRP 0040 +#define S_IWGRP 0020 +#define S_IXGRP 0010 +#define S_IRWXG 0070 +#define S_IROTH 0004 +#define S_IWOTH 0002 +#define S_IXOTH 0001 +#define S_IRWXO 0007 +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define AT_NO_AUTOMOUNT 0x800 +#define AT_EMPTY_PATH 0x1000 +#define AT_STATX_SYNC_TYPE 0x6000 +#define AT_STATX_SYNC_AS_STAT 0x0000 +#define AT_STATX_FORCE_SYNC 0x2000 +#define AT_STATX_DONT_SYNC 0x4000 +#define AT_RECURSIVE 0x8000 + +#define FAPPEND O_APPEND +#define FFSYNC O_SYNC +#define FASYNC O_ASYNC +#define FNONBLOCK O_NONBLOCK +#define FNDELAY O_NDELAY + +#define F_OK 0 +#define R_OK 4 +#define W_OK 2 +#define X_OK 1 +#define F_ULOCK 0 +#define F_LOCK 1 +#define F_TLOCK 2 +#define F_TEST 3 + +#define F_SETLEASE 1024 +#define F_GETLEASE 1025 +#define F_NOTIFY 1026 +#define F_CANCELLK 1029 +#define F_SETPIPE_SZ 1031 +#define F_GETPIPE_SZ 1032 +#define F_ADD_SEALS 1033 +#define F_GET_SEALS 1034 + +#define F_SEAL_SEAL 0x0001 +#define F_SEAL_SHRINK 0x0002 +#define F_SEAL_GROW 0x0004 +#define F_SEAL_WRITE 0x0008 +#define F_SEAL_FUTURE_WRITE 0x0010 + +#define F_GET_RW_HINT 1035 +#define F_SET_RW_HINT 1036 +#define F_GET_FILE_RW_HINT 1037 +#define F_SET_FILE_RW_HINT 1038 + +#define RWF_WRITE_LIFE_NOT_SET 0 +#define RWH_WRITE_LIFE_NONE 1 +#define RWH_WRITE_LIFE_SHORT 2 +#define RWH_WRITE_LIFE_MEDIUM 3 +#define RWH_WRITE_LIFE_LONG 4 +#define RWH_WRITE_LIFE_EXTREME 5 + +#define DN_ACCESS 0x00000001 +#define DN_MODIFY 0x00000002 +#define DN_CREATE 0x00000004 +#define DN_DELETE 0x00000008 +#define DN_RENAME 0x00000010 +#define DN_ATTRIB 0x00000020 +#define DN_MULTISHOT 0x80000000 + +int lockf(int, int, off_t); +#endif + +#if defined(_GNU_SOURCE) +#define F_OWNER_TID 0 +#define F_OWNER_PID 1 +#define F_OWNER_PGRP 2 +#define F_OWNER_GID 2 +struct file_handle { + unsigned handle_bytes; + int handle_type; + unsigned char f_handle[]; +}; +struct f_owner_ex { + int type; + pid_t pid; +}; +#define FALLOC_FL_KEEP_SIZE 1 +#define FALLOC_FL_PUNCH_HOLE 2 +#define MAX_HANDLE_SZ 128 +#define SYNC_FILE_RANGE_WAIT_BEFORE 1 +#define SYNC_FILE_RANGE_WRITE 2 +#define SYNC_FILE_RANGE_WAIT_AFTER 4 +#define SPLICE_F_MOVE 1 +#define SPLICE_F_NONBLOCK 2 +#define SPLICE_F_MORE 4 +#define SPLICE_F_GIFT 8 +int fallocate(int, int, off_t, off_t); +#define fallocate64 fallocate +int name_to_handle_at(int, const char *, struct file_handle *, int *, int); +int open_by_handle_at(int, struct file_handle *, int); +ssize_t readahead(int, off_t, size_t); +int sync_file_range(int, off_t, off_t, unsigned); +ssize_t vmsplice(int, const struct iovec *, size_t, unsigned); +ssize_t splice(int, off_t *, int, off_t *, size_t, unsigned); +ssize_t tee(int, int, size_t, unsigned); +#define loff_t off_t +#endif + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define F_GETLK64 F_GETLK +#define F_SETLK64 F_SETLK +#define F_SETLKW64 F_SETLKW +#define flock64 flock +#define open64 open +#define openat64 openat +#define creat64 creat +#define lockf64 lockf +#define posix_fadvise64 posix_fadvise +#define posix_fallocate64 posix_fallocate +#define off64_t off_t +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/features.h b/third_party/musl/ndk_musl_include/features.h new file mode 100644 index 0000000000000000000000000000000000000000..ab2fa2c9ccf44b30fd3fa813448a25fb89e8efc6 --- /dev/null +++ b/third_party/musl/ndk_musl_include/features.h @@ -0,0 +1,40 @@ +#ifndef _FEATURES_H +#define _FEATURES_H + +#if defined(_ALL_SOURCE) && !defined(_GNU_SOURCE) +#define _GNU_SOURCE 1 +#endif + +#if defined(_DEFAULT_SOURCE) && !defined(_BSD_SOURCE) +#define _BSD_SOURCE 1 +#endif + +#if !defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) \ + && !defined(_XOPEN_SOURCE) && !defined(_GNU_SOURCE) \ + && !defined(_BSD_SOURCE) && !defined(__STRICT_ANSI__) +#define _BSD_SOURCE 1 +#define _XOPEN_SOURCE 700 +#endif + +#if __STDC_VERSION__ >= 199901L +#define __restrict restrict +#elif !defined(__GNUC__) +#define __restrict +#endif + +#if __STDC_VERSION__ >= 199901L || defined(__cplusplus) +#define __inline inline +#elif !defined(__GNUC__) +#define __inline +#endif + +#if __STDC_VERSION__ >= 201112L +#elif defined(__GNUC__) +#define _Noreturn __attribute__((__noreturn__)) +#else +#define _Noreturn +#endif + +#define __REDIR(x,y) __typeof__(x) x __asm__(#y) + +#endif diff --git a/third_party/musl/ndk_musl_include/fenv.h b/third_party/musl/ndk_musl_include/fenv.h new file mode 100644 index 0000000000000000000000000000000000000000..0a8f6d7f868d70f20a5a1d15d3a915160ccd0208 --- /dev/null +++ b/third_party/musl/ndk_musl_include/fenv.h @@ -0,0 +1,28 @@ +#ifndef _FENV_H +#define _FENV_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +int feclearexcept(int); +int fegetexceptflag(fexcept_t *, int); +int feraiseexcept(int); +int fesetexceptflag(const fexcept_t *, int); +int fetestexcept(int); + +int fegetround(void); +int fesetround(int); + +int fegetenv(fenv_t *); +int feholdexcept(fenv_t *); +int fesetenv(const fenv_t *); +int feupdateenv(const fenv_t *); + +#ifdef __cplusplus +} +#endif +#endif + diff --git a/third_party/musl/ndk_musl_include/float.h b/third_party/musl/ndk_musl_include/float.h new file mode 100644 index 0000000000000000000000000000000000000000..3569a1eb26dc32cf009141683c1b5638689d7e3b --- /dev/null +++ b/third_party/musl/ndk_musl_include/float.h @@ -0,0 +1,52 @@ +#ifndef _FLOAT_H +#define _FLOAT_H + +#ifdef __cplusplus +extern "C" { +#endif + +int __flt_rounds(void); +#define FLT_ROUNDS (__flt_rounds()) + +#define FLT_RADIX 2 + +#define FLT_TRUE_MIN 1.40129846432481707092e-45F +#define FLT_MIN 1.17549435082228750797e-38F +#define FLT_MAX 3.40282346638528859812e+38F +#define FLT_EPSILON 1.1920928955078125e-07F + +#define FLT_MANT_DIG 24 +#define FLT_MIN_EXP (-125) +#define FLT_MAX_EXP 128 +#define FLT_HAS_SUBNORM 1 + +#define FLT_DIG 6 +#define FLT_DECIMAL_DIG 9 +#define FLT_MIN_10_EXP (-37) +#define FLT_MAX_10_EXP 38 + +#define DBL_TRUE_MIN 4.94065645841246544177e-324 +#define DBL_MIN 2.22507385850720138309e-308 +#define DBL_MAX 1.79769313486231570815e+308 +#define DBL_EPSILON 2.22044604925031308085e-16 + +#define DBL_MANT_DIG 53 +#define DBL_MIN_EXP (-1021) +#define DBL_MAX_EXP 1024 +#define DBL_HAS_SUBNORM 1 + +#define DBL_DIG 15 +#define DBL_DECIMAL_DIG 17 +#define DBL_MIN_10_EXP (-307) +#define DBL_MAX_10_EXP 308 + +#define LDBL_HAS_SUBNORM 1 +#define LDBL_DECIMAL_DIG DECIMAL_DIG + +#include + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/fmtmsg.h b/third_party/musl/ndk_musl_include/fmtmsg.h new file mode 100644 index 0000000000000000000000000000000000000000..fd11b24bd87d471cb595191f5284192dc8a0b14b --- /dev/null +++ b/third_party/musl/ndk_musl_include/fmtmsg.h @@ -0,0 +1,45 @@ +#ifndef _FMTMSG_H +#define _FMTMSG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define MM_HARD 1 +#define MM_SOFT 2 +#define MM_FIRM 4 + +#define MM_APPL 8 +#define MM_UTIL 16 +#define MM_OPSYS 32 + +#define MM_RECOVER 64 +#define MM_NRECOV 128 + +#define MM_PRINT 256 +#define MM_CONSOLE 512 + +#define MM_NULLMC 0L + +#define MM_HALT 1 +#define MM_ERROR 2 +#define MM_WARNING 3 +#define MM_INFO 4 +#define MM_NOSEV 0 + +#define MM_OK 0 +#define MM_NOTOK (-1) +#define MM_NOMSG 1 +#define MM_NOCON 4 + +#define MM_NULLLBL ((char*)0) +#define MM_NULLTXT ((char*)0) +#define MM_NULLACT ((char*)0) +#define MM_NULLTAG ((char*)0) +#define MM_NULLSEV 0 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/fnmatch.h b/third_party/musl/ndk_musl_include/fnmatch.h new file mode 100644 index 0000000000000000000000000000000000000000..0b34ca985de7f5f63d8b25a982c6856306dff3a3 --- /dev/null +++ b/third_party/musl/ndk_musl_include/fnmatch.h @@ -0,0 +1,24 @@ +#ifndef _FNMATCH_H +#define _FNMATCH_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define FNM_PATHNAME 0x1 +#define FNM_NOESCAPE 0x2 +#define FNM_PERIOD 0x4 +#define FNM_LEADING_DIR 0x8 +#define FNM_CASEFOLD 0x10 +#define FNM_FILE_NAME FNM_PATHNAME + +#define FNM_NOMATCH 1 +#define FNM_NOSYS (-1) + +int fnmatch(const char *, const char *, int); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/fortify/fcntl.h b/third_party/musl/ndk_musl_include/fortify/fcntl.h new file mode 100644 index 0000000000000000000000000000000000000000..d424d775683169a41c1fb6edbd8d633fdcfd7d75 --- /dev/null +++ b/third_party/musl/ndk_musl_include/fortify/fcntl.h @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _FCNTL_H +#error "Never include this file directly; instead, include " +#endif + +#include "fortify.h" + +#ifdef __cplusplus +extern "C" { +#endif + +int __open_chk(const char*, int); +int __openat_chk(int, const char*, int); +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +int __open64_chk(const char*, int); +int __openat64_chk(int, const char*, int); +#endif +/* + * Even in musl FORTIFY, the following is the easiest way to call a real open. + */ +int __open_real(const char*, int, ...) __DIAGNOSE_RENAME(open); +int __openat_real(int, const char*, int, ...) __DIAGNOSE_RENAME(openat); +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +int __open64_real(const char*, int, ...) __DIAGNOSE_RENAME(open64); +int __openat64_real(int, const char*, int, ...) __DIAGNOSE_RENAME(openat64); +#endif + +#ifdef __FORTIFY_COMPILATION +__DIAGNOSE_FORTIFY_INLINE +int open(const char* const __DIAGNOSE_PASS_OBJECT_SIZE path, int flags) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_OPEN_MODES_USEFUL(flags), "'open' " OPEN_TOO_FEW_ARGS_ERROR) +{ +#ifdef __FORTIFY_RUNTIME + return __open_chk(path, flags); +#else + return __open_real(path, flags); +#endif +} + +__DIAGNOSE_FORTIFY_INLINE +int open(const char* const __DIAGNOSE_PASS_OBJECT_SIZE path, int flags, unsigned modes) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_WARNING_IF(!__DIAGNOSE_OPEN_MODES_USEFUL(flags) && modes, "'open' " OPEN_USELESS_MODES_WARNING) +{ + return __open_real(path, flags, modes); +} + +__DIAGNOSE_FORTIFY_INLINE +int openat(int dirfd, const char* const __DIAGNOSE_PASS_OBJECT_SIZE path, int flags) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_OPEN_MODES_USEFUL(flags), "'openat' " OPEN_TOO_FEW_ARGS_ERROR) +{ +#ifdef __FORTIFY_RUNTIME + return __openat_chk(dirfd, path, flags); +#else + return __openat_real(dirfd, path, flags); +#endif +} + +__DIAGNOSE_FORTIFY_INLINE +int openat(int dirfd, const char* const __DIAGNOSE_PASS_OBJECT_SIZE path, int flags, mode_t modes) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_WARNING_IF(!__DIAGNOSE_OPEN_MODES_USEFUL(flags) && modes, "'openat' " OPEN_USELESS_MODES_WARNING) +{ + return __openat_real(dirfd, path, flags, modes); +} + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +__DIAGNOSE_FORTIFY_INLINE +int open64(const char* const __DIAGNOSE_PASS_OBJECT_SIZE path, int flags) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_OPEN_MODES_USEFUL(flags), "'open64' " OPEN_TOO_FEW_ARGS_ERROR) +{ +#ifdef __FORTIFY_RUNTIME + return __open64_chk(path, flags); +#else + return __open64_real(path, flags); +#endif +} + +__DIAGNOSE_FORTIFY_INLINE +int open64(const char* const __DIAGNOSE_PASS_OBJECT_SIZE path, int flags, mode_t modes) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_WARNING_IF(!__DIAGNOSE_OPEN_MODES_USEFUL(flags) && modes, "'open64' " OPEN_USELESS_MODES_WARNING) +{ + return __open64_real(path, flags, modes); +} + +__DIAGNOSE_FORTIFY_INLINE +int openat64(int dirfd, const char* const __DIAGNOSE_PASS_OBJECT_SIZE path, int flags) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_OPEN_MODES_USEFUL(flags), "'openat64' " OPEN_TOO_FEW_ARGS_ERROR) +{ +#ifdef __FORTIFY_RUNTIME + return __openat64_chk(dirfd, path, flags); +#else + return __openat64_real(dirfd, path, flags); +#endif +} + +__DIAGNOSE_FORTIFY_INLINE +int openat64(int dirfd, const char* const __DIAGNOSE_PASS_OBJECT_SIZE path, int flags, mode_t modes) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_WARNING_IF(!__DIAGNOSE_OPEN_MODES_USEFUL(flags) && modes, "'openat64' " OPEN_USELESS_MODES_WARNING) +{ + return __openat64_real(dirfd, path, flags, modes); +} +#endif + +#endif + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/third_party/musl/ndk_musl_include/fortify/fortify.h b/third_party/musl/ndk_musl_include/fortify/fortify.h new file mode 100644 index 0000000000000000000000000000000000000000..0f47881de63219cee70bcd03a4184b260fbdc9bc --- /dev/null +++ b/third_party/musl/ndk_musl_include/fortify/fortify.h @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _FORTIFY_FORTIFY_H +#define _FORTIFY_FORTIFY_H + +#ifdef __cplusplus +extern "C" { +#endif + +#if (_FORTIFY_SOURCE == 1) || (_FORTIFY_SOURCE == 2) +#ifndef __FORTIFY_COMPILATION +#define __FORTIFY_COMPILATION +#endif +#endif + +#if (_FORTIFY_SOURCE == 2) +#ifndef __FORTIFY_RUNTIME +#define __FORTIFY_RUNTIME +#endif +#endif + +#if defined(__cplusplus) +#define __DIAGNOSE_CAST(_k, _t, _v) (_k<_t>(_v)) +#else +#define __DIAGNOSE_CAST(_k, _t, _v) ((_t) (_v)) +#endif + +#if defined(__LP64__) +#ifndef FORTIFY_LONG_MAX +#define FORTIFY_LONG_MAX 0x7fffffffffffffffL +#endif +#ifndef FORTIFY_SSIZE_MAX +#define FORTIFY_SSIZE_MAX FORTIFY_LONG_MAX +#endif +#else +#ifndef FORTIFY_LONG_MAX +#define FORTIFY_LONG_MAX 0x7fffffffL +#endif +#ifndef FORTIFY_SSIZE_MAX +#define FORTIFY_SSIZE_MAX FORTIFY_LONG_MAX +#endif +#endif +#ifndef FORTIFY_PATH_MAX +#define FORTIFY_PATH_MAX 4096 +#endif + +#define __DIAGNOSE_ALWAYS_INLINE __attribute__((__always_inline__)) +#define __DIAGNOSE_PREDICT_TRUE(exp) __builtin_expect((exp) != 0, 1) +#define __DIAGNOSE_PREDICT_FALSE(exp) __builtin_expect((exp) != 0, 0) +#define __DIAGNOSE_ENABLE_IF(cond, msg) __attribute__((enable_if(cond, msg))) +#define __DIAGNOSE_ERROR_IF(cond, msg) __attribute__((diagnose_if(cond, msg, "error"))) +#define __DIAGNOSE_WARNING_IF(cond, msg) __attribute__((diagnose_if(cond, msg, "warning"))) + +#define __DIAGNOSE_BOS_LEVEL (1) +#define __DIAGNOSE_BOSN(s, n) __builtin_object_size((s), (n)) +#define __DIAGNOSE_BOS(s) __DIAGNOSE_BOSN((s), __DIAGNOSE_BOS_LEVEL) + +#define __DIAGNOSE_BOS0(s) __DIAGNOSE_BOSN((s), 0) +#define __DIAGNOSE_PASS_OBJECT_SIZE_N(n) __attribute__((pass_object_size(n))) +#define __DIAGNOSE__SIZE_MUL_OVERFLOW(a, b, result) __builtin_umull_overflow(a, b, result) +#define __DIAGNOSE_PRINTFLIKE(x, y) __attribute__((__format__(printf, x, y))) +#define __DIAGNOSE_CALL_BYPASSING_FORTIFY(fn) (&(fn)) +#define __DIAGNOSE_FORTIFY_INLINE static __inline__ __attribute__((no_stack_protector)) \ + __DIAGNOSE_ALWAYS_INLINE + +#define __DIAGNOSE_FORTIFY_VARIADIC static __inline__ + +#define __DIAGNOSE_PASS_OBJECT_SIZE __DIAGNOSE_PASS_OBJECT_SIZE_N(__DIAGNOSE_BOS_LEVEL) +#define __DIAGNOSE_PASS_OBJECT_SIZE0 __DIAGNOSE_PASS_OBJECT_SIZE_N(0) + +#define __DIAGNOSE_FORTIFY_UNKNOWN_SIZE ((unsigned int) -1) +/* The following are intended for use in unevaluated environments, e.g. diagnose_if conditions. */ +#define __DIAGNOSE_UNEVALUATED_LT(bos_val, val) \ +((bos_val) != __DIAGNOSE_FORTIFY_UNKNOWN_SIZE && (bos_val) < (val)) + +#define __DIAGNOSE_UNEVALUATED_LE(bos_val, val) \ + ((bos_val) != __DIAGNOSE_FORTIFY_UNKNOWN_SIZE && (bos_val) <= (val)) + +/* The following acts in the context of evaluation. */ +#define __DIAGNOSE_BOS_DYNAMIC_CHECK_IMPL_AND(bos_val, op, index, cond) \ + ((bos_val) == __DIAGNOSE_FORTIFY_UNKNOWN_SIZE || \ + (__builtin_constant_p(index) && bos_val op index && (cond))) + +#define __DIAGNOSE_BOS_DYNAMIC_CHECK_IMPL(bos_val, op, index) \ + __DIAGNOSE_BOS_DYNAMIC_CHECK_IMPL_AND(bos_val, op, index, 1) + +#define __DIAGNOSE_BOS_TRIVIALLY_GE(bos_val, index) __DIAGNOSE_BOS_DYNAMIC_CHECK_IMPL((bos_val), >=, (index)) +#define __DIAGNOSE_BOS_TRIVIALLY_GT(bos_val, index) __DIAGNOSE_BOS_DYNAMIC_CHECK_IMPL((bos_val), >, (index)) + +#define __DIAGNOSE_OVERLOAD __attribute__((overloadable)) + +/* + * A function to prevent this function from being applied. + * Used to rename the function so that the compiler emits a call to "x". + */ +#define __DIAGNOSE_RENAME(x) __asm__(#x) +#define __DIAGNOSE_OPEN_MODES_USEFUL(flags) (((flags) & O_CREAT) || ((flags) & O_TMPFILE) == O_TMPFILE) +#define __DIAGNOSE_BOS_FD_COUNT_TRIVIALLY_SAFE(bos_val, fds, fd_count) \ + __DIAGNOSE_BOS_DYNAMIC_CHECK_IMPL_AND((bos_val), >=, (sizeof(*(fds)) * (fd_count)), \ + (fd_count) <= __DIAGNOSE_CAST(static_cast, unsigned int, -1) / sizeof(*(fds))) + +#define __DIAGNOSE_UNSAFE_CHK_MUL_OVERFLOW(x, y) ((__SIZE_TYPE__)-1 / (x) < (y)) + +#define __DIAGNOSE_BOS_TRIVIALLY_GE_MUL(bos_val, size, count) \ + __DIAGNOSE_BOS_DYNAMIC_CHECK_IMPL_AND(bos_val, >=, (size) * (count), \ + !__DIAGNOSE_UNSAFE_CHK_MUL_OVERFLOW(size, count)) + +#define FORTIFY_RUNTIME_ERROR_PREFIX "Musl Fortify runtime error: " +#define OPEN_TOO_MANY_ARGS_ERROR "There are too many arguments" +#define OPEN_TOO_FEW_ARGS_ERROR "invoking with O_CREAT or O_TMPFILE, but missing pattern." +#define OPEN_USELESS_MODES_WARNING "having redundant mode bits; but missing O_CREAT." +#define CALLED_WITH_STRING_BIGGER_BUFFER "called with a string larger than the buffer" +#define FD_COUNT_LARGE_GIVEN_BUFFER "fd_count is greater than the given buffer" +#define CALLED_WITH_SIZE_BIGGER_BUFFER "called with bigger size than the buffer" +#define OUTPUT_PARAMETER_BYTES "the output parameter must be nullptr or a pointer to the buffer with >= FORTIFY_PATH_MAX bytes" +#define SIZE_LARGER_THEN_DESTINATION_BUFFER "the size is greater than the target buffer" + +void __fortify_error(const char* info, ...); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/third_party/musl/ndk_musl_include/fortify/poll.h b/third_party/musl/ndk_musl_include/fortify/poll.h new file mode 100644 index 0000000000000000000000000000000000000000..cead182e1c5c36592a16ae67aebac2e1059bde4c --- /dev/null +++ b/third_party/musl/ndk_musl_include/fortify/poll.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _POLL_H +#error "Never include this file directly; instead, include " +#endif + +#include +#include "fortify.h" + +#ifdef __cplusplus +extern "C" { +#endif + +int __poll_chk(struct pollfd*, nfds_t, int, size_t); +#ifdef _GNU_SOURCE +int __ppoll_chk(struct pollfd*, nfds_t, const struct timespec*, const sigset_t*, size_t); +#endif + +#ifdef __FORTIFY_COMPILATION +__DIAGNOSE_FORTIFY_INLINE +int poll(struct pollfd* const fds __DIAGNOSE_PASS_OBJECT_SIZE, nfds_t fd_amount, int timeout) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LT(__DIAGNOSE_BOS(fds), sizeof(*fds) * fd_amount), + "in call to 'poll', " FD_COUNT_LARGE_GIVEN_BUFFER) +{ +#ifdef __FORTIFY_RUNTIME + size_t bos_fds = __DIAGNOSE_BOS(fds); + + if (!__DIAGNOSE_BOS_FD_COUNT_TRIVIALLY_SAFE(bos_fds, fds, fd_amount)) { + return __poll_chk(fds, fd_amount, timeout, bos_fds); + } +#endif + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(poll)(fds, fd_amount, timeout); +} + +#ifdef _GNU_SOURCE +__DIAGNOSE_FORTIFY_INLINE +int ppoll(struct pollfd* const fds __DIAGNOSE_PASS_OBJECT_SIZE, nfds_t fd_amount, + const struct timespec* timeout, const sigset_t* mask) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LT(__DIAGNOSE_BOS(fds), sizeof(*fds) * fd_amount), + "in call to 'ppoll', " FD_COUNT_LARGE_GIVEN_BUFFER) +{ +#ifdef __FORTIFY_RUNTIME + size_t bos_fds = __DIAGNOSE_BOS(fds); + + if (!__DIAGNOSE_BOS_FD_COUNT_TRIVIALLY_SAFE(bos_fds, fds, fd_amount)) { + return __ppoll_chk(fds, fd_amount, timeout, mask, bos_fds); + } +#endif + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(ppoll)(fds, fd_amount, timeout, mask); +} +#endif + +#endif + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/third_party/musl/ndk_musl_include/fortify/socket.h b/third_party/musl/ndk_musl_include/fortify/socket.h new file mode 100644 index 0000000000000000000000000000000000000000..103802b2f6d30b62981b39627a71d258aa528db7 --- /dev/null +++ b/third_party/musl/ndk_musl_include/fortify/socket.h @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _SYS_SOCKET_H +#error "Never include this file directly; instead, include " +#endif + +#include "fortify.h" + +#ifdef __cplusplus +extern "C" { +#endif + +ssize_t __sendto_chk(int, const void*, size_t, size_t, int, const struct sockaddr*, + socklen_t); +ssize_t __recvfrom_chk(int, void*, size_t, size_t, int, struct sockaddr*, + socklen_t*); +ssize_t __send_chk(int, const void*, size_t, size_t, int); +ssize_t __recv_chk(int, void*, size_t, size_t, int); + + +#ifdef __FORTIFY_COMPILATION +__DIAGNOSE_FORTIFY_INLINE +ssize_t recvfrom(int fd, void* const buf __DIAGNOSE_PASS_OBJECT_SIZE0, size_t len, int flags, + struct sockaddr* src_addr, socklen_t* addr_len) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LT(__DIAGNOSE_BOS0(buf), len), + "'recvfrom' " CALLED_WITH_SIZE_BIGGER_BUFFER) +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS0(buf); + + if (!__DIAGNOSE_BOS_TRIVIALLY_GE(bos, len)) { + return __recvfrom_chk(fd, buf, len, bos, flags, src_addr, addr_len); + } +#endif + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(recvfrom)(fd, buf, len, flags, src_addr, addr_len); +} + +__DIAGNOSE_FORTIFY_INLINE +ssize_t sendto(int fd, const void* const buf __DIAGNOSE_PASS_OBJECT_SIZE0, size_t len, int flags, + const struct sockaddr* dest_addr, socklen_t addr_len) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LT(__DIAGNOSE_BOS0(buf), len), + "'sendto' " CALLED_WITH_SIZE_BIGGER_BUFFER) +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS0(buf); + + if (!__DIAGNOSE_BOS_TRIVIALLY_GE(bos, len)) { + return __sendto_chk(fd, buf, len, bos, flags, dest_addr, addr_len); + } +#endif + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(sendto)(fd, buf, len, flags, dest_addr, addr_len); +} + +__DIAGNOSE_FORTIFY_INLINE +ssize_t recv(int socket, void* const buf __DIAGNOSE_PASS_OBJECT_SIZE0, size_t len, int flags) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LT(__DIAGNOSE_BOS0(buf), len), + "'recv' " CALLED_WITH_SIZE_BIGGER_BUFFER) +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS0(buf); + + if (!__DIAGNOSE_BOS_TRIVIALLY_GE(bos, len)) { + return __recv_chk(socket, buf, len, bos, flags); + } +#endif + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(recv)(socket, buf, len, flags); +} + +__DIAGNOSE_FORTIFY_INLINE +ssize_t send(int socket, const void* const buf __DIAGNOSE_PASS_OBJECT_SIZE0, size_t len, int flags) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LT(__DIAGNOSE_BOS0(buf), len), + "'send' " CALLED_WITH_SIZE_BIGGER_BUFFER) +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS0(buf); + + if (!__DIAGNOSE_BOS_TRIVIALLY_GE(bos, len)) { + return __send_chk(socket, buf, len, bos, flags); + } +#endif + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(send)(socket, buf, len, flags); +} +#endif + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/third_party/musl/ndk_musl_include/fortify/stat.h b/third_party/musl/ndk_musl_include/fortify/stat.h new file mode 100644 index 0000000000000000000000000000000000000000..86d02786bd33d502ffe4341dfb13f187515b7031 --- /dev/null +++ b/third_party/musl/ndk_musl_include/fortify/stat.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _SYS_STAT_H +#error "Never include this file directly; instead, include " +#endif + +#include "fortify.h" + +#ifdef __cplusplus +extern "C" { +#endif + +mode_t __umask_chk(mode_t); +mode_t __umask_real(mode_t mode) __DIAGNOSE_RENAME(umask); + +#ifdef __FORTIFY_COMPILATION +/* Overload of umask. */ +__DIAGNOSE_FORTIFY_INLINE +mode_t umask(mode_t mode) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ENABLE_IF(1, "") +__DIAGNOSE_ERROR_IF(mode & ~0777, "'umask' was called in invalid mode") +{ +#ifdef __FORTIFY_RUNTIME + return __umask_chk(mode); +#else + return __umask_real(mode); +#endif +} +#endif + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/third_party/musl/ndk_musl_include/fortify/stdio.h b/third_party/musl/ndk_musl_include/fortify/stdio.h new file mode 100644 index 0000000000000000000000000000000000000000..24cd46cd0d4b7b2602fc22279c1164f231340bff --- /dev/null +++ b/third_party/musl/ndk_musl_include/fortify/stdio.h @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _STDIO_H +#error "Never include this file directly; instead, include " +#endif + +#include +#include "fortify.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(__FORTIFY_COMPILATION) + +#define FORMAT_PLACE_2 (2) +#define FORMAT_PLACE_3 (3) +#define VALIST_PLACE_0 (0) +#define VALIST_PLACE_3 (3) +#define VALIST_PLACE_4 (4) + +size_t __fread_chk(void*, size_t, size_t, FILE*, size_t); +size_t __fwrite_chk(const void*, size_t, size_t, FILE*, size_t); +char* __fgets_chk(char*, int, FILE*, size_t); + +__DIAGNOSE_FORTIFY_INLINE +size_t fread(void* const __DIAGNOSE_PASS_OBJECT_SIZE0 buf, + size_t size, size_t count, FILE* stream) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNSAFE_CHK_MUL_OVERFLOW(size, count), + "in call to 'fread', size * count overflows") +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LT(__DIAGNOSE_BOS0(buf), size * count), + "in call to 'fread', size * count is too large for the given buffer") +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS0(buf); + + if (!__DIAGNOSE_BOS_TRIVIALLY_GE_MUL(bos, size, count)) { + return __fread_chk(buf, size, count, stream, bos); + } +#endif + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(fread)(buf, size, count, stream); +} + +__DIAGNOSE_FORTIFY_INLINE +size_t fwrite(const void* const __DIAGNOSE_PASS_OBJECT_SIZE0 buf, + size_t size, size_t count, FILE* stream) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNSAFE_CHK_MUL_OVERFLOW(size, count), + "in call to 'fwrite', size * count overflows") +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LT(__DIAGNOSE_BOS0(buf), size * count), + "in call to 'fwrite', size * count is too large for the given buffer") +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS0(buf); + + if (!__DIAGNOSE_BOS_TRIVIALLY_GE_MUL(bos, size, count)) { + return __fwrite_chk(buf, size, count, stream, bos); + } +#endif + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(fwrite)(buf, size, count, stream); +} + +__DIAGNOSE_FORTIFY_INLINE +char* fgets(char* const __DIAGNOSE_PASS_OBJECT_SIZE dest, int size, FILE* stream) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(size < 0, "in call to 'fgets', size should not be less than 0") +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LT(__DIAGNOSE_BOS(dest), size), + "in call to 'fgets', " SIZE_LARGER_THEN_DESTINATION_BUFFER) +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS(dest); + + if (!__DIAGNOSE_BOS_DYNAMIC_CHECK_IMPL_AND(bos, >=, (size_t)size, size >= 0)) { + return __fgets_chk(dest, size, stream, bos); + } +#endif + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(fgets)(dest, size, stream); +} + +__DIAGNOSE_FORTIFY_INLINE __DIAGNOSE_PRINTFLIKE(FORMAT_PLACE_3, VALIST_PLACE_0) +int vsnprintf(char* const __DIAGNOSE_PASS_OBJECT_SIZE dest, + size_t size, const char* format, va_list ap) +__DIAGNOSE_OVERLOAD +{ + size_t bos = __DIAGNOSE_BOS(dest); + return __builtin___vsnprintf_chk(dest, size, 0, bos, format, ap); +} + +__DIAGNOSE_FORTIFY_INLINE __DIAGNOSE_PRINTFLIKE(FORMAT_PLACE_2, VALIST_PLACE_0) +int vsprintf(char* const __DIAGNOSE_PASS_OBJECT_SIZE dest, const char* format, va_list ap) +__DIAGNOSE_OVERLOAD +{ + return __builtin___vsprintf_chk(dest, 0, __DIAGNOSE_BOS(dest), format, ap); +} + +__DIAGNOSE_FORTIFY_VARIADIC __DIAGNOSE_PRINTFLIKE(FORMAT_PLACE_2, VALIST_PLACE_3) +int sprintf(char* const __DIAGNOSE_PASS_OBJECT_SIZE dest, const char* format, ...) +__DIAGNOSE_OVERLOAD +{ + va_list va_l; + va_start(va_l, format); + int result = __builtin___vsprintf_chk(dest, 0, __DIAGNOSE_BOS(dest), format, va_l); + va_end(va_l); + return result; +} + +__DIAGNOSE_FORTIFY_VARIADIC __DIAGNOSE_PRINTFLIKE(FORMAT_PLACE_3, VALIST_PLACE_4) +int snprintf(char* const __DIAGNOSE_PASS_OBJECT_SIZE dest, size_t size, const char* format, ...) +__DIAGNOSE_OVERLOAD +{ + va_list va_l; + va_start(va_l, format); + int result = __builtin___vsnprintf_chk(dest, size, 0, __DIAGNOSE_BOS(dest), format, va_l); + va_end(va_l); + return result; +} + +#endif // defined(__FORTIFY_COMPILATION) + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/third_party/musl/ndk_musl_include/fortify/stdlib.h b/third_party/musl/ndk_musl_include/fortify/stdlib.h new file mode 100644 index 0000000000000000000000000000000000000000..2b142b08ce29f845f6ec10dd5b4e441f030e9bd0 --- /dev/null +++ b/third_party/musl/ndk_musl_include/fortify/stdlib.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _STDLIB_H +#error "Never include this file directly; instead, include " +#endif + +#include "fortify.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(_GNU_SOURCE) && defined(__FORTIFY_COMPILATION) +char* realpath(const char* path, char* resolved) +__DIAGNOSE_ERROR_IF(!path, "'realpath': NULL path is never correct; flipped arguments?") +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LT(__DIAGNOSE_BOS(resolved), FORTIFY_PATH_MAX), + "'realpath' " OUTPUT_PARAMETER_BYTES); +#endif +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/third_party/musl/ndk_musl_include/fortify/string.h b/third_party/musl/ndk_musl_include/fortify/string.h new file mode 100644 index 0000000000000000000000000000000000000000..3c43f8a890168b3e64f99ad90822dde5dead2f42 --- /dev/null +++ b/third_party/musl/ndk_musl_include/fortify/string.h @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _STRING_H +#error "Never include this file directly; instead, include " +#endif + +#include "fortify.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void *__memchr_chk(const void* s, int c, size_t n, size_t actual_size); +void *__memrchr_chk(const void*, int, size_t, size_t); +size_t __strlcpy_chk(char*, const char*, size_t, size_t); +size_t __strlcat_chk(char*, const char*, size_t, size_t); +char *__strchr_chk(const char* p, int ch, size_t s_len); +char *__strrchr_chk(const char *p, int ch, size_t s_len); +size_t __strlen_chk(const char* s, size_t s_len); + +#ifdef __FORTIFY_COMPILATION +__DIAGNOSE_FORTIFY_INLINE +char *strcpy(char *const dest __DIAGNOSE_PASS_OBJECT_SIZE, const char *src) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LE(__DIAGNOSE_BOS(dest), __builtin_strlen(src)), + "'strcpy' " CALLED_WITH_STRING_BIGGER_BUFFER) +{ +#ifdef __FORTIFY_RUNTIME + return __builtin___strcpy_chk(dest, src, __DIAGNOSE_BOS(dest)); +#else + return __builtin_strcpy(dest, src); +#endif +} + +__DIAGNOSE_FORTIFY_INLINE +char *stpcpy(char *const dest __DIAGNOSE_PASS_OBJECT_SIZE, const char *src) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LE(__DIAGNOSE_BOS(dest), __builtin_strlen(src)), + "'stpcpy' " CALLED_WITH_STRING_BIGGER_BUFFER) +{ +#ifdef __FORTIFY_RUNTIME + return __builtin___stpcpy_chk(dest, src, __DIAGNOSE_BOS(dest)); +#else + return __builtin_stpcpy(dest, src); +#endif +} + +__DIAGNOSE_FORTIFY_INLINE +void *memmove(void *const dest __DIAGNOSE_PASS_OBJECT_SIZE0, const void *src, size_t len) +__DIAGNOSE_OVERLOAD +{ +#ifdef __FORTIFY_RUNTIME + return __builtin___memmove_chk(dest, src, len, __DIAGNOSE_BOS(dest)); +#else + return __builtin_memmove(dest, src, len); +#endif +} + +__DIAGNOSE_FORTIFY_INLINE +void *mempcpy(void *const dest __DIAGNOSE_PASS_OBJECT_SIZE, const void *src, size_t copy_amount) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LT(__DIAGNOSE_BOS0(dest), copy_amount), + "'mempcpy' " CALLED_WITH_STRING_BIGGER_BUFFER) +{ +#ifdef __FORTIFY_RUNTIME + return __builtin___mempcpy_chk(dest, src, copy_amount, __DIAGNOSE_BOS0(dest)); +#else + return __builtin_mempcpy(dest, src, copy_amount); +#endif +} + +__DIAGNOSE_FORTIFY_INLINE +char *strcat(char *const dest __DIAGNOSE_PASS_OBJECT_SIZE, const char *src) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LE(__DIAGNOSE_BOS(dest), __builtin_strlen(src)), + "'strcat' " CALLED_WITH_STRING_BIGGER_BUFFER) +{ +#ifdef __FORTIFY_RUNTIME + return __builtin___strcat_chk(dest, src, __DIAGNOSE_BOS(dest)); +#else + return __builtin_strcat(dest, src); +#endif +} + +#ifdef __FORTIFY_RUNTIME +__DIAGNOSE_FORTIFY_INLINE +char *strncat(char* const dest __DIAGNOSE_PASS_OBJECT_SIZE, const char* src, size_t n) +__DIAGNOSE_OVERLOAD +{ + return __builtin___strncat_chk(dest, src, n, __DIAGNOSE_BOS(dest)); +} +#endif + +#ifdef __FORTIFY_RUNTIME +__DIAGNOSE_FORTIFY_INLINE +char *stpncpy(char *const dest __DIAGNOSE_PASS_OBJECT_SIZE, + const char *const src __DIAGNOSE_PASS_OBJECT_SIZE, size_t n) +__DIAGNOSE_OVERLOAD +{ + size_t bos_dest = __DIAGNOSE_BOS(dest); + return __builtin___stpncpy_chk(dest, src, n, bos_dest); +} +#endif + +#ifdef __FORTIFY_RUNTIME +__DIAGNOSE_FORTIFY_INLINE +char *strncpy(char *const dest __DIAGNOSE_PASS_OBJECT_SIZE, + const char *const src __DIAGNOSE_PASS_OBJECT_SIZE, size_t n) +__DIAGNOSE_OVERLOAD +{ + size_t bos_dest = __DIAGNOSE_BOS(dest); + return __builtin___strncpy_chk(dest, src, n, bos_dest); +} +#endif + +#ifdef __FORTIFY_RUNTIME +__DIAGNOSE_FORTIFY_INLINE +void *memcpy(void *const dest __DIAGNOSE_PASS_OBJECT_SIZE0, const void *src, size_t copy_amount) +__DIAGNOSE_OVERLOAD +{ + return __builtin___memcpy_chk(dest, src, copy_amount, __DIAGNOSE_BOS0(dest)); +} +#endif + +#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE) +__DIAGNOSE_FORTIFY_INLINE +size_t strlcpy(char *const dest __DIAGNOSE_PASS_OBJECT_SIZE, const char *src, size_t size) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LT(__DIAGNOSE_BOS(dest), size), + "'strlcpy' called with size bigger than buffer") +{ +#ifdef __FORTIFY_RUNTIME + return __strlcpy_chk(dest, src, size, __DIAGNOSE_BOS(dest)); +#else + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(strlcpy)(dest, src, size); +#endif +} + +__DIAGNOSE_FORTIFY_INLINE +size_t strlcat(char* const dest __DIAGNOSE_PASS_OBJECT_SIZE, const char* src, size_t size) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LT(__DIAGNOSE_BOS(dest), size), + "'strlcat' called with size bigger than buffer") +{ +#ifdef __FORTIFY_RUNTIME + return __strlcat_chk(dest, src, size, __DIAGNOSE_BOS(dest)); +#else + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(strlcat)(dest, src, size); +#endif +} +#endif // defined(_GNU_SOURCE) || defined(_BSD_SOURCE) + +__DIAGNOSE_FORTIFY_INLINE +void *memset(void *const s __DIAGNOSE_PASS_OBJECT_SIZE0, int c, size_t n) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_WARNING_IF(c && !n, "'memset' will set 0 bytes; maybe the arguments got flipped?") +{ +#ifdef __FORTIFY_RUNTIME + return __builtin___memset_chk(s, c, n, __DIAGNOSE_BOS0(s)); +#else + return __builtin_memset(s, c, n); +#endif +} + +#ifdef __FORTIFY_RUNTIME +__DIAGNOSE_FORTIFY_INLINE +void *memchr(const void *const s __DIAGNOSE_PASS_OBJECT_SIZE, int c, size_t n) +__DIAGNOSE_OVERLOAD +{ + size_t bos = __DIAGNOSE_BOS(s); + if (__DIAGNOSE_BOS_TRIVIALLY_GE(bos, n)) { + return __builtin_memchr(s, c, n); + } + return __memchr_chk(s, c, n, bos); +} +#endif // memchr __FORTIFY_RUNTIME + +extern void* __memrchr_real(const void*, int, size_t) __DIAGNOSE_RENAME(memrchr); + +#ifdef __FORTIFY_RUNTIME +__DIAGNOSE_FORTIFY_INLINE +void *memrchr(const void *const __DIAGNOSE_PASS_OBJECT_SIZE s, int c, size_t n) +__DIAGNOSE_OVERLOAD +{ + size_t bos = __DIAGNOSE_BOS(s); + if (__DIAGNOSE_BOS_TRIVIALLY_GE(bos, n)) { + return __memrchr_real(s, c, n); + } + return __memrchr_chk(s, c, n, bos); +} +#endif + +__DIAGNOSE_FORTIFY_INLINE +char* strchr(const char* const s __DIAGNOSE_PASS_OBJECT_SIZE, int c) +__DIAGNOSE_OVERLOAD +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS(s); + + if (bos != __DIAGNOSE_FORTIFY_UNKNOWN_SIZE) { + return __strchr_chk(s, c, bos); + } +#endif + return __builtin_strchr(s, c); +} + +__DIAGNOSE_FORTIFY_INLINE +char* strrchr(const char* const s __DIAGNOSE_PASS_OBJECT_SIZE, int c) +__DIAGNOSE_OVERLOAD +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS(s); + + if (bos != __DIAGNOSE_FORTIFY_UNKNOWN_SIZE) { + return __strrchr_chk(s, c, bos); + } +#endif + return __builtin_strrchr(s, c); +} + +#ifdef __FORTIFY_RUNTIME +__DIAGNOSE_FORTIFY_INLINE +size_t strlen(const char* const s __DIAGNOSE_PASS_OBJECT_SIZE0) +__DIAGNOSE_OVERLOAD +{ + return __strlen_chk(s, __DIAGNOSE_BOS0(s)); +} +#endif + +#endif // __FORTIFY_COMPILATION +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/third_party/musl/ndk_musl_include/fortify/unistd.h b/third_party/musl/ndk_musl_include/fortify/unistd.h new file mode 100644 index 0000000000000000000000000000000000000000..77277265996874196a034397182ec9766ab39417 --- /dev/null +++ b/third_party/musl/ndk_musl_include/fortify/unistd.h @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _UNISTD_H +#error "Never include this file directly; instead, include " +#endif + +#include "fortify.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(__FORTIFY_COMPILATION) + +#define __DIAGNOSE_ERROR_IF_OVERFLOWS_SSIZET(what, fn) \ + __DIAGNOSE_ERROR_IF((what) > FORTIFY_SSIZE_MAX, "in call to '" #fn "', '" #what "' must be <= FORTIFY_SSIZE_MAX") + +#define __DIAGNOSE_ERROR_IF_OVERFLOWS_OBJECTSIZE(what, objsize, fn) \ + __DIAGNOSE_ERROR_IF(__DIAGNOSE_UNEVALUATED_LT((objsize), (what)), \ + "in call to '" #fn "', '" #what "' bytes overflows the given object") + +#define __DIAGNOSE_BOS_TRIVIALLY_GE_NO_OVERFLOW(bos_val, index) \ + ((__DIAGNOSE_BOS_DYNAMIC_CHECK_IMPL_AND((bos_val), >=, (index), (bos_val) <= (FORTIFY_SSIZE_MAX)) && \ + __builtin_constant_p(index) && (index) <= (FORTIFY_SSIZE_MAX))) + +char* __getcwd_chk(char*, size_t, size_t) ; + +ssize_t __pread_chk(int, void*, size_t, off_t, size_t); +ssize_t __pread_real(int, void*, size_t, off_t) __DIAGNOSE_RENAME(pread); + +ssize_t __pwrite_chk(int, const void*, size_t, off_t, size_t); +ssize_t __pwrite_real(int, const void*, size_t, off_t) __DIAGNOSE_RENAME(pwrite); + +ssize_t __read_chk(int, void*, size_t, size_t); +ssize_t __write_chk(int, const void*, size_t, size_t); + +ssize_t __readlink_chk(const char*, char*, size_t, size_t); +ssize_t __readlinkat_chk(int dirfd, const char*, char*, size_t, size_t); + +#define __DIAGNOSE_PREAD_PREFIX(x) __pread_ ## x +#define __DIAGNOSE_PWRITE_PREFIX(x) __pwrite_ ## x + +__DIAGNOSE_FORTIFY_INLINE +char* getcwd(char* const __DIAGNOSE_PASS_OBJECT_SIZE buf, size_t size) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF_OVERFLOWS_OBJECTSIZE(size, __DIAGNOSE_BOS(buf), getcwd) +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS(buf); + + if (!__DIAGNOSE_BOS_TRIVIALLY_GE(bos, size)) { + return __getcwd_chk(buf, size, bos); + } +#endif + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(getcwd)(buf, size); +} + +__DIAGNOSE_FORTIFY_INLINE +ssize_t pread(int fd, void* const __DIAGNOSE_PASS_OBJECT_SIZE0 buf, size_t count, off_t offset) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF_OVERFLOWS_SSIZET(count, pread) +__DIAGNOSE_ERROR_IF_OVERFLOWS_OBJECTSIZE(count, __DIAGNOSE_BOS0(buf), pread) +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS0(buf); + + if (!__DIAGNOSE_BOS_TRIVIALLY_GE_NO_OVERFLOW(bos, count)) { + return __DIAGNOSE_PREAD_PREFIX(chk)(fd, buf, count, offset, bos); + } +#endif + return __DIAGNOSE_PREAD_PREFIX(real)(fd, buf, count, offset); +} + +__DIAGNOSE_FORTIFY_INLINE +ssize_t pwrite(int fd, const void* const __DIAGNOSE_PASS_OBJECT_SIZE0 buf, size_t count, off_t offset) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF_OVERFLOWS_SSIZET(count, pwrite) +__DIAGNOSE_ERROR_IF_OVERFLOWS_OBJECTSIZE(count, __DIAGNOSE_BOS0(buf), pwrite) +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS0(buf); + + if (!__DIAGNOSE_BOS_TRIVIALLY_GE_NO_OVERFLOW(bos, count)) { + return __DIAGNOSE_PWRITE_PREFIX(chk)(fd, buf, count, offset, bos); + } +#endif + return __DIAGNOSE_PWRITE_PREFIX(real)(fd, buf, count, offset); +} + +__DIAGNOSE_FORTIFY_INLINE +ssize_t read(int fd, void* const __DIAGNOSE_PASS_OBJECT_SIZE0 buf, size_t count) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF_OVERFLOWS_SSIZET(count, read) +__DIAGNOSE_ERROR_IF_OVERFLOWS_OBJECTSIZE(count, __DIAGNOSE_BOS0(buf), read) +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS0(buf); + + if (!__DIAGNOSE_BOS_TRIVIALLY_GE_NO_OVERFLOW(bos, count)) { + return __read_chk(fd, buf, count, bos); + } +#endif + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(read)(fd, buf, count); +} + +__DIAGNOSE_FORTIFY_INLINE +ssize_t write(int fd, const void* const __DIAGNOSE_PASS_OBJECT_SIZE0 buf, size_t count) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF_OVERFLOWS_SSIZET(count, write) +__DIAGNOSE_ERROR_IF_OVERFLOWS_OBJECTSIZE(count, __DIAGNOSE_BOS0(buf), write) +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS0(buf); + + if (!__DIAGNOSE_BOS_TRIVIALLY_GE_NO_OVERFLOW(bos, count)) { + return __write_chk(fd, buf, count, bos); + } +#endif + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(write)(fd, buf, count); +} + +__DIAGNOSE_FORTIFY_INLINE +ssize_t readlink(const char* path, char* const __DIAGNOSE_PASS_OBJECT_SIZE buf, size_t size) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF_OVERFLOWS_SSIZET(size, readlink) +__DIAGNOSE_ERROR_IF_OVERFLOWS_OBJECTSIZE(size, __DIAGNOSE_BOS(buf), readlink) +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS(buf); + + if (!__DIAGNOSE_BOS_TRIVIALLY_GE_NO_OVERFLOW(bos, size)) { + return __readlink_chk(path, buf, size, bos); + } +#endif + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(readlink)(path, buf, size); +} + +__DIAGNOSE_FORTIFY_INLINE +ssize_t readlinkat(int dirfd, const char* path, char* const __DIAGNOSE_PASS_OBJECT_SIZE buf, size_t size) +__DIAGNOSE_OVERLOAD +__DIAGNOSE_ERROR_IF_OVERFLOWS_SSIZET(size, readlinkat) +__DIAGNOSE_ERROR_IF_OVERFLOWS_OBJECTSIZE(size, __DIAGNOSE_BOS(buf), readlinkat) +{ +#ifdef __FORTIFY_RUNTIME + size_t bos = __DIAGNOSE_BOS(buf); + + if (!__DIAGNOSE_BOS_TRIVIALLY_GE_NO_OVERFLOW(bos, size)) { + return __readlinkat_chk(dirfd, path, buf, size, bos); + } +#endif + return __DIAGNOSE_CALL_BYPASSING_FORTIFY(readlinkat)(dirfd, path, buf, size); +} + +#endif // defined(__FORTIFY_COMPILATION) + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/third_party/musl/ndk_musl_include/ftw.h b/third_party/musl/ndk_musl_include/ftw.h new file mode 100644 index 0000000000000000000000000000000000000000..74030cef52f3b78ab60211b3abcb07f30107798e --- /dev/null +++ b/third_party/musl/ndk_musl_include/ftw.h @@ -0,0 +1,41 @@ +#ifndef _FTW_H +#define _FTW_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#define FTW_F 1 +#define FTW_D 2 +#define FTW_DNR 3 +#define FTW_NS 4 +#define FTW_SL 5 +#define FTW_DP 6 +#define FTW_SLN 7 + +#define FTW_PHYS 1 +#define FTW_MOUNT 2 +#define FTW_CHDIR 4 +#define FTW_DEPTH 8 + +struct FTW { + int base; + int level; +}; + +int ftw(const char *, int (*)(const char *, const struct stat *, int), int); +int nftw(const char *, int (*)(const char *, const struct stat *, int, struct FTW *), int, int); + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define ftw64 ftw +#define nftw64 nftw +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/getopt.h b/third_party/musl/ndk_musl_include/getopt.h new file mode 100644 index 0000000000000000000000000000000000000000..aa9b6ac8d62c2f2cb5a537468eacb5766aa39d64 --- /dev/null +++ b/third_party/musl/ndk_musl_include/getopt.h @@ -0,0 +1,30 @@ +#ifndef _GETOPT_H +#define _GETOPT_H + +#ifdef __cplusplus +extern "C" { +#endif + +int getopt(int, char * const [], const char *); +extern char *optarg; +extern int optind, opterr, optopt, optreset; + +struct option { + const char *name; + int has_arg; + int *flag; + int val; +}; + +int getopt_long(int, char *const *, const char *, const struct option *, int *); +int getopt_long_only(int, char *const *, const char *, const struct option *, int *); + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/glob.h b/third_party/musl/ndk_musl_include/glob.h new file mode 100644 index 0000000000000000000000000000000000000000..06928e933586a086530505d10fa0ff1436c0938d --- /dev/null +++ b/third_party/musl/ndk_musl_include/glob.h @@ -0,0 +1,50 @@ +#ifndef _GLOB_H +#define _GLOB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_size_t + +#include + +typedef struct { + size_t gl_pathc; + char **gl_pathv; + size_t gl_offs; + int __dummy1; + void *__dummy2[5]; +} glob_t; + +int glob(const char *__restrict, int, int (*)(const char *, int), glob_t *__restrict); +void globfree(glob_t *); + +#define GLOB_ERR 0x01 +#define GLOB_MARK 0x02 +#define GLOB_NOSORT 0x04 +#define GLOB_DOOFFS 0x08 +#define GLOB_NOCHECK 0x10 +#define GLOB_APPEND 0x20 +#define GLOB_NOESCAPE 0x40 +#define GLOB_PERIOD 0x80 + +#define GLOB_TILDE 0x1000 +#define GLOB_TILDE_CHECK 0x4000 + +#define GLOB_NOSPACE 1 +#define GLOB_ABORTED 2 +#define GLOB_NOMATCH 3 +#define GLOB_NOSYS 4 + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define glob64_t glob_t +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/grp.h b/third_party/musl/ndk_musl_include/grp.h new file mode 100644 index 0000000000000000000000000000000000000000..2e7df76ce6dcad5297f1c656e59ff941f41e6993 --- /dev/null +++ b/third_party/musl/ndk_musl_include/grp.h @@ -0,0 +1,48 @@ +#ifndef _GRP_H +#define _GRP_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_size_t +#define __NEED_gid_t + +#ifdef _GNU_SOURCE +#define __NEED_FILE +#endif + +#include + +struct group { + char *gr_name; + char *gr_passwd; + gid_t gr_gid; + char **gr_mem; +}; + +struct group *getgrgid(gid_t); +struct group *getgrnam(const char *); + +int getgrgid_r(gid_t, struct group *, char *, size_t, struct group **); +int getgrnam_r(const char *, struct group *, char *, size_t, struct group **); + +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +struct group *getgrent(void); +void endgrent(void); +void setgrent(void); +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +int getgrouplist(const char *, gid_t, gid_t *, int *); +int setgroups(size_t, const gid_t *); +int initgroups(const char *, gid_t); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/iconv.h b/third_party/musl/ndk_musl_include/iconv.h new file mode 100644 index 0000000000000000000000000000000000000000..27a2e168f11edc2a929e506750cc65342143cb4e --- /dev/null +++ b/third_party/musl/ndk_musl_include/iconv.h @@ -0,0 +1,24 @@ +#ifndef _ICONV_H +#define _ICONV_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_size_t + +#include + +typedef void *iconv_t; + +iconv_t iconv_open(const char *, const char *); +size_t iconv(iconv_t, char **__restrict, size_t *__restrict, char **__restrict, size_t *__restrict); +int iconv_close(iconv_t); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/ifaddrs.h b/third_party/musl/ndk_musl_include/ifaddrs.h new file mode 100644 index 0000000000000000000000000000000000000000..e1da84bb1f5ca5c5116d5d3b66354afa38c4c7de --- /dev/null +++ b/third_party/musl/ndk_musl_include/ifaddrs.h @@ -0,0 +1,35 @@ +#ifndef _IFADDRS_H +#define _IFADDRS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +struct ifaddrs { + struct ifaddrs *ifa_next; + char *ifa_name; + unsigned ifa_flags; + struct sockaddr *ifa_addr; + struct sockaddr *ifa_netmask; + union { + struct sockaddr *ifu_broadaddr; + struct sockaddr *ifu_dstaddr; + } ifa_ifu; + void *ifa_data; +}; +#define ifa_broadaddr ifa_ifu.ifu_broadaddr +#define ifa_dstaddr ifa_ifu.ifu_dstaddr + +void freeifaddrs(struct ifaddrs *); +int getifaddrs(struct ifaddrs **); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/third_party/musl/ndk_musl_include/info/application_target_sdk_version.h b/third_party/musl/ndk_musl_include/info/application_target_sdk_version.h new file mode 100644 index 0000000000000000000000000000000000000000..677b8522e60ec35424bcb3d55d73a4eed36c4c6d --- /dev/null +++ b/third_party/musl/ndk_musl_include/info/application_target_sdk_version.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _INFO_APPLICATION_TARGET_SDK_VERSION_H +#define _INFO_APPLICATION_TARGET_SDK_VERSION_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define SDK_VERSION_FUTURE 9999 +#define SDK_VERSION_7 7 +#define SDK_VERSION_8 8 +#define SDK_VERSION_9 9 + +/** + * @brief Get the target sdk version number of the application. + * @return The target sdk version number. + */ +int get_application_target_sdk_version(void); + +/** + * @brief Set the target sdk version number of the application. + * @param target The target sdk version number. + */ +void set_application_target_sdk_version(int target); + +#ifdef __cplusplus +} +#endif + +#endif // _INFO_APPLICATION_TARGET_SDK_VERSION_H diff --git a/third_party/musl/ndk_musl_include/info/device_api_version.h b/third_party/musl/ndk_musl_include/info/device_api_version.h new file mode 100644 index 0000000000000000000000000000000000000000..1708aa441f362186f70de33c8c3fdd4f3927f89d --- /dev/null +++ b/third_party/musl/ndk_musl_include/info/device_api_version.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _INFO_DEVICE_API_VERSION_H +#define _INFO_DEVICE_API_VERSION_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Get the api version number of the device. + * @return The api version number of the device. + */ +int get_device_api_version(void); + +#ifdef __cplusplus +} +#endif + +#endif // _INFO_DEVICE_API_VERSION_H diff --git a/third_party/musl/ndk_musl_include/info/fatal_message.h b/third_party/musl/ndk_musl_include/info/fatal_message.h new file mode 100644 index 0000000000000000000000000000000000000000..daf88bf03d3aa0e5ba8c7df06e0f5d4df1d82a9e --- /dev/null +++ b/third_party/musl/ndk_musl_include/info/fatal_message.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _INFO_FATAL_MESSAGE_H +#define _INFO_FATAL_MESSAGE_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct fatal_msg { + size_t size; + char msg[0]; +} fatal_msg_t; + +/** + * @brief Set up fatal message + * @param msg The fatal message + */ +void set_fatal_message(const char *msg); + +/** + * @brief Get the set fatal message + * @return Address of fatal message + */ +fatal_msg_t *get_fatal_message(void); + +#ifdef __cplusplus +} +#endif + +#endif // _INFO_FATAL_MESSAGE_H diff --git a/third_party/musl/ndk_musl_include/inttypes.h b/third_party/musl/ndk_musl_include/inttypes.h new file mode 100644 index 0000000000000000000000000000000000000000..85a8b056f1b8e42dcd3a0d5dc398d65cbfb51720 --- /dev/null +++ b/third_party/musl/ndk_musl_include/inttypes.h @@ -0,0 +1,229 @@ +#ifndef _INTTYPES_H +#define _INTTYPES_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#define __NEED_wchar_t +#include + +typedef struct { intmax_t quot, rem; } imaxdiv_t; + +intmax_t imaxabs(intmax_t); +imaxdiv_t imaxdiv(intmax_t, intmax_t); + +intmax_t strtoimax(const char *__restrict, char **__restrict, int); +uintmax_t strtoumax(const char *__restrict, char **__restrict, int); + +intmax_t wcstoimax(const wchar_t *__restrict, wchar_t **__restrict, int); +uintmax_t wcstoumax(const wchar_t *__restrict, wchar_t **__restrict, int); + +#if UINTPTR_MAX == UINT64_MAX +#define __PRI64 "l" +#define __PRIPTR "l" +#else +#define __PRI64 "ll" +#define __PRIPTR "" +#endif + +#define PRId8 "d" +#define PRId16 "d" +#define PRId32 "d" +#define PRId64 __PRI64 "d" + +#define PRIdLEAST8 "d" +#define PRIdLEAST16 "d" +#define PRIdLEAST32 "d" +#define PRIdLEAST64 __PRI64 "d" + +#define PRIdFAST8 "d" +#define PRIdFAST16 "d" +#define PRIdFAST32 "d" +#define PRIdFAST64 __PRI64 "d" + +#define PRIi8 "i" +#define PRIi16 "i" +#define PRIi32 "i" +#define PRIi64 __PRI64 "i" + +#define PRIiLEAST8 "i" +#define PRIiLEAST16 "i" +#define PRIiLEAST32 "i" +#define PRIiLEAST64 __PRI64 "i" + +#define PRIiFAST8 "i" +#define PRIiFAST16 "i" +#define PRIiFAST32 "i" +#define PRIiFAST64 __PRI64 "i" + +#define PRIo8 "o" +#define PRIo16 "o" +#define PRIo32 "o" +#define PRIo64 __PRI64 "o" + +#define PRIoLEAST8 "o" +#define PRIoLEAST16 "o" +#define PRIoLEAST32 "o" +#define PRIoLEAST64 __PRI64 "o" + +#define PRIoFAST8 "o" +#define PRIoFAST16 "o" +#define PRIoFAST32 "o" +#define PRIoFAST64 __PRI64 "o" + +#define PRIu8 "u" +#define PRIu16 "u" +#define PRIu32 "u" +#define PRIu64 __PRI64 "u" + +#define PRIuLEAST8 "u" +#define PRIuLEAST16 "u" +#define PRIuLEAST32 "u" +#define PRIuLEAST64 __PRI64 "u" + +#define PRIuFAST8 "u" +#define PRIuFAST16 "u" +#define PRIuFAST32 "u" +#define PRIuFAST64 __PRI64 "u" + +#define PRIx8 "x" +#define PRIx16 "x" +#define PRIx32 "x" +#define PRIx64 __PRI64 "x" + +#define PRIxLEAST8 "x" +#define PRIxLEAST16 "x" +#define PRIxLEAST32 "x" +#define PRIxLEAST64 __PRI64 "x" + +#define PRIxFAST8 "x" +#define PRIxFAST16 "x" +#define PRIxFAST32 "x" +#define PRIxFAST64 __PRI64 "x" + +#define PRIX8 "X" +#define PRIX16 "X" +#define PRIX32 "X" +#define PRIX64 __PRI64 "X" + +#define PRIXLEAST8 "X" +#define PRIXLEAST16 "X" +#define PRIXLEAST32 "X" +#define PRIXLEAST64 __PRI64 "X" + +#define PRIXFAST8 "X" +#define PRIXFAST16 "X" +#define PRIXFAST32 "X" +#define PRIXFAST64 __PRI64 "X" + +#define PRIdMAX __PRI64 "d" +#define PRIiMAX __PRI64 "i" +#define PRIoMAX __PRI64 "o" +#define PRIuMAX __PRI64 "u" +#define PRIxMAX __PRI64 "x" +#define PRIXMAX __PRI64 "X" + +#define PRIdPTR __PRIPTR "d" +#define PRIiPTR __PRIPTR "i" +#define PRIoPTR __PRIPTR "o" +#define PRIuPTR __PRIPTR "u" +#define PRIxPTR __PRIPTR "x" +#define PRIXPTR __PRIPTR "X" + +#define SCNd8 "hhd" +#define SCNd16 "hd" +#define SCNd32 "d" +#define SCNd64 __PRI64 "d" + +#define SCNdLEAST8 "hhd" +#define SCNdLEAST16 "hd" +#define SCNdLEAST32 "d" +#define SCNdLEAST64 __PRI64 "d" + +#define SCNdFAST8 "hhd" +#define SCNdFAST16 "d" +#define SCNdFAST32 "d" +#define SCNdFAST64 __PRI64 "d" + +#define SCNi8 "hhi" +#define SCNi16 "hi" +#define SCNi32 "i" +#define SCNi64 __PRI64 "i" + +#define SCNiLEAST8 "hhi" +#define SCNiLEAST16 "hi" +#define SCNiLEAST32 "i" +#define SCNiLEAST64 __PRI64 "i" + +#define SCNiFAST8 "hhi" +#define SCNiFAST16 "i" +#define SCNiFAST32 "i" +#define SCNiFAST64 __PRI64 "i" + +#define SCNu8 "hhu" +#define SCNu16 "hu" +#define SCNu32 "u" +#define SCNu64 __PRI64 "u" + +#define SCNuLEAST8 "hhu" +#define SCNuLEAST16 "hu" +#define SCNuLEAST32 "u" +#define SCNuLEAST64 __PRI64 "u" + +#define SCNuFAST8 "hhu" +#define SCNuFAST16 "u" +#define SCNuFAST32 "u" +#define SCNuFAST64 __PRI64 "u" + +#define SCNo8 "hho" +#define SCNo16 "ho" +#define SCNo32 "o" +#define SCNo64 __PRI64 "o" + +#define SCNoLEAST8 "hho" +#define SCNoLEAST16 "ho" +#define SCNoLEAST32 "o" +#define SCNoLEAST64 __PRI64 "o" + +#define SCNoFAST8 "hho" +#define SCNoFAST16 "o" +#define SCNoFAST32 "o" +#define SCNoFAST64 __PRI64 "o" + +#define SCNx8 "hhx" +#define SCNx16 "hx" +#define SCNx32 "x" +#define SCNx64 __PRI64 "x" + +#define SCNxLEAST8 "hhx" +#define SCNxLEAST16 "hx" +#define SCNxLEAST32 "x" +#define SCNxLEAST64 __PRI64 "x" + +#define SCNxFAST8 "hhx" +#define SCNxFAST16 "x" +#define SCNxFAST32 "x" +#define SCNxFAST64 __PRI64 "x" + +#define SCNdMAX __PRI64 "d" +#define SCNiMAX __PRI64 "i" +#define SCNoMAX __PRI64 "o" +#define SCNuMAX __PRI64 "u" +#define SCNxMAX __PRI64 "x" + +#define SCNdPTR __PRIPTR "d" +#define SCNiPTR __PRIPTR "i" +#define SCNoPTR __PRIPTR "o" +#define SCNuPTR __PRIPTR "u" +#define SCNxPTR __PRIPTR "x" + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/third_party/musl/ndk_musl_include/iso646.h b/third_party/musl/ndk_musl_include/iso646.h new file mode 100644 index 0000000000000000000000000000000000000000..33f3d846240dabcaeead5b654ab2b6899b15dd2f --- /dev/null +++ b/third_party/musl/ndk_musl_include/iso646.h @@ -0,0 +1,20 @@ +#ifndef _ISO646_H +#define _ISO646_H + +#ifndef __cplusplus + +#define and && +#define and_eq &= +#define bitand & +#define bitor | +#define compl ~ +#define not ! +#define not_eq != +#define or || +#define or_eq |= +#define xor ^ +#define xor_eq ^= + +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/langinfo.h b/third_party/musl/ndk_musl_include/langinfo.h new file mode 100644 index 0000000000000000000000000000000000000000..1246117381a8c334568785bd57bc99c0643c8952 --- /dev/null +++ b/third_party/musl/ndk_musl_include/langinfo.h @@ -0,0 +1,116 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _LANGINFO_H +#define _LANGINFO_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#define __NEED_locale_t + +#include + +#define ABDAY_1 0x20000 +#define ABDAY_2 0x20001 +#define ABDAY_3 0x20002 +#define ABDAY_4 0x20003 +#define ABDAY_5 0x20004 +#define ABDAY_6 0x20005 +#define ABDAY_7 0x20006 + +#define DAY_1 0x20007 +#define DAY_2 0x20008 +#define DAY_3 0x20009 +#define DAY_4 0x2000A +#define DAY_5 0x2000B +#define DAY_6 0x2000C +#define DAY_7 0x2000D + +#define ABMON_1 0x2000E +#define ABMON_2 0x2000F +#define ABMON_3 0x20010 +#define ABMON_4 0x20011 +#define ABMON_5 0x20012 +#define ABMON_6 0x20013 +#define ABMON_7 0x20014 +#define ABMON_8 0x20015 +#define ABMON_9 0x20016 +#define ABMON_10 0x20017 +#define ABMON_11 0x20018 +#define ABMON_12 0x20019 + +#define MON_1 0x2001A +#define MON_2 0x2001B +#define MON_3 0x2001C +#define MON_4 0x2001D +#define MON_5 0x2001E +#define MON_6 0x2001F +#define MON_7 0x20020 +#define MON_8 0x20021 +#define MON_9 0x20022 +#define MON_10 0x20023 +#define MON_11 0x20024 +#define MON_12 0x20025 + +#define AM_STR 0x20026 +#define PM_STR 0x20027 + +#define D_T_FMT 0x20028 +#define D_FMT 0x20029 +#define T_FMT 0x2002A +#define T_FMT_AMPM 0x2002B + +#define ERA 0x2002C +#define ERA_D_FMT 0x2002E +#define ALT_DIGITS 0x2002F +#define ERA_D_T_FMT 0x20030 +#define ERA_T_FMT 0x20031 + +#define AM_STR_LOWER 0x20032 +#define PM_STR_LOWER 0x20033 + +#define CODESET 14 + +#define CRNCYSTR 0x4000F + +#define RADIXCHAR 0x10000 +#define THOUSEP 0x10001 +#define YESEXPR 0x50000 +#define NOEXPR 0x50001 + +#define _NL_LOCALE_NAME(cat) (((cat)<<16) | 0xffff) + +#if defined(_GNU_SOURCE) +#define NL_LOCALE_NAME(cat) _NL_LOCALE_NAME(cat) +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define YESSTR 0x50002 +#define NOSTR 0x50003 +#endif + +char *nl_langinfo(nl_item); +char *nl_langinfo_l(nl_item, locale_t); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/lastlog.h b/third_party/musl/ndk_musl_include/lastlog.h new file mode 100644 index 0000000000000000000000000000000000000000..20997eac58e06d80648180384fcebe3119a7ef21 --- /dev/null +++ b/third_party/musl/ndk_musl_include/lastlog.h @@ -0,0 +1 @@ +#include diff --git a/third_party/musl/ndk_musl_include/libgen.h b/third_party/musl/ndk_musl_include/libgen.h new file mode 100644 index 0000000000000000000000000000000000000000..8474cc60851120f111f17b55cd3baaa6b862d55b --- /dev/null +++ b/third_party/musl/ndk_musl_include/libgen.h @@ -0,0 +1,15 @@ +#ifndef _LIBGEN_H +#define _LIBGEN_H + +#ifdef __cplusplus +extern "C" { +#endif + +char *dirname(char *); +char *basename(char *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/libintl.h b/third_party/musl/ndk_musl_include/libintl.h new file mode 100644 index 0000000000000000000000000000000000000000..55761a4f99876305e96713bafec28d8c4ddc4213 --- /dev/null +++ b/third_party/musl/ndk_musl_include/libintl.h @@ -0,0 +1,23 @@ +#ifndef _LIBINTL_H +#define _LIBINTL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define __USE_GNU_GETTEXT 1 +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 1 : -1) + +#if __GNUC__ >= 3 +#define __fa(n) __attribute__ ((__format_arg__ (n))) +#else +#define __fa(n) +#endif + +#undef __fa + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/limits.h b/third_party/musl/ndk_musl_include/limits.h new file mode 100644 index 0000000000000000000000000000000000000000..3833cf3697ba4dd13ea158672aca856ad846de65 --- /dev/null +++ b/third_party/musl/ndk_musl_include/limits.h @@ -0,0 +1,166 @@ +#ifndef _LIMITS_H +#define _LIMITS_H + +#include + +#include /* __LONG_MAX */ + +/* Support signed or unsigned plain-char */ + +#if '\xff' > 0 +#define CHAR_MIN 0 +#define CHAR_MAX 255 +#else +#define CHAR_MIN (-128) +#define CHAR_MAX 127 +#endif + +#define CHAR_BIT 8 +#define SCHAR_MIN (-128) +#define SCHAR_MAX 127 +#define UCHAR_MAX 255 +#define SHRT_MIN (-1-0x7fff) +#define SHRT_MAX 0x7fff +#define USHRT_MAX 0xffff +#define INT_MIN (-1-0x7fffffff) +#define INT_MAX 0x7fffffff +#define UINT_MAX 0xffffffffU +#define LONG_MIN (-LONG_MAX-1) +#define LONG_MAX __LONG_MAX +#define ULONG_MAX (2UL*LONG_MAX+1) +#define LLONG_MIN (-LLONG_MAX-1) +#define LLONG_MAX 0x7fffffffffffffffLL +#define ULLONG_MAX (2ULL*LLONG_MAX+1) + +#define MB_LEN_MAX 4 + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) + +#include + +#define PIPE_BUF 4096 +#define FILESIZEBITS 64 +#ifndef NAME_MAX +#define NAME_MAX 255 +#endif +#define PATH_MAX 4096 +#define NGROUPS_MAX 32 +#define ARG_MAX 131072 +#define IOV_MAX 1024 +#define SYMLOOP_MAX 40 +#define WORD_BIT 32 +#define SSIZE_MAX LONG_MAX +#define TZNAME_MAX 6 +#define TTY_NAME_MAX 32 +#define HOST_NAME_MAX 255 + +#if LONG_MAX == 0x7fffffffL +#define LONG_BIT 32 +#else +#define LONG_BIT 64 +#endif + +/* Implementation choices... */ + +#define PTHREAD_KEYS_MAX 128 +#define PTHREAD_STACK_MIN 2048 +#define PTHREAD_DESTRUCTOR_ITERATIONS 4 +#define SEM_VALUE_MAX 0x7fffffff +#define SEM_NSEMS_MAX 256 +#define DELAYTIMER_MAX 0x7fffffff +#define MQ_PRIO_MAX 32768 +#define LOGIN_NAME_MAX 256 + +/* Arbitrary numbers... */ + +#define BC_BASE_MAX 99 +#define BC_DIM_MAX 2048 +#define BC_SCALE_MAX 99 +#define BC_STRING_MAX 1000 +#define CHARCLASS_NAME_MAX 14 +#define COLL_WEIGHTS_MAX 2 +#define EXPR_NEST_MAX 32 +#define LINE_MAX 4096 +#define RE_DUP_MAX 255 + +#define NL_ARGMAX 9 +#define NL_MSGMAX 32767 +#define NL_SETMAX 255 +#define NL_TEXTMAX 2048 + +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_XOPEN_SOURCE) + +#ifdef PAGESIZE +#define PAGE_SIZE PAGESIZE +#endif +#define NZERO 20 +#define NL_LANGMAX 32 + +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) \ + || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE+0 < 700) + +#define NL_NMAX 16 + +#endif + +/* POSIX/SUS requirements follow. These numbers come directly + * from SUS and have nothing to do with the host system. */ + +#define _POSIX_AIO_LISTIO_MAX 2 +#define _POSIX_AIO_MAX 1 +#define _POSIX_ARG_MAX 4096 +#define _POSIX_CHILD_MAX 25 +#define _POSIX_CLOCKRES_MIN 20000000 +#define _POSIX_DELAYTIMER_MAX 32 +#define _POSIX_HOST_NAME_MAX 255 +#define _POSIX_LINK_MAX 8 +#define _POSIX_LOGIN_NAME_MAX 9 +#define _POSIX_MAX_CANON 255 +#define _POSIX_MAX_INPUT 255 +#define _POSIX_MQ_OPEN_MAX 8 +#define _POSIX_MQ_PRIO_MAX 32 +#define _POSIX_NAME_MAX 14 +#define _POSIX_NGROUPS_MAX 8 +#define _POSIX_OPEN_MAX 20 +#define _POSIX_PATH_MAX 256 +#define _POSIX_PIPE_BUF 512 +#define _POSIX_RE_DUP_MAX 255 +#define _POSIX_RTSIG_MAX 8 +#define _POSIX_SEM_NSEMS_MAX 256 +#define _POSIX_SEM_VALUE_MAX 32767 +#define _POSIX_SIGQUEUE_MAX 32 +#define _POSIX_SSIZE_MAX 32767 +#define _POSIX_STREAM_MAX 8 +#define _POSIX_SS_REPL_MAX 4 +#define _POSIX_SYMLINK_MAX 255 +#define _POSIX_SYMLOOP_MAX 8 +#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4 +#define _POSIX_THREAD_KEYS_MAX 128 +#define _POSIX_THREAD_THREADS_MAX 64 +#define _POSIX_TIMER_MAX 32 +#define _POSIX_TRACE_EVENT_NAME_MAX 30 +#define _POSIX_TRACE_NAME_MAX 8 +#define _POSIX_TRACE_SYS_MAX 8 +#define _POSIX_TRACE_USER_EVENT_MAX 32 +#define _POSIX_TTY_NAME_MAX 9 +#define _POSIX_TZNAME_MAX 6 +#define _POSIX2_BC_BASE_MAX 99 +#define _POSIX2_BC_DIM_MAX 2048 +#define _POSIX2_BC_SCALE_MAX 99 +#define _POSIX2_BC_STRING_MAX 1000 +#define _POSIX2_CHARCLASS_NAME_MAX 14 +#define _POSIX2_COLL_WEIGHTS_MAX 2 +#define _POSIX2_EXPR_NEST_MAX 32 +#define _POSIX2_LINE_MAX 2048 +#define _POSIX2_RE_DUP_MAX 255 + +#define _XOPEN_IOV_MAX 16 +#define _XOPEN_NAME_MAX 255 +#define _XOPEN_PATH_MAX 1024 + +#endif diff --git a/third_party/musl/ndk_musl_include/link.h b/third_party/musl/ndk_musl_include/link.h new file mode 100644 index 0000000000000000000000000000000000000000..8a19b25cfd000f27c3a9a89604172cc1e28f8f3e --- /dev/null +++ b/third_party/musl/ndk_musl_include/link.h @@ -0,0 +1,53 @@ +#ifndef _LINK_H +#define _LINK_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#define __NEED_size_t +#define __NEED_uint32_t +#include + +#if UINTPTR_MAX > 0xffffffff +#define ElfW(type) Elf64_ ## type +#else +#define ElfW(type) Elf32_ ## type +#endif + +#include + +struct dl_phdr_info { + ElfW(Addr) dlpi_addr; + const char *dlpi_name; + const ElfW(Phdr) *dlpi_phdr; + ElfW(Half) dlpi_phnum; + unsigned long long int dlpi_adds; + unsigned long long int dlpi_subs; + size_t dlpi_tls_modid; + void *dlpi_tls_data; +}; + +struct link_map { + ElfW(Addr) l_addr; + char *l_name; + ElfW(Dyn) *l_ld; + struct link_map *l_next, *l_prev; +}; + +struct r_debug { + int r_version; + struct link_map *r_map; + ElfW(Addr) r_brk; + enum { RT_CONSISTENT, RT_ADD, RT_DELETE } r_state; + ElfW(Addr) r_ldbase; +}; + +int dl_iterate_phdr(int (*)(struct dl_phdr_info *, size_t, void *), void *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/locale.h b/third_party/musl/ndk_musl_include/locale.h new file mode 100644 index 0000000000000000000000000000000000000000..9c78f902f20e2d970d88f4ac04a50459200ebb0f --- /dev/null +++ b/third_party/musl/ndk_musl_include/locale.h @@ -0,0 +1,108 @@ +/** + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _LOCALE_H +#define _LOCALE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#ifdef __cplusplus +#define NULL 0L +#else +#define NULL ((void*)0) +#endif + +#define LC_CTYPE 0 +#define LC_NUMERIC 1 +#define LC_TIME 2 +#define LC_COLLATE 3 +#define LC_MONETARY 4 +#define LC_MESSAGES 5 +#define LC_PAPER 6 +#define LC_NAME 7 +#define LC_ADDRESS 8 +#define LC_TELEPHONE 9 +#define LC_MEASUREMENT 10 +#define LC_IDENTIFICATION 11 +#define LC_ALL 12 + +struct lconv { + char *decimal_point; + char *thousands_sep; + char *grouping; + + char *int_curr_symbol; + char *currency_symbol; + char *mon_decimal_point; + char *mon_thousands_sep; + char *mon_grouping; + char *positive_sign; + char *negative_sign; + char int_frac_digits; + char frac_digits; + char p_cs_precedes; + char p_sep_by_space; + char n_cs_precedes; + char n_sep_by_space; + char p_sign_posn; + char n_sign_posn; + char int_p_cs_precedes; + char int_p_sep_by_space; + char int_n_cs_precedes; + char int_n_sep_by_space; + char int_p_sign_posn; + char int_n_sign_posn; +}; + +char *setlocale (int, const char *); +struct lconv *localeconv(void); + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) + +#define __NEED_locale_t + +#include + +#define LC_GLOBAL_LOCALE ((locale_t)-1) + +#define LC_CTYPE_MASK (1< + +#define M_SET_THREAD_CACHE -1001 +#define M_THREAD_CACHE_ENABLE 1 +#define M_THREAD_CACHE_DISABLE 0 + +#define M_FLUSH_THREAD_CACHE -1002 + +#define M_DELAYED_FREE -1003 +#define M_DELAYED_FREE_ENABLE 1 +#define M_DELAYED_FREE_DISABLE 0 + +void *malloc (size_t); +void *calloc (size_t, size_t); +void *realloc (void *, size_t); +void free (void *); +void *valloc (size_t); +void *memalign(size_t, size_t); + +size_t malloc_usable_size(void *); +int mallopt(int param, int value); + +struct mallinfo { + int arena; + int ordblks; + int smblks; + int hblks; + int hblkhd; + int usmblks; + int fsmblks; + int uordblks; + int fordblks; + int keepcost; +}; + +struct mallinfo2 { + size_t arena; + size_t ordblks; + size_t smblks; + size_t hblks; + size_t hblkhd; + size_t usmblks; + size_t fsmblks; + size_t uordblks; + size_t fordblks; + size_t keepcost; +}; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/math.h b/third_party/musl/ndk_musl_include/math.h new file mode 100644 index 0000000000000000000000000000000000000000..ff302aba31f34c6d8cd15f37dd62b3966c91c7a4 --- /dev/null +++ b/third_party/musl/ndk_musl_include/math.h @@ -0,0 +1,435 @@ +#ifndef _MATH_H +#define _MATH_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_float_t +#define __NEED_double_t +#include + +#if 100*__GNUC__+__GNUC_MINOR__ >= 303 +#define NAN __builtin_nanf("") +#define INFINITY __builtin_inff() +#else +#define NAN (0.0f/0.0f) +#define INFINITY 1e5000f +#endif + +#define HUGE_VALF INFINITY +#define HUGE_VAL ((double)INFINITY) +#define HUGE_VALL ((long double)INFINITY) + +#define MATH_ERRNO 1 +#define MATH_ERREXCEPT 2 +#define math_errhandling 2 + +#define FP_ILOGBNAN (-1-0x7fffffff) +#define FP_ILOGB0 FP_ILOGBNAN + +#define FP_NAN 0 +#define FP_INFINITE 1 +#define FP_ZERO 2 +#define FP_SUBNORMAL 3 +#define FP_NORMAL 4 + +#ifdef __FP_FAST_FMA +#define FP_FAST_FMA 1 +#endif + +#ifdef __FP_FAST_FMAF +#define FP_FAST_FMAF 1 +#endif + +#ifdef __FP_FAST_FMAL +#define FP_FAST_FMAL 1 +#endif + +int __fpclassify(double); +int __fpclassifyf(float); +int __fpclassifyl(long double); + +static __inline unsigned __FLOAT_BITS(float __f) +{ + union {float __f; unsigned __i;} __u; + __u.__f = __f; + return __u.__i; +} +static __inline unsigned long long __DOUBLE_BITS(double __f) +{ + union {double __f; unsigned long long __i;} __u; + __u.__f = __f; + return __u.__i; +} + +#define fpclassify(x) ( \ + sizeof(x) == sizeof(float) ? __fpclassifyf(x) : \ + sizeof(x) == sizeof(double) ? __fpclassify(x) : \ + __fpclassifyl(x) ) + +#define isinf(x) ( \ + sizeof(x) == sizeof(float) ? (__FLOAT_BITS(x) & 0x7fffffff) == 0x7f800000 : \ + sizeof(x) == sizeof(double) ? (__DOUBLE_BITS(x) & -1ULL>>1) == 0x7ffULL<<52 : \ + __fpclassifyl(x) == FP_INFINITE) + +#define isnan(x) ( \ + sizeof(x) == sizeof(float) ? (__FLOAT_BITS(x) & 0x7fffffff) > 0x7f800000 : \ + sizeof(x) == sizeof(double) ? (__DOUBLE_BITS(x) & -1ULL>>1) > 0x7ffULL<<52 : \ + __fpclassifyl(x) == FP_NAN) + +#define isnormal(x) ( \ + sizeof(x) == sizeof(float) ? ((__FLOAT_BITS(x)+0x00800000) & 0x7fffffff) >= 0x01000000 : \ + sizeof(x) == sizeof(double) ? ((__DOUBLE_BITS(x)+(1ULL<<52)) & -1ULL>>1) >= 1ULL<<53 : \ + __fpclassifyl(x) == FP_NORMAL) + +#define isfinite(x) ( \ + sizeof(x) == sizeof(float) ? (__FLOAT_BITS(x) & 0x7fffffff) < 0x7f800000 : \ + sizeof(x) == sizeof(double) ? (__DOUBLE_BITS(x) & -1ULL>>1) < 0x7ffULL<<52 : \ + __fpclassifyl(x) > FP_INFINITE) + +int __signbit(double); +int __signbitf(float); +int __signbitl(long double); + +#define signbit(x) ( \ + sizeof(x) == sizeof(float) ? (int)(__FLOAT_BITS(x)>>31) : \ + sizeof(x) == sizeof(double) ? (int)(__DOUBLE_BITS(x)>>63) : \ + __signbitl(x) ) + +#define isunordered(x,y) (isnan((x)) ? ((void)(y),1) : isnan((y))) + +#define __ISREL_DEF(rel, op, type) \ +static __inline int __is##rel(type __x, type __y) \ +{ return !isunordered(__x,__y) && __x op __y; } + +__ISREL_DEF(lessf, <, float_t) +__ISREL_DEF(less, <, double_t) +__ISREL_DEF(lessl, <, long double) +__ISREL_DEF(lessequalf, <=, float_t) +__ISREL_DEF(lessequal, <=, double_t) +__ISREL_DEF(lessequall, <=, long double) +__ISREL_DEF(lessgreaterf, !=, float_t) +__ISREL_DEF(lessgreater, !=, double_t) +__ISREL_DEF(lessgreaterl, !=, long double) +__ISREL_DEF(greaterf, >, float_t) +__ISREL_DEF(greater, >, double_t) +__ISREL_DEF(greaterl, >, long double) +__ISREL_DEF(greaterequalf, >=, float_t) +__ISREL_DEF(greaterequal, >=, double_t) +__ISREL_DEF(greaterequall, >=, long double) + +#define __tg_pred_2(x, y, p) ( \ + sizeof((x)+(y)) == sizeof(float) ? p##f(x, y) : \ + sizeof((x)+(y)) == sizeof(double) ? p(x, y) : \ + p##l(x, y) ) + +#define isless(x, y) __tg_pred_2(x, y, __isless) +#define islessequal(x, y) __tg_pred_2(x, y, __islessequal) +#define islessgreater(x, y) __tg_pred_2(x, y, __islessgreater) +#define isgreater(x, y) __tg_pred_2(x, y, __isgreater) +#define isgreaterequal(x, y) __tg_pred_2(x, y, __isgreaterequal) + +double acos(double); +float acosf(float); +long double acosl(long double); + +double acosh(double); +float acoshf(float); +long double acoshl(long double); + +double asin(double); +float asinf(float); +long double asinl(long double); + +double asinh(double); +float asinhf(float); +long double asinhl(long double); + +double atan(double); +float atanf(float); +long double atanl(long double); + +double atan2(double, double); +float atan2f(float, float); +long double atan2l(long double, long double); + +double atanh(double); +float atanhf(float); +long double atanhl(long double); + +double cbrt(double); +float cbrtf(float); +long double cbrtl(long double); + +double ceil(double); +float ceilf(float); +long double ceill(long double); + +double copysign(double, double); +float copysignf(float, float); +long double copysignl(long double, long double); + +double cos(double); +float cosf(float); +long double cosl(long double); + +double cosh(double); +float coshf(float); +long double coshl(long double); + +double erf(double); +float erff(float); +long double erfl(long double); + +double erfc(double); +float erfcf(float); +long double erfcl(long double); + +double exp(double); +float expf(float); +long double expl(long double); + +double exp2(double); +float exp2f(float); +long double exp2l(long double); + +double expm1(double); +float expm1f(float); +long double expm1l(long double); + +double fabs(double); +float fabsf(float); +long double fabsl(long double); + +double fdim(double, double); +float fdimf(float, float); +long double fdiml(long double, long double); + +double floor(double); +float floorf(float); +long double floorl(long double); + +double fma(double, double, double); +float fmaf(float, float, float); +long double fmal(long double, long double, long double); + +double fmax(double, double); +float fmaxf(float, float); +long double fmaxl(long double, long double); + +double fmin(double, double); +float fminf(float, float); +long double fminl(long double, long double); + +double fmod(double, double); +float fmodf(float, float); +long double fmodl(long double, long double); + +double frexp(double, int *); +float frexpf(float, int *); +long double frexpl(long double, int *); + +double hypot(double, double); +float hypotf(float, float); +long double hypotl(long double, long double); + +int ilogb(double); +int ilogbf(float); +int ilogbl(long double); + +double ldexp(double, int); +float ldexpf(float, int); +long double ldexpl(long double, int); + +double lgamma(double); +float lgammaf(float); +long double lgammal(long double); + +long long llrint(double); +long long llrintf(float); +long long llrintl(long double); + +long long llround(double); +long long llroundf(float); +long long llroundl(long double); + +double log(double); +float logf(float); +long double logl(long double); + +double log10(double); +float log10f(float); +long double log10l(long double); + +double log1p(double); +float log1pf(float); +long double log1pl(long double); + +double log2(double); +float log2f(float); +long double log2l(long double); + +double logb(double); +float logbf(float); +long double logbl(long double); + +long lrint(double); +long lrintf(float); +long lrintl(long double); + +long lround(double); +long lroundf(float); +long lroundl(long double); + +double modf(double, double *); +float modff(float, float *); +long double modfl(long double, long double *); + +double nan(const char *); +float nanf(const char *); +long double nanl(const char *); + +double nearbyint(double); +float nearbyintf(float); +long double nearbyintl(long double); + +double nextafter(double, double); +float nextafterf(float, float); +long double nextafterl(long double, long double); + +double nexttoward(double, long double); +float nexttowardf(float, long double); +long double nexttowardl(long double, long double); + +double pow(double, double); +float powf(float, float); +long double powl(long double, long double); + +double remainder(double, double); +float remainderf(float, float); +long double remainderl(long double, long double); + +double remquo(double, double, int *); +float remquof(float, float, int *); +long double remquol(long double, long double, int *); + +double rint(double); +float rintf(float); +long double rintl(long double); + +double round(double); +float roundf(float); +long double roundl(long double); + +double scalbln(double, long); +float scalblnf(float, long); +long double scalblnl(long double, long); + +double scalbn(double, int); +float scalbnf(float, int); +long double scalbnl(long double, int); + +double sin(double); +float sinf(float); +long double sinl(long double); + +double sinh(double); +float sinhf(float); +long double sinhl(long double); + +double sqrt(double); +float sqrtf(float); +long double sqrtl(long double); + +double tan(double); +float tanf(float); +long double tanl(long double); + +double tanh(double); +float tanhf(float); +long double tanhl(long double); + +double tgamma(double); +float tgammaf(float); +long double tgammal(long double); + +double trunc(double); +float truncf(float); +long double truncl(long double); + + +#if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) +#undef MAXFLOAT +#define MAXFLOAT 3.40282346638528859812e+38F +#endif + +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define M_E 2.7182818284590452354 /* e */ +#define M_LOG2E 1.4426950408889634074 /* log_2 e */ +#define M_LOG10E 0.43429448190325182765 /* log_10 e */ +#define M_LN2 0.69314718055994530942 /* log_e 2 */ +#define M_LN10 2.30258509299404568402 /* log_e 10 */ +#define M_PI 3.14159265358979323846 /* pi */ +#define M_PI_2 1.57079632679489661923 /* pi/2 */ +#define M_PI_4 0.78539816339744830962 /* pi/4 */ +#define M_1_PI 0.31830988618379067154 /* 1/pi */ +#define M_2_PI 0.63661977236758134308 /* 2/pi */ +#define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */ +#define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ +#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ + +extern int signgam; + +double j0(double); +double j1(double); +double jn(int, double); + +double y0(double); +double y1(double); +double yn(int, double); +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define HUGE 3.40282346638528859812e+38F + +double drem(double, double); +float dremf(float, float); + +int finite(double); +int finitef(float); + +double scalb(double, double); +float scalbf(float, float); + +double significand(double); +float significandf(float); + +double lgamma_r(double, int*); +float lgammaf_r(float, int*); + +float j0f(float); +float j1f(float); +float jnf(int, float); + +float y0f(float); +float y1f(float); +float ynf(int, float); +#endif + +#ifdef _GNU_SOURCE +long double lgammal_r(long double, int*); + +void sincos(double, double*, double*); +void sincosf(float, float*, float*); +void sincosl(long double, long double*, long double*); + +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/memory.h b/third_party/musl/ndk_musl_include/memory.h new file mode 100644 index 0000000000000000000000000000000000000000..8e69c1fc0f754fafe7abf0e3e4d0a378a05deb80 --- /dev/null +++ b/third_party/musl/ndk_musl_include/memory.h @@ -0,0 +1 @@ +#include diff --git a/third_party/musl/ndk_musl_include/mntent.h b/third_party/musl/ndk_musl_include/mntent.h new file mode 100644 index 0000000000000000000000000000000000000000..2db4d4f60b70d845c054f2141a085bf09a2b4898 --- /dev/null +++ b/third_party/musl/ndk_musl_include/mntent.h @@ -0,0 +1,42 @@ +#ifndef _MNTENT_H +#define _MNTENT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define __NEED_FILE +#include + +#define MOUNTED "/etc/mtab" + +#define MNTTYPE_IGNORE "ignore" +#define MNTTYPE_NFS "nfs" +#define MNTTYPE_SWAP "swap" +#define MNTOPT_DEFAULTS "defaults" +#define MNTOPT_RO "ro" +#define MNTOPT_RW "rw" +#define MNTOPT_SUID "suid" +#define MNTOPT_NOSUID "nosuid" +#define MNTOPT_NOAUTO "noauto" + +struct mntent { + char *mnt_fsname; + char *mnt_dir; + char *mnt_type; + char *mnt_opts; + int mnt_freq; + int mnt_passno; +}; + +FILE *setmntent(const char *, const char *); +int endmntent(FILE *); +struct mntent *getmntent(FILE *); +struct mntent *getmntent_r(FILE *, struct mntent *, char *, int); +char *hasmntopt(const struct mntent *, const char *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/monetary.h b/third_party/musl/ndk_musl_include/monetary.h new file mode 100644 index 0000000000000000000000000000000000000000..81a453b26fc92473911554fa7f77005a4068bac5 --- /dev/null +++ b/third_party/musl/ndk_musl_include/monetary.h @@ -0,0 +1,20 @@ +#ifndef _MONETARY_H +#define _MONETARY_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_ssize_t +#define __NEED_size_t +#define __NEED_locale_t + +#include + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/mqueue.h b/third_party/musl/ndk_musl_include/mqueue.h new file mode 100644 index 0000000000000000000000000000000000000000..4616f0763d93116a3ebc4bd3c1a9d7bc4ccde730 --- /dev/null +++ b/third_party/musl/ndk_musl_include/mqueue.h @@ -0,0 +1,30 @@ +#ifndef _MQUEUE_H +#define _MQUEUE_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_size_t +#define __NEED_ssize_t +#define __NEED_pthread_attr_t +#define __NEED_time_t +#define __NEED_struct_timespec +#include + +typedef int mqd_t; +struct mq_attr { + long mq_flags, mq_maxmsg, mq_msgsize, mq_curmsgs, __unused[4]; +}; +struct sigevent; + +#if _REDIR_TIME64 +__REDIR(mq_timedreceive, __mq_timedreceive_time64); +__REDIR(mq_timedsend, __mq_timedsend_time64); +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/net/ethernet.h b/third_party/musl/ndk_musl_include/net/ethernet.h new file mode 100644 index 0000000000000000000000000000000000000000..ee2ff536b9986f2c185ab57a364e6df398cfaea8 --- /dev/null +++ b/third_party/musl/ndk_musl_include/net/ethernet.h @@ -0,0 +1,55 @@ +#ifndef _NET_ETHERNET_H +#define _NET_ETHERNET_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +struct ether_addr { + uint8_t ether_addr_octet[ETH_ALEN]; +}; + +struct ether_header { + uint8_t ether_dhost[ETH_ALEN]; + uint8_t ether_shost[ETH_ALEN]; + uint16_t ether_type; +}; + +#define ETHERTYPE_PUP 0x0200 +#define ETHERTYPE_SPRITE 0x0500 +#define ETHERTYPE_IP 0x0800 +#define ETHERTYPE_ARP 0x0806 +#define ETHERTYPE_REVARP 0x8035 +#define ETHERTYPE_AT 0x809B +#define ETHERTYPE_AARP 0x80F3 +#define ETHERTYPE_VLAN 0x8100 +#define ETHERTYPE_IPX 0x8137 +#define ETHERTYPE_IPV6 0x86dd +#define ETHERTYPE_LOOPBACK 0x9000 + + +#define ETHER_ADDR_LEN ETH_ALEN +#define ETHER_TYPE_LEN 2 +#define ETHER_CRC_LEN 4 +#define ETHER_HDR_LEN ETH_HLEN +#define ETHER_MIN_LEN (ETH_ZLEN + ETHER_CRC_LEN) +#define ETHER_MAX_LEN (ETH_FRAME_LEN + ETHER_CRC_LEN) + +#define ETHER_IS_VALID_LEN(foo) \ + ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN) + +#define ETHERTYPE_TRAIL 0x1000 +#define ETHERTYPE_NTRAILER 16 + +#define ETHERMTU ETH_DATA_LEN +#define ETHERMIN (ETHER_MIN_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/net/if.h b/third_party/musl/ndk_musl_include/net/if.h new file mode 100644 index 0000000000000000000000000000000000000000..ff991d4e871c4ad96e18436045db65e6e55e07f1 --- /dev/null +++ b/third_party/musl/ndk_musl_include/net/if.h @@ -0,0 +1,141 @@ +#ifndef _NET_IF_H +#define _NET_IF_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define IF_NAMESIZE 16 + +struct if_nameindex { + unsigned int if_index; + char *if_name; +}; + +unsigned int if_nametoindex (const char *); +char *if_indextoname (unsigned int, char *); +struct if_nameindex *if_nameindex (void); +void if_freenameindex (struct if_nameindex *); + + + + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) + +#include + +#define IFF_UP 0x1 +#define IFF_BROADCAST 0x2 +#define IFF_DEBUG 0x4 +#define IFF_LOOPBACK 0x8 +#define IFF_POINTOPOINT 0x10 +#define IFF_NOTRAILERS 0x20 +#define IFF_RUNNING 0x40 +#define IFF_NOARP 0x80 +#define IFF_PROMISC 0x100 +#define IFF_ALLMULTI 0x200 +#define IFF_MASTER 0x400 +#define IFF_SLAVE 0x800 +#define IFF_MULTICAST 0x1000 +#define IFF_PORTSEL 0x2000 +#define IFF_AUTOMEDIA 0x4000 +#define IFF_DYNAMIC 0x8000 +#define IFF_LOWER_UP 0x10000 +#define IFF_DORMANT 0x20000 +#define IFF_ECHO 0x40000 +#define IFF_VOLATILE (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST| \ + IFF_ECHO|IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT) + +struct ifaddr { + struct sockaddr ifa_addr; + union { + struct sockaddr ifu_broadaddr; + struct sockaddr ifu_dstaddr; + } ifa_ifu; + struct iface *ifa_ifp; + struct ifaddr *ifa_next; +}; + +#define ifa_broadaddr ifa_ifu.ifu_broadaddr +#define ifa_dstaddr ifa_ifu.ifu_dstaddr + +struct ifmap { + unsigned long int mem_start; + unsigned long int mem_end; + unsigned short int base_addr; + unsigned char irq; + unsigned char dma; + unsigned char port; +}; + +#define IFHWADDRLEN 6 +#define IFNAMSIZ IF_NAMESIZE + +struct ifreq { + union { + char ifrn_name[IFNAMSIZ]; + } ifr_ifrn; + union { + struct sockaddr ifru_addr; + struct sockaddr ifru_dstaddr; + struct sockaddr ifru_broadaddr; + struct sockaddr ifru_netmask; + struct sockaddr ifru_hwaddr; + short int ifru_flags; + int ifru_ivalue; + int ifru_mtu; + struct ifmap ifru_map; + char ifru_slave[IFNAMSIZ]; + char ifru_newname[IFNAMSIZ]; + char *ifru_data; + } ifr_ifru; +}; + +#define ifr_name ifr_ifrn.ifrn_name +#define ifr_hwaddr ifr_ifru.ifru_hwaddr +#define ifr_addr ifr_ifru.ifru_addr +#define ifr_dstaddr ifr_ifru.ifru_dstaddr +#define ifr_broadaddr ifr_ifru.ifru_broadaddr +#define ifr_netmask ifr_ifru.ifru_netmask +#define ifr_flags ifr_ifru.ifru_flags +#define ifr_metric ifr_ifru.ifru_ivalue +#define ifr_mtu ifr_ifru.ifru_mtu +#define ifr_map ifr_ifru.ifru_map +#define ifr_slave ifr_ifru.ifru_slave +#define ifr_data ifr_ifru.ifru_data +#define ifr_ifindex ifr_ifru.ifru_ivalue +#define ifr_bandwidth ifr_ifru.ifru_ivalue +#define ifr_qlen ifr_ifru.ifru_ivalue +#define ifr_newname ifr_ifru.ifru_newname +#define _IOT_ifreq _IOT(_IOTS(char),IFNAMSIZ,_IOTS(char),16,0,0) +#define _IOT_ifreq_short _IOT(_IOTS(char),IFNAMSIZ,_IOTS(short),1,0,0) +#define _IOT_ifreq_int _IOT(_IOTS(char),IFNAMSIZ,_IOTS(int),1,0,0) + +struct ifconf { + int ifc_len; + union { + char *ifcu_buf; + struct ifreq *ifcu_req; + } ifc_ifcu; +}; + +#define ifc_buf ifc_ifcu.ifcu_buf +#define ifc_req ifc_ifcu.ifcu_req +#define _IOT_ifconf _IOT(_IOTS(struct ifconf),1,0,0,0,0) + +#define __UAPI_DEF_IF_IFCONF 0 +#define __UAPI_DEF_IF_IFMAP 0 +#define __UAPI_DEF_IF_IFNAMSIZ 0 +#define __UAPI_DEF_IF_IFREQ 0 +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS 0 +#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 0 + +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/net/if_arp.h b/third_party/musl/ndk_musl_include/net/if_arp.h new file mode 100644 index 0000000000000000000000000000000000000000..f7ba942f9562d2a07329c7ae857a96b90c7539ff --- /dev/null +++ b/third_party/musl/ndk_musl_include/net/if_arp.h @@ -0,0 +1,142 @@ +/* Nonstandard header */ +#ifndef _NET_IF_ARP_H +#define _NET_IF_ARP_H +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#define MAX_ADDR_LEN 7 + +#define ARPOP_REQUEST 1 +#define ARPOP_REPLY 2 +#define ARPOP_RREQUEST 3 +#define ARPOP_RREPLY 4 +#define ARPOP_InREQUEST 8 +#define ARPOP_InREPLY 9 +#define ARPOP_NAK 10 + +struct arphdr { + uint16_t ar_hrd; + uint16_t ar_pro; + uint8_t ar_hln; + uint8_t ar_pln; + uint16_t ar_op; +}; + + +#define ARPHRD_NETROM 0 +#define ARPHRD_ETHER 1 +#define ARPHRD_EETHER 2 +#define ARPHRD_AX25 3 +#define ARPHRD_PRONET 4 +#define ARPHRD_CHAOS 5 +#define ARPHRD_IEEE802 6 +#define ARPHRD_ARCNET 7 +#define ARPHRD_APPLETLK 8 +#define ARPHRD_DLCI 15 +#define ARPHRD_ATM 19 +#define ARPHRD_METRICOM 23 +#define ARPHRD_IEEE1394 24 +#define ARPHRD_EUI64 27 +#define ARPHRD_INFINIBAND 32 +#define ARPHRD_SLIP 256 +#define ARPHRD_CSLIP 257 +#define ARPHRD_SLIP6 258 +#define ARPHRD_CSLIP6 259 +#define ARPHRD_RSRVD 260 +#define ARPHRD_ADAPT 264 +#define ARPHRD_ROSE 270 +#define ARPHRD_X25 271 +#define ARPHRD_HWX25 272 +#define ARPHRD_CAN 280 +#define ARPHRD_PPP 512 +#define ARPHRD_CISCO 513 +#define ARPHRD_HDLC ARPHRD_CISCO +#define ARPHRD_LAPB 516 +#define ARPHRD_DDCMP 517 +#define ARPHRD_RAWHDLC 518 +#define ARPHRD_RAWIP 519 + +#define ARPHRD_TUNNEL 768 +#define ARPHRD_TUNNEL6 769 +#define ARPHRD_FRAD 770 +#define ARPHRD_SKIP 771 +#define ARPHRD_LOOPBACK 772 +#define ARPHRD_LOCALTLK 773 +#define ARPHRD_FDDI 774 +#define ARPHRD_BIF 775 +#define ARPHRD_SIT 776 +#define ARPHRD_IPDDP 777 +#define ARPHRD_IPGRE 778 +#define ARPHRD_PIMREG 779 +#define ARPHRD_HIPPI 780 +#define ARPHRD_ASH 781 +#define ARPHRD_ECONET 782 +#define ARPHRD_IRDA 783 +#define ARPHRD_FCPP 784 +#define ARPHRD_FCAL 785 +#define ARPHRD_FCPL 786 +#define ARPHRD_FCFABRIC 787 +#define ARPHRD_IEEE802_TR 800 +#define ARPHRD_IEEE80211 801 +#define ARPHRD_IEEE80211_PRISM 802 +#define ARPHRD_IEEE80211_RADIOTAP 803 +#define ARPHRD_IEEE802154 804 +#define ARPHRD_IEEE802154_MONITOR 805 +#define ARPHRD_PHONET 820 +#define ARPHRD_PHONET_PIPE 821 +#define ARPHRD_CAIF 822 +#define ARPHRD_IP6GRE 823 +#define ARPHRD_NETLINK 824 +#define ARPHRD_6LOWPAN 825 +#define ARPHRD_VSOCKMON 826 + +#define ARPHRD_VOID 0xFFFF +#define ARPHRD_NONE 0xFFFE + +struct arpreq { + struct sockaddr arp_pa; + struct sockaddr arp_ha; + int arp_flags; + struct sockaddr arp_netmask; + char arp_dev[16]; +}; + +struct arpreq_old { + struct sockaddr arp_pa; + struct sockaddr arp_ha; + int arp_flags; + struct sockaddr arp_netmask; +}; + +#define ATF_COM 0x02 +#define ATF_PERM 0x04 +#define ATF_PUBL 0x08 +#define ATF_USETRAILERS 0x10 +#define ATF_NETMASK 0x20 +#define ATF_DONTPUB 0x40 +#define ATF_MAGIC 0x80 + +#define ARPD_UPDATE 0x01 +#define ARPD_LOOKUP 0x02 +#define ARPD_FLUSH 0x03 + +struct arpd_request { + unsigned short req; + uint32_t ip; + unsigned long dev; + unsigned long stamp; + unsigned long updated; + unsigned char ha[MAX_ADDR_LEN]; +}; + + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/net/route.h b/third_party/musl/ndk_musl_include/net/route.h new file mode 100644 index 0000000000000000000000000000000000000000..0ba5b5850c384f9360c8419de2ccaa91a33b7d09 --- /dev/null +++ b/third_party/musl/ndk_musl_include/net/route.h @@ -0,0 +1,124 @@ +#ifndef _NET_ROUTE_H +#define _NET_ROUTE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include + + +struct rtentry { + unsigned long int rt_pad1; + struct sockaddr rt_dst; + struct sockaddr rt_gateway; + struct sockaddr rt_genmask; + unsigned short int rt_flags; + short int rt_pad2; + unsigned long int rt_pad3; + unsigned char rt_tos; + unsigned char rt_class; + short int rt_pad4[sizeof(long)/2-1]; + short int rt_metric; + char *rt_dev; + unsigned long int rt_mtu; + unsigned long int rt_window; + unsigned short int rt_irtt; +}; + +#define rt_mss rt_mtu + + +struct in6_rtmsg { + struct in6_addr rtmsg_dst; + struct in6_addr rtmsg_src; + struct in6_addr rtmsg_gateway; + uint32_t rtmsg_type; + uint16_t rtmsg_dst_len; + uint16_t rtmsg_src_len; + uint32_t rtmsg_metric; + unsigned long int rtmsg_info; + uint32_t rtmsg_flags; + int rtmsg_ifindex; +}; + + +#define RTF_UP 0x0001 +#define RTF_GATEWAY 0x0002 + +#define RTF_HOST 0x0004 +#define RTF_REINSTATE 0x0008 +#define RTF_DYNAMIC 0x0010 +#define RTF_MODIFIED 0x0020 +#define RTF_MTU 0x0040 +#define RTF_MSS RTF_MTU +#define RTF_WINDOW 0x0080 +#define RTF_IRTT 0x0100 +#define RTF_REJECT 0x0200 +#define RTF_STATIC 0x0400 +#define RTF_XRESOLVE 0x0800 +#define RTF_NOFORWARD 0x1000 +#define RTF_THROW 0x2000 +#define RTF_NOPMTUDISC 0x4000 + +#define RTF_DEFAULT 0x00010000 +#define RTF_ALLONLINK 0x00020000 +#define RTF_ADDRCONF 0x00040000 + +#define RTF_LINKRT 0x00100000 +#define RTF_NONEXTHOP 0x00200000 + +#define RTF_CACHE 0x01000000 +#define RTF_FLOW 0x02000000 +#define RTF_POLICY 0x04000000 + +#define RTCF_VALVE 0x00200000 +#define RTCF_MASQ 0x00400000 +#define RTCF_NAT 0x00800000 +#define RTCF_DOREDIRECT 0x01000000 +#define RTCF_LOG 0x02000000 +#define RTCF_DIRECTSRC 0x04000000 + +#define RTF_LOCAL 0x80000000 +#define RTF_INTERFACE 0x40000000 +#define RTF_MULTICAST 0x20000000 +#define RTF_BROADCAST 0x10000000 +#define RTF_NAT 0x08000000 + +#define RTF_ADDRCLASSMASK 0xF8000000 +#define RT_ADDRCLASS(flags) ((uint32_t) flags >> 23) + +#define RT_TOS(tos) ((tos) & IPTOS_TOS_MASK) + +#define RT_LOCALADDR(flags) ((flags & RTF_ADDRCLASSMASK) \ + == (RTF_LOCAL|RTF_INTERFACE)) + +#define RT_CLASS_UNSPEC 0 +#define RT_CLASS_DEFAULT 253 + +#define RT_CLASS_MAIN 254 +#define RT_CLASS_LOCAL 255 +#define RT_CLASS_MAX 255 + + +#define RTMSG_ACK NLMSG_ACK +#define RTMSG_OVERRUN NLMSG_OVERRUN + +#define RTMSG_NEWDEVICE 0x11 +#define RTMSG_DELDEVICE 0x12 +#define RTMSG_NEWROUTE 0x21 +#define RTMSG_DELROUTE 0x22 +#define RTMSG_NEWRULE 0x31 +#define RTMSG_DELRULE 0x32 +#define RTMSG_CONTROL 0x40 + +#define RTMSG_AR_FAILED 0x51 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/netdb.h b/third_party/musl/ndk_musl_include/netdb.h new file mode 100644 index 0000000000000000000000000000000000000000..d1aa2a572999346ad1fff50b6cb034e4e16de86a --- /dev/null +++ b/third_party/musl/ndk_musl_include/netdb.h @@ -0,0 +1,154 @@ +#ifndef _NETDB_H +#define _NETDB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define __NEED_size_t +#include +#endif + +struct addrinfo { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + socklen_t ai_addrlen; + struct sockaddr *ai_addr; + char *ai_canonname; + struct addrinfo *ai_next; +}; + +#define AI_PASSIVE 0x01 +#define AI_CANONNAME 0x02 +#define AI_NUMERICHOST 0x04 +#define AI_V4MAPPED 0x08 +#define AI_ALL 0x10 +#define AI_ADDRCONFIG 0x20 +#define AI_NUMERICSERV 0x400 + + +#define NI_NUMERICHOST 0x01 +#define NI_NUMERICSERV 0x02 +#define NI_NOFQDN 0x04 +#define NI_NAMEREQD 0x08 +#define NI_DGRAM 0x10 +#define NI_NUMERICSCOPE 0x100 + +#define EAI_BADFLAGS -1 +#define EAI_NONAME -2 +#define EAI_AGAIN -3 +#define EAI_FAIL -4 +#define EAI_FAMILY -6 +#define EAI_SOCKTYPE -7 +#define EAI_SERVICE -8 +#define EAI_MEMORY -10 +#define EAI_SYSTEM -11 +#define EAI_OVERFLOW -12 + +int getaddrinfo (const char *__restrict, const char *__restrict, const struct addrinfo *__restrict, struct addrinfo **__restrict); +void freeaddrinfo (struct addrinfo *); +int getnameinfo (const struct sockaddr *__restrict, socklen_t, char *__restrict, socklen_t, char *__restrict, socklen_t, int); +const char *gai_strerror(int); + + +/* Legacy functions follow (marked OBsolete in SUS) */ + +struct netent { + char *n_name; + char **n_aliases; + int n_addrtype; + uint32_t n_net; +}; + +struct hostent { + char *h_name; + char **h_aliases; + int h_addrtype; + int h_length; + char **h_addr_list; +}; +#define h_addr h_addr_list[0] + +struct servent { + char *s_name; + char **s_aliases; + int s_port; + char *s_proto; +}; + +struct protoent { + char *p_name; + char **p_aliases; + int p_proto; +}; + +void sethostent (int); +void endhostent (void); +struct hostent *gethostent (void); + +void setnetent (int); +void endnetent (void); +struct netent *getnetent (void); +struct netent *getnetbyaddr (uint32_t, int); +struct netent *getnetbyname (const char *); + +void setservent (int); +void endservent (void); +struct servent *getservent (void); +struct servent *getservbyname (const char *, const char *); +struct servent *getservbyport (int, const char *); + +void setprotoent (int); +void endprotoent (void); +struct protoent *getprotoent (void); +struct protoent *getprotobyname (const char *); +struct protoent *getprotobynumber (int); + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_POSIX_SOURCE) \ + || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE+0 < 200809L) \ + || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE+0 < 700) +struct hostent *gethostbyname (const char *); +struct hostent *gethostbyaddr (const void *, socklen_t, int); +#ifdef __GNUC__ +__attribute__((const)) +#endif +int *__h_errno_location(void); +#define h_errno (*__h_errno_location()) +#define HOST_NOT_FOUND 1 +#define TRY_AGAIN 2 +#define NO_RECOVERY 3 +#define NO_DATA 4 +#define NO_ADDRESS NO_DATA +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +void herror(const char *); +const char *hstrerror(int); +int gethostbyname_r(const char *, struct hostent *, char *, size_t, struct hostent **, int *); +int gethostbyname2_r(const char *, int, struct hostent *, char *, size_t, struct hostent **, int *); +struct hostent *gethostbyname2(const char *, int); +int gethostbyaddr_r(const void *, socklen_t, int, struct hostent *, char *, size_t, struct hostent **, int *); +#define EAI_NODATA -5 +#define EAI_ADDRFAMILY -9 +#define EAI_INPROGRESS -100 +#define EAI_CANCELED -101 +#define EAI_NOTCANCELED -102 +#define EAI_ALLDONE -103 +#define EAI_INTR -104 +#define EAI_IDN_ENCODE -105 +#define NI_MAXHOST 255 +#define NI_MAXSERV 32 +#endif + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/netinet/ether.h b/third_party/musl/ndk_musl_include/netinet/ether.h new file mode 100644 index 0000000000000000000000000000000000000000..94c7c4368c60f802a430f1d635e3b3feb4ada2f2 --- /dev/null +++ b/third_party/musl/ndk_musl_include/netinet/ether.h @@ -0,0 +1,19 @@ +#ifndef _NETINET_ETHER_H +#define _NETINET_ETHER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +char *ether_ntoa (const struct ether_addr *); +struct ether_addr *ether_aton (const char *); +char *ether_ntoa_r (const struct ether_addr *, char *); +struct ether_addr *ether_aton_r (const char *, struct ether_addr *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/netinet/icmp6.h b/third_party/musl/ndk_musl_include/netinet/icmp6.h new file mode 100644 index 0000000000000000000000000000000000000000..cea16c32c34f96364540027b190588e07006c086 --- /dev/null +++ b/third_party/musl/ndk_musl_include/netinet/icmp6.h @@ -0,0 +1,305 @@ +#ifndef _NETINET_ICMP6_H +#define _NETINET_ICMP6_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include + +#define ICMP6_FILTER 1 + +#define ICMP6_FILTER_BLOCK 1 +#define ICMP6_FILTER_PASS 2 +#define ICMP6_FILTER_BLOCKOTHERS 3 +#define ICMP6_FILTER_PASSONLY 4 + +struct icmp6_filter { + uint32_t icmp6_filt[8]; +}; + +struct icmp6_hdr { + uint8_t icmp6_type; + uint8_t icmp6_code; + uint16_t icmp6_cksum; + union { + uint32_t icmp6_un_data32[1]; + uint16_t icmp6_un_data16[2]; + uint8_t icmp6_un_data8[4]; + } icmp6_dataun; +}; + +#define icmp6_data32 icmp6_dataun.icmp6_un_data32 +#define icmp6_data16 icmp6_dataun.icmp6_un_data16 +#define icmp6_data8 icmp6_dataun.icmp6_un_data8 +#define icmp6_pptr icmp6_data32[0] +#define icmp6_mtu icmp6_data32[0] +#define icmp6_id icmp6_data16[0] +#define icmp6_seq icmp6_data16[1] +#define icmp6_maxdelay icmp6_data16[0] + +#define ICMP6_DST_UNREACH 1 +#define ICMP6_PACKET_TOO_BIG 2 +#define ICMP6_TIME_EXCEEDED 3 +#define ICMP6_PARAM_PROB 4 + +#define ICMP6_INFOMSG_MASK 0x80 + +#define ICMP6_ECHO_REQUEST 128 +#define ICMP6_ECHO_REPLY 129 +#define MLD_LISTENER_QUERY 130 +#define MLD_LISTENER_REPORT 131 +#define MLD_LISTENER_REDUCTION 132 + +#define ICMP6_DST_UNREACH_NOROUTE 0 +#define ICMP6_DST_UNREACH_ADMIN 1 +#define ICMP6_DST_UNREACH_BEYONDSCOPE 2 +#define ICMP6_DST_UNREACH_ADDR 3 +#define ICMP6_DST_UNREACH_NOPORT 4 + +#define ICMP6_TIME_EXCEED_TRANSIT 0 +#define ICMP6_TIME_EXCEED_REASSEMBLY 1 + +#define ICMP6_PARAMPROB_HEADER 0 +#define ICMP6_PARAMPROB_NEXTHEADER 1 +#define ICMP6_PARAMPROB_OPTION 2 + +#define ICMP6_FILTER_WILLPASS(type, filterp) \ + ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) == 0) + +#define ICMP6_FILTER_WILLBLOCK(type, filterp) \ + ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) != 0) + +#define ICMP6_FILTER_SETPASS(type, filterp) \ + ((((filterp)->icmp6_filt[(type) >> 5]) &= ~(1 << ((type) & 31)))) + +#define ICMP6_FILTER_SETBLOCK(type, filterp) \ + ((((filterp)->icmp6_filt[(type) >> 5]) |= (1 << ((type) & 31)))) + +#define ICMP6_FILTER_SETPASSALL(filterp) \ + memset (filterp, 0, sizeof (struct icmp6_filter)); + +#define ICMP6_FILTER_SETBLOCKALL(filterp) \ + memset (filterp, 0xFF, sizeof (struct icmp6_filter)); + +#define ND_ROUTER_SOLICIT 133 +#define ND_ROUTER_ADVERT 134 +#define ND_NEIGHBOR_SOLICIT 135 +#define ND_NEIGHBOR_ADVERT 136 +#define ND_REDIRECT 137 + +struct nd_router_solicit { + struct icmp6_hdr nd_rs_hdr; +}; + +#define nd_rs_type nd_rs_hdr.icmp6_type +#define nd_rs_code nd_rs_hdr.icmp6_code +#define nd_rs_cksum nd_rs_hdr.icmp6_cksum +#define nd_rs_reserved nd_rs_hdr.icmp6_data32[0] + +struct nd_router_advert { + struct icmp6_hdr nd_ra_hdr; + uint32_t nd_ra_reachable; + uint32_t nd_ra_retransmit; +}; + +#define nd_ra_type nd_ra_hdr.icmp6_type +#define nd_ra_code nd_ra_hdr.icmp6_code +#define nd_ra_cksum nd_ra_hdr.icmp6_cksum +#define nd_ra_curhoplimit nd_ra_hdr.icmp6_data8[0] +#define nd_ra_flags_reserved nd_ra_hdr.icmp6_data8[1] +#define ND_RA_FLAG_MANAGED 0x80 +#define ND_RA_FLAG_OTHER 0x40 +#define ND_RA_FLAG_HOME_AGENT 0x20 +#define nd_ra_router_lifetime nd_ra_hdr.icmp6_data16[1] + +struct nd_neighbor_solicit { + struct icmp6_hdr nd_ns_hdr; + struct in6_addr nd_ns_target; +}; + +#define nd_ns_type nd_ns_hdr.icmp6_type +#define nd_ns_code nd_ns_hdr.icmp6_code +#define nd_ns_cksum nd_ns_hdr.icmp6_cksum +#define nd_ns_reserved nd_ns_hdr.icmp6_data32[0] + +struct nd_neighbor_advert { + struct icmp6_hdr nd_na_hdr; + struct in6_addr nd_na_target; +}; + +#define nd_na_type nd_na_hdr.icmp6_type +#define nd_na_code nd_na_hdr.icmp6_code +#define nd_na_cksum nd_na_hdr.icmp6_cksum +#define nd_na_flags_reserved nd_na_hdr.icmp6_data32[0] +#if __BYTE_ORDER == __BIG_ENDIAN +#define ND_NA_FLAG_ROUTER 0x80000000 +#define ND_NA_FLAG_SOLICITED 0x40000000 +#define ND_NA_FLAG_OVERRIDE 0x20000000 +#else +#define ND_NA_FLAG_ROUTER 0x00000080 +#define ND_NA_FLAG_SOLICITED 0x00000040 +#define ND_NA_FLAG_OVERRIDE 0x00000020 +#endif + +struct nd_redirect { + struct icmp6_hdr nd_rd_hdr; + struct in6_addr nd_rd_target; + struct in6_addr nd_rd_dst; +}; + +#define nd_rd_type nd_rd_hdr.icmp6_type +#define nd_rd_code nd_rd_hdr.icmp6_code +#define nd_rd_cksum nd_rd_hdr.icmp6_cksum +#define nd_rd_reserved nd_rd_hdr.icmp6_data32[0] + +struct nd_opt_hdr { + uint8_t nd_opt_type; + uint8_t nd_opt_len; +}; + +#define ND_OPT_SOURCE_LINKADDR 1 +#define ND_OPT_TARGET_LINKADDR 2 +#define ND_OPT_PREFIX_INFORMATION 3 +#define ND_OPT_REDIRECTED_HEADER 4 +#define ND_OPT_MTU 5 +#define ND_OPT_RTR_ADV_INTERVAL 7 +#define ND_OPT_HOME_AGENT_INFO 8 + +struct nd_opt_prefix_info { + uint8_t nd_opt_pi_type; + uint8_t nd_opt_pi_len; + uint8_t nd_opt_pi_prefix_len; + uint8_t nd_opt_pi_flags_reserved; + uint32_t nd_opt_pi_valid_time; + uint32_t nd_opt_pi_preferred_time; + uint32_t nd_opt_pi_reserved2; + struct in6_addr nd_opt_pi_prefix; +}; + +#define ND_OPT_PI_FLAG_ONLINK 0x80 +#define ND_OPT_PI_FLAG_AUTO 0x40 +#define ND_OPT_PI_FLAG_RADDR 0x20 + +struct nd_opt_rd_hdr { + uint8_t nd_opt_rh_type; + uint8_t nd_opt_rh_len; + uint16_t nd_opt_rh_reserved1; + uint32_t nd_opt_rh_reserved2; +}; + +struct nd_opt_mtu { + uint8_t nd_opt_mtu_type; + uint8_t nd_opt_mtu_len; + uint16_t nd_opt_mtu_reserved; + uint32_t nd_opt_mtu_mtu; +}; + +struct mld_hdr { + struct icmp6_hdr mld_icmp6_hdr; + struct in6_addr mld_addr; +}; + +#define mld_type mld_icmp6_hdr.icmp6_type +#define mld_code mld_icmp6_hdr.icmp6_code +#define mld_cksum mld_icmp6_hdr.icmp6_cksum +#define mld_maxdelay mld_icmp6_hdr.icmp6_data16[0] +#define mld_reserved mld_icmp6_hdr.icmp6_data16[1] + +#define ICMP6_ROUTER_RENUMBERING 138 + +struct icmp6_router_renum { + struct icmp6_hdr rr_hdr; + uint8_t rr_segnum; + uint8_t rr_flags; + uint16_t rr_maxdelay; + uint32_t rr_reserved; +}; + +#define rr_type rr_hdr.icmp6_type +#define rr_code rr_hdr.icmp6_code +#define rr_cksum rr_hdr.icmp6_cksum +#define rr_seqnum rr_hdr.icmp6_data32[0] + +#define ICMP6_RR_FLAGS_TEST 0x80 +#define ICMP6_RR_FLAGS_REQRESULT 0x40 +#define ICMP6_RR_FLAGS_FORCEAPPLY 0x20 +#define ICMP6_RR_FLAGS_SPECSITE 0x10 +#define ICMP6_RR_FLAGS_PREVDONE 0x08 + +struct rr_pco_match { + uint8_t rpm_code; + uint8_t rpm_len; + uint8_t rpm_ordinal; + uint8_t rpm_matchlen; + uint8_t rpm_minlen; + uint8_t rpm_maxlen; + uint16_t rpm_reserved; + struct in6_addr rpm_prefix; +}; + +#define RPM_PCO_ADD 1 +#define RPM_PCO_CHANGE 2 +#define RPM_PCO_SETGLOBAL 3 + +struct rr_pco_use { + uint8_t rpu_uselen; + uint8_t rpu_keeplen; + uint8_t rpu_ramask; + uint8_t rpu_raflags; + uint32_t rpu_vltime; + uint32_t rpu_pltime; + uint32_t rpu_flags; + struct in6_addr rpu_prefix; +}; + +#define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK 0x20 +#define ICMP6_RR_PCOUSE_RAFLAGS_AUTO 0x10 + +#if __BYTE_ORDER == __BIG_ENDIAN +#define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80000000 +#define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40000000 +#else +#define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80 +#define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40 +#endif + +struct rr_result { + uint16_t rrr_flags; + uint8_t rrr_ordinal; + uint8_t rrr_matchedlen; + uint32_t rrr_ifid; + struct in6_addr rrr_prefix; +}; + +#if __BYTE_ORDER == __BIG_ENDIAN +#define ICMP6_RR_RESULT_FLAGS_OOB 0x0002 +#define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0001 +#else +#define ICMP6_RR_RESULT_FLAGS_OOB 0x0200 +#define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0100 +#endif + +struct nd_opt_adv_interval { + uint8_t nd_opt_adv_interval_type; + uint8_t nd_opt_adv_interval_len; + uint16_t nd_opt_adv_interval_reserved; + uint32_t nd_opt_adv_interval_ival; +}; + +struct nd_opt_home_agent_info { + uint8_t nd_opt_home_agent_info_type; + uint8_t nd_opt_home_agent_info_len; + uint16_t nd_opt_home_agent_info_reserved; + uint16_t nd_opt_home_agent_info_preference; + uint16_t nd_opt_home_agent_info_lifetime; +}; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/netinet/if_ether.h b/third_party/musl/ndk_musl_include/netinet/if_ether.h new file mode 100644 index 0000000000000000000000000000000000000000..930dbf751be6f45edfcf0d5e96ef9e817efc283c --- /dev/null +++ b/third_party/musl/ndk_musl_include/netinet/if_ether.h @@ -0,0 +1,147 @@ +#ifndef _NETINET_IF_ETHER_H +#define _NETINET_IF_ETHER_H + +#include +#include + +#define ETH_ALEN 6 +#define ETH_TLEN 2 +#define ETH_HLEN 14 +#define ETH_ZLEN 60 +#define ETH_DATA_LEN 1500 +#define ETH_FRAME_LEN 1514 +#define ETH_FCS_LEN 4 +#define ETH_MIN_MTU 68 +#define ETH_MAX_MTU 0xFFFFU + +#define ETH_P_LOOP 0x0060 +#define ETH_P_PUP 0x0200 +#define ETH_P_PUPAT 0x0201 +#define ETH_P_TSN 0x22F0 +#define ETH_P_ERSPAN2 0x22EB +#define ETH_P_IP 0x0800 +#define ETH_P_X25 0x0805 +#define ETH_P_ARP 0x0806 +#define ETH_P_BPQ 0x08FF +#define ETH_P_IEEEPUP 0x0a00 +#define ETH_P_IEEEPUPAT 0x0a01 +#define ETH_P_BATMAN 0x4305 +#define ETH_P_DEC 0x6000 +#define ETH_P_DNA_DL 0x6001 +#define ETH_P_DNA_RC 0x6002 +#define ETH_P_DNA_RT 0x6003 +#define ETH_P_LAT 0x6004 +#define ETH_P_DIAG 0x6005 +#define ETH_P_CUST 0x6006 +#define ETH_P_SCA 0x6007 +#define ETH_P_TEB 0x6558 +#define ETH_P_RARP 0x8035 +#define ETH_P_ATALK 0x809B +#define ETH_P_AARP 0x80F3 +#define ETH_P_8021Q 0x8100 +#define ETH_P_IPX 0x8137 +#define ETH_P_IPV6 0x86DD +#define ETH_P_PAUSE 0x8808 +#define ETH_P_SLOW 0x8809 +#define ETH_P_WCCP 0x883E +#define ETH_P_MPLS_UC 0x8847 +#define ETH_P_MPLS_MC 0x8848 +#define ETH_P_ATMMPOA 0x884c +#define ETH_P_PPP_DISC 0x8863 +#define ETH_P_PPP_SES 0x8864 +#define ETH_P_LINK_CTL 0x886c +#define ETH_P_ATMFATE 0x8884 +#define ETH_P_PAE 0x888E +#define ETH_P_AOE 0x88A2 +#define ETH_P_8021AD 0x88A8 +#define ETH_P_802_EX1 0x88B5 +#define ETH_P_ERSPAN 0x88BE +#define ETH_P_PREAUTH 0x88C7 +#define ETH_P_TIPC 0x88CA +#define ETH_P_LLDP 0x88CC +#define ETH_P_MACSEC 0x88E5 +#define ETH_P_8021AH 0x88E7 +#define ETH_P_MVRP 0x88F5 +#define ETH_P_1588 0x88F7 +#define ETH_P_NCSI 0x88F8 +#define ETH_P_PRP 0x88FB +#define ETH_P_FCOE 0x8906 +#define ETH_P_TDLS 0x890D +#define ETH_P_FIP 0x8914 +#define ETH_P_IBOE 0x8915 +#define ETH_P_80221 0x8917 +#define ETH_P_HSR 0x892F +#define ETH_P_NSH 0x894F +#define ETH_P_LOOPBACK 0x9000 +#define ETH_P_QINQ1 0x9100 +#define ETH_P_QINQ2 0x9200 +#define ETH_P_QINQ3 0x9300 +#define ETH_P_EDSA 0xDADA +#define ETH_P_DSA_8021Q 0xDADB +#define ETH_P_IFE 0xED3E +#define ETH_P_AF_IUCV 0xFBFB + +#define ETH_P_802_3_MIN 0x0600 + +#define ETH_P_802_3 0x0001 +#define ETH_P_AX25 0x0002 +#define ETH_P_ALL 0x0003 +#define ETH_P_802_2 0x0004 +#define ETH_P_SNAP 0x0005 +#define ETH_P_DDCMP 0x0006 +#define ETH_P_WAN_PPP 0x0007 +#define ETH_P_PPP_MP 0x0008 +#define ETH_P_LOCALTALK 0x0009 +#define ETH_P_CAN 0x000C +#define ETH_P_CANFD 0x000D +#define ETH_P_PPPTALK 0x0010 +#define ETH_P_TR_802_2 0x0011 +#define ETH_P_MOBITEX 0x0015 +#define ETH_P_CONTROL 0x0016 +#define ETH_P_IRDA 0x0017 +#define ETH_P_ECONET 0x0018 +#define ETH_P_HDLC 0x0019 +#define ETH_P_ARCNET 0x001A +#define ETH_P_DSA 0x001B +#define ETH_P_TRAILER 0x001C +#define ETH_P_PHONET 0x00F5 +#define ETH_P_IEEE802154 0x00F6 +#define ETH_P_CAIF 0x00F7 +#define ETH_P_XDSA 0x00F8 +#define ETH_P_MAP 0x00F9 + +struct ethhdr { + uint8_t h_dest[ETH_ALEN]; + uint8_t h_source[ETH_ALEN]; + uint16_t h_proto; +}; + +#include +#include + +struct ether_arp { + struct arphdr ea_hdr; + uint8_t arp_sha[ETH_ALEN]; + uint8_t arp_spa[4]; + uint8_t arp_tha[ETH_ALEN]; + uint8_t arp_tpa[4]; +}; +#define arp_hrd ea_hdr.ar_hrd +#define arp_pro ea_hdr.ar_pro +#define arp_hln ea_hdr.ar_hln +#define arp_pln ea_hdr.ar_pln +#define arp_op ea_hdr.ar_op + +#define ETHER_MAP_IP_MULTICAST(ipaddr, enaddr) \ +do { \ + (enaddr)[0] = 0x01; \ + (enaddr)[1] = 0x00; \ + (enaddr)[2] = 0x5e; \ + (enaddr)[3] = ((uint8_t *)ipaddr)[1] & 0x7f; \ + (enaddr)[4] = ((uint8_t *)ipaddr)[2]; \ + (enaddr)[5] = ((uint8_t *)ipaddr)[3]; \ +} while(0) + +#define __UAPI_DEF_ETHHDR 0 + +#endif diff --git a/third_party/musl/ndk_musl_include/netinet/igmp.h b/third_party/musl/ndk_musl_include/netinet/igmp.h new file mode 100644 index 0000000000000000000000000000000000000000..7eba522e8181c3d6ff3d5207a60e3dd5e05e8ba3 --- /dev/null +++ b/third_party/musl/ndk_musl_include/netinet/igmp.h @@ -0,0 +1,45 @@ +#ifndef _NETINET_IGMP_H +#define _NETINET_IGMP_H + +#include +#include + +struct igmp { + uint8_t igmp_type; + uint8_t igmp_code; + uint16_t igmp_cksum; + struct in_addr igmp_group; +}; + +#define IGMP_MINLEN 8 + +#define IGMP_MEMBERSHIP_QUERY 0x11 +#define IGMP_V1_MEMBERSHIP_REPORT 0x12 +#define IGMP_V2_MEMBERSHIP_REPORT 0x16 +#define IGMP_V2_LEAVE_GROUP 0x17 + +#define IGMP_DVMRP 0x13 +#define IGMP_PIM 0x14 +#define IGMP_TRACE 0x15 + +#define IGMP_MTRACE_RESP 0x1e +#define IGMP_MTRACE 0x1f + +#define IGMP_MAX_HOST_REPORT_DELAY 10 +#define IGMP_TIMER_SCALE 10 + +#define IGMP_DELAYING_MEMBER 1 +#define IGMP_IDLE_MEMBER 2 +#define IGMP_LAZY_MEMBER 3 +#define IGMP_SLEEPING_MEMBER 4 +#define IGMP_AWAKENING_MEMBER 5 + +#define IGMP_v1_ROUTER 1 +#define IGMP_v2_ROUTER 2 + +#define IGMP_HOST_MEMBERSHIP_QUERY IGMP_MEMBERSHIP_QUERY +#define IGMP_HOST_MEMBERSHIP_REPORT IGMP_V1_MEMBERSHIP_REPORT +#define IGMP_HOST_NEW_MEMBERSHIP_REPORT IGMP_V2_MEMBERSHIP_REPORT +#define IGMP_HOST_LEAVE_MESSAGE IGMP_V2_LEAVE_GROUP + +#endif diff --git a/third_party/musl/ndk_musl_include/netinet/in.h b/third_party/musl/ndk_musl_include/netinet/in.h new file mode 100644 index 0000000000000000000000000000000000000000..9c9b947eeb44cca6864ae8ddf4953079c4f6a86a --- /dev/null +++ b/third_party/musl/ndk_musl_include/netinet/in.h @@ -0,0 +1,415 @@ +#ifndef _NETINET_IN_H +#define _NETINET_IN_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +typedef uint16_t in_port_t; +typedef uint32_t in_addr_t; +struct in_addr { in_addr_t s_addr; }; + +struct sockaddr_in { + sa_family_t sin_family; + in_port_t sin_port; + struct in_addr sin_addr; + uint8_t sin_zero[8]; +}; + +struct in6_addr { + union { + uint8_t __s6_addr[16]; + uint16_t __s6_addr16[8]; + uint32_t __s6_addr32[4]; + } __in6_union; +}; +#define s6_addr __in6_union.__s6_addr +#define s6_addr16 __in6_union.__s6_addr16 +#define s6_addr32 __in6_union.__s6_addr32 + +struct sockaddr_in6 { + sa_family_t sin6_family; + in_port_t sin6_port; + uint32_t sin6_flowinfo; + struct in6_addr sin6_addr; + uint32_t sin6_scope_id; +}; + +struct ipv6_mreq { + struct in6_addr ipv6mr_multiaddr; + unsigned ipv6mr_interface; +}; + +#define INADDR_ANY ((in_addr_t) 0x00000000) +#define INADDR_BROADCAST ((in_addr_t) 0xffffffff) +#define INADDR_NONE ((in_addr_t) 0xffffffff) +#define INADDR_LOOPBACK ((in_addr_t) 0x7f000001) + +#define INADDR_UNSPEC_GROUP ((in_addr_t) 0xe0000000) +#define INADDR_ALLHOSTS_GROUP ((in_addr_t) 0xe0000001) +#define INADDR_ALLRTRS_GROUP ((in_addr_t) 0xe0000002) +#define INADDR_ALLSNOOPERS_GROUP ((in_addr_t) 0xe000006a) +#define INADDR_MAX_LOCAL_GROUP ((in_addr_t) 0xe00000ff) + +#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } +#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } + +extern const struct in6_addr in6addr_any, in6addr_loopback; + +#undef INET_ADDRSTRLEN +#undef INET6_ADDRSTRLEN +#define INET_ADDRSTRLEN 16 +#define INET6_ADDRSTRLEN 46 + +uint32_t htonl(uint32_t); +uint16_t htons(uint16_t); +uint32_t ntohl(uint32_t); +uint16_t ntohs(uint16_t); + +#define IPPORT_RESERVED 1024 + +#define IPPROTO_IP 0 +#define IPPROTO_HOPOPTS 0 +#define IPPROTO_ICMP 1 +#define IPPROTO_IGMP 2 +#define IPPROTO_IPIP 4 +#define IPPROTO_TCP 6 +#define IPPROTO_EGP 8 +#define IPPROTO_PUP 12 +#define IPPROTO_UDP 17 +#define IPPROTO_IDP 22 +#define IPPROTO_TP 29 +#define IPPROTO_DCCP 33 +#define IPPROTO_IPV6 41 +#define IPPROTO_ROUTING 43 +#define IPPROTO_FRAGMENT 44 +#define IPPROTO_RSVP 46 +#define IPPROTO_GRE 47 +#define IPPROTO_ESP 50 +#define IPPROTO_AH 51 +#define IPPROTO_ICMPV6 58 +#define IPPROTO_NONE 59 +#define IPPROTO_DSTOPTS 60 +#define IPPROTO_MTP 92 +#define IPPROTO_BEETPH 94 +#define IPPROTO_ENCAP 98 +#define IPPROTO_PIM 103 +#define IPPROTO_COMP 108 +#define IPPROTO_SCTP 132 +#define IPPROTO_MH 135 +#define IPPROTO_UDPLITE 136 +#define IPPROTO_MPLS 137 +#define IPPROTO_RAW 255 +#define IPPROTO_MAX 256 + +#define IN6_IS_ADDR_UNSPECIFIED(a) \ + (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \ + ((uint32_t *) (a))[2] == 0 && ((uint32_t *) (a))[3] == 0) + +#define IN6_IS_ADDR_LOOPBACK(a) \ + (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \ + ((uint32_t *) (a))[2] == 0 && \ + ((uint8_t *) (a))[12] == 0 && ((uint8_t *) (a))[13] == 0 && \ + ((uint8_t *) (a))[14] == 0 && ((uint8_t *) (a))[15] == 1 ) + +#define IN6_IS_ADDR_MULTICAST(a) (((uint8_t *) (a))[0] == 0xff) + +#define IN6_IS_ADDR_LINKLOCAL(a) \ + ((((uint8_t *) (a))[0]) == 0xfe && (((uint8_t *) (a))[1] & 0xc0) == 0x80) + +#define IN6_IS_ADDR_SITELOCAL(a) \ + ((((uint8_t *) (a))[0]) == 0xfe && (((uint8_t *) (a))[1] & 0xc0) == 0xc0) + +#define IN6_IS_ADDR_V4MAPPED(a) \ + (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \ + ((uint8_t *) (a))[8] == 0 && ((uint8_t *) (a))[9] == 0 && \ + ((uint8_t *) (a))[10] == 0xff && ((uint8_t *) (a))[11] == 0xff) + +#define IN6_IS_ADDR_V4COMPAT(a) \ + (((uint32_t *) (a))[0] == 0 && ((uint32_t *) (a))[1] == 0 && \ + ((uint32_t *) (a))[2] == 0 && ((uint8_t *) (a))[15] > 1) + +#define IN6_IS_ADDR_MC_NODELOCAL(a) \ + (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x1)) + +#define IN6_IS_ADDR_MC_LINKLOCAL(a) \ + (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x2)) + +#define IN6_IS_ADDR_MC_SITELOCAL(a) \ + (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x5)) + +#define IN6_IS_ADDR_MC_ORGLOCAL(a) \ + (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0x8)) + +#define IN6_IS_ADDR_MC_GLOBAL(a) \ + (IN6_IS_ADDR_MULTICAST(a) && ((((uint8_t *) (a))[1] & 0xf) == 0xe)) + +#define __ARE_4_EQUAL(a,b) \ + (!( (0[a]-0[b]) | (1[a]-1[b]) | (2[a]-2[b]) | (3[a]-3[b]) )) +#define IN6_ARE_ADDR_EQUAL(a,b) \ + __ARE_4_EQUAL((const uint32_t *)(a), (const uint32_t *)(b)) + +#define IN_CLASSA(a) ((((in_addr_t)(a)) & 0x80000000) == 0) +#define IN_CLASSA_NET 0xff000000 +#define IN_CLASSA_NSHIFT 24 +#define IN_CLASSA_HOST (0xffffffff & ~IN_CLASSA_NET) +#define IN_CLASSA_MAX 128 +#define IN_CLASSB(a) ((((in_addr_t)(a)) & 0xc0000000) == 0x80000000) +#define IN_CLASSB_NET 0xffff0000 +#define IN_CLASSB_NSHIFT 16 +#define IN_CLASSB_HOST (0xffffffff & ~IN_CLASSB_NET) +#define IN_CLASSB_MAX 65536 +#define IN_CLASSC(a) ((((in_addr_t)(a)) & 0xe0000000) == 0xc0000000) +#define IN_CLASSC_NET 0xffffff00 +#define IN_CLASSC_NSHIFT 8 +#define IN_CLASSC_HOST (0xffffffff & ~IN_CLASSC_NET) +#define IN_CLASSD(a) ((((in_addr_t)(a)) & 0xf0000000) == 0xe0000000) +#define IN_MULTICAST(a) IN_CLASSD(a) +#define IN_EXPERIMENTAL(a) ((((in_addr_t)(a)) & 0xe0000000) == 0xe0000000) +#define IN_BADCLASS(a) ((((in_addr_t)(a)) & 0xf0000000) == 0xf0000000) + +#define IN_LOOPBACKNET 127 + + +#define IP_TOS 1 +#define IP_TTL 2 +#define IP_HDRINCL 3 +#define IP_OPTIONS 4 +#define IP_ROUTER_ALERT 5 +#define IP_RECVOPTS 6 +#define IP_RETOPTS 7 +#define IP_PKTINFO 8 +#define IP_PKTOPTIONS 9 +#define IP_PMTUDISC 10 +#define IP_MTU_DISCOVER 10 +#define IP_RECVERR 11 +#define IP_RECVTTL 12 +#define IP_RECVTOS 13 +#define IP_MTU 14 +#define IP_FREEBIND 15 +#define IP_IPSEC_POLICY 16 +#define IP_XFRM_POLICY 17 +#define IP_PASSSEC 18 +#define IP_TRANSPARENT 19 +#define IP_ORIGDSTADDR 20 +#define IP_RECVORIGDSTADDR IP_ORIGDSTADDR +#define IP_MINTTL 21 +#define IP_NODEFRAG 22 +#define IP_CHECKSUM 23 +#define IP_BIND_ADDRESS_NO_PORT 24 +#define IP_RECVFRAGSIZE 25 +#define IP_MULTICAST_IF 32 +#define IP_MULTICAST_TTL 33 +#define IP_MULTICAST_LOOP 34 +#define IP_ADD_MEMBERSHIP 35 +#define IP_DROP_MEMBERSHIP 36 +#define IP_UNBLOCK_SOURCE 37 +#define IP_BLOCK_SOURCE 38 +#define IP_ADD_SOURCE_MEMBERSHIP 39 +#define IP_DROP_SOURCE_MEMBERSHIP 40 +#define IP_MSFILTER 41 +#define IP_MULTICAST_ALL 49 +#define IP_UNICAST_IF 50 + +#define IP_RECVRETOPTS IP_RETOPTS + +#define IP_PMTUDISC_DONT 0 +#define IP_PMTUDISC_WANT 1 +#define IP_PMTUDISC_DO 2 +#define IP_PMTUDISC_PROBE 3 +#define IP_PMTUDISC_INTERFACE 4 +#define IP_PMTUDISC_OMIT 5 + +#define IP_DEFAULT_MULTICAST_TTL 1 +#define IP_DEFAULT_MULTICAST_LOOP 1 +#define IP_MAX_MEMBERSHIPS 20 + +struct ip_opts { + struct in_addr ip_dst; + char ip_opts[40]; +}; + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) + +#define MCAST_JOIN_GROUP 42 +#define MCAST_BLOCK_SOURCE 43 +#define MCAST_UNBLOCK_SOURCE 44 +#define MCAST_LEAVE_GROUP 45 +#define MCAST_JOIN_SOURCE_GROUP 46 +#define MCAST_LEAVE_SOURCE_GROUP 47 +#define MCAST_MSFILTER 48 + +#define MCAST_EXCLUDE 0 +#define MCAST_INCLUDE 1 + +struct ip_mreq { + struct in_addr imr_multiaddr; + struct in_addr imr_interface; +}; + +struct ip_mreqn { + struct in_addr imr_multiaddr; + struct in_addr imr_address; + int imr_ifindex; +}; + +struct ip_mreq_source { + struct in_addr imr_multiaddr; + struct in_addr imr_interface; + struct in_addr imr_sourceaddr; +}; + +struct ip_msfilter { + struct in_addr imsf_multiaddr; + struct in_addr imsf_interface; + uint32_t imsf_fmode; + uint32_t imsf_numsrc; + struct in_addr imsf_slist[1]; +}; +#define IP_MSFILTER_SIZE(numsrc) \ + (sizeof(struct ip_msfilter) - sizeof(struct in_addr) \ + + (numsrc) * sizeof(struct in_addr)) + +struct group_req { + uint32_t gr_interface; + struct sockaddr_storage gr_group; +}; + +struct group_source_req { + uint32_t gsr_interface; + struct sockaddr_storage gsr_group; + struct sockaddr_storage gsr_source; +}; + +struct group_filter { + uint32_t gf_interface; + struct sockaddr_storage gf_group; + uint32_t gf_fmode; + uint32_t gf_numsrc; + struct sockaddr_storage gf_slist[1]; +}; +#define GROUP_FILTER_SIZE(numsrc) \ + (sizeof(struct group_filter) - sizeof(struct sockaddr_storage) \ + + (numsrc) * sizeof(struct sockaddr_storage)) + +struct in_pktinfo { + int ipi_ifindex; + struct in_addr ipi_spec_dst; + struct in_addr ipi_addr; +}; + +struct in6_pktinfo { + struct in6_addr ipi6_addr; + unsigned ipi6_ifindex; +}; + +struct ip6_mtuinfo { + struct sockaddr_in6 ip6m_addr; + uint32_t ip6m_mtu; +}; +#endif + +#define IPV6_ADDRFORM 1 +#define IPV6_2292PKTINFO 2 +#define IPV6_2292HOPOPTS 3 +#define IPV6_2292DSTOPTS 4 +#define IPV6_2292RTHDR 5 +#define IPV6_2292PKTOPTIONS 6 +#define IPV6_CHECKSUM 7 +#define IPV6_2292HOPLIMIT 8 +#define IPV6_NEXTHOP 9 +#define IPV6_AUTHHDR 10 +#define IPV6_UNICAST_HOPS 16 +#define IPV6_MULTICAST_IF 17 +#define IPV6_MULTICAST_HOPS 18 +#define IPV6_MULTICAST_LOOP 19 +#define IPV6_JOIN_GROUP 20 +#define IPV6_LEAVE_GROUP 21 +#define IPV6_ROUTER_ALERT 22 +#define IPV6_MTU_DISCOVER 23 +#define IPV6_MTU 24 +#define IPV6_RECVERR 25 +#define IPV6_V6ONLY 26 +#define IPV6_JOIN_ANYCAST 27 +#define IPV6_LEAVE_ANYCAST 28 +#define IPV6_MULTICAST_ALL 29 +#define IPV6_ROUTER_ALERT_ISOLATE 30 +#define IPV6_IPSEC_POLICY 34 +#define IPV6_XFRM_POLICY 35 +#define IPV6_HDRINCL 36 + +#define IPV6_RECVPKTINFO 49 +#define IPV6_PKTINFO 50 +#define IPV6_RECVHOPLIMIT 51 +#define IPV6_HOPLIMIT 52 +#define IPV6_RECVHOPOPTS 53 +#define IPV6_HOPOPTS 54 +#define IPV6_RTHDRDSTOPTS 55 +#define IPV6_RECVRTHDR 56 +#define IPV6_RTHDR 57 +#define IPV6_RECVDSTOPTS 58 +#define IPV6_DSTOPTS 59 +#define IPV6_RECVPATHMTU 60 +#define IPV6_PATHMTU 61 +#define IPV6_DONTFRAG 62 +#define IPV6_RECVTCLASS 66 +#define IPV6_TCLASS 67 +#define IPV6_AUTOFLOWLABEL 70 +#define IPV6_ADDR_PREFERENCES 72 +#define IPV6_MINHOPCOUNT 73 +#define IPV6_ORIGDSTADDR 74 +#define IPV6_RECVORIGDSTADDR IPV6_ORIGDSTADDR +#define IPV6_TRANSPARENT 75 +#define IPV6_UNICAST_IF 76 +#define IPV6_RECVFRAGSIZE 77 +#define IPV6_FREEBIND 78 + +#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP +#define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP +#define IPV6_RXHOPOPTS IPV6_HOPOPTS +#define IPV6_RXDSTOPTS IPV6_DSTOPTS + +#define IPV6_PMTUDISC_DONT 0 +#define IPV6_PMTUDISC_WANT 1 +#define IPV6_PMTUDISC_DO 2 +#define IPV6_PMTUDISC_PROBE 3 +#define IPV6_PMTUDISC_INTERFACE 4 +#define IPV6_PMTUDISC_OMIT 5 + +#define IPV6_PREFER_SRC_TMP 0x0001 +#define IPV6_PREFER_SRC_PUBLIC 0x0002 +#define IPV6_PREFER_SRC_PUBTMP_DEFAULT 0x0100 +#define IPV6_PREFER_SRC_COA 0x0004 +#define IPV6_PREFER_SRC_HOME 0x0400 +#define IPV6_PREFER_SRC_CGA 0x0008 +#define IPV6_PREFER_SRC_NONCGA 0x0800 + +#define IPV6_RTHDR_LOOSE 0 +#define IPV6_RTHDR_STRICT 1 + +#define IPV6_RTHDR_TYPE_0 0 + +#define __UAPI_DEF_IN_ADDR 0 +#define __UAPI_DEF_IN_IPPROTO 0 +#define __UAPI_DEF_IN_PKTINFO 0 +#define __UAPI_DEF_IP_MREQ 0 +#define __UAPI_DEF_SOCKADDR_IN 0 +#define __UAPI_DEF_IN_CLASS 0 +#define __UAPI_DEF_IN6_ADDR 0 +#define __UAPI_DEF_IN6_ADDR_ALT 0 +#define __UAPI_DEF_SOCKADDR_IN6 0 +#define __UAPI_DEF_IPV6_MREQ 0 +#define __UAPI_DEF_IPPROTO_V6 0 +#define __UAPI_DEF_IPV6_OPTIONS 0 +#define __UAPI_DEF_IN6_PKTINFO 0 +#define __UAPI_DEF_IP6_MTUINFO 0 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/netinet/in_systm.h b/third_party/musl/ndk_musl_include/netinet/in_systm.h new file mode 100644 index 0000000000000000000000000000000000000000..8c8c39d1efede51a5015ac97cd1ae9e522bbc2e8 --- /dev/null +++ b/third_party/musl/ndk_musl_include/netinet/in_systm.h @@ -0,0 +1,9 @@ +#ifndef _NETINET_IN_SYSTM_H +#define _NETINET_IN_SYSTM_H + +#include + +typedef uint16_t n_short; +typedef uint32_t n_long, n_time; + +#endif diff --git a/third_party/musl/ndk_musl_include/netinet/ip.h b/third_party/musl/ndk_musl_include/netinet/ip.h new file mode 100644 index 0000000000000000000000000000000000000000..951b2e50d2de22a00e57115e8331cd44acf21794 --- /dev/null +++ b/third_party/musl/ndk_musl_include/netinet/ip.h @@ -0,0 +1,199 @@ +#ifndef _NETINET_IP_H +#define _NETINET_IP_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +struct timestamp { + uint8_t len; + uint8_t ptr; +#if __BYTE_ORDER == __LITTLE_ENDIAN + unsigned int flags:4; + unsigned int overflow:4; +#else + unsigned int overflow:4; + unsigned int flags:4; +#endif + uint32_t data[9]; + }; + +struct iphdr { +#if __BYTE_ORDER == __LITTLE_ENDIAN + unsigned int ihl:4; + unsigned int version:4; +#else + unsigned int version:4; + unsigned int ihl:4; +#endif + uint8_t tos; + uint16_t tot_len; + uint16_t id; + uint16_t frag_off; + uint8_t ttl; + uint8_t protocol; + uint16_t check; + uint32_t saddr; + uint32_t daddr; +}; + +struct ip { +#if __BYTE_ORDER == __LITTLE_ENDIAN + unsigned int ip_hl:4; + unsigned int ip_v:4; +#else + unsigned int ip_v:4; + unsigned int ip_hl:4; +#endif + uint8_t ip_tos; + uint16_t ip_len; + uint16_t ip_id; + uint16_t ip_off; + uint8_t ip_ttl; + uint8_t ip_p; + uint16_t ip_sum; + struct in_addr ip_src, ip_dst; +}; + +#define IP_RF 0x8000 +#define IP_DF 0x4000 +#define IP_MF 0x2000 +#define IP_OFFMASK 0x1fff + +struct ip_timestamp { + uint8_t ipt_code; + uint8_t ipt_len; + uint8_t ipt_ptr; +#if __BYTE_ORDER == __LITTLE_ENDIAN + unsigned int ipt_flg:4; + unsigned int ipt_oflw:4; +#else + unsigned int ipt_oflw:4; + unsigned int ipt_flg:4; +#endif + uint32_t data[9]; +}; + +#define IPVERSION 4 +#define IP_MAXPACKET 65535 + +#define IPTOS_ECN_MASK 0x03 +#define IPTOS_ECN(x) ((x) & IPTOS_ECN_MASK) +#define IPTOS_ECN_NOT_ECT 0x00 +#define IPTOS_ECN_ECT1 0x01 +#define IPTOS_ECN_ECT0 0x02 +#define IPTOS_ECN_CE 0x03 + +#define IPTOS_DSCP_MASK 0xfc +#define IPTOS_DSCP(x) ((x) & IPTOS_DSCP_MASK) +#define IPTOS_DSCP_AF11 0x28 +#define IPTOS_DSCP_AF12 0x30 +#define IPTOS_DSCP_AF13 0x38 +#define IPTOS_DSCP_AF21 0x48 +#define IPTOS_DSCP_AF22 0x50 +#define IPTOS_DSCP_AF23 0x58 +#define IPTOS_DSCP_AF31 0x68 +#define IPTOS_DSCP_AF32 0x70 +#define IPTOS_DSCP_AF33 0x78 +#define IPTOS_DSCP_AF41 0x88 +#define IPTOS_DSCP_AF42 0x90 +#define IPTOS_DSCP_AF43 0x98 +#define IPTOS_DSCP_EF 0xb8 + +#define IPTOS_CLASS_MASK 0xe0 +#define IPTOS_CLASS(x) ((x) & IPTOS_CLASS_MASK) +#define IPTOS_CLASS_CS0 0x00 +#define IPTOS_CLASS_CS1 0x20 +#define IPTOS_CLASS_CS2 0x40 +#define IPTOS_CLASS_CS3 0x60 +#define IPTOS_CLASS_CS4 0x80 +#define IPTOS_CLASS_CS5 0xa0 +#define IPTOS_CLASS_CS6 0xc0 +#define IPTOS_CLASS_CS7 0xe0 +#define IPTOS_CLASS_DEFAULT IPTOS_CLASS_CS0 + +#define IPTOS_TOS_MASK 0x1E +#define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK) +#define IPTOS_LOWDELAY 0x10 +#define IPTOS_THROUGHPUT 0x08 +#define IPTOS_RELIABILITY 0x04 +#define IPTOS_LOWCOST 0x02 +#define IPTOS_MINCOST IPTOS_LOWCOST + +#define IPTOS_PREC_MASK 0xe0 +#define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK) +#define IPTOS_PREC_NETCONTROL 0xe0 +#define IPTOS_PREC_INTERNETCONTROL 0xc0 +#define IPTOS_PREC_CRITIC_ECP 0xa0 +#define IPTOS_PREC_FLASHOVERRIDE 0x80 +#define IPTOS_PREC_FLASH 0x60 +#define IPTOS_PREC_IMMEDIATE 0x40 +#define IPTOS_PREC_PRIORITY 0x20 +#define IPTOS_PREC_ROUTINE 0x00 + +#define IPOPT_COPY 0x80 +#define IPOPT_CLASS_MASK 0x60 +#define IPOPT_NUMBER_MASK 0x1f + +#define IPOPT_COPIED(o) ((o) & IPOPT_COPY) +#define IPOPT_CLASS(o) ((o) & IPOPT_CLASS_MASK) +#define IPOPT_NUMBER(o) ((o) & IPOPT_NUMBER_MASK) + +#define IPOPT_CONTROL 0x00 +#define IPOPT_RESERVED1 0x20 +#define IPOPT_DEBMEAS 0x40 +#define IPOPT_MEASUREMENT IPOPT_DEBMEAS +#define IPOPT_RESERVED2 0x60 + +#define IPOPT_EOL 0 +#define IPOPT_END IPOPT_EOL +#define IPOPT_NOP 1 +#define IPOPT_NOOP IPOPT_NOP + +#define IPOPT_RR 7 +#define IPOPT_TS 68 +#define IPOPT_TIMESTAMP IPOPT_TS +#define IPOPT_SECURITY 130 +#define IPOPT_SEC IPOPT_SECURITY +#define IPOPT_LSRR 131 +#define IPOPT_SATID 136 +#define IPOPT_SID IPOPT_SATID +#define IPOPT_SSRR 137 +#define IPOPT_RA 148 + +#define IPOPT_OPTVAL 0 +#define IPOPT_OLEN 1 +#define IPOPT_OFFSET 2 +#define IPOPT_MINOFF 4 + +#define MAX_IPOPTLEN 40 + +#define IPOPT_TS_TSONLY 0 +#define IPOPT_TS_TSANDADDR 1 +#define IPOPT_TS_PRESPEC 3 + +#define IPOPT_SECUR_UNCLASS 0x0000 +#define IPOPT_SECUR_CONFID 0xf135 +#define IPOPT_SECUR_EFTO 0x789a +#define IPOPT_SECUR_MMMM 0xbc4d +#define IPOPT_SECUR_RESTR 0xaf13 +#define IPOPT_SECUR_SECRET 0xd788 +#define IPOPT_SECUR_TOPSECRET 0x6bc5 + +#define MAXTTL 255 +#define IPDEFTTL 64 +#define IPFRAGTTL 60 +#define IPTTLDEC 1 + +#define IP_MSS 576 + +#define __UAPI_DEF_IPHDR 0 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/netinet/ip6.h b/third_party/musl/ndk_musl_include/netinet/ip6.h new file mode 100644 index 0000000000000000000000000000000000000000..7feac8c4332e05926bf0a5a2743908ce62a383de --- /dev/null +++ b/third_party/musl/ndk_musl_include/netinet/ip6.h @@ -0,0 +1,141 @@ +#ifndef _NETINET_IP6_H +#define _NETINET_IP6_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +struct ip6_hdr { + union { + struct ip6_hdrctl { + uint32_t ip6_un1_flow; + uint16_t ip6_un1_plen; + uint8_t ip6_un1_nxt; + uint8_t ip6_un1_hlim; + } ip6_un1; + uint8_t ip6_un2_vfc; + } ip6_ctlun; + struct in6_addr ip6_src; + struct in6_addr ip6_dst; +}; + +#define ip6_vfc ip6_ctlun.ip6_un2_vfc +#define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow +#define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen +#define ip6_nxt ip6_ctlun.ip6_un1.ip6_un1_nxt +#define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim +#define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim + +struct ip6_ext { + uint8_t ip6e_nxt; + uint8_t ip6e_len; +}; + +struct ip6_hbh { + uint8_t ip6h_nxt; + uint8_t ip6h_len; +}; + +struct ip6_dest { + uint8_t ip6d_nxt; + uint8_t ip6d_len; +}; + +struct ip6_rthdr { + uint8_t ip6r_nxt; + uint8_t ip6r_len; + uint8_t ip6r_type; + uint8_t ip6r_segleft; +}; + +struct ip6_rthdr0 { + uint8_t ip6r0_nxt; + uint8_t ip6r0_len; + uint8_t ip6r0_type; + uint8_t ip6r0_segleft; + uint8_t ip6r0_reserved; + uint8_t ip6r0_slmap[3]; + struct in6_addr ip6r0_addr[]; +}; + +struct ip6_frag { + uint8_t ip6f_nxt; + uint8_t ip6f_reserved; + uint16_t ip6f_offlg; + uint32_t ip6f_ident; +}; + +#if __BYTE_ORDER == __BIG_ENDIAN +#define IP6F_OFF_MASK 0xfff8 +#define IP6F_RESERVED_MASK 0x0006 +#define IP6F_MORE_FRAG 0x0001 +#else +#define IP6F_OFF_MASK 0xf8ff +#define IP6F_RESERVED_MASK 0x0600 +#define IP6F_MORE_FRAG 0x0100 +#endif + +struct ip6_opt { + uint8_t ip6o_type; + uint8_t ip6o_len; +}; + +#define IP6OPT_TYPE(o) ((o) & 0xc0) +#define IP6OPT_TYPE_SKIP 0x00 +#define IP6OPT_TYPE_DISCARD 0x40 +#define IP6OPT_TYPE_FORCEICMP 0x80 +#define IP6OPT_TYPE_ICMP 0xc0 +#define IP6OPT_TYPE_MUTABLE 0x20 + +#define IP6OPT_PAD1 0 +#define IP6OPT_PADN 1 + +#define IP6OPT_JUMBO 0xc2 +#define IP6OPT_NSAP_ADDR 0xc3 +#define IP6OPT_TUNNEL_LIMIT 0x04 +#define IP6OPT_ROUTER_ALERT 0x05 + +struct ip6_opt_jumbo { + uint8_t ip6oj_type; + uint8_t ip6oj_len; + uint8_t ip6oj_jumbo_len[4]; +}; +#define IP6OPT_JUMBO_LEN 6 + +struct ip6_opt_nsap { + uint8_t ip6on_type; + uint8_t ip6on_len; + uint8_t ip6on_src_nsap_len; + uint8_t ip6on_dst_nsap_len; +}; + +struct ip6_opt_tunnel { + uint8_t ip6ot_type; + uint8_t ip6ot_len; + uint8_t ip6ot_encap_limit; +}; + +struct ip6_opt_router { + uint8_t ip6or_type; + uint8_t ip6or_len; + uint8_t ip6or_value[2]; +}; + +#if __BYTE_ORDER == __BIG_ENDIAN +#define IP6_ALERT_MLD 0x0000 +#define IP6_ALERT_RSVP 0x0001 +#define IP6_ALERT_AN 0x0002 +#else +#define IP6_ALERT_MLD 0x0000 +#define IP6_ALERT_RSVP 0x0100 +#define IP6_ALERT_AN 0x0200 +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/netinet/ip_icmp.h b/third_party/musl/ndk_musl_include/netinet/ip_icmp.h new file mode 100644 index 0000000000000000000000000000000000000000..5cbdb4a1c8a0a0c2cc062d9b0c8538fcaceb778a --- /dev/null +++ b/third_party/musl/ndk_musl_include/netinet/ip_icmp.h @@ -0,0 +1,193 @@ +#ifndef _NETINET_IP_ICMP_H +#define _NETINET_IP_ICMP_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct icmphdr { + uint8_t type; + uint8_t code; + uint16_t checksum; + union { + struct { + uint16_t id; + uint16_t sequence; + } echo; + uint32_t gateway; + struct { + uint16_t __unused; + uint16_t mtu; + } frag; + uint8_t reserved[4]; + } un; +}; + +#define ICMP_ECHOREPLY 0 +#define ICMP_DEST_UNREACH 3 +#define ICMP_SOURCE_QUENCH 4 +#define ICMP_REDIRECT 5 +#define ICMP_ECHO 8 +#define ICMP_TIME_EXCEEDED 11 +#define ICMP_PARAMETERPROB 12 +#define ICMP_TIMESTAMP 13 +#define ICMP_TIMESTAMPREPLY 14 +#define ICMP_INFO_REQUEST 15 +#define ICMP_INFO_REPLY 16 +#define ICMP_ADDRESS 17 +#define ICMP_ADDRESSREPLY 18 +#define NR_ICMP_TYPES 18 + + +#define ICMP_NET_UNREACH 0 +#define ICMP_HOST_UNREACH 1 +#define ICMP_PROT_UNREACH 2 +#define ICMP_PORT_UNREACH 3 +#define ICMP_FRAG_NEEDED 4 +#define ICMP_SR_FAILED 5 +#define ICMP_NET_UNKNOWN 6 +#define ICMP_HOST_UNKNOWN 7 +#define ICMP_HOST_ISOLATED 8 +#define ICMP_NET_ANO 9 +#define ICMP_HOST_ANO 10 +#define ICMP_NET_UNR_TOS 11 +#define ICMP_HOST_UNR_TOS 12 +#define ICMP_PKT_FILTERED 13 +#define ICMP_PREC_VIOLATION 14 +#define ICMP_PREC_CUTOFF 15 +#define NR_ICMP_UNREACH 15 + +#define ICMP_REDIR_NET 0 +#define ICMP_REDIR_HOST 1 +#define ICMP_REDIR_NETTOS 2 +#define ICMP_REDIR_HOSTTOS 3 + +#define ICMP_EXC_TTL 0 +#define ICMP_EXC_FRAGTIME 1 + + +struct icmp_ra_addr { + uint32_t ira_addr; + uint32_t ira_preference; +}; + +struct icmp { + uint8_t icmp_type; + uint8_t icmp_code; + uint16_t icmp_cksum; + union { + uint8_t ih_pptr; + struct in_addr ih_gwaddr; + struct ih_idseq { + uint16_t icd_id; + uint16_t icd_seq; + } ih_idseq; + uint32_t ih_void; + + struct ih_pmtu { + uint16_t ipm_void; + uint16_t ipm_nextmtu; + } ih_pmtu; + + struct ih_rtradv { + uint8_t irt_num_addrs; + uint8_t irt_wpa; + uint16_t irt_lifetime; + } ih_rtradv; + } icmp_hun; + union { + struct { + uint32_t its_otime; + uint32_t its_rtime; + uint32_t its_ttime; + } id_ts; + struct { + struct ip idi_ip; + } id_ip; + struct icmp_ra_addr id_radv; + uint32_t id_mask; + uint8_t id_data[1]; + } icmp_dun; +}; + +#define icmp_pptr icmp_hun.ih_pptr +#define icmp_gwaddr icmp_hun.ih_gwaddr +#define icmp_id icmp_hun.ih_idseq.icd_id +#define icmp_seq icmp_hun.ih_idseq.icd_seq +#define icmp_void icmp_hun.ih_void +#define icmp_pmvoid icmp_hun.ih_pmtu.ipm_void +#define icmp_nextmtu icmp_hun.ih_pmtu.ipm_nextmtu +#define icmp_num_addrs icmp_hun.ih_rtradv.irt_num_addrs +#define icmp_wpa icmp_hun.ih_rtradv.irt_wpa +#define icmp_lifetime icmp_hun.ih_rtradv.irt_lifetime +#define icmp_otime icmp_dun.id_ts.its_otime +#define icmp_rtime icmp_dun.id_ts.its_rtime +#define icmp_ttime icmp_dun.id_ts.its_ttime +#define icmp_ip icmp_dun.id_ip.idi_ip +#define icmp_radv icmp_dun.id_radv +#define icmp_mask icmp_dun.id_mask +#define icmp_data icmp_dun.id_data + +#define ICMP_MINLEN 8 +#define ICMP_TSLEN (8 + 3 * sizeof (n_time)) +#define ICMP_MASKLEN 12 +#define ICMP_ADVLENMIN (8 + sizeof (struct ip) + 8) +#define ICMP_ADVLEN(p) (8 + ((p)->icmp_ip.ip_hl << 2) + 8) + +#define ICMP_UNREACH 3 +#define ICMP_SOURCEQUENCH 4 +#define ICMP_ROUTERADVERT 9 +#define ICMP_ROUTERSOLICIT 10 +#define ICMP_TIMXCEED 11 +#define ICMP_PARAMPROB 12 +#define ICMP_TSTAMP 13 +#define ICMP_TSTAMPREPLY 14 +#define ICMP_IREQ 15 +#define ICMP_IREQREPLY 16 +#define ICMP_MASKREQ 17 +#define ICMP_MASKREPLY 18 +#define ICMP_MAXTYPE 18 + +#define ICMP_UNREACH_NET 0 +#define ICMP_UNREACH_HOST 1 +#define ICMP_UNREACH_PROTOCOL 2 +#define ICMP_UNREACH_PORT 3 +#define ICMP_UNREACH_NEEDFRAG 4 +#define ICMP_UNREACH_SRCFAIL 5 +#define ICMP_UNREACH_NET_UNKNOWN 6 +#define ICMP_UNREACH_HOST_UNKNOWN 7 +#define ICMP_UNREACH_ISOLATED 8 +#define ICMP_UNREACH_NET_PROHIB 9 +#define ICMP_UNREACH_HOST_PROHIB 10 +#define ICMP_UNREACH_TOSNET 11 +#define ICMP_UNREACH_TOSHOST 12 +#define ICMP_UNREACH_FILTER_PROHIB 13 +#define ICMP_UNREACH_HOST_PRECEDENCE 14 +#define ICMP_UNREACH_PRECEDENCE_CUTOFF 15 + +#define ICMP_REDIRECT_NET 0 +#define ICMP_REDIRECT_HOST 1 +#define ICMP_REDIRECT_TOSNET 2 +#define ICMP_REDIRECT_TOSHOST 3 + +#define ICMP_TIMXCEED_INTRANS 0 +#define ICMP_TIMXCEED_REASS 1 + +#define ICMP_PARAMPROB_OPTABSENT 1 + +#define ICMP_INFOTYPE(type) \ + ((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \ + (type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \ + (type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \ + (type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \ + (type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/netinet/tcp.h b/third_party/musl/ndk_musl_include/netinet/tcp.h new file mode 100644 index 0000000000000000000000000000000000000000..1b2b8da0fe614e5dca205d12714513b14898c349 --- /dev/null +++ b/third_party/musl/ndk_musl_include/netinet/tcp.h @@ -0,0 +1,282 @@ +#ifndef _NETINET_TCP_H +#define _NETINET_TCP_H + +#include + +#define TCP_NODELAY 1 +#define TCP_MAXSEG 2 +#define TCP_CORK 3 +#define TCP_KEEPIDLE 4 +#define TCP_KEEPINTVL 5 +#define TCP_KEEPCNT 6 +#define TCP_SYNCNT 7 +#define TCP_LINGER2 8 +#define TCP_DEFER_ACCEPT 9 +#define TCP_WINDOW_CLAMP 10 +#define TCP_INFO 11 +#define TCP_QUICKACK 12 +#define TCP_CONGESTION 13 +#define TCP_MD5SIG 14 +#define TCP_THIN_LINEAR_TIMEOUTS 16 +#define TCP_THIN_DUPACK 17 +#define TCP_USER_TIMEOUT 18 +#define TCP_REPAIR 19 +#define TCP_REPAIR_QUEUE 20 +#define TCP_QUEUE_SEQ 21 +#define TCP_REPAIR_OPTIONS 22 +#define TCP_FASTOPEN 23 +#define TCP_TIMESTAMP 24 +#define TCP_NOTSENT_LOWAT 25 +#define TCP_CC_INFO 26 +#define TCP_SAVE_SYN 27 +#define TCP_SAVED_SYN 28 +#define TCP_REPAIR_WINDOW 29 +#define TCP_FASTOPEN_CONNECT 30 +#define TCP_ULP 31 +#define TCP_MD5SIG_EXT 32 +#define TCP_FASTOPEN_KEY 33 +#define TCP_FASTOPEN_NO_COOKIE 34 +#define TCP_ZEROCOPY_RECEIVE 35 +#define TCP_INQ 36 +#define TCP_TX_DELAY 37 + +#define TCP_CM_INQ TCP_INQ + +#define TCP_ESTABLISHED 1 +#define TCP_SYN_SENT 2 +#define TCP_SYN_RECV 3 +#define TCP_FIN_WAIT1 4 +#define TCP_FIN_WAIT2 5 +#define TCP_TIME_WAIT 6 +#define TCP_CLOSE 7 +#define TCP_CLOSE_WAIT 8 +#define TCP_LAST_ACK 9 +#define TCP_LISTEN 10 +#define TCP_CLOSING 11 + +enum { + TCP_NLA_PAD, + TCP_NLA_BUSY, + TCP_NLA_RWND_LIMITED, + TCP_NLA_SNDBUF_LIMITED, + TCP_NLA_DATA_SEGS_OUT, + TCP_NLA_TOTAL_RETRANS, + TCP_NLA_PACING_RATE, + TCP_NLA_DELIVERY_RATE, + TCP_NLA_SND_CWND, + TCP_NLA_REORDERING, + TCP_NLA_MIN_RTT, + TCP_NLA_RECUR_RETRANS, + TCP_NLA_DELIVERY_RATE_APP_LMT, + TCP_NLA_SNDQ_SIZE, + TCP_NLA_CA_STATE, + TCP_NLA_SND_SSTHRESH, + TCP_NLA_DELIVERED, + TCP_NLA_DELIVERED_CE, + TCP_NLA_BYTES_SENT, + TCP_NLA_BYTES_RETRANS, + TCP_NLA_DSACK_DUPS, + TCP_NLA_REORD_SEEN, + TCP_NLA_SRTT, +}; + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define TCPOPT_EOL 0 +#define TCPOPT_NOP 1 +#define TCPOPT_MAXSEG 2 +#define TCPOPT_WINDOW 3 +#define TCPOPT_SACK_PERMITTED 4 +#define TCPOPT_SACK 5 +#define TCPOPT_TIMESTAMP 8 +#define TCPOLEN_SACK_PERMITTED 2 +#define TCPOLEN_WINDOW 3 +#define TCPOLEN_MAXSEG 4 +#define TCPOLEN_TIMESTAMP 10 + +#define SOL_TCP 6 + +#include +#include +#include + +typedef uint32_t tcp_seq; + +#define TH_FIN 0x01 +#define TH_SYN 0x02 +#define TH_RST 0x04 +#define TH_PUSH 0x08 +#define TH_ACK 0x10 +#define TH_URG 0x20 + +struct tcphdr { +#ifdef _GNU_SOURCE +#ifdef __GNUC__ + __extension__ +#endif + union { struct { + + uint16_t source; + uint16_t dest; + uint32_t seq; + uint32_t ack_seq; +#if __BYTE_ORDER == __LITTLE_ENDIAN + uint16_t res1:4; + uint16_t doff:4; + uint16_t fin:1; + uint16_t syn:1; + uint16_t rst:1; + uint16_t psh:1; + uint16_t ack:1; + uint16_t urg:1; + uint16_t res2:2; +#else + uint16_t doff:4; + uint16_t res1:4; + uint16_t res2:2; + uint16_t urg:1; + uint16_t ack:1; + uint16_t psh:1; + uint16_t rst:1; + uint16_t syn:1; + uint16_t fin:1; +#endif + uint16_t window; + uint16_t check; + uint16_t urg_ptr; + + }; struct { +#endif + + uint16_t th_sport; + uint16_t th_dport; + uint32_t th_seq; + uint32_t th_ack; +#if __BYTE_ORDER == __LITTLE_ENDIAN + uint8_t th_x2:4; + uint8_t th_off:4; +#else + uint8_t th_off:4; + uint8_t th_x2:4; +#endif + uint8_t th_flags; + uint16_t th_win; + uint16_t th_sum; + uint16_t th_urp; + +#ifdef _GNU_SOURCE + }; }; +#endif +}; +#endif + +#ifdef _GNU_SOURCE +#define TCPI_OPT_TIMESTAMPS 1 +#define TCPI_OPT_SACK 2 +#define TCPI_OPT_WSCALE 4 +#define TCPI_OPT_ECN 8 + +#define TCP_CA_Open 0 +#define TCP_CA_Disorder 1 +#define TCP_CA_CWR 2 +#define TCP_CA_Recovery 3 +#define TCP_CA_Loss 4 + +struct tcp_info { + uint8_t tcpi_state; + uint8_t tcpi_ca_state; + uint8_t tcpi_retransmits; + uint8_t tcpi_probes; + uint8_t tcpi_backoff; + uint8_t tcpi_options; + uint8_t tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4; + uint8_t tcpi_delivery_rate_app_limited : 1; + uint32_t tcpi_rto; + uint32_t tcpi_ato; + uint32_t tcpi_snd_mss; + uint32_t tcpi_rcv_mss; + uint32_t tcpi_unacked; + uint32_t tcpi_sacked; + uint32_t tcpi_lost; + uint32_t tcpi_retrans; + uint32_t tcpi_fackets; + uint32_t tcpi_last_data_sent; + uint32_t tcpi_last_ack_sent; + uint32_t tcpi_last_data_recv; + uint32_t tcpi_last_ack_recv; + uint32_t tcpi_pmtu; + uint32_t tcpi_rcv_ssthresh; + uint32_t tcpi_rtt; + uint32_t tcpi_rttvar; + uint32_t tcpi_snd_ssthresh; + uint32_t tcpi_snd_cwnd; + uint32_t tcpi_advmss; + uint32_t tcpi_reordering; + uint32_t tcpi_rcv_rtt; + uint32_t tcpi_rcv_space; + uint32_t tcpi_total_retrans; + uint64_t tcpi_pacing_rate; + uint64_t tcpi_max_pacing_rate; + uint64_t tcpi_bytes_acked; + uint64_t tcpi_bytes_received; + uint32_t tcpi_segs_out; + uint32_t tcpi_segs_in; + uint32_t tcpi_notsent_bytes; + uint32_t tcpi_min_rtt; + uint32_t tcpi_data_segs_in; + uint32_t tcpi_data_segs_out; + uint64_t tcpi_delivery_rate; + uint64_t tcpi_busy_time; + uint64_t tcpi_rwnd_limited; + uint64_t tcpi_sndbuf_limited; + uint32_t tcpi_delivered; + uint32_t tcpi_delivered_ce; + uint64_t tcpi_bytes_sent; + uint64_t tcpi_bytes_retrans; + uint32_t tcpi_dsack_dups; + uint32_t tcpi_reord_seen; + uint32_t tcpi_rcv_ooopack; + uint32_t tcpi_snd_wnd; +}; + +#define TCP_MD5SIG_MAXKEYLEN 80 + +#define TCP_MD5SIG_FLAG_PREFIX 1 + +struct tcp_md5sig { + struct sockaddr_storage tcpm_addr; + uint8_t tcpm_flags; + uint8_t tcpm_prefixlen; + uint16_t tcpm_keylen; + uint32_t __tcpm_pad; + uint8_t tcpm_key[TCP_MD5SIG_MAXKEYLEN]; +}; + +struct tcp_diag_md5sig { + uint8_t tcpm_family; + uint8_t tcpm_prefixlen; + uint16_t tcpm_keylen; + uint32_t tcpm_addr[4]; + uint8_t tcpm_key[TCP_MD5SIG_MAXKEYLEN]; +}; + +#define TCP_REPAIR_ON 1 +#define TCP_REPAIR_OFF 0 +#define TCP_REPAIR_OFF_NO_WP -1 + +struct tcp_repair_window { + uint32_t snd_wl1; + uint32_t snd_wnd; + uint32_t max_window; + uint32_t rcv_wnd; + uint32_t rcv_wup; +}; + +struct tcp_zerocopy_receive { + uint64_t address; + uint32_t length; + uint32_t recv_skip_hint; +}; + +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/netinet/udp.h b/third_party/musl/ndk_musl_include/netinet/udp.h new file mode 100644 index 0000000000000000000000000000000000000000..aa78b2b9616b172991c83de27e55f83c1c3242d0 --- /dev/null +++ b/third_party/musl/ndk_musl_include/netinet/udp.h @@ -0,0 +1,45 @@ +#ifndef _NETINET_UDP_H +#define _NETINET_UDP_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#ifdef _GNU_SOURCE +#define uh_sport source +#define uh_dport dest +#define uh_ulen len +#define uh_sum check +#endif + +struct udphdr { + uint16_t uh_sport; + uint16_t uh_dport; + uint16_t uh_ulen; + uint16_t uh_sum; +}; + +#define UDP_CORK 1 +#define UDP_ENCAP 100 +#define UDP_NO_CHECK6_TX 101 +#define UDP_NO_CHECK6_RX 102 +#define UDP_SEGMENT 103 +#define UDP_GRO 104 + +#define UDP_ENCAP_ESPINUDP_NON_IKE 1 +#define UDP_ENCAP_ESPINUDP 2 +#define UDP_ENCAP_L2TPINUDP 3 +#define UDP_ENCAP_GTP0 4 +#define UDP_ENCAP_GTP1U 5 +#define UDP_ENCAP_RXRPC 6 + +#define SOL_UDP 17 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/netpacket/packet.h b/third_party/musl/ndk_musl_include/netpacket/packet.h new file mode 100644 index 0000000000000000000000000000000000000000..2a7878bb964bfe5c59bfe3414eb25bc34cea0935 --- /dev/null +++ b/third_party/musl/ndk_musl_include/netpacket/packet.h @@ -0,0 +1,62 @@ +#ifndef _NETPACKET_PACKET_H +#define _NETPACKET_PACKET_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct sockaddr_ll { + unsigned short sll_family, sll_protocol; + int sll_ifindex; + unsigned short sll_hatype; + unsigned char sll_pkttype, sll_halen; + unsigned char sll_addr[8]; +}; + +struct packet_mreq { + int mr_ifindex; + unsigned short int mr_type, mr_alen; + unsigned char mr_address[8]; +}; + +#define PACKET_HOST 0 +#define PACKET_BROADCAST 1 +#define PACKET_MULTICAST 2 +#define PACKET_OTHERHOST 3 +#define PACKET_OUTGOING 4 +#define PACKET_LOOPBACK 5 +#define PACKET_FASTROUTE 6 + +#define PACKET_ADD_MEMBERSHIP 1 +#define PACKET_DROP_MEMBERSHIP 2 +#define PACKET_RECV_OUTPUT 3 +#define PACKET_RX_RING 5 +#define PACKET_STATISTICS 6 +#define PACKET_COPY_THRESH 7 +#define PACKET_AUXDATA 8 +#define PACKET_ORIGDEV 9 +#define PACKET_VERSION 10 +#define PACKET_HDRLEN 11 +#define PACKET_RESERVE 12 +#define PACKET_TX_RING 13 +#define PACKET_LOSS 14 +#define PACKET_VNET_HDR 15 +#define PACKET_TX_TIMESTAMP 16 +#define PACKET_TIMESTAMP 17 +#define PACKET_FANOUT 18 +#define PACKET_TX_HAS_OFF 19 +#define PACKET_QDISC_BYPASS 20 +#define PACKET_ROLLOVER_STATS 21 +#define PACKET_FANOUT_DATA 22 +#define PACKET_IGNORE_OUTGOING 23 + +#define PACKET_MR_MULTICAST 0 +#define PACKET_MR_PROMISC 1 +#define PACKET_MR_ALLMULTI 2 +#define PACKET_MR_UNICAST 3 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/nl_types.h b/third_party/musl/ndk_musl_include/nl_types.h new file mode 100644 index 0000000000000000000000000000000000000000..62c4c4a02fc46dd812dc7013cfaf73f857e5c2d3 --- /dev/null +++ b/third_party/musl/ndk_musl_include/nl_types.h @@ -0,0 +1,22 @@ +#ifndef _NL_TYPES_H +#define _NL_TYPES_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define NL_SETD 1 +#define NL_CAT_LOCALE 1 + +typedef int nl_item; +typedef void *nl_catd; + +nl_catd catopen (const char *, int); +char *catgets (nl_catd, int, int, const char *); +int catclose (nl_catd); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/paths.h b/third_party/musl/ndk_musl_include/paths.h new file mode 100644 index 0000000000000000000000000000000000000000..a52822cd75226c556626d27875d88b4486384c2f --- /dev/null +++ b/third_party/musl/ndk_musl_include/paths.h @@ -0,0 +1,31 @@ +#ifndef _PATHS_H +#define _PATHS_H + +#define _PATH_DEFPATH "/usr/local/bin:/bin:/usr/bin" +#define _PATH_STDPATH "/bin:/usr/bin:/sbin:/usr/sbin" + +#define _PATH_BSHELL "/bin/sh" +#define _PATH_CONSOLE "/dev/console" +#define _PATH_DEVNULL "/dev/null" +#define _PATH_KLOG "/proc/kmsg" +#define _PATH_LASTLOG "/var/log/lastlog" +#define _PATH_MAILDIR "/var/mail" +#define _PATH_MAN "/usr/share/man" +#define _PATH_MNTTAB "/etc/fstab" +#define _PATH_MOUNTED "/etc/mtab" +#define _PATH_NOLOGIN "/etc/nologin" +#define _PATH_SENDMAIL "/usr/sbin/sendmail" +#define _PATH_SHADOW "/etc/shadow" +#define _PATH_SHELLS "/etc/shells" +#define _PATH_TTY "/dev/tty" +#define _PATH_UTMP "/dev/null/utmp" +#define _PATH_VI "/usr/bin/vi" +#define _PATH_WTMP "/dev/null/wtmp" + +#define _PATH_DEV "/dev/" +#define _PATH_TMP "/tmp/" +#define _PATH_VARDB "/var/lib/misc/" +#define _PATH_VARRUN "/var/run/" +#define _PATH_VARTMP "/var/tmp/" + +#endif diff --git a/third_party/musl/ndk_musl_include/poll.h b/third_party/musl/ndk_musl_include/poll.h new file mode 100644 index 0000000000000000000000000000000000000000..7b0e88297c2b3e3cc0db190a8aa69c7fe60f4c90 --- /dev/null +++ b/third_party/musl/ndk_musl_include/poll.h @@ -0,0 +1,59 @@ +#ifndef _POLL_H +#define _POLL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include + +#define POLLIN 0x001 +#define POLLPRI 0x002 +#define POLLOUT 0x004 +#define POLLERR 0x008 +#define POLLHUP 0x010 +#define POLLNVAL 0x020 +#define POLLRDNORM 0x040 +#define POLLRDBAND 0x080 +#ifndef POLLWRNORM +#define POLLWRNORM 0x100 +#define POLLWRBAND 0x200 +#endif +#ifndef POLLMSG +#define POLLMSG 0x400 +#define POLLRDHUP 0x2000 +#endif + +typedef unsigned long nfds_t; + +struct pollfd { + int fd; + short events; + short revents; +}; + +int poll (struct pollfd *, nfds_t, int); + +#ifdef _GNU_SOURCE +#define __NEED_time_t +#define __NEED_struct_timespec +#define __NEED_sigset_t +#include +int ppoll(struct pollfd *, nfds_t, const struct timespec *, const sigset_t *); +#endif + +#if _REDIR_TIME64 +#ifdef _GNU_SOURCE +__REDIR(ppoll, __ppoll_time64); +#endif +#endif + +#include + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/pthread.h b/third_party/musl/ndk_musl_include/pthread.h new file mode 100644 index 0000000000000000000000000000000000000000..33e6a3edaefda5b2faef01a0c29834f256bf5b6b --- /dev/null +++ b/third_party/musl/ndk_musl_include/pthread.h @@ -0,0 +1,393 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _PTHREAD_H +#define _PTHREAD_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* Musl did not provide the "owner" macro directly, + * so users can not access the mutex-ower-ID. + * Thus we added this macro for getting the owner-ID + * of the mutex. */ + +/* These macros provides macros for accessing inner + * attributes of the pthread_mutex_t struct. + * It is intended for solving the coompiling failure + * of Dopra codes which claims that .__data.* realm + * can not be found in pthread_mutex_t. */ + +#define __NEED_time_t +#define __NEED_clockid_t +#define __NEED_struct_timespec +#define __NEED_sigset_t +#define __NEED_pthread_t +#define __NEED_pthread_attr_t +#define __NEED_pthread_mutexattr_t +#define __NEED_pthread_condattr_t +#define __NEED_pthread_rwlockattr_t +#define __NEED_pthread_barrierattr_t +#define __NEED_pthread_mutex_t +#define __NEED_pthread_cond_t +#define __NEED_pthread_rwlock_t +#define __NEED_pthread_barrier_t +#define __NEED_pthread_spinlock_t +#define __NEED_pthread_key_t +#define __NEED_pthread_once_t +#define __NEED_size_t + +#include + +#include +#include + +#define PTHREAD_CREATE_JOINABLE 0 +#define PTHREAD_CREATE_DETACHED 1 + +#define PTHREAD_MUTEX_NORMAL 0 +#define PTHREAD_MUTEX_DEFAULT 0 +#define PTHREAD_MUTEX_RECURSIVE 1 +#define PTHREAD_MUTEX_ERRORCHECK 2 + +#define PTHREAD_MUTEX_STALLED 0 +#define PTHREAD_MUTEX_ROBUST 1 + +#define PTHREAD_PRIO_NONE 0 +#define PTHREAD_PRIO_INHERIT 1 +#define PTHREAD_PRIO_PROTECT 2 + +#define PTHREAD_INHERIT_SCHED 0 +#define PTHREAD_EXPLICIT_SCHED 1 + +#define PTHREAD_SCOPE_SYSTEM 0 +#define PTHREAD_SCOPE_PROCESS 1 + +#define PTHREAD_PROCESS_PRIVATE 0 +#define PTHREAD_PROCESS_SHARED 1 + + +#define PTHREAD_MUTEX_INITIALIZER {{{0}}} +#define PTHREAD_RWLOCK_INITIALIZER {{{0}}} +#define PTHREAD_COND_INITIALIZER {{{0}}} +#define PTHREAD_ONCE_INIT 0 + + +#define PTHREAD_CANCEL_ENABLE 0 +#define PTHREAD_CANCEL_DISABLE 1 +#define PTHREAD_CANCEL_MASKED 2 + +#define PTHREAD_CANCEL_DEFERRED 0 +#define PTHREAD_CANCEL_ASYNCHRONOUS 1 + +#define PTHREAD_CANCELED ((void *)-1) + + +#define PTHREAD_BARRIER_SERIAL_THREAD (-1) + + +int pthread_create(pthread_t *__restrict, const pthread_attr_t *__restrict, void *(*)(void *), void *__restrict); +int pthread_detach(pthread_t); +_Noreturn void pthread_exit(void *); +int pthread_join(pthread_t, void **); +pid_t pthread_gettid_np(pthread_t); + +#ifdef __GNUC__ +__attribute__((const)) +#endif +pthread_t pthread_self(void); + +int pthread_equal(pthread_t, pthread_t); +#ifndef __cplusplus +#define pthread_equal(x,y) ((x)==(y)) +#endif + +int pthread_getschedparam(pthread_t, int *__restrict, struct sched_param *__restrict); +int pthread_setschedparam(pthread_t, int, const struct sched_param *); +int pthread_setschedprio(pthread_t, int); + +int pthread_once(pthread_once_t *, void (*)(void)); + +int pthread_mutex_init(pthread_mutex_t *__restrict, const pthread_mutexattr_t *__restrict); +int pthread_mutex_lock(pthread_mutex_t *); +int pthread_mutex_unlock(pthread_mutex_t *); +int pthread_mutex_trylock(pthread_mutex_t *); +int pthread_mutex_timedlock(pthread_mutex_t *__restrict, const struct timespec *__restrict); +int pthread_mutex_destroy(pthread_mutex_t *); +/** + * @brief lock the mutex object referenced by mutex. If the mutex is already locked, + * the calling thread shall block until the mutex becomes available as in the + * pthread_mutex_lock() function. If the mutex cannot be locked without waiting for + * another thread to unlock the mutex, this wait shall be terminated when the specified + * timeout expires. The timeout shall be based on the CLOCK_REALTIME or CLOCK_MONOTONIC clock. + * The resolution of the timeout shall be the resolution of the clock on which it is based. + * @param mutex a robust mutex and the process containing the owning thread terminated while holding the mutex lock. + * @param clock_id specified CLOCK_REALTIME or CLOCK_MONOTONIC clock. + * @param timespec the timeout shall expire specified by abstime passes. + * @return clocklock result. + * @retval 0 is returned on success. + * @retval -1 is returned on failure, and errno is set to indicate the error. + */ +int pthread_mutex_clocklock(pthread_mutex_t *__restrict, clockid_t, const struct timespec *__restrict); +/** + * @brief lock the mutex object referenced by mutex. If the mutex is already locked, + * the calling thread shall block until the mutex becomes available as in the + * pthread_mutex_lock() function. If the mutex cannot be locked without waiting for + * another thread to unlock the mutex, this wait shall be terminated when the specified + * timeout expires. The timeout shall be based on the CLOCK_MONOTONIC clock. + * The resolution of the timeout shall be the resolution of the clock on which it is based. + * @param mutex a robust mutex and the process containing the owning thread terminated while holding the mutex lock. + * @param timespec the timeout shall expire specified by abstime passes. + * @return clocklock result. + * @retval 0 is returned on success. + * @retval -1 is returned on failure, and errno is set to indicate the error. + */ +int pthread_mutex_timedlock_monotonic_np(pthread_mutex_t *__restrict, const struct timespec *__restrict); +/** + * @brief lock the mutex object referenced by mutex. If the mutex is already locked, + * the calling thread shall block until the mutex becomes available as in the + * pthread_mutex_lock() function. If the mutex cannot be locked without waiting for + * another thread to unlock the mutex, this wait shall be terminated when the specified + * timeout expires. The timeout shall be based on the CLOCK_MONOTONIC clock. + * The resolution of the timeout shall be the resolution of the clock on which it is based. + * @param mutex a robust mutex and the process containing the owning thread terminated while holding the mutex lock. + * @param ms the timeout shall expire specified by relative time(ms) passes. + * @return clocklock result. + * @retval 0 is returned on success. + * @retval -1 is returned on failure, and errno is set to indicate the error. + */ +int pthread_mutex_lock_timeout_np(pthread_mutex_t *__restrict, unsigned int); + +int pthread_cond_init(pthread_cond_t *__restrict, const pthread_condattr_t *__restrict); +int pthread_cond_destroy(pthread_cond_t *); +int pthread_cond_wait(pthread_cond_t *__restrict, pthread_mutex_t *__restrict); +int pthread_cond_timedwait(pthread_cond_t *__restrict, pthread_mutex_t *__restrict, const struct timespec *__restrict); +/** + * @brief The thread waits for a signal to trigger, and if timeout or signal is triggered, + * the thread wakes up. + * @param pthread_cond_t Condition variables for multithreading. + * @param pthread_mutex_t Thread mutex variable. + * @param clockid_t Clock ID used in clock and timer functions. + * @param timespec The timeout shall expire specified by abstime passes. + * @return pthread_cond_clockwait result. + * @retval 0 pthread_cond_clockwait successful. + * @retval ETIMEDOUT pthread_cond_clockwait Connection timed out. + * @retval EINVAL pthread_cond_clockwait error. + */ +int pthread_cond_clockwait(pthread_cond_t *__restrict, pthread_mutex_t *__restrict, + clockid_t, const struct timespec *__restrict); + +/** + * @brief Condition variables have an initialization option to use CLOCK_MONOTONIC. + * The thread waits for a signal to trigger, and if timeout or signal is triggered, + * the thread wakes up. + * @param pthread_cond_t Condition variables for multithreading. + * @param pthread_mutex_t Thread mutex variable. + * @param timespec The timeout shall expire specified by abstime passes. + * @return pthread_cond_timedwait_monotonic_np result. + * @retval 0 pthread_cond_timedwait_monotonic_np successful. + * @retval ETIMEDOUT pthread_cond_timedwait_monotonic_np Connection timed out. + * @retval EINVAL pthread_cond_timedwait_monotonic_np error. + */ +int pthread_cond_timedwait_monotonic_np(pthread_cond_t *__restrict, pthread_mutex_t *__restrict, + const struct timespec *__restrict); + +/** + * @brief Condition variables have an initialization option to use CLOCK_MONOTONIC and The time + * parameter is in milliseconds. The thread waits for a signal to trigger, and if timeout or + * signal is triggered, the thread wakes up. + * @param pthread_cond_t Condition variables for multithreading. + * @param pthread_mutex_t Thread mutex variable. + * @param unsigned Timeout, in milliseconds. + * @return pthread_cond_timeout_np result. + * @retval 0 pthread_cond_timeout_np successful. + * @retval ETIMEDOUT pthread_cond_timeout_np Connection timed out. + * @retval EINVAL pthread_cond_timeout_np error. + */ +int pthread_cond_timeout_np(pthread_cond_t* __restrict, pthread_mutex_t* __restrict, unsigned int); +int pthread_cond_broadcast(pthread_cond_t *); +int pthread_cond_signal(pthread_cond_t *); + +int pthread_rwlock_init(pthread_rwlock_t *__restrict, const pthread_rwlockattr_t *__restrict); +int pthread_rwlock_destroy(pthread_rwlock_t *); +int pthread_rwlock_rdlock(pthread_rwlock_t *); +int pthread_rwlock_tryrdlock(pthread_rwlock_t *); +int pthread_rwlock_timedrdlock(pthread_rwlock_t *__restrict, const struct timespec *__restrict); +/** + * @brief Apply a read lock to the read-write lock referenced by rwlock as in the + * pthread_rwlock_rdlock() function. However, if the lock cannot be acquired without + * waiting for other threads to unlock the lock, this wait shall be terminated when + * the specified timeout expires. The timeout shall expire when the absolute time specified by + * abstime passes, as measured by the clock on which timeouts are based, or if the absolute time + * specified by abstime has already been passed at the time of the call. + * The timeout shall be based on the CLOCK_REALTIME or CLOCK_MONOTONIC clock. + * @param rw a read lock to the read-write lock referenced. + * @param clock_id specified CLOCK_REALTIME or CLOCK_MONOTONIC clock. + * @param timespec the timeout shall expire specified by abstime passes. + * @return clockrdlock result. + * @retval 0 is returned on success. + * @retval -1 is returned on failure, and errno is set to indicate the error. + */ +int pthread_rwlock_clockrdlock(pthread_rwlock_t *__restrict, clockid_t, const struct timespec *__restrict); +/** + * @brief Apply a read lock to the read-write lock referenced by rwlock as in the + * pthread_rwlock_rdlock() function. However, if the lock cannot be acquired without + * waiting for other threads to unlock the lock, this wait shall be terminated when + * the specified timeout expires. The timeout shall expire when the absolute time specified by + * abstime passes, as measured by the clock on which timeouts are based, or if the absolute time + * specified by abstime has already been passed at the time of the call. + * The timeout shall be based on the CLOCK_MONOTONIC clock. + * @param rw a read lock to the read-write lock referenced. + * @param timespec the timeout shall expire specified by abstime passes. + * @return clockrdlock result. + * @retval 0 is returned on success. + * @retval -1 is returned on failure, and errno is set to indicate the error. + */ +int pthread_rwlock_timedrdlock_monotonic_np(pthread_rwlock_t *__restrict, const struct timespec *__restrict); +int pthread_rwlock_wrlock(pthread_rwlock_t *); +int pthread_rwlock_trywrlock(pthread_rwlock_t *); +int pthread_rwlock_timedwrlock(pthread_rwlock_t *__restrict, const struct timespec *__restrict); +int pthread_rwlock_unlock(pthread_rwlock_t *); +/** + * @brief Read-write lock variables have an initialization option to use CLOCK_MONOTONIC. + * apply a read lock to the read-write lock referenced by rwlock as in the + * pthread_rwlock_wrlock() function. However, if the lock cannot be acquired without + * waiting for other threads to unlock the lock, this wait shall be terminated when + * the specified timeout expires. The timeout shall expire when the absolute time specified by + * abstime passes, as measured by the clock on which timeouts are based, or if the absolute time + * specified by abstime has already been passed at the time of the call. + * The timeout shall be based on the CLOCK_MONOTONIC clock. + * @param rw a read lock to the read-write lock referenced. + * @param timespec the timeout shall expire specified by abstime passes. + * @return clockrdlock result. + * @retval 0 is returned on success. + * @retval -1 is returned on failure, and errno is set to indicate the error. + */ +int pthread_rwlock_timedwrlock_monotonic_np(pthread_rwlock_t *__restrict, const struct timespec *__restrict); + +/** + * @brief Apply a read lock to the read-write lock referenced by rwlock as in the + * pthread_rwlock_wrlock() function. However, if the lock cannot be acquired without + * waiting for other threads to unlock the lock, this wait shall be terminated when + * the specified timeout expires. The timeout shall expire when the absolute time specified by + * abstime passes, as measured by the clock on which timeouts are based, or if the absolute time + * specified by abstime has already been passed at the time of the call. + * The timeout shall be based on the CLOCK_REALTIME or CLOCK_MONOTONIC clock. + * @param rw a read lock to the read-write lock referenced. + * @param clock_id specified CLOCK_REALTIME or CLOCK_MONOTONIC clock. + * @param timespec the timeout shall expire specified by abstime passes. + * @return clockrdlock result. + * @retval 0 is returned on success. + * @retval -1 is returned on failure, and errno is set to indicate the error. + */ +int pthread_rwlock_clockwrlock(pthread_rwlock_t *__restrict, clockid_t, const struct timespec *__restrict); + +int pthread_spin_init(pthread_spinlock_t *, int); +int pthread_spin_destroy(pthread_spinlock_t *); +int pthread_spin_lock(pthread_spinlock_t *); +int pthread_spin_trylock(pthread_spinlock_t *); +int pthread_spin_unlock(pthread_spinlock_t *); + +int pthread_barrier_init(pthread_barrier_t *__restrict, const pthread_barrierattr_t *__restrict, unsigned); +int pthread_barrier_destroy(pthread_barrier_t *); +int pthread_barrier_wait(pthread_barrier_t *); + +int pthread_key_create(pthread_key_t *, void (*)(void *)); +int pthread_key_delete(pthread_key_t); +void *pthread_getspecific(pthread_key_t); +int pthread_setspecific(pthread_key_t, const void *); + +int pthread_attr_init(pthread_attr_t *); +int pthread_attr_destroy(pthread_attr_t *); + +int pthread_attr_getguardsize(const pthread_attr_t *__restrict, size_t *__restrict); +int pthread_attr_setguardsize(pthread_attr_t *, size_t); +int pthread_attr_getstacksize(const pthread_attr_t *__restrict, size_t *__restrict); +int pthread_attr_setstacksize(pthread_attr_t *, size_t); +int pthread_attr_getdetachstate(const pthread_attr_t *, int *); +int pthread_attr_setdetachstate(pthread_attr_t *, int); +int pthread_attr_getstack(const pthread_attr_t *__restrict, void **__restrict, size_t *__restrict); +int pthread_attr_setstack(pthread_attr_t *, void *, size_t); +int pthread_attr_getscope(const pthread_attr_t *__restrict, int *__restrict); +int pthread_attr_setscope(pthread_attr_t *, int); +int pthread_attr_getschedpolicy(const pthread_attr_t *__restrict, int *__restrict); +int pthread_attr_setschedpolicy(pthread_attr_t *, int); +int pthread_attr_getschedparam(const pthread_attr_t *__restrict, struct sched_param *__restrict); +int pthread_attr_setschedparam(pthread_attr_t *__restrict, const struct sched_param *__restrict); +int pthread_attr_getinheritsched(const pthread_attr_t *__restrict, int *__restrict); +int pthread_attr_setinheritsched(pthread_attr_t *, int); + +int pthread_mutexattr_destroy(pthread_mutexattr_t *); +int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *__restrict, int *__restrict); +int pthread_mutexattr_getpshared(const pthread_mutexattr_t *__restrict, int *__restrict); +int pthread_mutexattr_gettype(const pthread_mutexattr_t *__restrict, int *__restrict); +int pthread_mutexattr_init(pthread_mutexattr_t *); +int pthread_mutexattr_setprotocol(pthread_mutexattr_t *, int); +int pthread_mutexattr_setpshared(pthread_mutexattr_t *, int); +int pthread_mutexattr_settype(pthread_mutexattr_t *, int); + +int pthread_condattr_init(pthread_condattr_t *); +int pthread_condattr_destroy(pthread_condattr_t *); +int pthread_condattr_setclock(pthread_condattr_t *, clockid_t); +int pthread_condattr_setpshared(pthread_condattr_t *, int); +int pthread_condattr_getclock(const pthread_condattr_t *__restrict, clockid_t *__restrict); +int pthread_condattr_getpshared(const pthread_condattr_t *__restrict, int *__restrict); + +int pthread_rwlockattr_init(pthread_rwlockattr_t *); +int pthread_rwlockattr_destroy(pthread_rwlockattr_t *); +int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *, int); +int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *__restrict, int *__restrict); + +int pthread_barrierattr_destroy(pthread_barrierattr_t *); +int pthread_barrierattr_getpshared(const pthread_barrierattr_t *__restrict, int *__restrict); +int pthread_barrierattr_init(pthread_barrierattr_t *); +int pthread_barrierattr_setpshared(pthread_barrierattr_t *, int); + +int pthread_atfork(void (*)(void), void (*)(void), void (*)(void)); + +int pthread_getcpuclockid(pthread_t, clockid_t *); + +struct __ptcb { + void (*__f)(void *); + void *__x; + struct __ptcb *__next; +}; + +void _pthread_cleanup_push(struct __ptcb *, void (*)(void *), void *); +void _pthread_cleanup_pop(struct __ptcb *, int); + +#define pthread_cleanup_push(f, x) do { struct __ptcb __cb; _pthread_cleanup_push(&__cb, f, x); +#define pthread_cleanup_pop(r) _pthread_cleanup_pop(&__cb, (r)); } while(0) + +#ifdef _GNU_SOURCE +struct cpu_set_t; +int pthread_getattr_np(pthread_t, pthread_attr_t *); +int pthread_setname_np(pthread_t, const char *); +int pthread_getname_np(pthread_t, char *, size_t); +#endif + +#if _REDIR_TIME64 +__REDIR(pthread_mutex_timedlock, __pthread_mutex_timedlock_time64); +__REDIR(pthread_cond_timedwait, __pthread_cond_timedwait_time64); +__REDIR(pthread_rwlock_timedrdlock, __pthread_rwlock_timedrdlock_time64); +__REDIR(pthread_rwlock_timedwrlock, __pthread_rwlock_timedwrlock_time64); +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/pty.h b/third_party/musl/ndk_musl_include/pty.h new file mode 100644 index 0000000000000000000000000000000000000000..3ec2f19a6290f182d442540d7b16391f58b475c8 --- /dev/null +++ b/third_party/musl/ndk_musl_include/pty.h @@ -0,0 +1,18 @@ +#ifndef _PTY_H +#define _PTY_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +int openpty(int *, int *, char *, const struct termios *, const struct winsize *); +int forkpty(int *, char *, const struct termios *, const struct winsize *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/pwd.h b/third_party/musl/ndk_musl_include/pwd.h new file mode 100644 index 0000000000000000000000000000000000000000..7e9f3c14f7754d398e235bb5acd8d083828f7e68 --- /dev/null +++ b/third_party/musl/ndk_musl_include/pwd.h @@ -0,0 +1,45 @@ +#ifndef _PWD_H +#define _PWD_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_size_t +#define __NEED_uid_t +#define __NEED_gid_t + +#ifdef _GNU_SOURCE +#define __NEED_FILE +#endif + +#include + +struct passwd { + char *pw_name; + char *pw_passwd; + uid_t pw_uid; + gid_t pw_gid; + char *pw_gecos; + char *pw_dir; + char *pw_shell; +}; + +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +void setpwent (void); +void endpwent (void); +struct passwd *getpwent (void); +#endif + +struct passwd *getpwuid (uid_t); +struct passwd *getpwnam (const char *); +int getpwuid_r (uid_t, struct passwd *, char *, size_t, struct passwd **); +int getpwnam_r (const char *, struct passwd *, char *, size_t, struct passwd **); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/regex.h b/third_party/musl/ndk_musl_include/regex.h new file mode 100644 index 0000000000000000000000000000000000000000..4b77f42d9be92bf17cc8d99492832abe897978bf --- /dev/null +++ b/third_party/musl/ndk_musl_include/regex.h @@ -0,0 +1,62 @@ +#ifndef _REGEX_H +#define _REGEX_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_regoff_t +#define __NEED_size_t + +#include + +typedef struct re_pattern_buffer { + size_t re_nsub; + void *__opaque, *__padding[4]; + size_t __nsub2; + char __padding2; +} regex_t; + +typedef struct { + regoff_t rm_so; + regoff_t rm_eo; +} regmatch_t; + +#define REG_EXTENDED 1 +#define REG_ICASE 2 +#define REG_NEWLINE 4 +#define REG_NOSUB 8 + +#define REG_NOTBOL 1 +#define REG_NOTEOL 2 + +#define REG_OK 0 +#define REG_NOMATCH 1 +#define REG_BADPAT 2 +#define REG_ECOLLATE 3 +#define REG_ECTYPE 4 +#define REG_EESCAPE 5 +#define REG_ESUBREG 6 +#define REG_EBRACK 7 +#define REG_EPAREN 8 +#define REG_EBRACE 9 +#define REG_BADBR 10 +#define REG_ERANGE 11 +#define REG_ESPACE 12 +#define REG_BADRPT 13 + +#define REG_ENOSYS -1 + +int regcomp(regex_t *__restrict, const char *__restrict, int); +int regexec(const regex_t *__restrict, const char *__restrict, size_t, regmatch_t *__restrict, int); +void regfree(regex_t *); + +size_t regerror(int, const regex_t *__restrict, char *__restrict, size_t); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/resolv.h b/third_party/musl/ndk_musl_include/resolv.h new file mode 100644 index 0000000000000000000000000000000000000000..f4849522b67ca234b4db0d97ac3e597d7223055d --- /dev/null +++ b/third_party/musl/ndk_musl_include/resolv.h @@ -0,0 +1,141 @@ +#ifndef _RESOLV_H +#define _RESOLV_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define MAXNS 3 +#define MAXDFLSRCH 3 +#define MAXDNSRCH 6 +#define LOCALDOMAINPARTS 2 + +#define RES_TIMEOUT 5 +#define MAXRESOLVSORT 10 +#define RES_MAXNDOTS 15 +#define RES_MAXRETRANS 30 +#define RES_MAXRETRY 5 +#define RES_DFLRETRY 2 +#define RES_MAXTIME 65535 + +/* unused; purely for broken apps */ +typedef struct __res_state { + int retrans; + int retry; + unsigned long options; + int nscount; + struct sockaddr_in nsaddr_list[MAXNS]; +# define nsaddr nsaddr_list[0] + unsigned short id; + char *dnsrch[MAXDNSRCH+1]; + char defdname[256]; + unsigned long pfcode; + unsigned ndots:4; + unsigned nsort:4; + unsigned ipv6_unavail:1; + unsigned unused:23; + struct { + struct in_addr addr; + uint32_t mask; + } sort_list[MAXRESOLVSORT]; + void *qhook; + void *rhook; + int res_h_errno; + int _vcsock; + unsigned _flags; + union { + char pad[52]; + struct { + uint16_t nscount; + uint16_t nsmap[MAXNS]; + int nssocks[MAXNS]; + uint16_t nscount6; + uint16_t nsinit; + struct sockaddr_in6 *nsaddrs[MAXNS]; + unsigned int _initstamp[2]; + } _ext; + } _u; +} *res_state; + +#define __RES 19960801 + +#ifndef _PATH_RESCONF +#define _PATH_RESCONF "/etc/resolv.conf" +#endif + +struct res_sym { + int number; + char *name; + char *humanname; +}; + +#define RES_F_VC 0x00000001 +#define RES_F_CONN 0x00000002 +#define RES_F_EDNS0ERR 0x00000004 + +#define RES_EXHAUSTIVE 0x00000001 + +#define RES_INIT 0x00000001 +#define RES_DEBUG 0x00000002 +#define RES_AAONLY 0x00000004 +#define RES_USEVC 0x00000008 +#define RES_PRIMARY 0x00000010 +#define RES_IGNTC 0x00000020 +#define RES_RECURSE 0x00000040 +#define RES_DEFNAMES 0x00000080 +#define RES_STAYOPEN 0x00000100 +#define RES_DNSRCH 0x00000200 +#define RES_INSECURE1 0x00000400 +#define RES_INSECURE2 0x00000800 +#define RES_NOALIASES 0x00001000 +#define RES_USE_INET6 0x00002000 +#define RES_ROTATE 0x00004000 +#define RES_NOCHECKNAME 0x00008000 +#define RES_KEEPTSIG 0x00010000 +#define RES_BLAST 0x00020000 +#define RES_USEBSTRING 0x00040000 +#define RES_NOIP6DOTINT 0x00080000 +#define RES_USE_EDNS0 0x00100000 +#define RES_SNGLKUP 0x00200000 +#define RES_SNGLKUPREOP 0x00400000 +#define RES_USE_DNSSEC 0x00800000 + +#define RES_DEFAULT (RES_RECURSE|RES_DEFNAMES|RES_DNSRCH|RES_NOIP6DOTINT) + +#define RES_PRF_STATS 0x00000001 +#define RES_PRF_UPDATE 0x00000002 +#define RES_PRF_CLASS 0x00000004 +#define RES_PRF_CMD 0x00000008 +#define RES_PRF_QUES 0x00000010 +#define RES_PRF_ANS 0x00000020 +#define RES_PRF_AUTH 0x00000040 +#define RES_PRF_ADD 0x00000080 +#define RES_PRF_HEAD1 0x00000100 +#define RES_PRF_HEAD2 0x00000200 +#define RES_PRF_TTLID 0x00000400 +#define RES_PRF_HEADX 0x00000800 +#define RES_PRF_QUERY 0x00001000 +#define RES_PRF_REPLY 0x00002000 +#define RES_PRF_INIT 0x00004000 + +#define _res (*__res_state()) + +int res_init(void); +int res_query(const char *, int, int, unsigned char *, int); +int res_querydomain(const char *, const char *, int, int, unsigned char *, int); +int res_search(const char *, int, int, unsigned char *, int); +int res_mkquery(int, const char *, int, int, const unsigned char *, int, const unsigned char*, unsigned char *, int); +int res_send(const unsigned char *, int, unsigned char *, int); +int dn_comp(const char *, unsigned char *, int, unsigned char **, unsigned char **); +int dn_expand(const unsigned char *, const unsigned char *, const unsigned char *, char *, int); +int dn_skipname(const unsigned char *, const unsigned char *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sched.h b/third_party/musl/ndk_musl_include/sched.h new file mode 100644 index 0000000000000000000000000000000000000000..f3077eef4fd33a23a5dc5cb19b4ac7972e41d527 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sched.h @@ -0,0 +1,152 @@ +#ifndef _SCHED_H +#define _SCHED_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_struct_timespec +#define __NEED_pid_t +#define __NEED_time_t + +#ifdef _GNU_SOURCE +#define __NEED_size_t +#endif + +#include +#include +struct sched_param { + int sched_priority; + int __reserved1; +#if _REDIR_TIME64 + long __reserved2[4]; +#else + struct { + time_t __reserved1; + long __reserved2; + } __reserved2[2]; +#endif + int __reserved3; +}; + +int sched_get_priority_max(int); +int sched_get_priority_min(int); +int sched_getparam(pid_t, struct sched_param *); +int sched_getscheduler(pid_t); +int sched_rr_get_interval(pid_t, struct timespec *); +int sched_setparam(pid_t, const struct sched_param *); +int sched_setscheduler(pid_t, int, const struct sched_param *); +int sched_yield(void); + + +#define SCHED_OTHER 0 +#define SCHED_FIFO 1 +#define SCHED_RR 2 +#define SCHED_BATCH 3 +#define SCHED_IDLE 5 +#define SCHED_DEADLINE 6 +#define SCHED_RESET_ON_FORK 0x40000000 + +#ifdef _GNU_SOURCE +#define CSIGNAL 0x000000ff +#define CLONE_VM 0x00000100 +#define CLONE_FS 0x00000200 +#define CLONE_FILES 0x00000400 +#define CLONE_SIGHAND 0x00000800 +#define CLONE_PIDFD 0x00001000 +#define CLONE_PTRACE 0x00002000 +#define CLONE_VFORK 0x00004000 +#define CLONE_PARENT 0x00008000 +#define CLONE_THREAD 0x00010000 +#define CLONE_NEWNS 0x00020000 +#define CLONE_SYSVSEM 0x00040000 +#define CLONE_SETTLS 0x00080000 +#define CLONE_PARENT_SETTID 0x00100000 +#define CLONE_CHILD_CLEARTID 0x00200000 +#define CLONE_DETACHED 0x00400000 +#define CLONE_UNTRACED 0x00800000 +#define CLONE_CHILD_SETTID 0x01000000 +#define CLONE_NEWCGROUP 0x02000000 +#define CLONE_NEWUTS 0x04000000 +#define CLONE_NEWIPC 0x08000000 +#define CLONE_NEWUSER 0x10000000 +#define CLONE_NEWPID 0x20000000 +#define CLONE_NEWNET 0x40000000 +#define CLONE_IO 0x80000000 +int clone (int (*)(void *), void *, int, void *, ...); +int unshare(int); +int setns(int, int); + +void *memcpy(void *__restrict, const void *__restrict, size_t); +int memcmp(const void *, const void *, size_t); +void *memset (void *, int, size_t); +void *calloc(size_t, size_t); +void free(void *); + +typedef struct cpu_set_t { unsigned long __bits[128/sizeof(long)]; } cpu_set_t; +cpu_set_t* __sched_cpualloc(size_t __count); +int __sched_cpucount(size_t, const cpu_set_t *); +int sched_getcpu(void); +int sched_getaffinity(pid_t, size_t, cpu_set_t *); +int sched_setaffinity(pid_t, size_t, const cpu_set_t *); + +#define __CPU_op_S(i, size, set, op) ( (i)/8U >= (size) ? 0 : \ + (((unsigned long *)(set))[(i)/8/sizeof(long)] op (1UL<<((i)%(8*sizeof(long))))) ) + +#define CPU_SET_S(i, size, set) __CPU_op_S(i, size, set, |=) +#define CPU_CLR_S(i, size, set) __CPU_op_S(i, size, set, &=~) +#define CPU_ISSET_S(i, size, set) __CPU_op_S(i, size, set, &) + +#define __CPU_op_func_S(func, op) \ +static __inline void __CPU_##func##_S(size_t __size, cpu_set_t *__dest, \ + const cpu_set_t *__src1, const cpu_set_t *__src2) \ +{ \ + size_t __i; \ + for (__i=0; __i<__size/sizeof(long); __i++) \ + ((unsigned long *)__dest)[__i] = ((unsigned long *)__src1)[__i] \ + op ((unsigned long *)__src2)[__i] ; \ +} + +__CPU_op_func_S(AND, &) +__CPU_op_func_S(OR, |) +__CPU_op_func_S(XOR, ^) + +#define CPU_AND_S(a,b,c,d) __CPU_AND_S(a,b,c,d) +#define CPU_OR_S(a,b,c,d) __CPU_OR_S(a,b,c,d) +#define CPU_XOR_S(a,b,c,d) __CPU_XOR_S(a,b,c,d) + +#define CPU_COUNT_S(size,set) __sched_cpucount(size,set) +#define CPU_ZERO_S(size,set) memset(set,0,size) +#define CPU_EQUAL_S(size,set1,set2) (!memcmp(set1,set2,size)) + +#define CPU_ALLOC_SIZE(n) (sizeof(long) * ( (n)/(8*sizeof(long)) \ + + ((n)%(8*sizeof(long)) + 8*sizeof(long)-1)/(8*sizeof(long)) ) ) +#define CPU_ALLOC(n) ((cpu_set_t *)calloc(1,CPU_ALLOC_SIZE(n))) +#define CPU_FREE(set) free(set) + +#define CPU_SETSIZE 128 + +#define CPU_SET(i, set) CPU_SET_S(i,sizeof(cpu_set_t),set) +#define CPU_CLR(i, set) CPU_CLR_S(i,sizeof(cpu_set_t),set) +#define CPU_ISSET(i, set) CPU_ISSET_S(i,sizeof(cpu_set_t),set) +#define CPU_AND(d,s1,s2) CPU_AND_S(sizeof(cpu_set_t),d,s1,s2) +#define CPU_OR(d,s1,s2) CPU_OR_S(sizeof(cpu_set_t),d,s1,s2) +#define CPU_XOR(d,s1,s2) CPU_XOR_S(sizeof(cpu_set_t),d,s1,s2) +#define CPU_COUNT(set) CPU_COUNT_S(sizeof(cpu_set_t),set) +#define CPU_ZERO(set) CPU_ZERO_S(sizeof(cpu_set_t),set) +#define CPU_EQUAL(s1,s2) CPU_EQUAL_S(sizeof(cpu_set_t),s1,s2) + + +#endif + +#if _REDIR_TIME64 +__REDIR(sched_rr_get_interval, __sched_rr_get_interval_time64); +#endif + +#ifdef __cplusplus +} +#endif +#endif + + diff --git a/third_party/musl/ndk_musl_include/scsi/scsi.h b/third_party/musl/ndk_musl_include/scsi/scsi.h new file mode 100644 index 0000000000000000000000000000000000000000..4d422406670f578d56a058a969b015a913fbab70 --- /dev/null +++ b/third_party/musl/ndk_musl_include/scsi/scsi.h @@ -0,0 +1,150 @@ +#ifndef _SCSI_SCSI_H +#define _SCSI_SCSI_H + +#define TEST_UNIT_READY 0x00 +#define REZERO_UNIT 0x01 +#define REQUEST_SENSE 0x03 +#define FORMAT_UNIT 0x04 +#define READ_BLOCK_LIMITS 0x05 +#define REASSIGN_BLOCKS 0x07 +#define READ_6 0x08 +#define WRITE_6 0x0a +#define SEEK_6 0x0b +#define READ_REVERSE 0x0f +#define WRITE_FILEMARKS 0x10 +#define SPACE 0x11 +#define INQUIRY 0x12 +#define RECOVER_BUFFERED_DATA 0x14 +#define MODE_SELECT 0x15 +#define RESERVE 0x16 +#define RELEASE 0x17 +#define COPY 0x18 +#define ERASE 0x19 +#define MODE_SENSE 0x1a +#define START_STOP 0x1b +#define RECEIVE_DIAGNOSTIC 0x1c +#define SEND_DIAGNOSTIC 0x1d +#define ALLOW_MEDIUM_REMOVAL 0x1e +#define SET_WINDOW 0x24 +#define READ_CAPACITY 0x25 +#define READ_10 0x28 +#define WRITE_10 0x2a +#define SEEK_10 0x2b +#define WRITE_VERIFY 0x2e +#define VERIFY 0x2f +#define SEARCH_HIGH 0x30 +#define SEARCH_EQUAL 0x31 +#define SEARCH_LOW 0x32 +#define SET_LIMITS 0x33 +#define PRE_FETCH 0x34 +#define READ_POSITION 0x34 +#define SYNCHRONIZE_CACHE 0x35 +#define LOCK_UNLOCK_CACHE 0x36 +#define READ_DEFECT_DATA 0x37 +#define MEDIUM_SCAN 0x38 +#define COMPARE 0x39 +#define COPY_VERIFY 0x3a +#define WRITE_BUFFER 0x3b +#define READ_BUFFER 0x3c +#define UPDATE_BLOCK 0x3d +#define READ_LONG 0x3e +#define WRITE_LONG 0x3f +#define CHANGE_DEFINITION 0x40 +#define WRITE_SAME 0x41 +#define READ_TOC 0x43 +#define LOG_SELECT 0x4c +#define LOG_SENSE 0x4d +#define MODE_SELECT_10 0x55 +#define RESERVE_10 0x56 +#define RELEASE_10 0x57 +#define MODE_SENSE_10 0x5a +#define PERSISTENT_RESERVE_IN 0x5e +#define PERSISTENT_RESERVE_OUT 0x5f +#define MOVE_MEDIUM 0xa5 +#define READ_12 0xa8 +#define WRITE_12 0xaa +#define WRITE_VERIFY_12 0xae +#define SEARCH_HIGH_12 0xb0 +#define SEARCH_EQUAL_12 0xb1 +#define SEARCH_LOW_12 0xb2 +#define READ_ELEMENT_STATUS 0xb8 +#define SEND_VOLUME_TAG 0xb6 +#define WRITE_LONG_2 0xea +#define GOOD 0x00 +#define CHECK_CONDITION 0x01 +#define CONDITION_GOOD 0x02 +#define BUSY 0x04 +#define INTERMEDIATE_GOOD 0x08 +#define INTERMEDIATE_C_GOOD 0x0a +#define RESERVATION_CONFLICT 0x0c +#define COMMAND_TERMINATED 0x11 +#define QUEUE_FULL 0x14 +#define STATUS_MASK 0x3e +#define NO_SENSE 0x00 +#define RECOVERED_ERROR 0x01 +#define NOT_READY 0x02 +#define MEDIUM_ERROR 0x03 +#define HARDWARE_ERROR 0x04 +#define ILLEGAL_REQUEST 0x05 +#define UNIT_ATTENTION 0x06 +#define DATA_PROTECT 0x07 +#define BLANK_CHECK 0x08 +#define COPY_ABORTED 0x0a +#define ABORTED_COMMAND 0x0b +#define VOLUME_OVERFLOW 0x0d +#define MISCOMPARE 0x0e +#define TYPE_DISK 0x00 +#define TYPE_TAPE 0x01 +#define TYPE_PROCESSOR 0x03 +#define TYPE_WORM 0x04 +#define TYPE_ROM 0x05 +#define TYPE_SCANNER 0x06 +#define TYPE_MOD 0x07 +#define TYPE_MEDIUM_CHANGER 0x08 +#define TYPE_ENCLOSURE 0x0d +#define TYPE_NO_LUN 0x7f +#define COMMAND_COMPLETE 0x00 +#define EXTENDED_MESSAGE 0x01 +#define EXTENDED_MODIFY_DATA_POINTER 0x00 +#define EXTENDED_SDTR 0x01 +#define EXTENDED_EXTENDED_IDENTIFY 0x02 +#define EXTENDED_WDTR 0x03 +#define SAVE_POINTERS 0x02 +#define RESTORE_POINTERS 0x03 +#define DISCONNECT 0x04 +#define INITIATOR_ERROR 0x05 +#define ABORT 0x06 +#define MESSAGE_REJECT 0x07 +#define NOP 0x08 +#define MSG_PARITY_ERROR 0x09 +#define LINKED_CMD_COMPLETE 0x0a +#define LINKED_FLG_CMD_COMPLETE 0x0b +#define BUS_DEVICE_RESET 0x0c +#define INITIATE_RECOVERY 0x0f +#define RELEASE_RECOVERY 0x10 +#define SIMPLE_QUEUE_TAG 0x20 +#define HEAD_OF_QUEUE_TAG 0x21 +#define ORDERED_QUEUE_TAG 0x22 +#define SCSI_IOCTL_GET_IDLUN 0x5382 +#define SCSI_IOCTL_TAGGED_ENABLE 0x5383 +#define SCSI_IOCTL_TAGGED_DISABLE 0x5384 +#define SCSI_IOCTL_PROBE_HOST 0x5385 +#define SCSI_IOCTL_GET_BUS_NUMBER 0x5386 + +struct ccs_modesel_head { + unsigned char _r1; + unsigned char medium; + unsigned char _r2; + unsigned char block_desc_length; + unsigned char density; + unsigned char number_blocks_hi; + unsigned char number_blocks_med; + unsigned char number_blocks_lo; + unsigned char _r3; + unsigned char block_length_hi; + unsigned char block_length_med; + unsigned char block_length_lo; +}; + +#endif + diff --git a/third_party/musl/ndk_musl_include/scsi/scsi_ioctl.h b/third_party/musl/ndk_musl_include/scsi/scsi_ioctl.h new file mode 100644 index 0000000000000000000000000000000000000000..29a5bd37b35ef51312637c90327b4886a1a94e2e --- /dev/null +++ b/third_party/musl/ndk_musl_include/scsi/scsi_ioctl.h @@ -0,0 +1,11 @@ +#ifndef _SCSI_IOCTL_H +#define _SCSI_IOCTL_H +#define SCSI_IOCTL_SEND_COMMAND 1 +#define SCSI_IOCTL_TEST_UNIT_READY 2 +#define SCSI_IOCTL_BENCHMARK_COMMAND 3 +#define SCSI_IOCTL_SYNC 4 +#define SCSI_IOCTL_START_UNIT 5 +#define SCSI_IOCTL_STOP_UNIT 6 +#define SCSI_IOCTL_DOORLOCK 0x5380 +#define SCSI_IOCTL_DOORUNLOCK 0x5381 +#endif diff --git a/third_party/musl/ndk_musl_include/scsi/sg.h b/third_party/musl/ndk_musl_include/scsi/sg.h new file mode 100644 index 0000000000000000000000000000000000000000..e09db6bf4749ae6d6145a34901249b4e977b5472 --- /dev/null +++ b/third_party/musl/ndk_musl_include/scsi/sg.h @@ -0,0 +1,129 @@ +#ifndef _SCSI_SG_H +#define _SCSI_SG_H + +#define SG_DXFER_NONE -1 +#define SG_DXFER_TO_DEV -2 +#define SG_DXFER_FROM_DEV -3 +#define SG_DXFER_TO_FROM_DEV -4 +#define SG_FLAG_DIRECT_IO 1 +#define SG_FLAG_LUN_INHIBIT 2 +#define SG_FLAG_NO_DXFER 0x10000 +#define SG_INFO_OK_MASK 0x1 +#define SG_INFO_OK 0x0 +#define SG_INFO_CHECK 0x1 +#define SG_INFO_DIRECT_IO_MASK 0x6 +#define SG_INFO_INDIRECT_IO 0x0 +#define SG_INFO_DIRECT_IO 0x2 +#define SG_INFO_MIXED_IO 0x4 +#define SG_EMULATED_HOST 0x2203 +#define SG_SET_TRANSFORM 0x2204 +#define SG_GET_TRANSFORM 0x2205 +#define SG_SET_RESERVED_SIZE 0x2275 +#define SG_GET_RESERVED_SIZE 0x2272 +#define SG_GET_SCSI_ID 0x2276 +#define SG_SET_FORCE_LOW_DMA 0x2279 +#define SG_GET_LOW_DMA 0x227a +#define SG_SET_FORCE_PACK_ID 0x227b +#define SG_GET_PACK_ID 0x227c +#define SG_GET_NUM_WAITING 0x227d +#define SG_GET_SG_TABLESIZE 0x227F +#define SG_GET_VERSION_NUM 0x2282 +#define SG_SCSI_RESET 0x2284 +#define SG_SCSI_RESET_NOTHING 0 +#define SG_SCSI_RESET_DEVICE 1 +#define SG_SCSI_RESET_BUS 2 +#define SG_SCSI_RESET_HOST 3 +#define SG_IO 0x2285 +#define SG_GET_REQUEST_TABLE 0x2286 +#define SG_SET_KEEP_ORPHAN 0x2287 +#define SG_GET_KEEP_ORPHAN 0x2288 +#define SG_SCATTER_SZ (8 * 4096) +#define SG_DEFAULT_RETRIES 1 +#define SG_DEF_FORCE_LOW_DMA 0 +#define SG_DEF_FORCE_PACK_ID 0 +#define SG_DEF_KEEP_ORPHAN 0 +#define SG_DEF_RESERVED_SIZE SG_SCATTER_SZ +#define SG_MAX_QUEUE 16 +#define SG_BIG_BUFF SG_DEF_RESERVED_SIZE +#define SG_MAX_SENSE 16 +#define SG_SET_TIMEOUT 0x2201 +#define SG_GET_TIMEOUT 0x2202 +#define SG_GET_COMMAND_Q 0x2270 +#define SG_SET_COMMAND_Q 0x2271 +#define SG_SET_DEBUG 0x227e +#define SG_NEXT_CMD_LEN 0x2283 +#define SG_DEFAULT_TIMEOUT (60*100) /* 60*HZ */ +#define SG_DEF_COMMAND_Q 0 +#define SG_DEF_UNDERRUN_FLAG 0 + +typedef struct sg_iovec { + void *iov_base; + unsigned long iov_len; +} sg_iovec_t; + +typedef struct sg_io_hdr { + int interface_id; + int dxfer_direction; + unsigned char cmd_len; + unsigned char mx_sb_len; + unsigned short iovec_count; + unsigned dxfer_len; + void *dxferp; + unsigned char *cmdp; + unsigned char *sbp; + unsigned timeout; + unsigned flags; + int pack_id; + void *usr_ptr; + unsigned char status; + unsigned char masked_status; + unsigned char msg_status; + unsigned char sb_len_wr; + unsigned short host_status; + unsigned short driver_status; + int resid; + unsigned int duration; + unsigned int info; +} sg_io_hdr_t; + +struct sg_scsi_id { + int host_no; + int channel; + int scsi_id; + int lun; + int scsi_type; + short h_cmd_per_lun; + short d_queue_depth; + int unused[2]; +}; + +typedef struct sg_req_info { + char req_state; + char orphan; + char sg_io_owned; + char problem; + int pack_id; + void *usr_ptr; + unsigned duration; + int unused; +} sg_req_info_t; + +typedef struct sg_io_hdr Sg_io_hdr; +typedef struct sg_io_vec Sg_io_vec; +typedef struct sg_scsi_id Sg_scsi_id; +typedef struct sg_req_info Sg_req_info; + +struct sg_header { + int pack_len; + int reply_len; + int pack_id; + int result; + unsigned twelve_byte:1; + unsigned target_status:5; + unsigned host_status:8; + unsigned driver_status:8; + unsigned other_flags:10; + unsigned char sense_buffer[SG_MAX_SENSE]; +}; + +#endif diff --git a/third_party/musl/ndk_musl_include/search.h b/third_party/musl/ndk_musl_include/search.h new file mode 100644 index 0000000000000000000000000000000000000000..97d1f0f18671f2bdffde8568b58ad4075fad5373 --- /dev/null +++ b/third_party/musl/ndk_musl_include/search.h @@ -0,0 +1,63 @@ +#ifndef _SEARCH_H +#define _SEARCH_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_size_t +#include + +typedef enum { FIND, ENTER } ACTION; +typedef enum { preorder, postorder, endorder, leaf } VISIT; + +typedef struct entry { + char *key; + void *data; +} ENTRY; + +int hcreate(size_t); +void hdestroy(void); +ENTRY *hsearch(ENTRY, ACTION); + +#ifdef _GNU_SOURCE +struct hsearch_data { + struct __tab *__tab; + unsigned int __unused1; + unsigned int __unused2; +}; + +int hcreate_r(size_t, struct hsearch_data *); +void hdestroy_r(struct hsearch_data *); +int hsearch_r(ENTRY, ACTION, ENTRY **, struct hsearch_data *); +#endif + +void insque(void *, void *); +void remque(void *); + +void *lsearch(const void *, void *, size_t *, size_t, + int (*)(const void *, const void *)); +void *lfind(const void *, const void *, size_t *, size_t, + int (*)(const void *, const void *)); + +void *tdelete(const void *__restrict, void **__restrict, int(*)(const void *, const void *)); +void *tfind(const void *, void *const *, int(*)(const void *, const void *)); +void *tsearch(const void *, void **, int (*)(const void *, const void *)); +void twalk(const void *, void (*)(const void *, VISIT, int)); + +#ifdef _GNU_SOURCE +struct qelem { + struct qelem *q_forw, *q_back; + char q_data[1]; +}; + +void tdestroy(void *, void (*)(void *)); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/semaphore.h b/third_party/musl/ndk_musl_include/semaphore.h new file mode 100644 index 0000000000000000000000000000000000000000..22850e8d5bbaac17ab3656406910542ae4670cc8 --- /dev/null +++ b/third_party/musl/ndk_musl_include/semaphore.h @@ -0,0 +1,39 @@ +#ifndef _SEMAPHORE_H +#define _SEMAPHORE_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_time_t +#define __NEED_struct_timespec +#include + +#include + +#define SEM_FAILED ((sem_t *)0) + +typedef struct { + volatile int __val[4*sizeof(long)/sizeof(int)]; +} sem_t; + +int sem_close(sem_t *); +int sem_destroy(sem_t *); +int sem_getvalue(sem_t *__restrict, int *__restrict); +int sem_init(sem_t *, int, unsigned); +sem_t *sem_open(const char *, int, ...); +int sem_post(sem_t *); +int sem_timedwait(sem_t *__restrict, const struct timespec *__restrict); +int sem_trywait(sem_t *); +int sem_unlink(const char *); +int sem_wait(sem_t *); + +#if _REDIR_TIME64 +__REDIR(sem_timedwait, __sem_timedwait_time64); +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/setjmp.h b/third_party/musl/ndk_musl_include/setjmp.h new file mode 100644 index 0000000000000000000000000000000000000000..245c96e4e6aa32e1800ece441eaf064268842784 --- /dev/null +++ b/third_party/musl/ndk_musl_include/setjmp.h @@ -0,0 +1,41 @@ +#ifndef _SETJMP_H +#define _SETJMP_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include + +typedef struct __jmp_buf_tag { + __jmp_buf __jb; + unsigned long __fl; + unsigned long __ss[128/sizeof(long)]; +} jmp_buf[1]; + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) +typedef jmp_buf sigjmp_buf; +int sigsetjmp (sigjmp_buf, int); +_Noreturn void siglongjmp (sigjmp_buf, int); +#endif + +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) +int _setjmp (jmp_buf); +_Noreturn void _longjmp (jmp_buf, int); +#endif + +int setjmp (jmp_buf); +_Noreturn void longjmp (jmp_buf, int); + +#define setjmp setjmp + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/shadow.h b/third_party/musl/ndk_musl_include/shadow.h new file mode 100644 index 0000000000000000000000000000000000000000..e96e37400ccc6761ba0b4b91a803309703c2bb7a --- /dev/null +++ b/third_party/musl/ndk_musl_include/shadow.h @@ -0,0 +1,31 @@ +#ifndef _SHADOW_H +#define _SHADOW_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define __NEED_FILE +#define __NEED_size_t + +#include + +#define SHADOW "/etc/shadow" + +struct spwd { + char *sp_namp; + char *sp_pwdp; + long sp_lstchg; + long sp_min; + long sp_max; + long sp_warn; + long sp_inact; + long sp_expire; + unsigned long sp_flag; +}; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/signal.h b/third_party/musl/ndk_musl_include/signal.h new file mode 100644 index 0000000000000000000000000000000000000000..7fbf380f5abe0f27a0dc7714ad2fddc717815e18 --- /dev/null +++ b/third_party/musl/ndk_musl_include/signal.h @@ -0,0 +1,290 @@ +#ifndef _SIGNAL_H +#define _SIGNAL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) + +#ifdef _GNU_SOURCE +#define __ucontext ucontext +#endif + +#define __NEED_size_t +#define __NEED_pid_t +#define __NEED_uid_t +#define __NEED_struct_timespec +#define __NEED_pthread_t +#define __NEED_pthread_attr_t +#define __NEED_time_t +#define __NEED_clock_t +#define __NEED_sigset_t + +#include + +#define SIG_BLOCK 0 +#define SIG_UNBLOCK 1 +#define SIG_SETMASK 2 + +#define SI_ASYNCNL (-60) +#define SI_TKILL (-6) +#define SI_SIGIO (-5) +#define SI_ASYNCIO (-4) +#define SI_MESGQ (-3) +#define SI_TIMER (-2) +#define SI_QUEUE (-1) +#define SI_USER 0 +#define SI_KERNEL 128 + + +typedef struct sigaltstack stack_t; + +#endif + +#include + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) + +#define SIG_HOLD ((void (*)(int)) 2) + +#define FPE_INTDIV 1 +#define FPE_INTOVF 2 +#define FPE_FLTDIV 3 +#define FPE_FLTOVF 4 +#define FPE_FLTUND 5 +#define FPE_FLTRES 6 +#define FPE_FLTINV 7 +#define FPE_FLTSUB 8 + +#define ILL_ILLOPC 1 +#define ILL_ILLOPN 2 +#define ILL_ILLADR 3 +#define ILL_ILLTRP 4 +#define ILL_PRVOPC 5 +#define ILL_PRVREG 6 +#define ILL_COPROC 7 +#define ILL_BADSTK 8 + +#define SEGV_MAPERR 1 +#define SEGV_ACCERR 2 +#define SEGV_BNDERR 3 +#define SEGV_PKUERR 4 + +#define BUS_ADRALN 1 +#define BUS_ADRERR 2 +#define BUS_OBJERR 3 +#define BUS_MCEERR_AR 4 +#define BUS_MCEERR_AO 5 + +#define CLD_EXITED 1 +#define CLD_KILLED 2 +#define CLD_DUMPED 3 +#define CLD_TRAPPED 4 +#define CLD_STOPPED 5 +#define CLD_CONTINUED 6 + +union sigval { + int sival_int; + void *sival_ptr; +}; + +typedef struct { +#ifdef __SI_SWAP_ERRNO_CODE + int si_signo, si_code, si_errno; +#else + int si_signo, si_errno, si_code; +#endif + union { + char __pad[128 - 2*sizeof(int) - sizeof(long)]; + struct { + union { + struct { + pid_t si_pid; + uid_t si_uid; + } __piduid; + struct { + int si_timerid; + int si_overrun; + } __timer; + } __first; + union { + union sigval si_value; + struct { + int si_status; + clock_t si_utime, si_stime; + } __sigchld; + } __second; + } __si_common; + struct { + void *si_addr; + short si_addr_lsb; + union { + struct { + void *si_lower; + void *si_upper; + } __addr_bnd; + unsigned si_pkey; + } __first; + } __sigfault; + struct { + long si_band; + int si_fd; + } __sigpoll; + struct { + void *si_call_addr; + int si_syscall; + unsigned si_arch; + } __sigsys; + } __si_fields; +} siginfo_t; +#define si_pid __si_fields.__si_common.__first.__piduid.si_pid +#define si_uid __si_fields.__si_common.__first.__piduid.si_uid +#define si_status __si_fields.__si_common.__second.__sigchld.si_status +#define si_utime __si_fields.__si_common.__second.__sigchld.si_utime +#define si_stime __si_fields.__si_common.__second.__sigchld.si_stime +#define si_value __si_fields.__si_common.__second.si_value +#define si_addr __si_fields.__sigfault.si_addr +#define si_addr_lsb __si_fields.__sigfault.si_addr_lsb +#define si_lower __si_fields.__sigfault.__first.__addr_bnd.si_lower +#define si_upper __si_fields.__sigfault.__first.__addr_bnd.si_upper +#define si_pkey __si_fields.__sigfault.__first.si_pkey +#define si_band __si_fields.__sigpoll.si_band +#define si_fd __si_fields.__sigpoll.si_fd +#define si_timerid __si_fields.__si_common.__first.__timer.si_timerid +#define si_overrun __si_fields.__si_common.__first.__timer.si_overrun +#define si_ptr si_value.sival_ptr +#define si_int si_value.sival_int +#define si_call_addr __si_fields.__sigsys.si_call_addr +#define si_syscall __si_fields.__sigsys.si_syscall +#define si_arch __si_fields.__sigsys.si_arch + +struct sigaction { + union { + void (*sa_handler)(int); + void (*sa_sigaction)(int, siginfo_t *, void *); + } __sa_handler; + sigset_t sa_mask; + int sa_flags; + void (*sa_restorer)(void); +}; +#define sa_handler __sa_handler.sa_handler +#define sa_sigaction __sa_handler.sa_sigaction + +struct sigevent { + union sigval sigev_value; + int sigev_signo; + int sigev_notify; + void (*sigev_notify_function)(union sigval); + pthread_attr_t *sigev_notify_attributes; + char __pad[56-3*sizeof(long)]; +}; + +#define SIGEV_SIGNAL 0 +#define SIGEV_NONE 1 +#define SIGEV_THREAD 2 + +int __libc_current_sigrtmin(void); +int __libc_current_sigrtmax(void); + +#define SIGRTMIN (__libc_current_sigrtmin()) +#define SIGRTMAX (__libc_current_sigrtmax()) + +#define MUSL_SIGNAL_NATIVE_REMOTE (SIGRTMIN + 0) +#define MUSL_SIGNAL_HOOK (SIGRTMIN + 1) +#define MUSL_SIGNAL_UNHOOK (SIGRTMIN + 2) +#define MUSL_SIGNAL_NATIVE_LOCAL (SIGRTMIN + 3) +#define MUSL_SIGNAL_JSHEAP (SIGRTMIN + 4) +#define MUSL_SIGNAL_JSHEAP_PRIV (SIGRTMIN + 5) + +int kill(pid_t, int); +int sigemptyset(sigset_t *); +int sigfillset(sigset_t *); +int sigaddset(sigset_t *, int); +int sigdelset(sigset_t *, int); +int sigismember(const sigset_t *, int); + +int sigprocmask(int, const sigset_t *__restrict, sigset_t *__restrict); +int sigsuspend(const sigset_t *); +int sigaction(int, const struct sigaction *__restrict, struct sigaction *__restrict); +int sigpending(sigset_t *); +int sigwait(const sigset_t *__restrict, int *__restrict); +int sigwaitinfo(const sigset_t *__restrict, siginfo_t *__restrict); +int sigtimedwait(const sigset_t *__restrict, siginfo_t *__restrict, const struct timespec *__restrict); +int sigqueue(pid_t, int, union sigval); + +int pthread_sigmask(int, const sigset_t *__restrict, sigset_t *__restrict); +int pthread_kill(pthread_t, int); + +void psiginfo(const siginfo_t *, const char *); +void psignal(int, const char *); + +#endif + +#if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) || defined(_GNU_SOURCE) +int killpg(pid_t, int); +int sigaltstack(const stack_t *__restrict, stack_t *__restrict); +int sighold(int); +int sigignore(int); +int siginterrupt(int, int); +int sigpause(int); +int sigrelse(int); +void (*sigset(int, void (*)(int)))(int); +#define TRAP_BRKPT 1 +#define TRAP_TRACE 2 +#define TRAP_BRANCH 3 +#define TRAP_HWBKPT 4 +#define TRAP_UNK 5 +#define POLL_IN 1 +#define POLL_OUT 2 +#define POLL_MSG 3 +#define POLL_ERR 4 +#define POLL_PRI 5 +#define POLL_HUP 6 +#define SS_ONSTACK 1 +#define SS_DISABLE 2 +#define SS_AUTODISARM (1U << 31) +#define SS_FLAG_BITS SS_AUTODISARM +#endif + +#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE) +#define NSIG _NSIG +typedef void (*sig_t)(int); +#endif + +#ifdef _GNU_SOURCE +typedef void (*sighandler_t)(int); +void (*bsd_signal(int, void (*)(int)))(int); + +#define SA_NOMASK SA_NODEFER +#define SA_ONESHOT SA_RESETHAND +#endif + +#define SIG_ERR ((void (*)(int))-1) +#define SIG_DFL ((void (*)(int)) 0) +#define SIG_IGN ((void (*)(int)) 1) + +typedef int sig_atomic_t; + +void (*signal(int, void (*)(int)))(int); +int raise(int); + +#if _REDIR_TIME64 +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) +__REDIR(sigtimedwait, __sigtimedwait_time64); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/spawn.h b/third_party/musl/ndk_musl_include/spawn.h new file mode 100644 index 0000000000000000000000000000000000000000..03c3e61c9c56577ccd442d05f520f25d2bdfe8f8 --- /dev/null +++ b/third_party/musl/ndk_musl_include/spawn.h @@ -0,0 +1,78 @@ +#ifndef _SPAWN_H +#define _SPAWN_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_mode_t +#define __NEED_pid_t +#define __NEED_sigset_t + +#include + +struct sched_param; + +#define POSIX_SPAWN_RESETIDS 1 +#define POSIX_SPAWN_SETPGROUP 2 +#define POSIX_SPAWN_SETSIGDEF 4 +#define POSIX_SPAWN_SETSIGMASK 8 +#define POSIX_SPAWN_SETSCHEDPARAM 16 +#define POSIX_SPAWN_SETSCHEDULER 32 +#define POSIX_SPAWN_USEVFORK 64 +#define POSIX_SPAWN_SETSID 128 + +typedef struct { + int __flags; + pid_t __pgrp; + sigset_t __def, __mask; + int __prio, __pol; + void *__fn; + char __pad[64-sizeof(void *)]; +} posix_spawnattr_t; + +typedef struct { + int __pad0[2]; + void *__actions; + int __pad[16]; +} posix_spawn_file_actions_t; + +int posix_spawn(pid_t *__restrict, const char *__restrict, const posix_spawn_file_actions_t *, + const posix_spawnattr_t *__restrict, char *const *__restrict, char *const *__restrict); +int posix_spawnp(pid_t *__restrict, const char *__restrict, const posix_spawn_file_actions_t *, + const posix_spawnattr_t *__restrict, char *const *__restrict, char *const *__restrict); + +int posix_spawnattr_init(posix_spawnattr_t *); +int posix_spawnattr_destroy(posix_spawnattr_t *); + +int posix_spawnattr_setflags(posix_spawnattr_t *, short); +int posix_spawnattr_getflags(const posix_spawnattr_t *__restrict, short *__restrict); + +int posix_spawnattr_setpgroup(posix_spawnattr_t *, pid_t); +int posix_spawnattr_getpgroup(const posix_spawnattr_t *__restrict, pid_t *__restrict); + +int posix_spawnattr_setsigmask(posix_spawnattr_t *__restrict, const sigset_t *__restrict); +int posix_spawnattr_getsigmask(const posix_spawnattr_t *__restrict, sigset_t *__restrict); + +int posix_spawnattr_setsigdefault(posix_spawnattr_t *__restrict, const sigset_t *__restrict); +int posix_spawnattr_getsigdefault(const posix_spawnattr_t *__restrict, sigset_t *__restrict); + +int posix_spawnattr_setschedparam(posix_spawnattr_t *__restrict, const struct sched_param *__restrict); +int posix_spawnattr_getschedparam(const posix_spawnattr_t *__restrict, struct sched_param *__restrict); +int posix_spawnattr_setschedpolicy(posix_spawnattr_t *, int); +int posix_spawnattr_getschedpolicy(const posix_spawnattr_t *__restrict, int *__restrict); + +int posix_spawn_file_actions_init(posix_spawn_file_actions_t *); +int posix_spawn_file_actions_destroy(posix_spawn_file_actions_t *); + +int posix_spawn_file_actions_addopen(posix_spawn_file_actions_t *__restrict, int, const char *__restrict, int, mode_t); +int posix_spawn_file_actions_addclose(posix_spawn_file_actions_t *, int); +int posix_spawn_file_actions_adddup2(posix_spawn_file_actions_t *, int, int); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/stdalign.h b/third_party/musl/ndk_musl_include/stdalign.h new file mode 100644 index 0000000000000000000000000000000000000000..6f51e13f082eed1cbff34ae625ecb707b8192cb4 --- /dev/null +++ b/third_party/musl/ndk_musl_include/stdalign.h @@ -0,0 +1,20 @@ +#ifndef _STDALIGN_H +#define _STDALIGN_H + +#ifndef __cplusplus + +/* this whole header only works in C11 or with compiler extensions */ +#if __STDC_VERSION__ < 201112L && defined( __GNUC__) +#define _Alignas(t) __attribute__((__aligned__(t))) +#define _Alignof(t) __alignof__(t) +#endif + +#define alignas _Alignas +#define alignof _Alignof + +#endif + +#define __alignas_is_defined 1 +#define __alignof_is_defined 1 + +#endif diff --git a/third_party/musl/ndk_musl_include/stdarg.h b/third_party/musl/ndk_musl_include/stdarg.h new file mode 100644 index 0000000000000000000000000000000000000000..0394c67adbe014e467aa3fdfe9663a8e70fe1fa8 --- /dev/null +++ b/third_party/musl/ndk_musl_include/stdarg.h @@ -0,0 +1,21 @@ +#ifndef _STDARG_H +#define _STDARG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define __NEED_va_list + +#include + +#define va_start(v,l) __builtin_va_start(v,l) +#define va_end(v) __builtin_va_end(v) +#define va_arg(v,l) __builtin_va_arg(v,l) +#define va_copy(d,s) __builtin_va_copy(d,s) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/stdbool.h b/third_party/musl/ndk_musl_include/stdbool.h new file mode 100644 index 0000000000000000000000000000000000000000..4762747d4c06ce985f36c578615286eb948b4f26 --- /dev/null +++ b/third_party/musl/ndk_musl_include/stdbool.h @@ -0,0 +1,14 @@ +#ifndef _STDBOOL_H +#define _STDBOOL_H + +#ifndef __cplusplus + +#define true 1 +#define false 0 +#define bool _Bool + +#endif + +#define __bool_true_false_are_defined 1 + +#endif diff --git a/third_party/musl/ndk_musl_include/stdc-predef.h b/third_party/musl/ndk_musl_include/stdc-predef.h new file mode 100644 index 0000000000000000000000000000000000000000..437d38205d6e285e43c77e7238a391c95b6baae1 --- /dev/null +++ b/third_party/musl/ndk_musl_include/stdc-predef.h @@ -0,0 +1,10 @@ +#ifndef _STDC_PREDEF_H +#define _STDC_PREDEF_H + +#define __STDC_ISO_10646__ 201206L + +#if !defined(__GCC_IEC_559) || __GCC_IEC_559 > 0 +#define __STDC_IEC_559__ 1 +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/stddef.h b/third_party/musl/ndk_musl_include/stddef.h new file mode 100644 index 0000000000000000000000000000000000000000..48bb103965294efe76a6d7fb42cfc718433a1d7a --- /dev/null +++ b/third_party/musl/ndk_musl_include/stddef.h @@ -0,0 +1,25 @@ +#ifndef _STDDEF_H +#define _STDDEF_H + +#ifdef __cplusplus +#define NULL 0L +#else +#define NULL ((void*)0) +#endif + +#define __NEED_ptrdiff_t +#define __NEED_size_t +#define __NEED_wchar_t +#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L +#define __NEED_max_align_t +#endif + +#include + +#if __GNUC__ > 3 +#define offsetof(type, member) __builtin_offsetof(type, member) +#else +#define offsetof(type, member) ((size_t)( (char *)&(((type *)0)->member) - (char *)0 )) +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/stdint.h b/third_party/musl/ndk_musl_include/stdint.h new file mode 100644 index 0000000000000000000000000000000000000000..53b7da94194e815b46c9ee31c82543eadbff296e --- /dev/null +++ b/third_party/musl/ndk_musl_include/stdint.h @@ -0,0 +1,117 @@ +#ifndef _STDINT_H +#define _STDINT_H + +#define __NEED_int8_t +#define __NEED_int16_t +#define __NEED_int32_t +#define __NEED_int64_t + +#define __NEED_uint8_t +#define __NEED_uint16_t +#define __NEED_uint32_t +#define __NEED_uint64_t + +#define __NEED_intptr_t +#define __NEED_uintptr_t + +#define __NEED_intmax_t +#define __NEED_uintmax_t + +#include + +typedef int8_t int_fast8_t; +typedef int64_t int_fast64_t; + +typedef int8_t int_least8_t; +typedef int16_t int_least16_t; +typedef int32_t int_least32_t; +typedef int64_t int_least64_t; + +typedef uint8_t uint_fast8_t; +typedef uint64_t uint_fast64_t; + +typedef uint8_t uint_least8_t; +typedef uint16_t uint_least16_t; +typedef uint32_t uint_least32_t; +typedef uint64_t uint_least64_t; + +#define INT8_MIN (-1-0x7f) +#define INT16_MIN (-1-0x7fff) +#define INT32_MIN (-1-0x7fffffff) +#define INT64_MIN (-1-0x7fffffffffffffff) + +#define INT8_MAX (0x7f) +#define INT16_MAX (0x7fff) +#define INT32_MAX (0x7fffffff) +#define INT64_MAX (0x7fffffffffffffff) + +#define UINT8_MAX (0xff) +#define UINT16_MAX (0xffff) +#define UINT32_MAX (0xffffffffu) +#define UINT64_MAX (0xffffffffffffffffu) + +#define INT_FAST8_MIN INT8_MIN +#define INT_FAST64_MIN INT64_MIN + +#define INT_LEAST8_MIN INT8_MIN +#define INT_LEAST16_MIN INT16_MIN +#define INT_LEAST32_MIN INT32_MIN +#define INT_LEAST64_MIN INT64_MIN + +#define INT_FAST8_MAX INT8_MAX +#define INT_FAST64_MAX INT64_MAX + +#define INT_LEAST8_MAX INT8_MAX +#define INT_LEAST16_MAX INT16_MAX +#define INT_LEAST32_MAX INT32_MAX +#define INT_LEAST64_MAX INT64_MAX + +#define UINT_FAST8_MAX UINT8_MAX +#define UINT_FAST64_MAX UINT64_MAX + +#define UINT_LEAST8_MAX UINT8_MAX +#define UINT_LEAST16_MAX UINT16_MAX +#define UINT_LEAST32_MAX UINT32_MAX +#define UINT_LEAST64_MAX UINT64_MAX + +#define INTMAX_MIN INT64_MIN +#define INTMAX_MAX INT64_MAX +#define UINTMAX_MAX UINT64_MAX + +#define WINT_MIN 0U +#define WINT_MAX UINT32_MAX + +#if L'\0'-1 > 0 +#define WCHAR_MAX (0xffffffffu+L'\0') +#define WCHAR_MIN (0+L'\0') +#else +#define WCHAR_MAX (0x7fffffff+L'\0') +#define WCHAR_MIN (-1-0x7fffffff+L'\0') +#endif + +#define SIG_ATOMIC_MIN INT32_MIN +#define SIG_ATOMIC_MAX INT32_MAX + +#include + +#define INT8_C(c) c +#define INT16_C(c) c +#define INT32_C(c) c + +#define UINT8_C(c) c +#define UINT16_C(c) c +#define UINT32_C(c) c ## U + +#if UINTPTR_MAX == UINT64_MAX +#define INT64_C(c) c ## L +#define UINT64_C(c) c ## UL +#define INTMAX_C(c) c ## L +#define UINTMAX_C(c) c ## UL +#else +#define INT64_C(c) c ## LL +#define UINT64_C(c) c ## ULL +#define INTMAX_C(c) c ## LL +#define UINTMAX_C(c) c ## ULL +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/stdio.h b/third_party/musl/ndk_musl_include/stdio.h new file mode 100644 index 0000000000000000000000000000000000000000..5c4407e93007435a6f1765d3a3f5556eb544d162 --- /dev/null +++ b/third_party/musl/ndk_musl_include/stdio.h @@ -0,0 +1,221 @@ +#ifndef _STDIO_H +#define _STDIO_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_FILE +#define __NEED___isoc_va_list +#define __NEED_size_t + +#if __STDC_VERSION__ < 201112L +#define __NEED_struct__IO_FILE +#endif + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) +#define __NEED_ssize_t +#define __NEED_off_t +#define __NEED_va_list +#endif + +#include + +#ifdef __cplusplus +#define NULL 0L +#else +#define NULL ((void*)0) +#endif + +#undef EOF +#define EOF (-1) + +#undef SEEK_SET +#undef SEEK_CUR +#undef SEEK_END +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +#define _IOFBF 0 +#define _IOLBF 1 +#define _IONBF 2 + +#define BUFSIZ 1024 +#define FILENAME_MAX 4096 +#define FOPEN_MAX 1000 +#define TMP_MAX 10000 +#define L_tmpnam 20 + +typedef union _G_fpos64_t { + char __opaque[16]; + long long __lldata; + double __align; +} fpos_t; + +extern FILE *const stdin; +extern FILE *const stdout; +extern FILE *const stderr; + +#define stdin (stdin) +#define stdout (stdout) +#define stderr (stderr) + +FILE *fopen(const char *__restrict, const char *__restrict); +FILE *freopen(const char *__restrict, const char *__restrict, FILE *__restrict); +int fclose(FILE *); + +int remove(const char *); +int rename(const char *, const char *); + +int feof(FILE *); +int ferror(FILE *); +int fflush(FILE *); +void clearerr(FILE *); + +int fseek(FILE *, long, int); +long ftell(FILE *); +void rewind(FILE *); + +int fgetpos(FILE *__restrict, fpos_t *__restrict); +int fsetpos(FILE *, const fpos_t *); + +size_t fread(void *__restrict, size_t, size_t, FILE *__restrict); +size_t fwrite(const void *__restrict, size_t, size_t, FILE *__restrict); + +int fgetc(FILE *); +int getc(FILE *); +int getchar(void); +int ungetc(int, FILE *); + +int fputc(int, FILE *); +int putc(int, FILE *); +int putchar(int); + +char *fgets(char *__restrict, int, FILE *__restrict); +#if __STDC_VERSION__ < 201112L +char *gets(char *); +#endif + +int fputs(const char *__restrict, FILE *__restrict); +int puts(const char *); + +int printf(const char *__restrict, ...); +int fprintf(FILE *__restrict, const char *__restrict, ...); +int sprintf(char *__restrict, const char *__restrict, ...); +int snprintf(char *__restrict, size_t, const char *__restrict, ...); + +int vprintf(const char *__restrict, __isoc_va_list); +int vfprintf(FILE *__restrict, const char *__restrict, __isoc_va_list); +int vsprintf(char *__restrict, const char *__restrict, __isoc_va_list); +int vsnprintf(char *__restrict, size_t, const char *__restrict, __isoc_va_list); + +int scanf(const char *__restrict, ...); +int fscanf(FILE *__restrict, const char *__restrict, ...); +int sscanf(const char *__restrict, const char *__restrict, ...); +int vscanf(const char *__restrict, __isoc_va_list); +int vfscanf(FILE *__restrict, const char *__restrict, __isoc_va_list); +int vsscanf(const char *__restrict, const char *__restrict, __isoc_va_list); + +void perror(const char *); + +int setvbuf(FILE *__restrict, char *__restrict, int, size_t); +void setbuf(FILE *__restrict, char *__restrict); + +char *tmpnam(char *); +FILE *tmpfile(void); + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) +FILE *fmemopen(void *__restrict, size_t, const char *__restrict); +FILE *open_memstream(char **, size_t *); +FILE *fdopen(int, const char *); +FILE *popen(const char *, const char *); +int pclose(FILE *); +int fileno(FILE *); +int fseeko(FILE *, off_t, int); +off_t ftello(FILE *); +int dprintf(int, const char *__restrict, ...); +int vdprintf(int, const char *__restrict, __isoc_va_list); +void flockfile(FILE *); +int ftrylockfile(FILE *); +void funlockfile(FILE *); +int getc_unlocked(FILE *); +int getchar_unlocked(void); +int putc_unlocked(int, FILE *); +int putchar_unlocked(int); +ssize_t getdelim(char **__restrict, size_t *__restrict, int, FILE *__restrict); +ssize_t getline(char **__restrict, size_t *__restrict, FILE *__restrict); +int renameat(int, const char *, int, const char *); +char *ctermid(char *); +#define L_ctermid 20 +#endif + + +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) +#define P_tmpdir "/tmp" +char *tempnam(const char *, const char *); +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define L_cuserid 20 +void setlinebuf(FILE *); +void setbuffer(FILE *, char *, size_t); +int fgetc_unlocked(FILE *); +int fputc_unlocked(int, FILE *); +int fflush_unlocked(FILE *); +size_t fread_unlocked(void *, size_t, size_t, FILE *); +size_t fwrite_unlocked(const void *, size_t, size_t, FILE *); +void clearerr_unlocked(FILE *); +int feof_unlocked(FILE *); +int ferror_unlocked(FILE *); +int fileno_unlocked(FILE *); +int putw(int, FILE *); +char *fgetln(FILE *, size_t *); +int asprintf(char **, const char *, ...); +int vasprintf(char **, const char *, __isoc_va_list); +#endif + +#ifdef _GNU_SOURCE +char *fgets_unlocked(char *, int, FILE *); +int fputs_unlocked(const char *, FILE *); + +typedef ssize_t (cookie_read_function_t)(void *, char *, size_t); +typedef ssize_t (cookie_write_function_t)(void *, const char *, size_t); +typedef int (cookie_seek_function_t)(void *, off_t *, int); +typedef int (cookie_close_function_t)(void *); + +typedef struct _IO_cookie_io_functions_t { + cookie_read_function_t *read; + cookie_write_function_t *write; + cookie_seek_function_t *seek; + cookie_close_function_t *close; +} cookie_io_functions_t; + +#endif + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define tmpfile64 tmpfile +#define fopen64 fopen +#define freopen64 freopen +#define fseeko64 fseeko +#define ftello64 ftello +#define fgetpos64 fgetpos +#define fsetpos64 fsetpos +#define fpos64_t fpos_t +#define off64_t off_t +#endif + +#include + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/stdio_ext.h b/third_party/musl/ndk_musl_include/stdio_ext.h new file mode 100644 index 0000000000000000000000000000000000000000..051bb7ac0d6570bd5a1aece464cc7581237ebe7d --- /dev/null +++ b/third_party/musl/ndk_musl_include/stdio_ext.h @@ -0,0 +1,31 @@ +#ifndef _STDIO_EXT_H +#define _STDIO_EXT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define FSETLOCKING_QUERY 0 +#define FSETLOCKING_INTERNAL 1 +#define FSETLOCKING_BYCALLER 2 + +void _flushlbf(void); +int __fsetlocking(FILE *, int); +int __fwriting(FILE *); +int __freading(FILE *); +int __freadable(FILE *); +int __fwritable(FILE *); +int __flbf(FILE *); +size_t __fbufsize(FILE *); +size_t __fpending(FILE *); +int __fpurge(FILE *); + +void __fseterr(FILE *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/stdlib.h b/third_party/musl/ndk_musl_include/stdlib.h new file mode 100644 index 0000000000000000000000000000000000000000..c27c12f0e299097c50f27d7df5d2ccca0aca4484 --- /dev/null +++ b/third_party/musl/ndk_musl_include/stdlib.h @@ -0,0 +1,170 @@ +#ifndef _STDLIB_H +#define _STDLIB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#ifdef __cplusplus +#define NULL 0L +#else +#define NULL ((void*)0) +#endif + +#define __NEED_size_t +#define __NEED_wchar_t + +#include + +int atoi (const char *); +long atol (const char *); +long long atoll (const char *); +double atof (const char *); + +float strtof (const char *__restrict, char **__restrict); +double strtod (const char *__restrict, char **__restrict); +long double strtold (const char *__restrict, char **__restrict); + +long strtol (const char *__restrict, char **__restrict, int); +unsigned long strtoul (const char *__restrict, char **__restrict, int); +long long strtoll (const char *__restrict, char **__restrict, int); +unsigned long long strtoull (const char *__restrict, char **__restrict, int); + +int rand (void); +void srand (unsigned); + +void *malloc (size_t); +void *calloc (size_t, size_t); +void *realloc (void *, size_t); +void free (void *); +void *aligned_alloc(size_t, size_t); + +_Noreturn void abort (void); +int atexit (void (*) (void)); +_Noreturn void exit (int); +_Noreturn void _Exit (int); +int at_quick_exit (void (*) (void)); +_Noreturn void quick_exit (int); + +char *getenv (const char *); + +int system (const char *); + +void *bsearch (const void *, const void *, size_t, size_t, int (*)(const void *, const void *)); +void qsort (void *, size_t, size_t, int (*)(const void *, const void *)); + +int abs (int); +long labs (long); +long long llabs (long long); + +typedef struct { int quot, rem; } div_t; +typedef struct { long quot, rem; } ldiv_t; +typedef struct { long long quot, rem; } lldiv_t; + +div_t div (int, int); +ldiv_t ldiv (long, long); +lldiv_t lldiv (long long, long long); + +int mblen (const char *, size_t); +int mbtowc (wchar_t *__restrict, const char *__restrict, size_t); +int wctomb (char *, wchar_t); +size_t mbstowcs (wchar_t *__restrict, const char *__restrict, size_t); +size_t wcstombs (char *__restrict, const wchar_t *__restrict, size_t); + +#define EXIT_FAILURE 1 +#define EXIT_SUCCESS 0 + +size_t __ctype_get_mb_cur_max(void); +#define MB_CUR_MAX (__ctype_get_mb_cur_max()) + +#define RAND_MAX (0x7fffffff) + + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) + +#define WNOHANG 1 +#define WUNTRACED 2 + +#define WEXITSTATUS(s) (((s) & 0xff00) >> 8) +#define WTERMSIG(s) ((s) & 0x7f) +#define WSTOPSIG(s) WEXITSTATUS(s) +#define WIFEXITED(s) (!WTERMSIG(s)) +#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001)>>8) > 0x7f00) +#define WIFSIGNALED(s) (((s)&0xffff)-1U < 0xffu) + +int posix_memalign (void **, size_t, size_t); +int setenv (const char *, const char *, int); +int unsetenv (const char *); +int mkstemp (char *); +int mkostemp (char *, int); +char *mkdtemp (char *); +int getsubopt (char **, char *const *, char **); +int rand_r (unsigned *); + +#endif + + +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) +char *realpath (const char *__restrict, char *__restrict); +long int random (void); +void srandom (unsigned int); +char *initstate (unsigned int, char *, size_t); +char *setstate (char *); +int putenv (char *); +int posix_openpt (int); +int grantpt (int); +int unlockpt (int); +char *ptsname (int); +double drand48 (void); +double erand48 (unsigned short [3]); +long int lrand48 (void); +long int nrand48 (unsigned short [3]); +long mrand48 (void); +long jrand48 (unsigned short [3]); +void srand48 (long); +unsigned short *seed48 (unsigned short [3]); +void lcong48 (unsigned short [7]); +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#include +char *mktemp (char *); +int mkstemps (char *, int); +int mkostemps (char *, int, int); +void *valloc (size_t); +void *memalign(size_t, size_t); +int getloadavg(double *, int); +int clearenv(void); +#define WCOREDUMP(s) ((s) & 0x80) +#define WIFCONTINUED(s) ((s) == 0xffff) +#endif + +#ifdef _GNU_SOURCE +int ptsname_r(int, char *, size_t); +struct __locale_struct; +float strtof_l(const char *__restrict, char **__restrict, struct __locale_struct *); +double strtod_l(const char *__restrict, char **__restrict, struct __locale_struct *); +long double strtold_l(const char *__restrict, char **__restrict, struct __locale_struct *); +#endif + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define mkstemp64 mkstemp +#define mkostemp64 mkostemp +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define mkstemps64 mkstemps +#define mkostemps64 mkostemps +#endif +#endif + +#include + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/stdnoreturn.h b/third_party/musl/ndk_musl_include/stdnoreturn.h new file mode 100644 index 0000000000000000000000000000000000000000..53b7470c332aa369f938fb1fea9ed0cd766f8c88 --- /dev/null +++ b/third_party/musl/ndk_musl_include/stdnoreturn.h @@ -0,0 +1,7 @@ +#ifndef _STDNORETURN_H +#define _STDNORETURN_H +#ifndef __cplusplus +#include +#define noreturn _Noreturn +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/string.h b/third_party/musl/ndk_musl_include/string.h new file mode 100644 index 0000000000000000000000000000000000000000..52fccd5abf232c4eb49c4ee5aa5807c24b3329bd --- /dev/null +++ b/third_party/musl/ndk_musl_include/string.h @@ -0,0 +1,105 @@ +#ifndef _STRING_H +#define _STRING_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#ifdef __cplusplus +#define NULL 0L +#else +#define NULL ((void*)0) +#endif + +#define __NEED_size_t +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) +#define __NEED_locale_t +#endif + +#include + +void *memcpy (void *__restrict, const void *__restrict, size_t); +void *memmove (void *, const void *, size_t); +void *memset (void *, int, size_t); +int memcmp (const void *, const void *, size_t); +void *memchr (const void *, int, size_t); + +char *strcpy (char *__restrict, const char *__restrict); +char *strncpy (char *__restrict, const char *__restrict, size_t); + +char *strcat (char *__restrict, const char *__restrict); +char *strncat (char *__restrict, const char *__restrict, size_t); + +int strcmp (const char *, const char *); +int strncmp (const char *, const char *, size_t); + +int strcoll (const char *, const char *); +size_t strxfrm (char *__restrict, const char *__restrict, size_t); + +char *strchr (const char *, int); +char *strrchr (const char *, int); + +size_t strcspn (const char *, const char *); +size_t strspn (const char *, const char *); +char *strpbrk (const char *, const char *); +char *strstr (const char *, const char *); +char *strtok (char *__restrict, const char *__restrict); + +size_t strlen (const char *); + +char *strerror (int); + +#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE) +#include +#endif + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) +char *strtok_r (char *__restrict, const char *__restrict, char **__restrict); +int strerror_r (int, char *, size_t); +char *stpcpy(char *__restrict, const char *__restrict); +char *stpncpy(char *__restrict, const char *__restrict, size_t); +size_t strnlen (const char *, size_t); +char *strdup (const char *); +char *strndup (const char *, size_t); +char *strsignal(int); +char *strerror_l (int, locale_t); +int strcoll_l (const char *, const char *, locale_t); +size_t strxfrm_l (char *__restrict, const char *__restrict, size_t, locale_t); +#endif + +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) +void *memccpy (void *__restrict, const void *__restrict, int, size_t); +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +char *strsep(char **, const char *); +size_t strlcat (char *, const char *, size_t); +size_t strlcpy (char *, const char *, size_t); +#endif + +#ifdef _GNU_SOURCE +#define strdupa(x) strcpy(alloca(strlen(x)+1),x) +char *strchrnul(const char *, int); +char *strcasestr(const char *, const char *); +void *memmem(const void *, size_t, const void *, size_t); +void *memrchr(const void *, int, size_t); +void *mempcpy(void *, const void *, size_t); +#ifndef __cplusplus +char *basename(); +#endif +#endif + +#include + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/strings.h b/third_party/musl/ndk_musl_include/strings.h new file mode 100644 index 0000000000000000000000000000000000000000..c22051208996acae14dd6330dec0d8660d745412 --- /dev/null +++ b/third_party/musl/ndk_musl_include/strings.h @@ -0,0 +1,38 @@ +#ifndef _STRINGS_H +#define _STRINGS_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#define __NEED_size_t +#define __NEED_locale_t +#include + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_POSIX_SOURCE) \ + || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE+0 < 200809L) \ + || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE+0 < 700) +int bcmp (const void *, const void *, size_t); +void bcopy (const void *, void *, size_t); +void bzero (void *, size_t); +char *index (const char *, int); +#endif + +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +int ffs (int); +int ffsl (long); +int ffsll (long long); +#endif + +int strcasecmp (const char *, const char *); +int strncasecmp (const char *, const char *, size_t); + +int strcasecmp_l (const char *, const char *, locale_t); +int strncasecmp_l (const char *, const char *, size_t, locale_t); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/stropts.h b/third_party/musl/ndk_musl_include/stropts.h new file mode 100644 index 0000000000000000000000000000000000000000..4ff287940c6d837271f7d6e7a364d7fbf080c32f --- /dev/null +++ b/third_party/musl/ndk_musl_include/stropts.h @@ -0,0 +1,138 @@ +#ifndef _STROPTS_H +#define _STROPTS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define __SID ('S' << 8) + +#define I_NREAD (__SID | 1) +#define I_PUSH (__SID | 2) +#define I_POP (__SID | 3) +#define I_LOOK (__SID | 4) +#define I_FLUSH (__SID | 5) +#define I_SRDOPT (__SID | 6) +#define I_GRDOPT (__SID | 7) +#define I_STR (__SID | 8) +#define I_SETSIG (__SID | 9) +#define I_GETSIG (__SID |10) +#define I_FIND (__SID |11) +#define I_LINK (__SID |12) +#define I_UNLINK (__SID |13) +#define I_PEEK (__SID |15) +#define I_FDINSERT (__SID |16) +#define I_SENDFD (__SID |17) +#define I_RECVFD (__SID |14) +#define I_SWROPT (__SID |19) +#define I_GWROPT (__SID |20) +#define I_LIST (__SID |21) +#define I_PLINK (__SID |22) +#define I_PUNLINK (__SID |23) +#define I_FLUSHBAND (__SID |28) +#define I_CKBAND (__SID |29) +#define I_GETBAND (__SID |30) +#define I_ATMARK (__SID |31) +#define I_SETCLTIME (__SID |32) +#define I_GETCLTIME (__SID |33) +#define I_CANPUT (__SID |34) + +#define FMNAMESZ 8 + +#define FLUSHR 0x01 +#define FLUSHW 0x02 +#define FLUSHRW 0x03 +#define FLUSHBAND 0x04 + +#define S_INPUT 0x0001 +#define S_HIPRI 0x0002 +#define S_OUTPUT 0x0004 +#define S_MSG 0x0008 +#define S_ERROR 0x0010 +#define S_HANGUP 0x0020 +#define S_RDNORM 0x0040 +#define S_WRNORM S_OUTPUT +#define S_RDBAND 0x0080 +#define S_WRBAND 0x0100 +#define S_BANDURG 0x0200 + +#define RS_HIPRI 0x01 + +#define RNORM 0x0000 +#define RMSGD 0x0001 +#define RMSGN 0x0002 +#define RPROTDAT 0x0004 +#define RPROTDIS 0x0008 +#define RPROTNORM 0x0010 +#define RPROTMASK 0x001C + +#define SNDZERO 0x001 +#define SNDPIPE 0x002 + +#define ANYMARK 0x01 +#define LASTMARK 0x02 + +#define MUXID_ALL (-1) + +#define MSG_HIPRI 0x01 +#define MSG_ANY 0x02 +#define MSG_BAND 0x04 + +#define MORECTL 1 +#define MOREDATA 2 + +struct bandinfo { + unsigned char bi_pri; + int bi_flag; +}; + +struct strbuf { + int maxlen; + int len; + char *buf; +}; + +struct strpeek { + struct strbuf ctlbuf; + struct strbuf databuf; + unsigned flags; +}; + +struct strfdinsert { + struct strbuf ctlbuf; + struct strbuf databuf; + unsigned flags; + int fildes; + int offset; +}; + +struct strioctl { + int ic_cmd; + int ic_timout; + int ic_len; + char *ic_dp; +}; + +struct strrecvfd { + int fd; + int uid; + int gid; + char __fill[8]; +}; + +struct str_mlist { + char l_name[FMNAMESZ + 1]; +}; + +struct str_list { + int sl_nmods; + struct str_mlist *sl_modlist; +}; + +int ioctl(int, int, ...); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/acct.h b/third_party/musl/ndk_musl_include/sys/acct.h new file mode 100644 index 0000000000000000000000000000000000000000..ee8e225b9a8d8b83ec959c1b318cb7ddc2ebd021 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/acct.h @@ -0,0 +1,72 @@ +#ifndef _SYS_ACCT_H +#define _SYS_ACCT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#define ACCT_COMM 16 + +typedef uint16_t comp_t; + +struct acct { + char ac_flag; + uint16_t ac_uid; + uint16_t ac_gid; + uint16_t ac_tty; + uint32_t ac_btime; + comp_t ac_utime; + comp_t ac_stime; + comp_t ac_etime; + comp_t ac_mem; + comp_t ac_io; + comp_t ac_rw; + comp_t ac_minflt; + comp_t ac_majflt; + comp_t ac_swaps; + uint32_t ac_exitcode; + char ac_comm[ACCT_COMM+1]; + char ac_pad[10]; +}; + + +struct acct_v3 { + char ac_flag; + char ac_version; + uint16_t ac_tty; + uint32_t ac_exitcode; + uint32_t ac_uid; + uint32_t ac_gid; + uint32_t ac_pid; + uint32_t ac_ppid; + uint32_t ac_btime; + float ac_etime; + comp_t ac_utime; + comp_t ac_stime; + comp_t ac_mem; + comp_t ac_io; + comp_t ac_rw; + comp_t ac_minflt; + comp_t ac_majflt; + comp_t ac_swaps; + char ac_comm[ACCT_COMM]; +}; + +#define AFORK 1 +#define ASU 2 +#define ACORE 8 +#define AXSIG 16 +#define ACCT_BYTEORDER (128*(__BYTE_ORDER==__BIG_ENDIAN)) +#define AHZ 100 + +int acct(const char *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/auxv.h b/third_party/musl/ndk_musl_include/sys/auxv.h new file mode 100644 index 0000000000000000000000000000000000000000..fd11f136898014b7b28287604325cd059ac65941 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/auxv.h @@ -0,0 +1,17 @@ +#ifndef _SYS_AUXV_H +#define _SYS_AUXV_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +unsigned long getauxval(unsigned long); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/cachectl.h b/third_party/musl/ndk_musl_include/sys/cachectl.h new file mode 100644 index 0000000000000000000000000000000000000000..a0b69e8674aac35cc31e1dab038d23a101d0720c --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/cachectl.h @@ -0,0 +1,18 @@ +#ifndef _SYS_CACHECTL_H +#define _SYS_CACHECTL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define ICACHE (1<<0) +#define DCACHE (1<<1) +#define BCACHE (ICACHE|DCACHE) +#define CACHEABLE 0 +#define UNCACHEABLE 1 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/capability.h b/third_party/musl/ndk_musl_include/sys/capability.h new file mode 100644 index 0000000000000000000000000000000000000000..25f792b35c779736282e75f2bbaea51e2de3f8a1 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/capability.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _SYS_CAPABILITY_H +#define _SYS_CAPABILITY_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +int capget(cap_user_header_t hdr_ptr, cap_user_data_t data_ptr); +int capset(cap_user_header_t hdr_ptr, const cap_user_data_t data_ptr); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_CAPABILITY_H */ diff --git a/third_party/musl/ndk_musl_include/sys/dir.h b/third_party/musl/ndk_musl_include/sys/dir.h new file mode 100644 index 0000000000000000000000000000000000000000..02200a75a44affa4a3f7816848a1b86a1f3ebc4a --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/dir.h @@ -0,0 +1,2 @@ +#include +#define direct dirent diff --git a/third_party/musl/ndk_musl_include/sys/epoll.h b/third_party/musl/ndk_musl_include/sys/epoll.h new file mode 100644 index 0000000000000000000000000000000000000000..14db0114c6eb943688450777a874faa19851a49b --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/epoll.h @@ -0,0 +1,69 @@ +#ifndef _SYS_EPOLL_H +#define _SYS_EPOLL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#define __NEED_sigset_t + +#include + +#define EPOLL_CLOEXEC O_CLOEXEC +#define EPOLL_NONBLOCK O_NONBLOCK + +enum EPOLL_EVENTS { __EPOLL_DUMMY }; +#define EPOLLIN 0x001 +#define EPOLLPRI 0x002 +#define EPOLLOUT 0x004 +#define EPOLLRDNORM 0x040 +#define EPOLLNVAL 0x020 +#define EPOLLRDBAND 0x080 +#define EPOLLWRNORM 0x100 +#define EPOLLWRBAND 0x200 +#define EPOLLMSG 0x400 +#define EPOLLERR 0x008 +#define EPOLLHUP 0x010 +#define EPOLLRDHUP 0x2000 +#define EPOLLEXCLUSIVE (1U<<28) +#define EPOLLWAKEUP (1U<<29) +#define EPOLLONESHOT (1U<<30) +#define EPOLLET (1U<<31) + +#define EPOLL_CTL_ADD 1 +#define EPOLL_CTL_DEL 2 +#define EPOLL_CTL_MOD 3 + +typedef union epoll_data { + void *ptr; + int fd; + uint32_t u32; + uint64_t u64; +} epoll_data_t; + +struct epoll_event { + uint32_t events; + epoll_data_t data; +} +#ifdef __x86_64__ +__attribute__ ((__packed__)) +#endif +; + + +int epoll_create(int); +int epoll_create1(int); +int epoll_ctl(int, int, int, struct epoll_event *); +int epoll_wait(int, struct epoll_event *, int, int); +int epoll_pwait(int, struct epoll_event *, int, int, const sigset_t *); + + +#ifdef __cplusplus +} +#endif + +#endif /* sys/epoll.h */ diff --git a/third_party/musl/ndk_musl_include/sys/errno.h b/third_party/musl/ndk_musl_include/sys/errno.h new file mode 100644 index 0000000000000000000000000000000000000000..1b8cbc5f79552069771241d4f4285c6e4f466b9f --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/errno.h @@ -0,0 +1,2 @@ +#warning redirecting incorrect #include to +#include diff --git a/third_party/musl/ndk_musl_include/sys/eventfd.h b/third_party/musl/ndk_musl_include/sys/eventfd.h new file mode 100644 index 0000000000000000000000000000000000000000..7343c0bd9f7924b59c36587d89077d24ff085fb5 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/eventfd.h @@ -0,0 +1,26 @@ +#ifndef _SYS_EVENTFD_H +#define _SYS_EVENTFD_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +typedef uint64_t eventfd_t; + +#define EFD_SEMAPHORE 1 +#define EFD_CLOEXEC O_CLOEXEC +#define EFD_NONBLOCK O_NONBLOCK + +int eventfd(unsigned int, int); +int eventfd_read(int, eventfd_t *); +int eventfd_write(int, eventfd_t); + + +#ifdef __cplusplus +} +#endif + +#endif /* sys/eventfd.h */ diff --git a/third_party/musl/ndk_musl_include/sys/fanotify.h b/third_party/musl/ndk_musl_include/sys/fanotify.h new file mode 100644 index 0000000000000000000000000000000000000000..1f864c028b2d42c3a87c79098ab12a72811cd09f --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/fanotify.h @@ -0,0 +1,105 @@ +#ifndef _FANOTIFY_H +#define _FANOTIFY_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +struct fanotify_event_metadata { + unsigned event_len; + unsigned char vers; + unsigned char reserved; + unsigned short metadata_len; + unsigned long long mask +#ifdef __GNUC__ + __attribute__((__aligned__(8))) +#endif + ; + int fd; + int pid; +}; + +struct fanotify_event_info_header { + unsigned char info_type; + unsigned char pad; + unsigned short len; +}; + +struct fanotify_event_info_fid { + struct fanotify_event_info_header hdr; + fsid_t fsid; + unsigned char handle[]; +}; + +struct fanotify_response { + int fd; + unsigned response; +}; + +#define FAN_ACCESS 0x01 +#define FAN_MODIFY 0x02 +#define FAN_ATTRIB 0x04 +#define FAN_CLOSE_WRITE 0x08 +#define FAN_CLOSE_NOWRITE 0x10 +#define FAN_OPEN 0x20 +#define FAN_MOVED_FROM 0x40 +#define FAN_MOVED_TO 0x80 +#define FAN_CREATE 0x100 +#define FAN_DELETE 0x200 +#define FAN_DELETE_SELF 0x400 +#define FAN_MOVE_SELF 0x800 +#define FAN_OPEN_EXEC 0x1000 +#define FAN_Q_OVERFLOW 0x4000 +#define FAN_OPEN_PERM 0x10000 +#define FAN_ACCESS_PERM 0x20000 +#define FAN_OPEN_EXEC_PERM 0x40000 +#define FAN_ONDIR 0x40000000 +#define FAN_EVENT_ON_CHILD 0x08000000 +#define FAN_CLOSE (FAN_CLOSE_WRITE | FAN_CLOSE_NOWRITE) +#define FAN_MOVE (FAN_MOVED_FROM | FAN_MOVED_TO) +#define FAN_CLOEXEC 0x01 +#define FAN_NONBLOCK 0x02 +#define FAN_CLASS_NOTIF 0 +#define FAN_CLASS_CONTENT 0x04 +#define FAN_CLASS_PRE_CONTENT 0x08 +#define FAN_ALL_CLASS_BITS (FAN_CLASS_NOTIF | FAN_CLASS_CONTENT | FAN_CLASS_PRE_CONTENT) +#define FAN_UNLIMITED_QUEUE 0x10 +#define FAN_UNLIMITED_MARKS 0x20 +#define FAN_ENABLE_AUDIT 0x40 +#define FAN_REPORT_TID 0x100 +#define FAN_REPORT_FID 0x200 +#define FAN_ALL_INIT_FLAGS (FAN_CLOEXEC | FAN_NONBLOCK | FAN_ALL_CLASS_BITS | FAN_UNLIMITED_QUEUE | FAN_UNLIMITED_MARKS) +#define FAN_MARK_ADD 0x01 +#define FAN_MARK_REMOVE 0x02 +#define FAN_MARK_DONT_FOLLOW 0x04 +#define FAN_MARK_ONLYDIR 0x08 +#define FAN_MARK_IGNORED_MASK 0x20 +#define FAN_MARK_IGNORED_SURV_MODIFY 0x40 +#define FAN_MARK_FLUSH 0x80 +#define FAN_MARK_INODE 0x00 +#define FAN_MARK_MOUNT 0x10 +#define FAN_MARK_FILESYSTEM 0x100 +#define FAN_MARK_TYPE_MASK (FAN_MARK_INODE | FAN_MARK_MOUNT | FAN_MARK_FILESYSTEM) +#define FAN_ALL_MARK_FLAGS (FAN_MARK_ADD | FAN_MARK_REMOVE | FAN_MARK_DONT_FOLLOW | FAN_MARK_ONLYDIR | FAN_MARK_MOUNT | FAN_MARK_IGNORED_MASK | FAN_MARK_IGNORED_SURV_MODIFY | FAN_MARK_FLUSH) +#define FAN_ALL_EVENTS (FAN_ACCESS | FAN_MODIFY | FAN_CLOSE | FAN_OPEN) +#define FAN_ALL_PERM_EVENTS (FAN_OPEN_PERM | FAN_ACCESS_PERM) +#define FAN_ALL_OUTGOING_EVENTS (FAN_ALL_EVENTS | FAN_ALL_PERM_EVENTS | FAN_Q_OVERFLOW) +#define FANOTIFY_METADATA_VERSION 3 +#define FAN_EVENT_INFO_TYPE_FID 1 +#define FAN_ALLOW 0x01 +#define FAN_DENY 0x02 +#define FAN_AUDIT 0x10 +#define FAN_NOFD -1 +#define FAN_EVENT_METADATA_LEN (sizeof(struct fanotify_event_metadata)) +#define FAN_EVENT_NEXT(meta, len) ((len) -= (meta)->event_len, (struct fanotify_event_metadata*)(((char *)(meta)) + (meta)->event_len)) +#define FAN_EVENT_OK(meta, len) ((long)(len) >= (long)FAN_EVENT_METADATA_LEN && (long)(meta)->event_len >= (long)FAN_EVENT_METADATA_LEN && (long)(meta)->event_len <= (long)(len)) + +int fanotify_init(unsigned, unsigned); +int fanotify_mark(int, unsigned, unsigned long long, int, const char *); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/fcntl.h b/third_party/musl/ndk_musl_include/sys/fcntl.h new file mode 100644 index 0000000000000000000000000000000000000000..f255c3cc4ed6a105f91e16c51e313e940ef31375 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/fcntl.h @@ -0,0 +1,2 @@ +#warning redirecting incorrect #include to +#include diff --git a/third_party/musl/ndk_musl_include/sys/file.h b/third_party/musl/ndk_musl_include/sys/file.h new file mode 100644 index 0000000000000000000000000000000000000000..5b94fe36854f96c09cc68126d2d2b9505977b770 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/file.h @@ -0,0 +1,21 @@ +#ifndef _SYS_FILE_H +#define _SYS_FILE_H +#ifdef __cplusplus +extern "C" { +#endif + +#define LOCK_SH 1 +#define LOCK_EX 2 +#define LOCK_NB 4 +#define LOCK_UN 8 + +#define L_SET 0 +#define L_INCR 1 +#define L_XTND 2 + +int flock(int, int); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/fsuid.h b/third_party/musl/ndk_musl_include/sys/fsuid.h new file mode 100644 index 0000000000000000000000000000000000000000..09a3e527c36c5b49f43797e173efe01bbd816255 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/fsuid.h @@ -0,0 +1,20 @@ +#ifndef _SYS_FSUID_H +#define _SYS_FSUID_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define __NEED_uid_t +#define __NEED_gid_t + +#include + +int setfsuid(uid_t); +int setfsgid(gid_t); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/inotify.h b/third_party/musl/ndk_musl_include/sys/inotify.h new file mode 100644 index 0000000000000000000000000000000000000000..2d74801970b1a624cd3f2c033d244460f2b86dbd --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/inotify.h @@ -0,0 +1,58 @@ +#ifndef _SYS_INOTIFY_H +#define _SYS_INOTIFY_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +struct inotify_event { + int wd; + uint32_t mask, cookie, len; + char name[]; +}; + +#define IN_CLOEXEC O_CLOEXEC +#define IN_NONBLOCK O_NONBLOCK + +#define IN_ACCESS 0x00000001 +#define IN_MODIFY 0x00000002 +#define IN_ATTRIB 0x00000004 +#define IN_CLOSE_WRITE 0x00000008 +#define IN_CLOSE_NOWRITE 0x00000010 +#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) +#define IN_OPEN 0x00000020 +#define IN_MOVED_FROM 0x00000040 +#define IN_MOVED_TO 0x00000080 +#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) +#define IN_CREATE 0x00000100 +#define IN_DELETE 0x00000200 +#define IN_DELETE_SELF 0x00000400 +#define IN_MOVE_SELF 0x00000800 +#define IN_ALL_EVENTS 0x00000fff + +#define IN_UNMOUNT 0x00002000 +#define IN_Q_OVERFLOW 0x00004000 +#define IN_IGNORED 0x00008000 + +#define IN_ONLYDIR 0x01000000 +#define IN_DONT_FOLLOW 0x02000000 +#define IN_EXCL_UNLINK 0x04000000 +#define IN_MASK_CREATE 0x10000000 +#define IN_MASK_ADD 0x20000000 + +#define IN_ISDIR 0x40000000 +#define IN_ONESHOT 0x80000000 + +int inotify_init(void); +int inotify_init1(int); +int inotify_add_watch(int, const char *, uint32_t); +int inotify_rm_watch(int, int); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/io.h b/third_party/musl/ndk_musl_include/sys/io.h new file mode 100644 index 0000000000000000000000000000000000000000..023cbd44b93b2b3cb76d99aa7b4b88c0b8fa4d76 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/io.h @@ -0,0 +1,14 @@ +#ifndef _SYS_IO_H +#define _SYS_IO_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/ioctl.h b/third_party/musl/ndk_musl_include/sys/ioctl.h new file mode 100644 index 0000000000000000000000000000000000000000..af37215442033d2eb9306b3db0d581184239ee8b --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/ioctl.h @@ -0,0 +1,125 @@ +#ifndef _SYS_IOCTL_H +#define _SYS_IOCTL_H +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#define N_TTY 0 +#define N_SLIP 1 +#define N_MOUSE 2 +#define N_PPP 3 +#define N_STRIP 4 +#define N_AX25 5 +#define N_X25 6 +#define N_6PACK 7 +#define N_MASC 8 +#define N_R3964 9 +#define N_PROFIBUS_FDL 10 +#define N_IRDA 11 +#define N_SMSBLOCK 12 +#define N_HDLC 13 +#define N_SYNC_PPP 14 +#define N_HCI 15 +#define N_GIGASET_M101 16 +#define N_SLCAN 17 +#define N_PPS 18 +#define N_V253 19 +#define N_CAIF 20 +#define N_GSM0710 21 +#define N_TI_WL 22 +#define N_TRACESINK 23 +#define N_TRACEROUTER 24 +#define N_NCI 25 +#define N_SPEAKUP 26 +#define N_NULL 27 + +#define TIOCPKT_DATA 0 +#define TIOCPKT_FLUSHREAD 1 +#define TIOCPKT_FLUSHWRITE 2 +#define TIOCPKT_STOP 4 +#define TIOCPKT_START 8 +#define TIOCPKT_NOSTOP 16 +#define TIOCPKT_DOSTOP 32 +#define TIOCPKT_IOCTL 64 + +#define TIOCSER_TEMT 1 + +struct winsize { + unsigned short ws_row; + unsigned short ws_col; + unsigned short ws_xpixel; + unsigned short ws_ypixel; +}; + +#define SIOCADDRT 0x890B +#define SIOCDELRT 0x890C +#define SIOCRTMSG 0x890D + +#define SIOCGIFNAME 0x8910 +#define SIOCSIFLINK 0x8911 +#define SIOCGIFCONF 0x8912 +#define SIOCGIFFLAGS 0x8913 +#define SIOCSIFFLAGS 0x8914 +#define SIOCGIFADDR 0x8915 +#define SIOCSIFADDR 0x8916 +#define SIOCGIFDSTADDR 0x8917 +#define SIOCSIFDSTADDR 0x8918 +#define SIOCGIFBRDADDR 0x8919 +#define SIOCSIFBRDADDR 0x891a +#define SIOCGIFNETMASK 0x891b +#define SIOCSIFNETMASK 0x891c +#define SIOCGIFMETRIC 0x891d +#define SIOCSIFMETRIC 0x891e +#define SIOCGIFMEM 0x891f +#define SIOCSIFMEM 0x8920 +#define SIOCGIFMTU 0x8921 +#define SIOCSIFMTU 0x8922 +#define SIOCSIFNAME 0x8923 +#define SIOCSIFHWADDR 0x8924 +#define SIOCGIFENCAP 0x8925 +#define SIOCSIFENCAP 0x8926 +#define SIOCGIFHWADDR 0x8927 +#define SIOCGIFSLAVE 0x8929 +#define SIOCSIFSLAVE 0x8930 +#define SIOCADDMULTI 0x8931 +#define SIOCDELMULTI 0x8932 +#define SIOCGIFINDEX 0x8933 +#define SIOGIFINDEX SIOCGIFINDEX +#define SIOCSIFPFLAGS 0x8934 +#define SIOCGIFPFLAGS 0x8935 +#define SIOCDIFADDR 0x8936 +#define SIOCSIFHWBROADCAST 0x8937 +#define SIOCGIFCOUNT 0x8938 + +#define SIOCGIFBR 0x8940 +#define SIOCSIFBR 0x8941 + +#define SIOCGIFTXQLEN 0x8942 +#define SIOCSIFTXQLEN 0x8943 + +#define SIOCDARP 0x8953 +#define SIOCGARP 0x8954 +#define SIOCSARP 0x8955 + +#define SIOCDRARP 0x8960 +#define SIOCGRARP 0x8961 +#define SIOCSRARP 0x8962 + +#define SIOCGIFMAP 0x8970 +#define SIOCSIFMAP 0x8971 + +#define SIOCADDDLCI 0x8980 +#define SIOCDELDLCI 0x8981 + +#define SIOCDEVPRIVATE 0x89F0 +#define SIOCPROTOPRIVATE 0x89E0 + +int ioctl (int, int, ...); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/ipc.h b/third_party/musl/ndk_musl_include/sys/ipc.h new file mode 100644 index 0000000000000000000000000000000000000000..2c5f55040b29a6ab309393718f90bb2a6bad87c2 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/ipc.h @@ -0,0 +1,42 @@ +#ifndef _SYS_IPC_H +#define _SYS_IPC_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_uid_t +#define __NEED_gid_t +#define __NEED_mode_t +#define __NEED_key_t + +#include + +#define __ipc_perm_key __key +#define __ipc_perm_seq __seq + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define __key key +#define __seq seq +#endif + +#include +#include + +#define IPC_CREAT 01000 +#define IPC_EXCL 02000 +#define IPC_NOWAIT 04000 + +#define IPC_RMID 0 +#define IPC_SET 1 +#define IPC_INFO 3 + +#define IPC_PRIVATE ((key_t) 0) + +key_t ftok (const char *, int); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/kd.h b/third_party/musl/ndk_musl_include/sys/kd.h new file mode 100644 index 0000000000000000000000000000000000000000..d295ed4beba11f2ef31b57ffdf7078270a9e51f5 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/kd.h @@ -0,0 +1 @@ +#include diff --git a/third_party/musl/ndk_musl_include/sys/klog.h b/third_party/musl/ndk_musl_include/sys/klog.h new file mode 100644 index 0000000000000000000000000000000000000000..4e43834851dbe0da5aa5292fe0df708de124f4ff --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/klog.h @@ -0,0 +1,14 @@ +#ifndef _SYS_KLOG_H +#define _SYS_KLOG_H + +#ifdef __cplusplus +extern "C" { +#endif + +int klogctl (int, char *, int); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/membarrier.h b/third_party/musl/ndk_musl_include/sys/membarrier.h new file mode 100644 index 0000000000000000000000000000000000000000..d1a94c40aec5d0c47257ff3ffeb1e02fb4880a97 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/membarrier.h @@ -0,0 +1,17 @@ +#ifndef _SYS_MEMBARRIER_H +#define _SYS_MEMBARRIER_H + +#define MEMBARRIER_CMD_QUERY 0 +#define MEMBARRIER_CMD_GLOBAL 1 +#define MEMBARRIER_CMD_GLOBAL_EXPEDITED 2 +#define MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED 4 +#define MEMBARRIER_CMD_PRIVATE_EXPEDITED 8 +#define MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED 16 +#define MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE 32 +#define MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE 64 + +#define MEMBARRIER_CMD_SHARED MEMBARRIER_CMD_GLOBAL + +int membarrier(int, int); + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/mman.h b/third_party/musl/ndk_musl_include/sys/mman.h new file mode 100644 index 0000000000000000000000000000000000000000..c45451dc3106e03d8d26a0ec53246cf6f6ee5970 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/mman.h @@ -0,0 +1,147 @@ +#ifndef _SYS_MMAN_H +#define _SYS_MMAN_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_mode_t +#define __NEED_size_t +#define __NEED_off_t + +#if defined(_GNU_SOURCE) +#define __NEED_ssize_t +#endif + +#include + +#define MAP_FAILED ((void *) -1) + +#define MAP_SHARED 0x01 +#define MAP_PRIVATE 0x02 +#define MAP_SHARED_VALIDATE 0x03 +#define MAP_TYPE 0x0f +#define MAP_FIXED 0x10 +#define MAP_ANON 0x20 +#define MAP_ANONYMOUS MAP_ANON +#define MAP_NORESERVE 0x4000 +#define MAP_GROWSDOWN 0x0100 +#define MAP_DENYWRITE 0x0800 +#define MAP_EXECUTABLE 0x1000 +#define MAP_LOCKED 0x2000 +#define MAP_POPULATE 0x8000 +#define MAP_NONBLOCK 0x10000 +#define MAP_STACK 0x20000 +#define MAP_HUGETLB 0x40000 +#define MAP_SYNC 0x80000 +#define MAP_FIXED_NOREPLACE 0x100000 +#define MAP_FILE 0 + +#define MAP_HUGE_SHIFT 26 +#define MAP_HUGE_MASK 0x3f +#define MAP_HUGE_64KB (16 << 26) +#define MAP_HUGE_512KB (19 << 26) +#define MAP_HUGE_1MB (20 << 26) +#define MAP_HUGE_2MB (21 << 26) +#define MAP_HUGE_8MB (23 << 26) +#define MAP_HUGE_16MB (24 << 26) +#define MAP_HUGE_32MB (25 << 26) +#define MAP_HUGE_256MB (28 << 26) +#define MAP_HUGE_512MB (29 << 26) +#define MAP_HUGE_1GB (30 << 26) +#define MAP_HUGE_2GB (31 << 26) +#define MAP_HUGE_16GB (34U << 26) + +#define PROT_NONE 0 +#define PROT_READ 1 +#define PROT_WRITE 2 +#define PROT_EXEC 4 +#define PROT_GROWSDOWN 0x01000000 +#define PROT_GROWSUP 0x02000000 + +#define MS_ASYNC 1 +#define MS_INVALIDATE 2 +#define MS_SYNC 4 + +#define MCL_CURRENT 1 +#define MCL_FUTURE 2 +#define MCL_ONFAULT 4 + +#define POSIX_MADV_NORMAL 0 +#define POSIX_MADV_RANDOM 1 +#define POSIX_MADV_SEQUENTIAL 2 +#define POSIX_MADV_WILLNEED 3 +#define POSIX_MADV_DONTNEED 4 + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define MADV_NORMAL 0 +#define MADV_RANDOM 1 +#define MADV_SEQUENTIAL 2 +#define MADV_WILLNEED 3 +#define MADV_DONTNEED 4 +#define MADV_FREE 8 +#define MADV_REMOVE 9 +#define MADV_DONTFORK 10 +#define MADV_DOFORK 11 +#define MADV_MERGEABLE 12 +#define MADV_UNMERGEABLE 13 +#define MADV_HUGEPAGE 14 +#define MADV_NOHUGEPAGE 15 +#define MADV_DONTDUMP 16 +#define MADV_DODUMP 17 +#define MADV_WIPEONFORK 18 +#define MADV_KEEPONFORK 19 +#define MADV_COLD 20 +#define MADV_PAGEOUT 21 +#define MADV_HWPOISON 100 +#define MADV_SOFT_OFFLINE 101 +#endif + +#ifdef _GNU_SOURCE +#define MREMAP_MAYMOVE 1 +#define MREMAP_FIXED 2 + +#define MLOCK_ONFAULT 0x01 + +#define MFD_CLOEXEC 0x0001U +#define MFD_ALLOW_SEALING 0x0002U +#define MFD_HUGETLB 0x0004U +#endif + +#include + +void *mmap (void *, size_t, int, int, int, off_t); +int munmap (void *, size_t); + +int mprotect (void *, size_t, int); +int msync (void *, size_t, int); + +int posix_madvise (void *, size_t, int); + +int mlock (const void *, size_t); +int munlock (const void *, size_t); +int mlockall (int); +int munlockall (void); + +#ifdef _GNU_SOURCE +void *mremap (void *, size_t, size_t, int, ...); +int remap_file_pages (void *, size_t, int, size_t, int); +int memfd_create (const char *, unsigned); +int mlock2 (const void *, size_t, unsigned); +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +int madvise (void *, size_t, int); +int mincore (void *, size_t, unsigned char *); +#endif + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define mmap64 mmap +#define off64_t off_t +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/mount.h b/third_party/musl/ndk_musl_include/sys/mount.h new file mode 100644 index 0000000000000000000000000000000000000000..a4ebe584dda2f2736f58ed6875835176e54238b2 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/mount.h @@ -0,0 +1,74 @@ +#ifndef _SYS_MOUNT_H +#define _SYS_MOUNT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define BLKROSET _IO(0x12, 93) +#define BLKROGET _IO(0x12, 94) +#define BLKRRPART _IO(0x12, 95) +#define BLKGETSIZE _IO(0x12, 96) +#define BLKFLSBUF _IO(0x12, 97) +#define BLKRASET _IO(0x12, 98) +#define BLKRAGET _IO(0x12, 99) +#define BLKFRASET _IO(0x12,100) +#define BLKFRAGET _IO(0x12,101) +#define BLKSECTSET _IO(0x12,102) +#define BLKSECTGET _IO(0x12,103) +#define BLKSSZGET _IO(0x12,104) +#define BLKBSZGET _IOR(0x12,112,size_t) +#define BLKBSZSET _IOW(0x12,113,size_t) +#define BLKGETSIZE64 _IOR(0x12,114,size_t) + +#define MS_RDONLY 1 +#define MS_NOSUID 2 +#define MS_NODEV 4 +#define MS_NOEXEC 8 +#define MS_SYNCHRONOUS 16 +#define MS_REMOUNT 32 +#define MS_MANDLOCK 64 +#define MS_DIRSYNC 128 +#define MS_NOATIME 1024 +#define MS_NODIRATIME 2048 +#define MS_BIND 4096 +#define MS_MOVE 8192 +#define MS_REC 16384 +#define MS_SILENT 32768 +#define MS_POSIXACL (1<<16) +#define MS_UNBINDABLE (1<<17) +#define MS_PRIVATE (1<<18) +#define MS_SLAVE (1<<19) +#define MS_SHARED (1<<20) +#define MS_RELATIME (1<<21) +#define MS_KERNMOUNT (1<<22) +#define MS_I_VERSION (1<<23) +#define MS_STRICTATIME (1<<24) +#define MS_LAZYTIME (1<<25) +#define MS_NOREMOTELOCK (1<<27) +#define MS_NOSEC (1<<28) +#define MS_BORN (1<<29) +#define MS_ACTIVE (1<<30) +#define MS_NOUSER (1U<<31) + +#define MS_RMT_MASK (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION|MS_LAZYTIME) + +#define MS_MGC_VAL 0xc0ed0000 +#define MS_MGC_MSK 0xffff0000 + +#define MNT_FORCE 1 +#define MNT_DETACH 2 +#define MNT_EXPIRE 4 +#define UMOUNT_NOFOLLOW 8 + +int mount(const char *, const char *, const char *, unsigned long, const void *); +int umount(const char *); +int umount2(const char *, int); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/msg.h b/third_party/musl/ndk_musl_include/sys/msg.h new file mode 100644 index 0000000000000000000000000000000000000000..897d588dd9ac8485a809128d0d1d7664d67bf533 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/msg.h @@ -0,0 +1,53 @@ +#ifndef _SYS_MSG_H +#define _SYS_MSG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_pid_t +#define __NEED_key_t +#define __NEED_time_t +#define __NEED_size_t +#define __NEED_ssize_t + +#include + +typedef unsigned long msgqnum_t; +typedef unsigned long msglen_t; + +#include + +#define __msg_cbytes msg_cbytes + +#define MSG_NOERROR 010000 +#define MSG_EXCEPT 020000 + +#define MSG_STAT (11 | (IPC_STAT & 0x100)) +#define MSG_INFO 12 +#define MSG_STAT_ANY (13 | (IPC_STAT & 0x100)) + +struct msginfo { + int msgpool, msgmap, msgmax, msgmnb, msgmni, msgssz, msgtql; + unsigned short msgseg; +}; + +int msgctl (int, int, struct msqid_ds *); +int msgget (key_t, int); +ssize_t msgrcv (int, void *, size_t, long, int); +int msgsnd (int, const void *, size_t, int); + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +struct msgbuf { + long mtype; + char mtext[1]; +}; +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/mtio.h b/third_party/musl/ndk_musl_include/sys/mtio.h new file mode 100644 index 0000000000000000000000000000000000000000..c4e8f34f916d0973e0716e1b15654768f1f20169 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/mtio.h @@ -0,0 +1,188 @@ +#ifndef _SYS_MTIO_H +#define _SYS_MTIO_H + +#include +#include + +struct mtop { + short mt_op; + int mt_count; +}; + +#define _IOT_mtop _IOT (_IOTS (short), 1, _IOTS (int), 1, 0, 0) +#define _IOT_mtget _IOT (_IOTS (long), 7, 0, 0, 0, 0) +#define _IOT_mtpos _IOT_SIMPLE (long) +#define _IOT_mtconfiginfo _IOT (_IOTS (long), 2, _IOTS (short), 3, _IOTS (long), 1) + + +#define MTRESET 0 +#define MTFSF 1 +#define MTBSF 2 +#define MTFSR 3 +#define MTBSR 4 +#define MTWEOF 5 +#define MTREW 6 +#define MTOFFL 7 +#define MTNOP 8 +#define MTRETEN 9 +#define MTBSFM 10 +#define MTFSFM 11 +#define MTEOM 12 +#define MTERASE 13 +#define MTRAS1 14 +#define MTRAS2 15 +#define MTRAS3 16 +#define MTSETBLK 20 +#define MTSETDENSITY 21 +#define MTSEEK 22 +#define MTTELL 23 +#define MTSETDRVBUFFER 24 +#define MTFSS 25 +#define MTBSS 26 +#define MTWSM 27 +#define MTLOCK 28 +#define MTUNLOCK 29 +#define MTLOAD 30 +#define MTUNLOAD 31 +#define MTCOMPRESSION 32 +#define MTSETPART 33 +#define MTMKPART 34 + +struct mtget { + long mt_type; + long mt_resid; + long mt_dsreg; + long mt_gstat; + long mt_erreg; + int mt_fileno; + int mt_blkno; +}; + +#define MT_ISUNKNOWN 0x01 +#define MT_ISQIC02 0x02 +#define MT_ISWT5150 0x03 +#define MT_ISARCHIVE_5945L2 0x04 +#define MT_ISCMSJ500 0x05 +#define MT_ISTDC3610 0x06 +#define MT_ISARCHIVE_VP60I 0x07 +#define MT_ISARCHIVE_2150L 0x08 +#define MT_ISARCHIVE_2060L 0x09 +#define MT_ISARCHIVESC499 0x0A +#define MT_ISQIC02_ALL_FEATURES 0x0F +#define MT_ISWT5099EEN24 0x11 +#define MT_ISTEAC_MT2ST 0x12 +#define MT_ISEVEREX_FT40A 0x32 +#define MT_ISDDS1 0x51 +#define MT_ISDDS2 0x52 +#define MT_ISSCSI1 0x71 +#define MT_ISSCSI2 0x72 +#define MT_ISFTAPE_UNKNOWN 0x800000 +#define MT_ISFTAPE_FLAG 0x800000 + +struct mt_tape_info { + long t_type; + char *t_name; +}; + +#define MT_TAPE_INFO \ +{ \ + {MT_ISUNKNOWN, "Unknown type of tape device"}, \ + {MT_ISQIC02, "Generic QIC-02 tape streamer"}, \ + {MT_ISWT5150, "Wangtek 5150, QIC-150"}, \ + {MT_ISARCHIVE_5945L2, "Archive 5945L-2"}, \ + {MT_ISCMSJ500, "CMS Jumbo 500"}, \ + {MT_ISTDC3610, "Tandberg TDC 3610, QIC-24"}, \ + {MT_ISARCHIVE_VP60I, "Archive VP60i, QIC-02"}, \ + {MT_ISARCHIVE_2150L, "Archive Viper 2150L"}, \ + {MT_ISARCHIVE_2060L, "Archive Viper 2060L"}, \ + {MT_ISARCHIVESC499, "Archive SC-499 QIC-36 controller"}, \ + {MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"}, \ + {MT_ISWT5099EEN24, "Wangtek 5099-een24, 60MB"}, \ + {MT_ISTEAC_MT2ST, "Teac MT-2ST 155mb data cassette drive"}, \ + {MT_ISEVEREX_FT40A, "Everex FT40A, QIC-40"}, \ + {MT_ISSCSI1, "Generic SCSI-1 tape"}, \ + {MT_ISSCSI2, "Generic SCSI-2 tape"}, \ + {0, 0} \ +} + +struct mtpos { + long mt_blkno; +}; + +struct mtconfiginfo { + long mt_type; + long ifc_type; + unsigned short irqnr; + unsigned short dmanr; + unsigned short port; + unsigned long debug; + unsigned have_dens:1; + unsigned have_bsf:1; + unsigned have_fsr:1; + unsigned have_bsr:1; + unsigned have_eod:1; + unsigned have_seek:1; + unsigned have_tell:1; + unsigned have_ras1:1; + unsigned have_ras2:1; + unsigned have_ras3:1; + unsigned have_qfa:1; + unsigned pad1:5; + char reserved[10]; +}; + +#define MTIOCTOP _IOW('m', 1, struct mtop) +#define MTIOCGET _IOR('m', 2, struct mtget) +#define MTIOCPOS _IOR('m', 3, struct mtpos) + +#define MTIOCGETCONFIG _IOR('m', 4, struct mtconfiginfo) +#define MTIOCSETCONFIG _IOW('m', 5, struct mtconfiginfo) + +#define GMT_EOF(x) ((x) & 0x80000000) +#define GMT_BOT(x) ((x) & 0x40000000) +#define GMT_EOT(x) ((x) & 0x20000000) +#define GMT_SM(x) ((x) & 0x10000000) +#define GMT_EOD(x) ((x) & 0x08000000) +#define GMT_WR_PROT(x) ((x) & 0x04000000) +#define GMT_ONLINE(x) ((x) & 0x01000000) +#define GMT_D_6250(x) ((x) & 0x00800000) +#define GMT_D_1600(x) ((x) & 0x00400000) +#define GMT_D_800(x) ((x) & 0x00200000) +#define GMT_DR_OPEN(x) ((x) & 0x00040000) +#define GMT_IM_REP_EN(x) ((x) & 0x00010000) + +#define MT_ST_BLKSIZE_SHIFT 0 +#define MT_ST_BLKSIZE_MASK 0xffffff +#define MT_ST_DENSITY_SHIFT 24 +#define MT_ST_DENSITY_MASK 0xff000000 +#define MT_ST_SOFTERR_SHIFT 0 +#define MT_ST_SOFTERR_MASK 0xffff +#define MT_ST_OPTIONS 0xf0000000 +#define MT_ST_BOOLEANS 0x10000000 +#define MT_ST_SETBOOLEANS 0x30000000 +#define MT_ST_CLEARBOOLEANS 0x40000000 +#define MT_ST_WRITE_THRESHOLD 0x20000000 +#define MT_ST_DEF_BLKSIZE 0x50000000 +#define MT_ST_DEF_OPTIONS 0x60000000 +#define MT_ST_BUFFER_WRITES 0x1 +#define MT_ST_ASYNC_WRITES 0x2 +#define MT_ST_READ_AHEAD 0x4 +#define MT_ST_DEBUGGING 0x8 +#define MT_ST_TWO_FM 0x10 +#define MT_ST_FAST_MTEOM 0x20 +#define MT_ST_AUTO_LOCK 0x40 +#define MT_ST_DEF_WRITES 0x80 +#define MT_ST_CAN_BSR 0x100 +#define MT_ST_NO_BLKLIMS 0x200 +#define MT_ST_CAN_PARTITIONS 0x400 +#define MT_ST_SCSI2LOGICAL 0x800 +#define MT_ST_CLEAR_DEFAULT 0xfffff +#define MT_ST_DEF_DENSITY (MT_ST_DEF_OPTIONS | 0x100000) +#define MT_ST_DEF_COMPRESSION (MT_ST_DEF_OPTIONS | 0x200000) +#define MT_ST_DEF_DRVBUFFER (MT_ST_DEF_OPTIONS | 0x300000) +#define MT_ST_HPLOADER_OFFSET 10000 +#ifndef DEFTAPE +# define DEFTAPE "/dev/tape" +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/param.h b/third_party/musl/ndk_musl_include/sys/param.h new file mode 100644 index 0000000000000000000000000000000000000000..6a7952dc322d1d5436bfa5ceebaa7bbe7d485a0f --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/param.h @@ -0,0 +1,35 @@ +#ifndef _SYS_PARAM_H +#define _SYS_PARAM_H + +#define MAXSYMLINKS 20 +#define MAXHOSTNAMELEN 64 +#define MAXNAMLEN 255 +#define MAXPATHLEN 4096 +#define NBBY 8 +#define NGROUPS 32 +#define CANBSIZ 255 +#define NOFILE 256 +#define NCARGS 131072 +#define DEV_BSIZE 512 +#define NOGROUP (-1) + +#undef MIN +#undef MAX +#define MIN(a,b) (((a)<(b))?(a):(b)) +#define MAX(a,b) (((a)>(b))?(a):(b)) + +#define __bitop(x,i,o) ((x)[(i)/8] o (1<<(i)%8)) +#define setbit(x,i) __bitop(x,i,|=) +#define clrbit(x,i) __bitop(x,i,&=~) +#define isset(x,i) __bitop(x,i,&) +#define isclr(x,i) !isset(x,i) + +#define howmany(n,d) (((n)+((d)-1))/(d)) +#define roundup(n,d) (howmany(n,d)*(d)) +#define powerof2(n) !(((n)-1) & (n)) + +#include +#include +#include + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/personality.h b/third_party/musl/ndk_musl_include/sys/personality.h new file mode 100644 index 0000000000000000000000000000000000000000..2a6a656daf6d2cce0edb014b68df41bbb1027579 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/personality.h @@ -0,0 +1,46 @@ +#ifndef _PERSONALITY_H +#define _PERSONALITY_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define ADDR_NO_RANDOMIZE 0x0040000 +#define MMAP_PAGE_ZERO 0x0100000 +#define ADDR_COMPAT_LAYOUT 0x0200000 +#define READ_IMPLIES_EXEC 0x0400000 +#define ADDR_LIMIT_32BIT 0x0800000 +#define SHORT_INODE 0x1000000 +#define WHOLE_SECONDS 0x2000000 +#define STICKY_TIMEOUTS 0x4000000 +#define ADDR_LIMIT_3GB 0x8000000 + +#define PER_LINUX 0 +#define PER_LINUX_32BIT ADDR_LIMIT_32BIT +#define PER_SVR4 (1 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO) +#define PER_SVR3 (2 | STICKY_TIMEOUTS | SHORT_INODE) +#define PER_SCOSVR3 (3 | STICKY_TIMEOUTS | WHOLE_SECONDS | SHORT_INODE) +#define PER_OSR5 (3 | STICKY_TIMEOUTS | WHOLE_SECONDS) +#define PER_WYSEV386 (4 | STICKY_TIMEOUTS | SHORT_INODE) +#define PER_ISCR4 (5 | STICKY_TIMEOUTS) +#define PER_BSD 6 +#define PER_SUNOS (6 | STICKY_TIMEOUTS) +#define PER_XENIX (7 | STICKY_TIMEOUTS | SHORT_INODE) +#define PER_LINUX32 8 +#define PER_LINUX32_3GB (8 | ADDR_LIMIT_3GB) +#define PER_IRIX32 (9 | STICKY_TIMEOUTS) +#define PER_IRIXN32 (0xa | STICKY_TIMEOUTS) +#define PER_IRIX64 (0x0b | STICKY_TIMEOUTS) +#define PER_RISCOS 0xc +#define PER_SOLARIS (0xd | STICKY_TIMEOUTS) +#define PER_UW7 (0xe | STICKY_TIMEOUTS | MMAP_PAGE_ZERO) +#define PER_OSF4 0xf +#define PER_HPUX 0x10 +#define PER_MASK 0xff + +int personality(unsigned long); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/poll.h b/third_party/musl/ndk_musl_include/sys/poll.h new file mode 100644 index 0000000000000000000000000000000000000000..90af1e77bdecc052c15ee40ff1e132119aad8f28 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/poll.h @@ -0,0 +1,2 @@ +#warning redirecting incorrect #include to +#include diff --git a/third_party/musl/ndk_musl_include/sys/prctl.h b/third_party/musl/ndk_musl_include/sys/prctl.h new file mode 100644 index 0000000000000000000000000000000000000000..09b8b8012ac76e3026e5f35c9963d1273c89a335 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/prctl.h @@ -0,0 +1,170 @@ +#ifndef _SYS_PRCTL_H +#define _SYS_PRCTL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define PR_SET_PDEATHSIG 1 +#define PR_GET_PDEATHSIG 2 +#define PR_GET_DUMPABLE 3 +#define PR_SET_DUMPABLE 4 +#define PR_GET_UNALIGN 5 +#define PR_SET_UNALIGN 6 +#define PR_UNALIGN_NOPRINT 1 +#define PR_UNALIGN_SIGBUS 2 +#define PR_GET_KEEPCAPS 7 +#define PR_SET_KEEPCAPS 8 +#define PR_GET_FPEMU 9 +#define PR_SET_FPEMU 10 +#define PR_FPEMU_NOPRINT 1 +#define PR_FPEMU_SIGFPE 2 +#define PR_GET_FPEXC 11 +#define PR_SET_FPEXC 12 +#define PR_FP_EXC_SW_ENABLE 0x80 +#define PR_FP_EXC_DIV 0x010000 +#define PR_FP_EXC_OVF 0x020000 +#define PR_FP_EXC_UND 0x040000 +#define PR_FP_EXC_RES 0x080000 +#define PR_FP_EXC_INV 0x100000 +#define PR_FP_EXC_DISABLED 0 +#define PR_FP_EXC_NONRECOV 1 +#define PR_FP_EXC_ASYNC 2 +#define PR_FP_EXC_PRECISE 3 +#define PR_GET_TIMING 13 +#define PR_SET_TIMING 14 +#define PR_TIMING_STATISTICAL 0 +#define PR_TIMING_TIMESTAMP 1 +#define PR_SET_NAME 15 +#define PR_GET_NAME 16 +#define PR_GET_ENDIAN 19 +#define PR_SET_ENDIAN 20 +#define PR_ENDIAN_BIG 0 +#define PR_ENDIAN_LITTLE 1 +#define PR_ENDIAN_PPC_LITTLE 2 +#define PR_GET_SECCOMP 21 +#define PR_SET_SECCOMP 22 +#define PR_CAPBSET_READ 23 +#define PR_CAPBSET_DROP 24 +#define PR_GET_TSC 25 +#define PR_SET_TSC 26 +#define PR_TSC_ENABLE 1 +#define PR_TSC_SIGSEGV 2 +#define PR_GET_SECUREBITS 27 +#define PR_SET_SECUREBITS 28 +#define PR_SET_TIMERSLACK 29 +#define PR_GET_TIMERSLACK 30 + +#define PR_TASK_PERF_EVENTS_DISABLE 31 +#define PR_TASK_PERF_EVENTS_ENABLE 32 + +#define PR_MCE_KILL 33 +#define PR_MCE_KILL_CLEAR 0 +#define PR_MCE_KILL_SET 1 +#define PR_MCE_KILL_LATE 0 +#define PR_MCE_KILL_EARLY 1 +#define PR_MCE_KILL_DEFAULT 2 +#define PR_MCE_KILL_GET 34 + +#define PR_SET_MM 35 +#define PR_SET_MM_START_CODE 1 +#define PR_SET_MM_END_CODE 2 +#define PR_SET_MM_START_DATA 3 +#define PR_SET_MM_END_DATA 4 +#define PR_SET_MM_START_STACK 5 +#define PR_SET_MM_START_BRK 6 +#define PR_SET_MM_BRK 7 +#define PR_SET_MM_ARG_START 8 +#define PR_SET_MM_ARG_END 9 +#define PR_SET_MM_ENV_START 10 +#define PR_SET_MM_ENV_END 11 +#define PR_SET_MM_AUXV 12 +#define PR_SET_MM_EXE_FILE 13 +#define PR_SET_MM_MAP 14 +#define PR_SET_MM_MAP_SIZE 15 + +struct prctl_mm_map { + uint64_t start_code; + uint64_t end_code; + uint64_t start_data; + uint64_t end_data; + uint64_t start_brk; + uint64_t brk; + uint64_t start_stack; + uint64_t arg_start; + uint64_t arg_end; + uint64_t env_start; + uint64_t env_end; + uint64_t *auxv; + uint32_t auxv_size; + uint32_t exe_fd; +}; + +#define PR_SET_PTRACER 0x59616d61 +#define PR_SET_PTRACER_ANY (-1UL) + +#define PR_SET_CHILD_SUBREAPER 36 +#define PR_GET_CHILD_SUBREAPER 37 + +#define PR_SET_NO_NEW_PRIVS 38 +#define PR_GET_NO_NEW_PRIVS 39 + +#define PR_GET_TID_ADDRESS 40 + +#define PR_SET_THP_DISABLE 41 +#define PR_GET_THP_DISABLE 42 + +#define PR_MPX_ENABLE_MANAGEMENT 43 +#define PR_MPX_DISABLE_MANAGEMENT 44 + +#define PR_SET_FP_MODE 45 +#define PR_GET_FP_MODE 46 +#define PR_FP_MODE_FR (1 << 0) +#define PR_FP_MODE_FRE (1 << 1) + +#define PR_CAP_AMBIENT 47 +#define PR_CAP_AMBIENT_IS_SET 1 +#define PR_CAP_AMBIENT_RAISE 2 +#define PR_CAP_AMBIENT_LOWER 3 +#define PR_CAP_AMBIENT_CLEAR_ALL 4 + +#define PR_SVE_SET_VL 50 +#define PR_SVE_SET_VL_ONEXEC (1 << 18) +#define PR_SVE_GET_VL 51 +#define PR_SVE_VL_LEN_MASK 0xffff +#define PR_SVE_VL_INHERIT (1 << 17) + +#define PR_GET_SPECULATION_CTRL 52 +#define PR_SET_SPECULATION_CTRL 53 +#define PR_SPEC_STORE_BYPASS 0 +#define PR_SPEC_INDIRECT_BRANCH 1 +#define PR_SPEC_NOT_AFFECTED 0 +#define PR_SPEC_PRCTL (1UL << 0) +#define PR_SPEC_ENABLE (1UL << 1) +#define PR_SPEC_DISABLE (1UL << 2) +#define PR_SPEC_FORCE_DISABLE (1UL << 3) +#define PR_SPEC_DISABLE_NOEXEC (1UL << 4) + +#define PR_PAC_RESET_KEYS 54 +#define PR_PAC_APIAKEY (1UL << 0) +#define PR_PAC_APIBKEY (1UL << 1) +#define PR_PAC_APDAKEY (1UL << 2) +#define PR_PAC_APDBKEY (1UL << 3) +#define PR_PAC_APGAKEY (1UL << 4) + +#define PR_SET_TAGGED_ADDR_CTRL 55 +#define PR_GET_TAGGED_ADDR_CTRL 56 +#define PR_TAGGED_ADDR_ENABLE (1UL << 0) + +#define PR_SET_VMA 0x53564d41 +#define PR_SET_VMA_ANON_NAME 0 + +int prctl (int, ...); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/procfs.h b/third_party/musl/ndk_musl_include/sys/procfs.h new file mode 100644 index 0000000000000000000000000000000000000000..f3d002a8a5e36f3e3075514da63cf28d2528545b --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/procfs.h @@ -0,0 +1,63 @@ +#ifndef _SYS_PROCFS_H +#define _SYS_PROCFS_H +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +struct elf_siginfo { + int si_signo; + int si_code; + int si_errno; +}; + +struct elf_prstatus { + struct elf_siginfo pr_info; + short int pr_cursig; + unsigned long int pr_sigpend; + unsigned long int pr_sighold; + pid_t pr_pid; + pid_t pr_ppid; + pid_t pr_pgrp; + pid_t pr_sid; + struct { + long tv_sec, tv_usec; + } pr_utime, pr_stime, pr_cutime, pr_cstime; + elf_gregset_t pr_reg; + int pr_fpvalid; +}; + +#define ELF_PRARGSZ 80 + +struct elf_prpsinfo { + char pr_state; + char pr_sname; + char pr_zomb; + char pr_nice; + unsigned long int pr_flag; +#if UINTPTR_MAX == 0xffffffff + unsigned short int pr_uid; + unsigned short int pr_gid; +#else + unsigned int pr_uid; + unsigned int pr_gid; +#endif + int pr_pid, pr_ppid, pr_pgrp, pr_sid; + char pr_fname[16]; + char pr_psargs[ELF_PRARGSZ]; +}; + +typedef void *psaddr_t; +typedef elf_gregset_t prgregset_t; +typedef elf_fpregset_t prfpregset_t; +typedef pid_t lwpid_t; +typedef struct elf_prstatus prstatus_t; +typedef struct elf_prpsinfo prpsinfo_t; + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/ptrace.h b/third_party/musl/ndk_musl_include/sys/ptrace.h new file mode 100644 index 0000000000000000000000000000000000000000..ad8c5c97294d9b3a1d9a4a8602f5a6d38ba1b723 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/ptrace.h @@ -0,0 +1,138 @@ +#ifndef _SYS_PTRACE_H +#define _SYS_PTRACE_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define PTRACE_TRACEME 0 +#define PT_TRACE_ME PTRACE_TRACEME + +#define PTRACE_PEEKTEXT 1 +#define PTRACE_PEEKDATA 2 +#define PTRACE_PEEKUSER 3 +#define PTRACE_POKETEXT 4 +#define PTRACE_POKEDATA 5 +#define PTRACE_POKEUSER 6 +#define PTRACE_CONT 7 +#define PTRACE_KILL 8 +#define PTRACE_SINGLESTEP 9 +#define PTRACE_GETREGS 12 +#define PTRACE_SETREGS 13 +#define PTRACE_GETFPREGS 14 +#define PTRACE_SETFPREGS 15 +#define PTRACE_ATTACH 16 +#define PTRACE_DETACH 17 +#define PTRACE_GETFPXREGS 18 +#define PTRACE_SETFPXREGS 19 +#define PTRACE_SYSCALL 24 +#define PTRACE_SETOPTIONS 0x4200 +#define PTRACE_GETEVENTMSG 0x4201 +#define PTRACE_GETSIGINFO 0x4202 +#define PTRACE_SETSIGINFO 0x4203 +#define PTRACE_GETREGSET 0x4204 +#define PTRACE_SETREGSET 0x4205 +#define PTRACE_SEIZE 0x4206 +#define PTRACE_INTERRUPT 0x4207 +#define PTRACE_LISTEN 0x4208 +#define PTRACE_PEEKSIGINFO 0x4209 +#define PTRACE_GETSIGMASK 0x420a +#define PTRACE_SETSIGMASK 0x420b +#define PTRACE_SECCOMP_GET_FILTER 0x420c +#define PTRACE_SECCOMP_GET_METADATA 0x420d +#define PTRACE_GET_SYSCALL_INFO 0x420e + +#define PT_READ_I PTRACE_PEEKTEXT +#define PT_READ_D PTRACE_PEEKDATA +#define PT_READ_U PTRACE_PEEKUSER +#define PT_WRITE_I PTRACE_POKETEXT +#define PT_WRITE_D PTRACE_POKEDATA +#define PT_WRITE_U PTRACE_POKEUSER +#define PT_CONTINUE PTRACE_CONT +#define PT_KILL PTRACE_KILL +#define PT_STEP PTRACE_SINGLESTEP +#define PT_GETREGS PTRACE_GETREGS +#define PT_SETREGS PTRACE_SETREGS +#define PT_GETFPREGS PTRACE_GETFPREGS +#define PT_SETFPREGS PTRACE_SETFPREGS +#define PT_ATTACH PTRACE_ATTACH +#define PT_DETACH PTRACE_DETACH +#define PT_GETFPXREGS PTRACE_GETFPXREGS +#define PT_SETFPXREGS PTRACE_SETFPXREGS +#define PT_SYSCALL PTRACE_SYSCALL +#define PT_SETOPTIONS PTRACE_SETOPTIONS +#define PT_GETEVENTMSG PTRACE_GETEVENTMSG +#define PT_GETSIGINFO PTRACE_GETSIGINFO +#define PT_SETSIGINFO PTRACE_SETSIGINFO + +#define PTRACE_O_TRACESYSGOOD 0x00000001 +#define PTRACE_O_TRACEFORK 0x00000002 +#define PTRACE_O_TRACEVFORK 0x00000004 +#define PTRACE_O_TRACECLONE 0x00000008 +#define PTRACE_O_TRACEEXEC 0x00000010 +#define PTRACE_O_TRACEVFORKDONE 0x00000020 +#define PTRACE_O_TRACEEXIT 0x00000040 +#define PTRACE_O_TRACESECCOMP 0x00000080 +#define PTRACE_O_EXITKILL 0x00100000 +#define PTRACE_O_SUSPEND_SECCOMP 0x00200000 +#define PTRACE_O_MASK 0x003000ff + +#define PTRACE_EVENT_FORK 1 +#define PTRACE_EVENT_VFORK 2 +#define PTRACE_EVENT_CLONE 3 +#define PTRACE_EVENT_EXEC 4 +#define PTRACE_EVENT_VFORK_DONE 5 +#define PTRACE_EVENT_EXIT 6 +#define PTRACE_EVENT_SECCOMP 7 +#define PTRACE_EVENT_STOP 128 + +#define PTRACE_PEEKSIGINFO_SHARED 1 + +#define PTRACE_SYSCALL_INFO_NONE 0 +#define PTRACE_SYSCALL_INFO_ENTRY 1 +#define PTRACE_SYSCALL_INFO_EXIT 2 +#define PTRACE_SYSCALL_INFO_SECCOMP 3 + +#include + +struct __ptrace_peeksiginfo_args { + uint64_t off; + uint32_t flags; + int32_t nr; +}; + +struct __ptrace_seccomp_metadata { + uint64_t filter_off; + uint64_t flags; +}; + +struct __ptrace_syscall_info { + uint8_t op; + uint8_t __pad[3]; + uint32_t arch; + uint64_t instruction_pointer; + uint64_t stack_pointer; + union { + struct { + uint64_t nr; + uint64_t args[6]; + } entry; + struct { + int64_t rval; + uint8_t is_error; + } exit; + struct { + uint64_t nr; + uint64_t args[6]; + uint32_t ret_data; + } seccomp; + }; +}; + +long ptrace(int, ...); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/quota.h b/third_party/musl/ndk_musl_include/sys/quota.h new file mode 100644 index 0000000000000000000000000000000000000000..466d84f655f6d0d39edb299da6d5b99fb3f6aa3e --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/quota.h @@ -0,0 +1,102 @@ +#ifndef _SYS_QUOTA_H +#define _SYS_QUOTA_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define _LINUX_QUOTA_VERSION 2 + +#define dbtob(num) ((num) << 10) +#define btodb(num) ((num) >> 10) +#define fs_to_dq_blocks(num, blksize) (((num) * (blksize)) / 1024) + +#define MAX_IQ_TIME 604800 +#define MAX_DQ_TIME 604800 + +#define MAXQUOTAS 2 +#define USRQUOTA 0 +#define GRPQUOTA 1 + +#define INITQFNAMES { "user", "group", "undefined" }; + +#define QUOTAFILENAME "quota" +#define QUOTAGROUP "staff" + +#define NR_DQHASH 43 +#define NR_DQUOTS 256 + +#define SUBCMDMASK 0x00ff +#define SUBCMDSHIFT 8 +#define QCMD(cmd, type) (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK)) + +#define Q_SYNC 0x800001 +#define Q_QUOTAON 0x800002 +#define Q_QUOTAOFF 0x800003 +#define Q_GETFMT 0x800004 +#define Q_GETINFO 0x800005 +#define Q_SETINFO 0x800006 +#define Q_GETQUOTA 0x800007 +#define Q_SETQUOTA 0x800008 + +#define QFMT_VFS_OLD 1 +#define QFMT_VFS_V0 2 +#define QFMT_OCFS2 3 +#define QFMT_VFS_V1 4 + +#define QIF_BLIMITS 1 +#define QIF_SPACE 2 +#define QIF_ILIMITS 4 +#define QIF_INODES 8 +#define QIF_BTIME 16 +#define QIF_ITIME 32 +#define QIF_LIMITS (QIF_BLIMITS | QIF_ILIMITS) +#define QIF_USAGE (QIF_SPACE | QIF_INODES) +#define QIF_TIMES (QIF_BTIME | QIF_ITIME) +#define QIF_ALL (QIF_LIMITS | QIF_USAGE | QIF_TIMES) + +struct dqblk { + uint64_t dqb_bhardlimit; + uint64_t dqb_bsoftlimit; + uint64_t dqb_curspace; + uint64_t dqb_ihardlimit; + uint64_t dqb_isoftlimit; + uint64_t dqb_curinodes; + uint64_t dqb_btime; + uint64_t dqb_itime; + uint32_t dqb_valid; +}; + +#define dq_bhardlimit dq_dqb.dqb_bhardlimit +#define dq_bsoftlimit dq_dqb.dqb_bsoftlimit +#define dq_curspace dq_dqb.dqb_curspace +#define dq_valid dq_dqb.dqb_valid +#define dq_ihardlimit dq_dqb.dqb_ihardlimit +#define dq_isoftlimit dq_dqb.dqb_isoftlimit +#define dq_curinodes dq_dqb.dqb_curinodes +#define dq_btime dq_dqb.dqb_btime +#define dq_itime dq_dqb.dqb_itime + +#define dqoff(UID) ((long long)(UID) * sizeof (struct dqblk)) + +#define IIF_BGRACE 1 +#define IIF_IGRACE 2 +#define IIF_FLAGS 4 +#define IIF_ALL (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS) + +struct dqinfo { + uint64_t dqi_bgrace; + uint64_t dqi_igrace; + uint32_t dqi_flags; + uint32_t dqi_valid; +}; + +int quotactl(int, const char *, int, char *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/random.h b/third_party/musl/ndk_musl_include/sys/random.h new file mode 100644 index 0000000000000000000000000000000000000000..f9d6246e27ad754e9ca089adfad4f532f31c6946 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/random.h @@ -0,0 +1,19 @@ +#ifndef _SYS_RANDOM_H +#define _SYS_RANDOM_H +#ifdef __cplusplus +extern "C" { +#endif + +#define __NEED_size_t +#define __NEED_ssize_t +#include + +#define GRND_NONBLOCK 0x0001 +#define GRND_RANDOM 0x0002 + +ssize_t getrandom(void *, size_t, unsigned); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/reboot.h b/third_party/musl/ndk_musl_include/sys/reboot.h new file mode 100644 index 0000000000000000000000000000000000000000..3f4b7ceca1a22b5107cdc10f866a2abd740b4544 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/reboot.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _SYS_REBOOT_H +#define _SYS_REBOOT_H +#ifdef __cplusplus +extern "C" +{ +#endif + +#define RB_AUTOBOOT 0x01234567 +#define RB_HALT_SYSTEM 0xcdef0123 +#define RB_ENABLE_CAD 0x89abcdef +#define RB_DISABLE_CAD 0 +#define RB_POWER_OFF 0x4321fedc +#define RB_SW_SUSPEND 0xd000fce2 +#define RB_KEXEC 0x45584543 +#define RB_MAGIC1 0xfee1dead +#define RB_MAGIC2 672274793 + +/** + * @brief reboots the device, or enables/disables the reboot keystroke. + * @param type commands accepted by the reboot() system call. + * -- RESTART Restart system using default command and mode. + * -- HALT Stop OS and give system control to ROM monitor, if any. + * -- CAD_ON Ctrl-Alt-Del sequence causes RESTART command. + * -- CAD_OFF Ctrl-Alt-Del sequence sends SIGINT to init task. + * -- POWER_OFF Stop OS and remove all power from system, if possible. + * -- RESTART2 Restart system using given command string. + * -- SW_SUSPEND Suspend system using software suspend if compiled in. + * -- KEXEC Restart system using a previously loaded Linux kernel. + * @return reboot result. + * @retval 0 is returned on success, if CAD was successfully enabled/disabled. + * @retval -1 is returned on failure, and errno is set to indicate the error. + */ +int reboot(int); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/reg.h b/third_party/musl/ndk_musl_include/sys/reg.h new file mode 100644 index 0000000000000000000000000000000000000000..b587c4865f6529d2f68deb4a3b6087a21ed05fb0 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/reg.h @@ -0,0 +1,9 @@ +#ifndef _SYS_REG_H +#define _SYS_REG_H + +#include +#include + +#include + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/resource.h b/third_party/musl/ndk_musl_include/sys/resource.h new file mode 100644 index 0000000000000000000000000000000000000000..32c6839f3fa123b96ee1728aec4d9224add2fc31 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/resource.h @@ -0,0 +1,116 @@ +#ifndef _SYS_RESOURCE_H +#define _SYS_RESOURCE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#define __NEED_id_t + +#ifdef _GNU_SOURCE +#define __NEED_pid_t +#endif + +#include +#include + +typedef unsigned long long rlim_t; + +struct rlimit { + rlim_t rlim_cur; + rlim_t rlim_max; +}; + +struct rusage { + struct timeval ru_utime; + struct timeval ru_stime; + /* linux extentions, but useful */ + long ru_maxrss; + long ru_ixrss; + long ru_idrss; + long ru_isrss; + long ru_minflt; + long ru_majflt; + long ru_nswap; + long ru_inblock; + long ru_oublock; + long ru_msgsnd; + long ru_msgrcv; + long ru_nsignals; + long ru_nvcsw; + long ru_nivcsw; + /* room for more... */ + long __reserved[16]; +}; + +int getrlimit (int, struct rlimit *); +int setrlimit (int, const struct rlimit *); +int getrusage (int, struct rusage *); + +int getpriority (int, id_t); +int setpriority (int, id_t, int); + +#ifdef _GNU_SOURCE +int prlimit(pid_t, int, const struct rlimit *, struct rlimit *); +#define prlimit64 prlimit +#endif + +#define PRIO_MIN (-20) +#define PRIO_MAX 20 + +#define PRIO_PROCESS 0 +#define PRIO_PGRP 1 +#define PRIO_USER 2 + +#define RUSAGE_SELF 0 +#define RUSAGE_CHILDREN (-1) +#define RUSAGE_THREAD 1 + +#define RLIM_INFINITY (~0ULL) +#define RLIM_SAVED_CUR RLIM_INFINITY +#define RLIM_SAVED_MAX RLIM_INFINITY + +#define RLIMIT_CPU 0 +#define RLIMIT_FSIZE 1 +#define RLIMIT_DATA 2 +#define RLIMIT_STACK 3 +#define RLIMIT_CORE 4 +#ifndef RLIMIT_RSS +#define RLIMIT_RSS 5 +#define RLIMIT_NPROC 6 +#define RLIMIT_NOFILE 7 +#define RLIMIT_MEMLOCK 8 +#define RLIMIT_AS 9 +#endif +#define RLIMIT_LOCKS 10 +#define RLIMIT_SIGPENDING 11 +#define RLIMIT_MSGQUEUE 12 +#define RLIMIT_NICE 13 +#define RLIMIT_RTPRIO 14 +#define RLIMIT_RTTIME 15 +#define RLIMIT_NLIMITS 16 + +#define RLIM_NLIMITS RLIMIT_NLIMITS + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define RLIM64_INFINITY RLIM_INFINITY +#define RLIM64_SAVED_CUR RLIM_SAVED_CUR +#define RLIM64_SAVED_MAX RLIM_SAVED_MAX +#define getrlimit64 getrlimit +#define setrlimit64 setrlimit +#define rlimit64 rlimit +#define rlim64_t rlim_t +#endif + +#if _REDIR_TIME64 +__REDIR(getrusage, __getrusage_time64); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/select.h b/third_party/musl/ndk_musl_include/sys/select.h new file mode 100644 index 0000000000000000000000000000000000000000..d933d308c4c7d947b56f6e996b5c90f725c2e306 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/select.h @@ -0,0 +1,46 @@ +#ifndef _SYS_SELECT_H +#define _SYS_SELECT_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_size_t +#define __NEED_time_t +#define __NEED_suseconds_t +#define __NEED_struct_timeval +#define __NEED_struct_timespec +#define __NEED_sigset_t + +#include + +#define FD_SETSIZE 1024 + +typedef unsigned long fd_mask; + +typedef struct { + unsigned long fds_bits[FD_SETSIZE / 8 / sizeof(long)]; +} fd_set; + +#define FD_ZERO(s) do { int __i; unsigned long *__b=(s)->fds_bits; for(__i=sizeof (fd_set)/sizeof (long); __i; __i--) *__b++=0; } while(0) +#define FD_SET(d, s) ((s)->fds_bits[(d)/(8*sizeof(long))] |= (1UL<<((d)%(8*sizeof(long))))) +#define FD_CLR(d, s) ((s)->fds_bits[(d)/(8*sizeof(long))] &= ~(1UL<<((d)%(8*sizeof(long))))) +#define FD_ISSET(d, s) !!((s)->fds_bits[(d)/(8*sizeof(long))] & (1UL<<((d)%(8*sizeof(long))))) + +int select (int, fd_set *__restrict, fd_set *__restrict, fd_set *__restrict, struct timeval *__restrict); +int pselect (int, fd_set *__restrict, fd_set *__restrict, fd_set *__restrict, const struct timespec *__restrict, const sigset_t *__restrict); + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define NFDBITS (8*(int)sizeof(long)) +#endif + +#if _REDIR_TIME64 +__REDIR(select, __select_time64); +__REDIR(pselect, __pselect_time64); +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/sem.h b/third_party/musl/ndk_musl_include/sys/sem.h new file mode 100644 index 0000000000000000000000000000000000000000..fb9718580722af0784d699601c1c40a6ff5043fe --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/sem.h @@ -0,0 +1,72 @@ +#ifndef _SYS_SEM_H +#define _SYS_SEM_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_size_t +#define __NEED_pid_t +#define __NEED_time_t +#ifdef _GNU_SOURCE +#define __NEED_struct_timespec +#endif +#include + +#include + +#define SEM_UNDO 0x1000 +#define GETPID 11 +#define GETVAL 12 +#define GETALL 13 +#define GETNCNT 14 +#define GETZCNT 15 +#define SETVAL 16 +#define SETALL 17 + +#include + +#define _SEM_SEMUN_UNDEFINED 1 + +#define SEM_STAT (18 | (IPC_STAT & 0x100)) +#define SEM_INFO 19 +#define SEM_STAT_ANY (20 | (IPC_STAT & 0x100)) + +struct seminfo { + int semmap; + int semmni; + int semmns; + int semmnu; + int semmsl; + int semopm; + int semume; + int semusz; + int semvmx; + int semaem; +}; + +struct sembuf { + unsigned short sem_num; + short sem_op; + short sem_flg; +}; + +int semctl(int, int, int, ...); +int semget(key_t, int, int); +int semop(int, struct sembuf *, size_t); + +#ifdef _GNU_SOURCE +int semtimedop(int, struct sembuf *, size_t, const struct timespec *); +#endif + +#if _REDIR_TIME64 +#ifdef _GNU_SOURCE +__REDIR(semtimedop, __semtimedop_time64); +#endif +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/sendfile.h b/third_party/musl/ndk_musl_include/sys/sendfile.h new file mode 100644 index 0000000000000000000000000000000000000000..f1f6de2837098909cf96c1a935fc77c4404023f5 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/sendfile.h @@ -0,0 +1,22 @@ +#ifndef _SYS_SENDFILE_H +#define _SYS_SENDFILE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +ssize_t sendfile(int, int, off_t *, size_t); + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define sendfile64 sendfile +#define off64_t off_t +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/shm.h b/third_party/musl/ndk_musl_include/sys/shm.h new file mode 100644 index 0000000000000000000000000000000000000000..06084bb21713595d0fef4612932f21bc2699159e --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/shm.h @@ -0,0 +1,70 @@ +#ifndef _SYS_SHM_H +#define _SYS_SHM_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_time_t +#define __NEED_size_t +#define __NEED_pid_t + +#include + +#include + +#ifdef _GNU_SOURCE +#define __used_ids used_ids +#define __swap_attempts swap_attempts +#define __swap_successes swap_successes +#endif + +#include + +#define SHM_R 0400 +#define SHM_W 0200 + +#define SHM_RDONLY 010000 +#define SHM_RND 020000 +#define SHM_REMAP 040000 +#define SHM_EXEC 0100000 + +#define SHM_LOCK 11 +#define SHM_UNLOCK 12 +#define SHM_STAT (13 | (IPC_STAT & 0x100)) +#define SHM_INFO 14 +#define SHM_STAT_ANY (15 | (IPC_STAT & 0x100)) +#define SHM_DEST 01000 +#define SHM_LOCKED 02000 +#define SHM_HUGETLB 04000 +#define SHM_NORESERVE 010000 + +#define SHM_HUGE_SHIFT 26 +#define SHM_HUGE_MASK 0x3f +#define SHM_HUGE_64KB (16 << 26) +#define SHM_HUGE_512KB (19 << 26) +#define SHM_HUGE_1MB (20 << 26) +#define SHM_HUGE_2MB (21 << 26) +#define SHM_HUGE_8MB (23 << 26) +#define SHM_HUGE_16MB (24 << 26) +#define SHM_HUGE_32MB (25 << 26) +#define SHM_HUGE_256MB (28 << 26) +#define SHM_HUGE_512MB (29 << 26) +#define SHM_HUGE_1GB (30 << 26) +#define SHM_HUGE_2GB (31 << 26) +#define SHM_HUGE_16GB (34U << 26) + +typedef unsigned long shmatt_t; + +void *shmat(int, const void *, int); +int shmctl(int, int, struct shmid_ds *); +int shmdt(const void *); +int shmget(key_t, size_t, int); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/signal.h b/third_party/musl/ndk_musl_include/sys/signal.h new file mode 100644 index 0000000000000000000000000000000000000000..6630957dbfcbbf860199cfe384c45c108ad9f332 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/signal.h @@ -0,0 +1,2 @@ +#warning redirecting incorrect #include to +#include diff --git a/third_party/musl/ndk_musl_include/sys/signalfd.h b/third_party/musl/ndk_musl_include/sys/signalfd.h new file mode 100644 index 0000000000000000000000000000000000000000..3f7794ca7597140b5cc62ba98dfa164f558aa7ce --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/signalfd.h @@ -0,0 +1,49 @@ +#ifndef _SYS_SIGNALFD_H +#define _SYS_SIGNALFD_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#define __NEED_sigset_t + +#include + +#define SFD_CLOEXEC O_CLOEXEC +#define SFD_NONBLOCK O_NONBLOCK + +int signalfd(int, const sigset_t *, int); + +struct signalfd_siginfo { + uint32_t ssi_signo; + int32_t ssi_errno; + int32_t ssi_code; + uint32_t ssi_pid; + uint32_t ssi_uid; + int32_t ssi_fd; + uint32_t ssi_tid; + uint32_t ssi_band; + uint32_t ssi_overrun; + uint32_t ssi_trapno; + int32_t ssi_status; + int32_t ssi_int; + uint64_t ssi_ptr; + uint64_t ssi_utime; + uint64_t ssi_stime; + uint64_t ssi_addr; + uint16_t ssi_addr_lsb; + uint16_t __pad2; + int32_t ssi_syscall; + uint64_t ssi_call_addr; + uint32_t ssi_arch; + uint8_t __pad[128-14*4-5*8-2*2]; +}; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/socket.h b/third_party/musl/ndk_musl_include/sys/socket.h new file mode 100644 index 0000000000000000000000000000000000000000..a071dac65ee12d96d8c4258ddd797dce49653f2f --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/socket.h @@ -0,0 +1,419 @@ +#ifndef _SYS_SOCKET_H +#define _SYS_SOCKET_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_socklen_t +#define __NEED_sa_family_t +#define __NEED_size_t +#define __NEED_ssize_t +#define __NEED_uid_t +#define __NEED_pid_t +#define __NEED_gid_t +#define __NEED_struct_iovec + +#include + +#include + +#ifdef __MUSL__ +#include +#endif + +struct msghdr { + void *msg_name; + socklen_t msg_namelen; + struct iovec *msg_iov; +#if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __BIG_ENDIAN + int __pad1; +#endif + int msg_iovlen; +#if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __LITTLE_ENDIAN + int __pad1; +#endif + void *msg_control; +#if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __BIG_ENDIAN + int __pad2; +#endif + socklen_t msg_controllen; +#if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __LITTLE_ENDIAN + int __pad2; +#endif + int msg_flags; +}; + +struct cmsghdr { +#if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __BIG_ENDIAN + int __pad1; +#endif + socklen_t cmsg_len; +#if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __LITTLE_ENDIAN + int __pad1; +#endif + int cmsg_level; + int cmsg_type; +}; + +#ifdef _GNU_SOURCE +struct ucred { + pid_t pid; + uid_t uid; + gid_t gid; +}; + +struct mmsghdr { + struct msghdr msg_hdr; + unsigned int msg_len; +}; + +struct timespec; + +int sendmmsg (int, struct mmsghdr *, unsigned int, unsigned int); +int recvmmsg (int, struct mmsghdr *, unsigned int, unsigned int, struct timespec *); +#endif + +struct linger { + int l_onoff; + int l_linger; +}; + +#define SHUT_RD 0 +#define SHUT_WR 1 +#define SHUT_RDWR 2 + +#ifndef SOCK_STREAM +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 +#endif + +#define SOCK_RAW 3 +#define SOCK_RDM 4 +#define SOCK_SEQPACKET 5 +#define SOCK_DCCP 6 +#define SOCK_PACKET 10 + +#ifndef SOCK_CLOEXEC +#define SOCK_CLOEXEC 02000000 +#define SOCK_NONBLOCK 04000 +#endif + +#define PF_UNSPEC 0 +#define PF_LOCAL 1 +#define PF_UNIX PF_LOCAL +#define PF_FILE PF_LOCAL +#define PF_INET 2 +#define PF_AX25 3 +#define PF_IPX 4 +#define PF_APPLETALK 5 +#define PF_NETROM 6 +#define PF_BRIDGE 7 +#define PF_ATMPVC 8 +#define PF_X25 9 +#define PF_INET6 10 +#define PF_ROSE 11 +#define PF_DECnet 12 +#define PF_NETBEUI 13 +#define PF_SECURITY 14 +#define PF_KEY 15 +#define PF_NETLINK 16 +#define PF_ROUTE PF_NETLINK +#define PF_PACKET 17 +#define PF_ASH 18 +#define PF_ECONET 19 +#define PF_ATMSVC 20 +#define PF_RDS 21 +#define PF_SNA 22 +#define PF_IRDA 23 +#define PF_PPPOX 24 +#define PF_WANPIPE 25 +#define PF_LLC 26 +#define PF_IB 27 +#define PF_MPLS 28 +#define PF_CAN 29 +#define PF_TIPC 30 +#define PF_BLUETOOTH 31 +#define PF_IUCV 32 +#define PF_RXRPC 33 +#define PF_ISDN 34 +#define PF_PHONET 35 +#define PF_IEEE802154 36 +#define PF_CAIF 37 +#define PF_ALG 38 +#define PF_NFC 39 +#define PF_VSOCK 40 +#define PF_KCM 41 +#define PF_QIPCRTR 42 +#define PF_SMC 43 +#define PF_XDP 44 +#define PF_MAX 45 + +#define AF_UNSPEC PF_UNSPEC +#define AF_LOCAL PF_LOCAL +#define AF_UNIX AF_LOCAL +#define AF_FILE AF_LOCAL +#define AF_INET PF_INET +#define AF_AX25 PF_AX25 +#define AF_IPX PF_IPX +#define AF_APPLETALK PF_APPLETALK +#define AF_NETROM PF_NETROM +#define AF_BRIDGE PF_BRIDGE +#define AF_ATMPVC PF_ATMPVC +#define AF_X25 PF_X25 +#define AF_INET6 PF_INET6 +#define AF_ROSE PF_ROSE +#define AF_DECnet PF_DECnet +#define AF_NETBEUI PF_NETBEUI +#define AF_SECURITY PF_SECURITY +#define AF_KEY PF_KEY +#define AF_NETLINK PF_NETLINK +#define AF_ROUTE PF_ROUTE +#define AF_PACKET PF_PACKET +#define AF_ASH PF_ASH +#define AF_ECONET PF_ECONET +#define AF_ATMSVC PF_ATMSVC +#define AF_RDS PF_RDS +#define AF_SNA PF_SNA +#define AF_IRDA PF_IRDA +#define AF_PPPOX PF_PPPOX +#define AF_WANPIPE PF_WANPIPE +#define AF_LLC PF_LLC +#define AF_IB PF_IB +#define AF_MPLS PF_MPLS +#define AF_CAN PF_CAN +#define AF_TIPC PF_TIPC +#define AF_BLUETOOTH PF_BLUETOOTH +#define AF_IUCV PF_IUCV +#define AF_RXRPC PF_RXRPC +#define AF_ISDN PF_ISDN +#define AF_PHONET PF_PHONET +#define AF_IEEE802154 PF_IEEE802154 +#define AF_CAIF PF_CAIF +#define AF_ALG PF_ALG +#define AF_NFC PF_NFC +#define AF_VSOCK PF_VSOCK +#define AF_KCM PF_KCM +#define AF_QIPCRTR PF_QIPCRTR +#define AF_SMC PF_SMC +#define AF_XDP PF_XDP +#define AF_MAX PF_MAX + +#ifndef SO_DEBUG +#define SO_DEBUG 1 +#define SO_REUSEADDR 2 +#define SO_TYPE 3 +#define SO_ERROR 4 +#define SO_DONTROUTE 5 +#define SO_BROADCAST 6 +#define SO_SNDBUF 7 +#define SO_RCVBUF 8 +#define SO_KEEPALIVE 9 +#define SO_OOBINLINE 10 +#define SO_NO_CHECK 11 +#define SO_PRIORITY 12 +#define SO_LINGER 13 +#define SO_BSDCOMPAT 14 +#define SO_REUSEPORT 15 +#define SO_PASSCRED 16 +#define SO_PEERCRED 17 +#define SO_RCVLOWAT 18 +#define SO_SNDLOWAT 19 +#define SO_ACCEPTCONN 30 +#define SO_PEERSEC 31 +#define SO_SNDBUFFORCE 32 +#define SO_RCVBUFFORCE 33 +#define SO_PROTOCOL 38 +#define SO_DOMAIN 39 +#endif + +#ifndef SO_RCVTIMEO +#if __LONG_MAX == 0x7fffffff +#define SO_RCVTIMEO 66 +#define SO_SNDTIMEO 67 +#else +#define SO_RCVTIMEO 20 +#define SO_SNDTIMEO 21 +#endif +#endif + +#ifndef SO_TIMESTAMP +#if __LONG_MAX == 0x7fffffff +#define SO_TIMESTAMP 63 +#define SO_TIMESTAMPNS 64 +#define SO_TIMESTAMPING 65 +#else +#define SO_TIMESTAMP 29 +#define SO_TIMESTAMPNS 35 +#define SO_TIMESTAMPING 37 +#endif +#endif + +#define SO_SECURITY_AUTHENTICATION 22 +#define SO_SECURITY_ENCRYPTION_TRANSPORT 23 +#define SO_SECURITY_ENCRYPTION_NETWORK 24 + +#define SO_BINDTODEVICE 25 + +#define SO_ATTACH_FILTER 26 +#define SO_DETACH_FILTER 27 +#define SO_GET_FILTER SO_ATTACH_FILTER + +#define SO_PEERNAME 28 +#define SCM_TIMESTAMP SO_TIMESTAMP +#define SO_PASSSEC 34 +#define SCM_TIMESTAMPNS SO_TIMESTAMPNS +#define SO_MARK 36 +#define SCM_TIMESTAMPING SO_TIMESTAMPING +#define SO_RXQ_OVFL 40 +#define SO_WIFI_STATUS 41 +#define SCM_WIFI_STATUS SO_WIFI_STATUS +#define SO_PEEK_OFF 42 +#define SO_NOFCS 43 +#define SO_LOCK_FILTER 44 +#define SO_SELECT_ERR_QUEUE 45 +#define SO_BUSY_POLL 46 +#define SO_MAX_PACING_RATE 47 +#define SO_BPF_EXTENSIONS 48 +#define SO_INCOMING_CPU 49 +#define SO_ATTACH_BPF 50 +#define SO_DETACH_BPF SO_DETACH_FILTER +#define SO_ATTACH_REUSEPORT_CBPF 51 +#define SO_ATTACH_REUSEPORT_EBPF 52 +#define SO_CNX_ADVICE 53 +#define SCM_TIMESTAMPING_OPT_STATS 54 +#define SO_MEMINFO 55 +#define SO_INCOMING_NAPI_ID 56 +#define SO_COOKIE 57 +#define SCM_TIMESTAMPING_PKTINFO 58 +#define SO_PEERGROUPS 59 +#define SO_ZEROCOPY 60 +#define SO_TXTIME 61 +#define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIFINDEX 62 +#define SO_DETACH_REUSEPORT_BPF 68 + +#ifndef SOL_SOCKET +#define SOL_SOCKET 1 +#endif + +#define SOL_IP 0 +#define SOL_IPV6 41 +#define SOL_ICMPV6 58 + +#define SOL_RAW 255 +#define SOL_DECNET 261 +#define SOL_X25 262 +#define SOL_PACKET 263 +#define SOL_ATM 264 +#define SOL_AAL 265 +#define SOL_IRDA 266 +#define SOL_NETBEUI 267 +#define SOL_LLC 268 +#define SOL_DCCP 269 +#define SOL_NETLINK 270 +#define SOL_TIPC 271 +#define SOL_RXRPC 272 +#define SOL_PPPOL2TP 273 +#define SOL_BLUETOOTH 274 +#define SOL_PNPIPE 275 +#define SOL_RDS 276 +#define SOL_IUCV 277 +#define SOL_CAIF 278 +#define SOL_ALG 279 +#define SOL_NFC 280 +#define SOL_KCM 281 +#define SOL_TLS 282 +#define SOL_XDP 283 + +#define SOMAXCONN 128 + +#define MSG_OOB 0x0001 +#define MSG_PEEK 0x0002 +#define MSG_DONTROUTE 0x0004 +#define MSG_CTRUNC 0x0008 +#define MSG_PROXY 0x0010 +#define MSG_TRUNC 0x0020 +#define MSG_DONTWAIT 0x0040 +#define MSG_EOR 0x0080 +#define MSG_WAITALL 0x0100 +#define MSG_FIN 0x0200 +#define MSG_SYN 0x0400 +#define MSG_CONFIRM 0x0800 +#define MSG_RST 0x1000 +#define MSG_ERRQUEUE 0x2000 +#define MSG_NOSIGNAL 0x4000 +#define MSG_MORE 0x8000 +#define MSG_WAITFORONE 0x10000 +#define MSG_BATCH 0x40000 +#define MSG_ZEROCOPY 0x4000000 +#define MSG_FASTOPEN 0x20000000 +#define MSG_CMSG_CLOEXEC 0x40000000 + +#define __CMSG_LEN(cmsg) (((cmsg)->cmsg_len + sizeof(long) - 1) & ~(long)(sizeof(long) - 1)) +#define __CMSG_NEXT(cmsg) ((unsigned char *)(cmsg) + __CMSG_LEN(cmsg)) +#define __MHDR_END(mhdr) ((unsigned char *)(mhdr)->msg_control + (mhdr)->msg_controllen) + +#define CMSG_DATA(cmsg) ((unsigned char *) (((struct cmsghdr *)(cmsg)) + 1)) +#define CMSG_NXTHDR(mhdr, cmsg) ((cmsg)->cmsg_len < sizeof (struct cmsghdr) || \ + __CMSG_LEN(cmsg) + sizeof(struct cmsghdr) >= __MHDR_END(mhdr) - (unsigned char *)(cmsg) \ + ? 0 : (struct cmsghdr *)__CMSG_NEXT(cmsg)) +#define CMSG_FIRSTHDR(mhdr) ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) 0) + +#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1)) +#define CMSG_SPACE(len) (CMSG_ALIGN (len) + CMSG_ALIGN (sizeof (struct cmsghdr))) +#define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) + +#define SCM_RIGHTS 0x01 +#define SCM_CREDENTIALS 0x02 + +struct sockaddr { + sa_family_t sa_family; + char sa_data[14]; +}; + +#ifndef __MUSL__ +struct sockaddr_storage { + sa_family_t ss_family; + char __ss_padding[128-sizeof(long)-sizeof(sa_family_t)]; + unsigned long __ss_align; +}; +#endif + +int socket (int, int, int); +int socketpair (int, int, int, int [2]); + +int shutdown (int, int); + +int bind (int, const struct sockaddr *, socklen_t); +int connect (int, const struct sockaddr *, socklen_t); +int listen (int, int); +int accept (int, struct sockaddr *__restrict, socklen_t *__restrict); +int accept4(int, struct sockaddr *__restrict, socklen_t *__restrict, int); + +int getsockname (int, struct sockaddr *__restrict, socklen_t *__restrict); +int getpeername (int, struct sockaddr *__restrict, socklen_t *__restrict); + +ssize_t send (int, const void *, size_t, int); +ssize_t recv (int, void *, size_t, int); +ssize_t sendto (int, const void *, size_t, int, const struct sockaddr *, socklen_t); +ssize_t recvfrom (int, void *__restrict, size_t, int, struct sockaddr *__restrict, socklen_t *__restrict); +ssize_t sendmsg (int, const struct msghdr *, int); +ssize_t recvmsg (int, struct msghdr *, int); + +int getsockopt (int, int, int, void *__restrict, socklen_t *__restrict); +int setsockopt (int, int, int, const void *, socklen_t); + +#if _REDIR_TIME64 +#ifdef _GNU_SOURCE +__REDIR(recvmmsg, __recvmmsg_time64); +#endif +#endif + +#include + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/soundcard.h b/third_party/musl/ndk_musl_include/sys/soundcard.h new file mode 100644 index 0000000000000000000000000000000000000000..d0943a55238bf2e476a54369cd2c7cdf23c484bf --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/soundcard.h @@ -0,0 +1 @@ +#include diff --git a/third_party/musl/ndk_musl_include/sys/stat.h b/third_party/musl/ndk_musl_include/sys/stat.h new file mode 100644 index 0000000000000000000000000000000000000000..cdd4019541c4b163c0ea9f4d05164eafe2389569 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/stat.h @@ -0,0 +1,128 @@ +#ifndef _SYS_STAT_H +#define _SYS_STAT_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_dev_t +#define __NEED_ino_t +#define __NEED_mode_t +#define __NEED_nlink_t +#define __NEED_uid_t +#define __NEED_gid_t +#define __NEED_off_t +#define __NEED_time_t +#define __NEED_blksize_t +#define __NEED_blkcnt_t +#define __NEED_struct_timespec + +#include + +#include + +#define st_atime st_atim.tv_sec +#define st_mtime st_mtim.tv_sec +#define st_ctime st_ctim.tv_sec + +#define S_IFMT 0170000 + +#define S_IFDIR 0040000 +#define S_IFCHR 0020000 +#define S_IFBLK 0060000 +#define S_IFREG 0100000 +#define S_IFIFO 0010000 +#define S_IFLNK 0120000 +#define S_IFSOCK 0140000 + +#define S_TYPEISMQ(buf) 0 +#define S_TYPEISSEM(buf) 0 +#define S_TYPEISSHM(buf) 0 +#define S_TYPEISTMO(buf) 0 + +#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) +#define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR) +#define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK) +#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) +#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO) +#define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) +#define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK) + +#ifndef S_IRUSR +#define S_ISUID 04000 +#define S_ISGID 02000 +#define S_ISVTX 01000 +#define S_IRUSR 0400 +#define S_IWUSR 0200 +#define S_IXUSR 0100 +#define S_IRWXU 0700 +#define S_IRGRP 0040 +#define S_IWGRP 0020 +#define S_IXGRP 0010 +#define S_IRWXG 0070 +#define S_IROTH 0004 +#define S_IWOTH 0002 +#define S_IXOTH 0001 +#define S_IRWXO 0007 +#endif + +#define UTIME_NOW 0x3fffffff +#define UTIME_OMIT 0x3ffffffe + +int stat(const char *__restrict, struct stat *__restrict); +int fstat(int, struct stat *); +int lstat(const char *__restrict, struct stat *__restrict); +int fstatat(int, const char *__restrict, struct stat *__restrict, int); +int chmod(const char *, mode_t); +int fchmod(int, mode_t); +int fchmodat(int, const char *, mode_t, int); +mode_t umask(mode_t); +int mkdir(const char *, mode_t); +int mkfifo(const char *, mode_t); +int mkdirat(int, const char *, mode_t); +int mkfifoat(int, const char *, mode_t); + +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +int mknod(const char *, mode_t, dev_t); +int mknodat(int, const char *, mode_t, dev_t); +#endif + +int futimens(int, const struct timespec [2]); +int utimensat(int, const char *, const struct timespec [2], int); + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define S_IREAD S_IRUSR +#define S_IWRITE S_IWUSR +#define S_IEXEC S_IXUSR +#endif + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define stat64 stat +#define fstat64 fstat +#define lstat64 lstat +#define fstatat64 fstatat +#define blkcnt64_t blkcnt_t +#define fsblkcnt64_t fsblkcnt_t +#define fsfilcnt64_t fsfilcnt_t +#define ino64_t ino_t +#define off64_t off_t +#endif + +#if _REDIR_TIME64 +__REDIR(stat, __stat_time64); +__REDIR(fstat, __fstat_time64); +__REDIR(lstat, __lstat_time64); +__REDIR(fstatat, __fstatat_time64); +__REDIR(futimens, __futimens_time64); +__REDIR(utimensat, __utimensat_time64); +#endif + +#include + +#ifdef __cplusplus +} +#endif +#endif + + diff --git a/third_party/musl/ndk_musl_include/sys/statfs.h b/third_party/musl/ndk_musl_include/sys/statfs.h new file mode 100644 index 0000000000000000000000000000000000000000..9b8eefe10a0d48f099990e00c1b9c19bc0cb3e77 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/statfs.h @@ -0,0 +1,32 @@ +#ifndef _SYS_STATFS_H +#define _SYS_STATFS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include + +typedef struct __fsid_t { + int __val[2]; +} fsid_t; + +#include + +int statfs (const char *, struct statfs *); +int fstatfs (int, struct statfs *); + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define statfs64 statfs +#define fstatfs64 fstatfs +#define fsblkcnt64_t fsblkcnt_t +#define fsfilcnt64_t fsfilcnt_t +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/statvfs.h b/third_party/musl/ndk_musl_include/sys/statvfs.h new file mode 100644 index 0000000000000000000000000000000000000000..4e738169d09d4bbe35b88adf058121868b1ea4c6 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/statvfs.h @@ -0,0 +1,56 @@ +#ifndef _SYS_STATVFS_H +#define _SYS_STATVFS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_fsblkcnt_t +#define __NEED_fsfilcnt_t +#include + +struct statvfs { + unsigned long f_bsize, f_frsize; + fsblkcnt_t f_blocks, f_bfree, f_bavail; + fsfilcnt_t f_files, f_ffree, f_favail; +#if __BYTE_ORDER == __LITTLE_ENDIAN + unsigned long f_fsid; + unsigned :8*(2*sizeof(int)-sizeof(long)); +#else + unsigned :8*(2*sizeof(int)-sizeof(long)); + unsigned long f_fsid; +#endif + unsigned long f_flag, f_namemax; + int __reserved[6]; +}; + +int statvfs (const char *__restrict, struct statvfs *__restrict); +int fstatvfs (int, struct statvfs *); + +#define ST_RDONLY 1 +#define ST_NOSUID 2 +#define ST_NODEV 4 +#define ST_NOEXEC 8 +#define ST_SYNCHRONOUS 16 +#define ST_MANDLOCK 64 +#define ST_WRITE 128 +#define ST_APPEND 256 +#define ST_IMMUTABLE 512 +#define ST_NOATIME 1024 +#define ST_NODIRATIME 2048 +#define ST_RELATIME 4096 + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define statvfs64 statvfs +#define fstatvfs64 fstatvfs +#define fsblkcnt64_t fsblkcnt_t +#define fsfilcnt64_t fsfilcnt_t +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/stropts.h b/third_party/musl/ndk_musl_include/sys/stropts.h new file mode 100644 index 0000000000000000000000000000000000000000..a0ad4367d8c4b8cb333c400d6f3585a0eb7b2715 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/stropts.h @@ -0,0 +1 @@ +#include diff --git a/third_party/musl/ndk_musl_include/sys/swap.h b/third_party/musl/ndk_musl_include/sys/swap.h new file mode 100644 index 0000000000000000000000000000000000000000..b6305b19b3ec4fea566aff866df7cb940696297f --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/swap.h @@ -0,0 +1,21 @@ +#ifndef _SYS_SWAP_H +#define _SYS_SWAP_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#define SWAP_FLAG_PREFER 0x8000 +#define SWAP_FLAG_PRIO_MASK 0x7fff +#define SWAP_FLAG_PRIO_SHIFT 0 +#define SWAP_FLAG_DISCARD 0x10000 + +int swapon (const char *, int); +int swapoff (const char *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/syscall.h b/third_party/musl/ndk_musl_include/sys/syscall.h new file mode 100644 index 0000000000000000000000000000000000000000..a5a8c8ee370726d8dc6adf68d21fc8e17df001cc --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/syscall.h @@ -0,0 +1,6 @@ +#ifndef _SYS_SYSCALL_H +#define _SYS_SYSCALL_H + +#include + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/sysinfo.h b/third_party/musl/ndk_musl_include/sys/sysinfo.h new file mode 100644 index 0000000000000000000000000000000000000000..12a2ad74c152a7b84a46427ec22706a60381bd75 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/sysinfo.h @@ -0,0 +1,38 @@ +#ifndef _SYS_SYSINFO_H +#define _SYS_SYSINFO_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _LINUX_KERNEL_H +#define SI_LOAD_SHIFT 16 + +struct sysinfo { + unsigned long uptime; + unsigned long loads[3]; + unsigned long totalram; + unsigned long freeram; + unsigned long sharedram; + unsigned long bufferram; + unsigned long totalswap; + unsigned long freeswap; + unsigned short procs, pad; + unsigned long totalhigh; + unsigned long freehigh; + unsigned mem_unit; + char __reserved[256]; +}; +#endif + +int sysinfo (struct sysinfo *); +int get_nprocs_conf (void); +int get_nprocs (void); +long get_phys_pages (void); +long get_avphys_pages (void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/syslog.h b/third_party/musl/ndk_musl_include/sys/syslog.h new file mode 100644 index 0000000000000000000000000000000000000000..d34973b110a3d03fc81a405e4b8dafe3c4e485af --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/syslog.h @@ -0,0 +1 @@ +#include diff --git a/third_party/musl/ndk_musl_include/sys/sysmacros.h b/third_party/musl/ndk_musl_include/sys/sysmacros.h new file mode 100644 index 0000000000000000000000000000000000000000..d3e3855285c440f9420e063c1044a392154dee87 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/sysmacros.h @@ -0,0 +1,15 @@ +#ifndef _SYS_SYSMACROS_H +#define _SYS_SYSMACROS_H + +#define major(x) \ + ((unsigned)( (((x)>>31>>1) & 0xfffff000) | (((x)>>8) & 0x00000fff) )) +#define minor(x) \ + ((unsigned)( (((x)>>12) & 0xffffff00) | ((x) & 0x000000ff) )) + +#define makedev(x,y) ( \ + (((x)&0xfffff000ULL) << 32) | \ + (((x)&0x00000fffULL) << 8) | \ + (((y)&0xffffff00ULL) << 12) | \ + (((y)&0x000000ffULL)) ) + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/termios.h b/third_party/musl/ndk_musl_include/sys/termios.h new file mode 100644 index 0000000000000000000000000000000000000000..751eb556eb58cad2db30ab77136bf55ee5e6e272 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/termios.h @@ -0,0 +1,2 @@ +#warning redirecting incorrect #include to +#include diff --git a/third_party/musl/ndk_musl_include/sys/tgkill.h b/third_party/musl/ndk_musl_include/sys/tgkill.h new file mode 100644 index 0000000000000000000000000000000000000000..d9fb65f1d6c87f9fe5d646acd62d5fbfd625742a --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/tgkill.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _SYS_TGKILL_H +#define _SYS_TGKILL_H +#ifdef __cplusplus +extern "C" +{ +#endif +/** + * @brief send any signal to any process group or process. + * @param tgid the group ID of the calling process. + * @param tid the thread ID of the calling process. + * @param sig the actual signal. + * @return tgkill result. + * @retval 0 is returned on success. + * @retval -1 is returned on failure, and errno is set to indicate the error. + */ +int tgkill(int tgid, int tid, int sig); + +#ifdef __cplusplus +} +#endif +#endif \ No newline at end of file diff --git a/third_party/musl/ndk_musl_include/sys/time.h b/third_party/musl/ndk_musl_include/sys/time.h new file mode 100644 index 0000000000000000000000000000000000000000..7b2637b6680e24cbbaaa81e8d20ab251be234bfb --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/time.h @@ -0,0 +1,74 @@ +#ifndef _SYS_TIME_H +#define _SYS_TIME_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include + +int gettimeofday (struct timeval *__restrict, void *__restrict); + +#define ITIMER_REAL 0 +#define ITIMER_VIRTUAL 1 +#define ITIMER_PROF 2 + +struct itimerval { + struct timeval it_interval; + struct timeval it_value; +}; + +int getitimer (int, struct itimerval *); +int setitimer (int, const struct itimerval *__restrict, struct itimerval *__restrict); +int utimes (const char *, const struct timeval [2]); + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +struct timezone { + int tz_minuteswest; + int tz_dsttime; +}; +int futimes(int, const struct timeval [2]); +int futimesat(int, const char *, const struct timeval [2]); +int lutimes(const char *, const struct timeval [2]); +int settimeofday(const struct timeval *, const struct timezone *); +#define timerisset(t) ((t)->tv_sec || (t)->tv_usec) +#define timerclear(t) ((t)->tv_sec = (t)->tv_usec = 0) +#define timercmp(s,t,op) ((s)->tv_sec == (t)->tv_sec ? \ + (s)->tv_usec op (t)->tv_usec : (s)->tv_sec op (t)->tv_sec) +#define timeradd(s,t,a) (void) ( (a)->tv_sec = (s)->tv_sec + (t)->tv_sec, \ + ((a)->tv_usec = (s)->tv_usec + (t)->tv_usec) >= 1000000 && \ + ((a)->tv_usec -= 1000000, (a)->tv_sec++) ) +#define timersub(s,t,a) (void) ( (a)->tv_sec = (s)->tv_sec - (t)->tv_sec, \ + ((a)->tv_usec = (s)->tv_usec - (t)->tv_usec) < 0 && \ + ((a)->tv_usec += 1000000, (a)->tv_sec--) ) +#endif + +#if defined(_GNU_SOURCE) +#define TIMEVAL_TO_TIMESPEC(tv, ts) ( \ + (ts)->tv_sec = (tv)->tv_sec, \ + (ts)->tv_nsec = (tv)->tv_usec * 1000, \ + (void)0 ) +#define TIMESPEC_TO_TIMEVAL(tv, ts) ( \ + (tv)->tv_sec = (ts)->tv_sec, \ + (tv)->tv_usec = (ts)->tv_nsec / 1000, \ + (void)0 ) +#endif + +#if _REDIR_TIME64 +__REDIR(gettimeofday, __gettimeofday_time64); +__REDIR(getitimer, __getitimer_time64); +__REDIR(setitimer, __setitimer_time64); +__REDIR(utimes, __utimes_time64); +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +__REDIR(futimes, __futimes_time64); +__REDIR(futimesat, __futimesat_time64); +__REDIR(lutimes, __lutimes_time64); +__REDIR(settimeofday, __settimeofday_time64); +#endif +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/timeb.h b/third_party/musl/ndk_musl_include/sys/timeb.h new file mode 100644 index 0000000000000000000000000000000000000000..d041b863f6df2fa1457a889fa727b1d44724576d --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/timeb.h @@ -0,0 +1,28 @@ +#ifndef _SYS_TIMEB_H +#define _SYS_TIMEB_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_time_t + +#include + +struct timeb { + time_t time; + unsigned short millitm; + short timezone, dstflag; +}; + +int ftime(struct timeb *); + +#if _REDIR_TIME64 +__REDIR(ftime, __ftime64); +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/timerfd.h b/third_party/musl/ndk_musl_include/sys/timerfd.h new file mode 100644 index 0000000000000000000000000000000000000000..8e00af977e4b3007d3edc8518ee8e06a4b819707 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/timerfd.h @@ -0,0 +1,32 @@ +#ifndef _SYS_TIMERFD_H +#define _SYS_TIMERFD_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#define TFD_NONBLOCK O_NONBLOCK +#define TFD_CLOEXEC O_CLOEXEC + +#define TFD_TIMER_ABSTIME 1 +#define TFD_TIMER_CANCEL_ON_SET (1 << 1) + +struct itimerspec; + +int timerfd_create(int, int); +int timerfd_settime(int, int, const struct itimerspec *, struct itimerspec *); +int timerfd_gettime(int, struct itimerspec *); + +#if _REDIR_TIME64 +__REDIR(timerfd_settime, __timerfd_settime64); +__REDIR(timerfd_gettime, __timerfd_gettime64); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/times.h b/third_party/musl/ndk_musl_include/sys/times.h new file mode 100644 index 0000000000000000000000000000000000000000..a0e18ad04563f9186a25c4834ddcde0cefdb4b2c --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/times.h @@ -0,0 +1,25 @@ +#ifndef _SYS_TIMES_H +#define _SYS_TIMES_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define __NEED_clock_t +#include + +struct tms { + clock_t tms_utime; + clock_t tms_stime; + clock_t tms_cutime; + clock_t tms_cstime; +}; + +clock_t times (struct tms *); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/third_party/musl/ndk_musl_include/sys/timex.h b/third_party/musl/ndk_musl_include/sys/timex.h new file mode 100644 index 0000000000000000000000000000000000000000..308c4c5bf934480d8815df6eeec86f8ee98e9253 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/timex.h @@ -0,0 +1,103 @@ +#ifndef _SYS_TIMEX_H +#define _SYS_TIMEX_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define __NEED_clockid_t + +#include + +#include + +struct ntptimeval { + struct timeval time; + long maxerror, esterror; +}; + +struct timex { + unsigned modes; + long offset, freq, maxerror, esterror; + int status; + long constant, precision, tolerance; + struct timeval time; + long tick, ppsfreq, jitter; + int shift; + long stabil, jitcnt, calcnt, errcnt, stbcnt; + int tai; + int __padding[11]; +}; + +#define ADJ_OFFSET 0x0001 +#define ADJ_FREQUENCY 0x0002 +#define ADJ_MAXERROR 0x0004 +#define ADJ_ESTERROR 0x0008 +#define ADJ_STATUS 0x0010 +#define ADJ_TIMECONST 0x0020 +#define ADJ_TAI 0x0080 +#define ADJ_SETOFFSET 0x0100 +#define ADJ_MICRO 0x1000 +#define ADJ_NANO 0x2000 +#define ADJ_TICK 0x4000 +#define ADJ_OFFSET_SINGLESHOT 0x8001 +#define ADJ_OFFSET_SS_READ 0xa001 + +#define MOD_OFFSET ADJ_OFFSET +#define MOD_FREQUENCY ADJ_FREQUENCY +#define MOD_MAXERROR ADJ_MAXERROR +#define MOD_ESTERROR ADJ_ESTERROR +#define MOD_STATUS ADJ_STATUS +#define MOD_TIMECONST ADJ_TIMECONST +#define MOD_CLKB ADJ_TICK +#define MOD_CLKA ADJ_OFFSET_SINGLESHOT +#define MOD_TAI ADJ_TAI +#define MOD_MICRO ADJ_MICRO +#define MOD_NANO ADJ_NANO + +#define STA_PLL 0x0001 +#define STA_PPSFREQ 0x0002 +#define STA_PPSTIME 0x0004 +#define STA_FLL 0x0008 + +#define STA_INS 0x0010 +#define STA_DEL 0x0020 +#define STA_UNSYNC 0x0040 +#define STA_FREQHOLD 0x0080 + +#define STA_PPSSIGNAL 0x0100 +#define STA_PPSJITTER 0x0200 +#define STA_PPSWANDER 0x0400 +#define STA_PPSERROR 0x0800 + +#define STA_CLOCKERR 0x1000 +#define STA_NANO 0x2000 +#define STA_MODE 0x4000 +#define STA_CLK 0x8000 + +#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \ + STA_PPSERROR | STA_CLOCKERR | STA_NANO | STA_MODE | STA_CLK) + +#define TIME_OK 0 +#define TIME_INS 1 +#define TIME_DEL 2 +#define TIME_OOP 3 +#define TIME_WAIT 4 +#define TIME_ERROR 5 +#define TIME_BAD TIME_ERROR + +#define MAXTC 6 + +int adjtimex(struct timex *); +int clock_adjtime(clockid_t, struct timex *); + +#if _REDIR_TIME64 +__REDIR(adjtimex, __adjtimex_time64); +__REDIR(clock_adjtime, __clock_adjtime64); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/ttydefaults.h b/third_party/musl/ndk_musl_include/sys/ttydefaults.h new file mode 100644 index 0000000000000000000000000000000000000000..200fb7667cd901b514c5b30e70c40957ea22db10 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/ttydefaults.h @@ -0,0 +1,34 @@ +#ifndef _SYS_TTYDEFAULTS_H +#define _SYS_TTYDEFAULTS_H + +#define TTYDEF_IFLAG (BRKINT | ISTRIP | ICRNL | IMAXBEL | IXON | IXANY) +#define TTYDEF_OFLAG (OPOST | ONLCR | XTABS) +#define TTYDEF_LFLAG (ECHO | ICANON | ISIG | IEXTEN | ECHOE|ECHOKE|ECHOCTL) +#define TTYDEF_CFLAG (CREAD | CS7 | PARENB | HUPCL) +#define TTYDEF_SPEED (B9600) +#define CTRL(x) ((x)&037) +#define CEOF CTRL('d') + +#define CEOL '\0' +#define CSTATUS '\0' + +#define CERASE 0177 +#define CINTR CTRL('c') +#define CKILL CTRL('u') +#define CMIN 1 +#define CQUIT 034 +#define CSUSP CTRL('z') +#define CTIME 0 +#define CDSUSP CTRL('y') +#define CSTART CTRL('q') +#define CSTOP CTRL('s') +#define CLNEXT CTRL('v') +#define CDISCARD CTRL('o') +#define CWERASE CTRL('w') +#define CREPRINT CTRL('r') +#define CEOT CEOF +#define CBRK CEOL +#define CRPRNT CREPRINT +#define CFLUSH CDISCARD + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/types.h b/third_party/musl/ndk_musl_include/sys/types.h new file mode 100644 index 0000000000000000000000000000000000000000..c688ac01ad590940742db46005bca2a477c978ee --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/types.h @@ -0,0 +1,85 @@ +#ifndef _SYS_TYPES_H +#define _SYS_TYPES_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_ino_t +#define __NEED_dev_t +#define __NEED_uid_t +#define __NEED_gid_t +#define __NEED_mode_t +#define __NEED_nlink_t +#define __NEED_off_t +#define __NEED_pid_t +#define __NEED_size_t +#define __NEED_ssize_t +#define __NEED_time_t +#define __NEED_timer_t +#define __NEED_clockid_t + +#define __NEED_blkcnt_t +#define __NEED_fsblkcnt_t +#define __NEED_fsfilcnt_t + +#define __NEED_id_t +#define __NEED_key_t +#define __NEED_clock_t +#define __NEED_suseconds_t +#define __NEED_blksize_t + +#define __NEED_pthread_t +#define __NEED_pthread_attr_t +#define __NEED_pthread_mutexattr_t +#define __NEED_pthread_condattr_t +#define __NEED_pthread_rwlockattr_t +#define __NEED_pthread_barrierattr_t +#define __NEED_pthread_mutex_t +#define __NEED_pthread_cond_t +#define __NEED_pthread_rwlock_t +#define __NEED_pthread_barrier_t +#define __NEED_pthread_spinlock_t +#define __NEED_pthread_key_t +#define __NEED_pthread_once_t +#define __NEED_useconds_t + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define __NEED_int8_t +#define __NEED_int16_t +#define __NEED_int32_t +#define __NEED_int64_t +#define __NEED_u_int64_t +#define __NEED_register_t +#endif + +#include + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +typedef unsigned char u_int8_t; +typedef unsigned short u_int16_t; +typedef unsigned u_int32_t; +typedef char *caddr_t; +typedef unsigned char u_char; +typedef unsigned short u_short, ushort; +typedef unsigned u_int, uint; +typedef unsigned long u_long, ulong; +typedef long long quad_t; +typedef unsigned long long u_quad_t; +#include +#include +#endif + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define blkcnt64_t blkcnt_t +#define fsblkcnt64_t fsblkcnt_t +#define fsfilcnt64_t fsfilcnt_t +#define ino64_t ino_t +#define off64_t off_t +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/ucontext.h b/third_party/musl/ndk_musl_include/sys/ucontext.h new file mode 100644 index 0000000000000000000000000000000000000000..427b8b365be39b8405486b0848da98ffa49bc101 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/ucontext.h @@ -0,0 +1 @@ +#include diff --git a/third_party/musl/ndk_musl_include/sys/uio.h b/third_party/musl/ndk_musl_include/sys/uio.h new file mode 100644 index 0000000000000000000000000000000000000000..57a872937e24063681062cd5a1ad26db221a6281 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/uio.h @@ -0,0 +1,48 @@ +#ifndef _SYS_UIO_H +#define _SYS_UIO_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_size_t +#define __NEED_ssize_t +#define __NEED_struct_iovec + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define __NEED_off_t +#endif + +#ifdef _GNU_SOURCE +#define __NEED_pid_t +#endif + +#include + +#define UIO_MAXIOV 1024 + +ssize_t readv (int, const struct iovec *, int); +ssize_t writev (int, const struct iovec *, int); + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +ssize_t preadv (int, const struct iovec *, int, off_t); +ssize_t pwritev (int, const struct iovec *, int, off_t); +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define preadv64 preadv +#define pwritev64 pwritev +#define off64_t off_t +#endif +#endif + +#ifdef _GNU_SOURCE +ssize_t process_vm_writev(pid_t, const struct iovec *, unsigned long, const struct iovec *, unsigned long, unsigned long); +ssize_t process_vm_readv(pid_t, const struct iovec *, unsigned long, const struct iovec *, unsigned long, unsigned long); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/un.h b/third_party/musl/ndk_musl_include/sys/un.h new file mode 100644 index 0000000000000000000000000000000000000000..11af1f8bc632138192e67c6efa838d855774649a --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/un.h @@ -0,0 +1,31 @@ +#ifndef _SYS_UN_H +#define _SYS_UN_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_sa_family_t +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define __NEED_size_t +#endif + +#include + +struct sockaddr_un { + sa_family_t sun_family; + char sun_path[108]; +}; + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +size_t strlen(const char *); +#define SUN_LEN(s) (2+strlen((s)->sun_path)) +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/user.h b/third_party/musl/ndk_musl_include/sys/user.h new file mode 100644 index 0000000000000000000000000000000000000000..144a86d55987365ad34af58c328b6abac184e99f --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/user.h @@ -0,0 +1,16 @@ +#ifndef _SYS_USER_H +#define _SYS_USER_H +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#include + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/utsname.h b/third_party/musl/ndk_musl_include/sys/utsname.h new file mode 100644 index 0000000000000000000000000000000000000000..489dca2d11ff1a26cc26e2f11cd182f72065f5fa --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/utsname.h @@ -0,0 +1,29 @@ +#ifndef _SYS_UTSNAME_H +#define _SYS_UTSNAME_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +struct utsname { + char sysname[65]; + char nodename[65]; + char release[65]; + char version[65]; + char machine[65]; +#ifdef _GNU_SOURCE + char domainname[65]; +#else + char __domainname[65]; +#endif +}; + +int uname (struct utsname *); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/sys/vfs.h b/third_party/musl/ndk_musl_include/sys/vfs.h new file mode 100644 index 0000000000000000000000000000000000000000..3a7ffeeb08f08ac2e6940cea91f587b35985c237 --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/vfs.h @@ -0,0 +1 @@ +#include diff --git a/third_party/musl/ndk_musl_include/sys/vt.h b/third_party/musl/ndk_musl_include/sys/vt.h new file mode 100644 index 0000000000000000000000000000000000000000..c60354be63b4f9da1c03845be06b3fa501f3415d --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/vt.h @@ -0,0 +1 @@ +#include diff --git a/third_party/musl/ndk_musl_include/sys/wait.h b/third_party/musl/ndk_musl_include/sys/wait.h new file mode 100644 index 0000000000000000000000000000000000000000..cda5ffd9a35efb3d756ebe4d186fe89dda487f6d --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/wait.h @@ -0,0 +1,67 @@ +#ifndef _SYS_WAIT_H +#define _SYS_WAIT_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_pid_t +#define __NEED_id_t +#include + +typedef enum { + P_ALL = 0, + P_PID = 1, + P_PGID = 2, + P_PIDFD = 3 +} idtype_t; + +pid_t wait (int *); +pid_t waitpid (pid_t, int *, int ); + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) +#include +int waitid (idtype_t, id_t, siginfo_t *, int); +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#include +pid_t wait3 (int *, int, struct rusage *); +pid_t wait4 (pid_t, int *, int, struct rusage *); +#endif + +#define WNOHANG 1 +#define WUNTRACED 2 + +#define WSTOPPED 2 +#define WEXITED 4 +#define WCONTINUED 8 +#define WNOWAIT 0x1000000 + +#define __WNOTHREAD 0x20000000 +#define __WALL 0x40000000 +#define __WCLONE 0x80000000 + +#define WEXITSTATUS(s) (((s) & 0xff00) >> 8) +#define WTERMSIG(s) ((s) & 0x7f) +#define WSTOPSIG(s) WEXITSTATUS(s) +#define WCOREDUMP(s) ((s) & 0x80) +#define WIFEXITED(s) (!WTERMSIG(s)) +#define WIFSTOPPED(s) ((short)((((s)&0xffff)*0x10001)>>8) > 0x7f00) +#define WIFSIGNALED(s) (((s)&0xffff)-1U < 0xffu) +#define WIFCONTINUED(s) ((s) == 0xffff) + +#if _REDIR_TIME64 +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +__REDIR(wait3, __wait3_time64); +__REDIR(wait4, __wait4_time64); +#endif +#endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/sys/xattr.h b/third_party/musl/ndk_musl_include/sys/xattr.h new file mode 100644 index 0000000000000000000000000000000000000000..61af2ab2e12f01c99f5dbfdba0fdd2954435fa5c --- /dev/null +++ b/third_party/musl/ndk_musl_include/sys/xattr.h @@ -0,0 +1,32 @@ +#ifndef _SYS_XATTR_H +#define _SYS_XATTR_H +#ifdef __cplusplus +extern "C" { +#endif + +#define __NEED_ssize_t +#define __NEED_size_t +#include + +#define XATTR_CREATE 1 +#define XATTR_REPLACE 2 + +ssize_t getxattr(const char *, const char *, void *, size_t); +ssize_t lgetxattr(const char *, const char *, void *, size_t); +ssize_t fgetxattr(int, const char *, void *, size_t); +ssize_t listxattr(const char *, char *, size_t); +ssize_t llistxattr(const char *, char *, size_t); +ssize_t flistxattr(int, char *, size_t); +int setxattr(const char *, const char *, const void *, size_t, int); +int lsetxattr(const char *, const char *, const void *, size_t, int); +int fsetxattr(int, const char *, const void *, size_t, int); +int removexattr(const char *, const char *); +int lremovexattr(const char *, const char *); +int fremovexattr(int, const char *); + +#define __UAPI_DEF_XATTR 0 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/syscall.h b/third_party/musl/ndk_musl_include/syscall.h new file mode 100644 index 0000000000000000000000000000000000000000..81a575e5dca4d76436f57aebc47638b8cecff248 --- /dev/null +++ b/third_party/musl/ndk_musl_include/syscall.h @@ -0,0 +1 @@ +#include diff --git a/third_party/musl/ndk_musl_include/sysexits.h b/third_party/musl/ndk_musl_include/sysexits.h new file mode 100644 index 0000000000000000000000000000000000000000..44d6e5ee7a269068910e5de10549a32d35664d7f --- /dev/null +++ b/third_party/musl/ndk_musl_include/sysexits.h @@ -0,0 +1,21 @@ +#ifndef _SYSEXITS_H +#define _SYSEXITS_H +#define EX_OK 0 +#define EX__BASE 64 +#define EX_USAGE 64 +#define EX_DATAERR 65 +#define EX_NOINPUT 66 +#define EX_NOUSER 67 +#define EX_NOHOST 68 +#define EX_UNAVAILABLE 69 +#define EX_SOFTWARE 70 +#define EX_OSERR 71 +#define EX_OSFILE 72 +#define EX_CANTCREAT 73 +#define EX_IOERR 74 +#define EX_TEMPFAIL 75 +#define EX_PROTOCOL 76 +#define EX_NOPERM 77 +#define EX_CONFIG 78 +#define EX__MAX 78 +#endif diff --git a/third_party/musl/ndk_musl_include/syslog.h b/third_party/musl/ndk_musl_include/syslog.h new file mode 100644 index 0000000000000000000000000000000000000000..d07645123af32725ae4ed2acef7d591a3c9c8f76 --- /dev/null +++ b/third_party/musl/ndk_musl_include/syslog.h @@ -0,0 +1,100 @@ +#ifndef _SYSLOG_H +#define _SYSLOG_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define LOG_EMERG 0 +#define LOG_ALERT 1 +#define LOG_CRIT 2 +#define LOG_ERR 3 +#define LOG_WARNING 4 +#define LOG_NOTICE 5 +#define LOG_INFO 6 +#define LOG_DEBUG 7 + +#define LOG_PRIMASK 7 +#define LOG_PRI(p) ((p)&LOG_PRIMASK) +#define LOG_MAKEPRI(f, p) (((f)<<3)|(p)) + +#define LOG_MASK(p) (1<<(p)) +#define LOG_UPTO(p) ((1<<((p)+1))-1) + +#define LOG_KERN (0<<3) +#define LOG_USER (1<<3) +#define LOG_MAIL (2<<3) +#define LOG_DAEMON (3<<3) +#define LOG_AUTH (4<<3) +#define LOG_SYSLOG (5<<3) +#define LOG_LPR (6<<3) +#define LOG_NEWS (7<<3) +#define LOG_UUCP (8<<3) +#define LOG_CRON (9<<3) +#define LOG_AUTHPRIV (10<<3) +#define LOG_FTP (11<<3) + +#define LOG_LOCAL0 (16<<3) +#define LOG_LOCAL1 (17<<3) +#define LOG_LOCAL2 (18<<3) +#define LOG_LOCAL3 (19<<3) +#define LOG_LOCAL4 (20<<3) +#define LOG_LOCAL5 (21<<3) +#define LOG_LOCAL6 (22<<3) +#define LOG_LOCAL7 (23<<3) + +#define LOG_NFACILITIES 24 +#define LOG_FACMASK 0x3f8 +#define LOG_FAC(p) (((p)&LOG_FACMASK)>>3) + +#define LOG_PID 0x01 +#define LOG_CONS 0x02 +#define LOG_ODELAY 0x04 +#define LOG_NDELAY 0x08 +#define LOG_NOWAIT 0x10 +#define LOG_PERROR 0x20 + +void closelog (void); +void openlog (const char *, int, int); +int setlogmask (int); +void syslog (int, const char *, ...); + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define _PATH_LOG "/dev/log" +#define __NEED_va_list +#include +void vsyslog (int, const char *, va_list); +#if defined(SYSLOG_NAMES) +#define INTERNAL_NOPRI 0x10 +#define INTERNAL_MARK (LOG_NFACILITIES<<3) +typedef struct { + char *c_name; + int c_val; +} CODE; +#define prioritynames ((CODE *)(const CODE []){ \ + { "alert", LOG_ALERT }, { "crit", LOG_CRIT }, { "debug", LOG_DEBUG }, \ + { "emerg", LOG_EMERG }, { "err", LOG_ERR }, { "error", LOG_ERR }, \ + { "info", LOG_INFO }, { "none", INTERNAL_NOPRI }, \ + { "notice", LOG_NOTICE }, { "panic", LOG_EMERG }, \ + { "warn", LOG_WARNING }, { "warning", LOG_WARNING }, { 0, -1 } }) +#define facilitynames ((CODE *)(const CODE []){ \ + { "auth", LOG_AUTH }, { "authpriv", LOG_AUTHPRIV }, \ + { "cron", LOG_CRON }, { "daemon", LOG_DAEMON }, { "ftp", LOG_FTP }, \ + { "kern", LOG_KERN }, { "lpr", LOG_LPR }, { "mail", LOG_MAIL }, \ + { "mark", INTERNAL_MARK }, { "news", LOG_NEWS }, \ + { "security", LOG_AUTH }, { "syslog", LOG_SYSLOG }, \ + { "user", LOG_USER }, { "uucp", LOG_UUCP }, \ + { "local0", LOG_LOCAL0 }, { "local1", LOG_LOCAL1 }, \ + { "local2", LOG_LOCAL2 }, { "local3", LOG_LOCAL3 }, \ + { "local4", LOG_LOCAL4 }, { "local5", LOG_LOCAL5 }, \ + { "local6", LOG_LOCAL6 }, { "local7", LOG_LOCAL7 }, { 0, -1 } }) +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/tar.h b/third_party/musl/ndk_musl_include/tar.h new file mode 100644 index 0000000000000000000000000000000000000000..018d23cf12a260347b29817145eb32716dad2635 --- /dev/null +++ b/third_party/musl/ndk_musl_include/tar.h @@ -0,0 +1,33 @@ +#ifndef _TAR_H +#define _TAR_H + +#define TSUID 04000 +#define TSGID 02000 +#define TSVTX 01000 +#define TUREAD 00400 +#define TUWRITE 00200 +#define TUEXEC 00100 +#define TGREAD 00040 +#define TGWRITE 00020 +#define TGEXEC 00010 +#define TOREAD 00004 +#define TOWRITE 00002 +#define TOEXEC 00001 + +#define REGTYPE '0' +#define AREGTYPE '\0' +#define LNKTYPE '1' +#define SYMTYPE '2' +#define CHRTYPE '3' +#define BLKTYPE '4' +#define DIRTYPE '5' +#define FIFOTYPE '6' +#define CONTTYPE '7' + +#define TMAGIC "ustar" +#define TMAGLEN 6 + +#define TVERSION "00" +#define TVERSLEN 2 + +#endif diff --git a/third_party/musl/ndk_musl_include/termios.h b/third_party/musl/ndk_musl_include/termios.h new file mode 100644 index 0000000000000000000000000000000000000000..a9a42000eb168adc085cb925b513a0fec10bdba2 --- /dev/null +++ b/third_party/musl/ndk_musl_include/termios.h @@ -0,0 +1,46 @@ +#ifndef _TERMIOS_H +#define _TERMIOS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_pid_t + +#include + +typedef unsigned char cc_t; +typedef unsigned int speed_t; +typedef unsigned int tcflag_t; + +#define NCCS 32 + +#include + +speed_t cfgetospeed (const struct termios *); +speed_t cfgetispeed (const struct termios *); +int cfsetospeed (struct termios *, speed_t); +int cfsetispeed (struct termios *, speed_t); + +int tcgetattr (int, struct termios *); +int tcsetattr (int, int, const struct termios *); + +int tcsendbreak (int, int); +int tcdrain (int); +int tcflush (int, int); +int tcflow (int, int); + +pid_t tcgetsid (int); + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +void cfmakeraw(struct termios *); +int cfsetspeed(struct termios *, speed_t); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/tgmath.h b/third_party/musl/ndk_musl_include/tgmath.h new file mode 100644 index 0000000000000000000000000000000000000000..6aea70d8c1881e7e3a01e5f9d99a738645a07be0 --- /dev/null +++ b/third_party/musl/ndk_musl_include/tgmath.h @@ -0,0 +1,270 @@ +#ifndef _TGMATH_H +#define _TGMATH_H + +/* +the return types are only correct with gcc (__GNUC__) +otherwise they are long double or long double complex + +the long double version of a function is never chosen when +sizeof(double) == sizeof(long double) +(but the return type is set correctly with gcc) +*/ + +#include +#include + +#define __IS_FP(x) (sizeof((x)+1ULL) == sizeof((x)+1.0f)) +#define __IS_CX(x) (__IS_FP(x) && sizeof(x) == sizeof((x)+I)) +#define __IS_REAL(x) (__IS_FP(x) && 2*sizeof(x) == sizeof((x)+I)) + +#define __FLT(x) (__IS_REAL(x) && sizeof(x) == sizeof(float)) +#define __LDBL(x) (__IS_REAL(x) && sizeof(x) == sizeof(long double) && sizeof(long double) != sizeof(double)) + +#define __FLTCX(x) (__IS_CX(x) && sizeof(x) == sizeof(float complex)) +#define __DBLCX(x) (__IS_CX(x) && sizeof(x) == sizeof(double complex)) +#define __LDBLCX(x) (__IS_CX(x) && sizeof(x) == sizeof(long double complex) && sizeof(long double) != sizeof(double)) + +/* return type */ + +#ifdef __GNUC__ +/* +the result must be casted to the right type +(otherwise the result type is determined by the conversion +rules applied to all the function return types so it is long +double or long double complex except for integral functions) + +this cannot be done in c99, so the typeof gcc extension is +used and that the type of ?: depends on wether an operand is +a null pointer constant or not +(in c11 _Generic can be used) + +the c arguments below must be integer constant expressions +so they can be in null pointer constants +(__IS_FP above was carefully chosen this way) +*/ +/* if c then t else void */ +#define __type1(c,t) __typeof__(*(0?(t*)0:(void*)!(c))) +/* if c then t1 else t2 */ +#define __type2(c,t1,t2) __typeof__(*(0?(__type1(c,t1)*)0:(__type1(!(c),t2)*)0)) +/* cast to double when x is integral, otherwise use typeof(x) */ +#define __RETCAST(x) ( \ + __type2(__IS_FP(x), __typeof__(x), double)) +/* 2 args case, should work for complex types (cpow) */ +#define __RETCAST_2(x, y) ( \ + __type2(__IS_FP(x) && __IS_FP(y), \ + __typeof__((x)+(y)), \ + __typeof__((x)+(y)+1.0))) +/* 3 args case (fma only) */ +#define __RETCAST_3(x, y, z) ( \ + __type2(__IS_FP(x) && __IS_FP(y) && __IS_FP(z), \ + __typeof__((x)+(y)+(z)), \ + __typeof__((x)+(y)+(z)+1.0))) +/* drop complex from the type of x */ +/* TODO: wrong when sizeof(long double)==sizeof(double) */ +#define __RETCAST_REAL(x) ( \ + __type2(__IS_FP(x) && sizeof((x)+I) == sizeof(float complex), float, \ + __type2(sizeof((x)+1.0+I) == sizeof(double complex), double, \ + long double))) +/* add complex to the type of x */ +#define __RETCAST_CX(x) (__typeof__(__RETCAST(x)0+I)) +#else +#define __RETCAST(x) +#define __RETCAST_2(x, y) +#define __RETCAST_3(x, y, z) +#define __RETCAST_REAL(x) +#define __RETCAST_CX(x) +#endif + +/* function selection */ + +#define __tg_real_nocast(fun, x) ( \ + __FLT(x) ? fun ## f (x) : \ + __LDBL(x) ? fun ## l (x) : \ + fun(x) ) + +#define __tg_real(fun, x) (__RETCAST(x)__tg_real_nocast(fun, x)) + +#define __tg_real_2_1(fun, x, y) (__RETCAST(x)( \ + __FLT(x) ? fun ## f (x, y) : \ + __LDBL(x) ? fun ## l (x, y) : \ + fun(x, y) )) + +#define __tg_real_2(fun, x, y) (__RETCAST_2(x, y)( \ + __FLT(x) && __FLT(y) ? fun ## f (x, y) : \ + __LDBL((x)+(y)) ? fun ## l (x, y) : \ + fun(x, y) )) + +#define __tg_complex(fun, x) (__RETCAST_CX(x)( \ + __FLTCX((x)+I) && __IS_FP(x) ? fun ## f (x) : \ + __LDBLCX((x)+I) ? fun ## l (x) : \ + fun(x) )) + +#define __tg_complex_retreal(fun, x) (__RETCAST_REAL(x)( \ + __FLTCX((x)+I) && __IS_FP(x) ? fun ## f (x) : \ + __LDBLCX((x)+I) ? fun ## l (x) : \ + fun(x) )) + +#define __tg_real_complex(fun, x) (__RETCAST(x)( \ + __FLTCX(x) ? c ## fun ## f (x) : \ + __DBLCX(x) ? c ## fun (x) : \ + __LDBLCX(x) ? c ## fun ## l (x) : \ + __FLT(x) ? fun ## f (x) : \ + __LDBL(x) ? fun ## l (x) : \ + fun(x) )) + +/* special cases */ + +#define __tg_real_remquo(x, y, z) (__RETCAST_2(x, y)( \ + __FLT(x) && __FLT(y) ? remquof(x, y, z) : \ + __LDBL((x)+(y)) ? remquol(x, y, z) : \ + remquo(x, y, z) )) + +#define __tg_real_fma(x, y, z) (__RETCAST_3(x, y, z)( \ + __FLT(x) && __FLT(y) && __FLT(z) ? fmaf(x, y, z) : \ + __LDBL((x)+(y)+(z)) ? fmal(x, y, z) : \ + fma(x, y, z) )) + +#define __tg_real_complex_pow(x, y) (__RETCAST_2(x, y)( \ + __FLTCX((x)+(y)) && __IS_FP(x) && __IS_FP(y) ? cpowf(x, y) : \ + __FLTCX((x)+(y)) ? cpow(x, y) : \ + __DBLCX((x)+(y)) ? cpow(x, y) : \ + __LDBLCX((x)+(y)) ? cpowl(x, y) : \ + __FLT(x) && __FLT(y) ? powf(x, y) : \ + __LDBL((x)+(y)) ? powl(x, y) : \ + pow(x, y) )) + +#define __tg_real_complex_fabs(x) (__RETCAST_REAL(x)( \ + __FLTCX(x) ? cabsf(x) : \ + __DBLCX(x) ? cabs(x) : \ + __LDBLCX(x) ? cabsl(x) : \ + __FLT(x) ? fabsf(x) : \ + __LDBL(x) ? fabsl(x) : \ + fabs(x) )) + +/* suppress any macros in math.h or complex.h */ + +#undef acos +#undef acosh +#undef asin +#undef asinh +#undef atan +#undef atan2 +#undef atanh +#undef carg +#undef cbrt +#undef ceil +#undef cimag +#undef conj +#undef copysign +#undef cos +#undef cosh +#undef cproj +#undef creal +#undef erf +#undef erfc +#undef exp +#undef exp2 +#undef expm1 +#undef fabs +#undef fdim +#undef floor +#undef fma +#undef fmax +#undef fmin +#undef fmod +#undef frexp +#undef hypot +#undef ilogb +#undef ldexp +#undef lgamma +#undef llrint +#undef llround +#undef log +#undef log10 +#undef log1p +#undef log2 +#undef logb +#undef lrint +#undef lround +#undef nearbyint +#undef nextafter +#undef nexttoward +#undef pow +#undef remainder +#undef remquo +#undef rint +#undef round +#undef scalbln +#undef scalbn +#undef sin +#undef sinh +#undef sqrt +#undef tan +#undef tanh +#undef tgamma +#undef trunc + +/* tg functions */ + +#define acos(x) __tg_real_complex(acos, (x)) +#define acosh(x) __tg_real_complex(acosh, (x)) +#define asin(x) __tg_real_complex(asin, (x)) +#define asinh(x) __tg_real_complex(asinh, (x)) +#define atan(x) __tg_real_complex(atan, (x)) +#define atan2(x,y) __tg_real_2(atan2, (x), (y)) +#define atanh(x) __tg_real_complex(atanh, (x)) +#define carg(x) __tg_complex_retreal(carg, (x)) +#define cbrt(x) __tg_real(cbrt, (x)) +#define ceil(x) __tg_real(ceil, (x)) +#define cimag(x) __tg_complex_retreal(cimag, (x)) +#define conj(x) __tg_complex(conj, (x)) +#define copysign(x,y) __tg_real_2(copysign, (x), (y)) +#define cos(x) __tg_real_complex(cos, (x)) +#define cosh(x) __tg_real_complex(cosh, (x)) +#define cproj(x) __tg_complex(cproj, (x)) +#define creal(x) __tg_complex_retreal(creal, (x)) +#define erf(x) __tg_real(erf, (x)) +#define erfc(x) __tg_real(erfc, (x)) +#define exp(x) __tg_real_complex(exp, (x)) +#define exp2(x) __tg_real(exp2, (x)) +#define expm1(x) __tg_real(expm1, (x)) +#define fabs(x) __tg_real_complex_fabs(x) +#define fdim(x,y) __tg_real_2(fdim, (x), (y)) +#define floor(x) __tg_real(floor, (x)) +#define fma(x,y,z) __tg_real_fma((x), (y), (z)) +#define fmax(x,y) __tg_real_2(fmax, (x), (y)) +#define fmin(x,y) __tg_real_2(fmin, (x), (y)) +#define fmod(x,y) __tg_real_2(fmod, (x), (y)) +#define frexp(x,y) __tg_real_2_1(frexp, (x), (y)) +#define hypot(x,y) __tg_real_2(hypot, (x), (y)) +#define ilogb(x) __tg_real_nocast(ilogb, (x)) +#define ldexp(x,y) __tg_real_2_1(ldexp, (x), (y)) +#define lgamma(x) __tg_real(lgamma, (x)) +#define llrint(x) __tg_real_nocast(llrint, (x)) +#define llround(x) __tg_real_nocast(llround, (x)) +#define log(x) __tg_real_complex(log, (x)) +#define log10(x) __tg_real(log10, (x)) +#define log1p(x) __tg_real(log1p, (x)) +#define log2(x) __tg_real(log2, (x)) +#define logb(x) __tg_real(logb, (x)) +#define lrint(x) __tg_real_nocast(lrint, (x)) +#define lround(x) __tg_real_nocast(lround, (x)) +#define nearbyint(x) __tg_real(nearbyint, (x)) +#define nextafter(x,y) __tg_real_2(nextafter, (x), (y)) +#define nexttoward(x,y) __tg_real_2(nexttoward, (x), (y)) +#define pow(x,y) __tg_real_complex_pow((x), (y)) +#define remainder(x,y) __tg_real_2(remainder, (x), (y)) +#define remquo(x,y,z) __tg_real_remquo((x), (y), (z)) +#define rint(x) __tg_real(rint, (x)) +#define round(x) __tg_real(round, (x)) +#define scalbln(x,y) __tg_real_2_1(scalbln, (x), (y)) +#define scalbn(x,y) __tg_real_2_1(scalbn, (x), (y)) +#define sin(x) __tg_real_complex(sin, (x)) +#define sinh(x) __tg_real_complex(sinh, (x)) +#define sqrt(x) __tg_real_complex(sqrt, (x)) +#define tan(x) __tg_real_complex(tan, (x)) +#define tanh(x) __tg_real_complex(tanh, (x)) +#define tgamma(x) __tg_real(tgamma, (x)) +#define trunc(x) __tg_real(trunc, (x)) + +#endif diff --git a/third_party/musl/ndk_musl_include/threads.h b/third_party/musl/ndk_musl_include/threads.h new file mode 100644 index 0000000000000000000000000000000000000000..d894f8a6445a0f1f6ce1779e27cd6503d1cb768c --- /dev/null +++ b/third_party/musl/ndk_musl_include/threads.h @@ -0,0 +1,93 @@ +#ifndef _THREADS_H +#define _THREADS_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +typedef unsigned long thrd_t; +#else +typedef struct __pthread *thrd_t; +#define thread_local _Thread_local +#endif + +typedef int once_flag; +typedef unsigned tss_t; +typedef int (*thrd_start_t)(void *); +typedef void (*tss_dtor_t)(void *); + +#define __NEED_cnd_t +#define __NEED_mtx_t + +#include + +#define TSS_DTOR_ITERATIONS 4 + +enum { + thrd_success = 0, + thrd_busy = 1, + thrd_error = 2, + thrd_nomem = 3, + thrd_timedout = 4, +}; + +enum { + mtx_plain = 0, + mtx_recursive = 1, + mtx_timed = 2, +}; + +#define ONCE_FLAG_INIT 0 + +int thrd_create(thrd_t *, thrd_start_t, void *); +_Noreturn void thrd_exit(int); + +int thrd_detach(thrd_t); +int thrd_join(thrd_t, int *); + +int thrd_sleep(const struct timespec *, struct timespec *); +void thrd_yield(void); + +thrd_t thrd_current(void); +int thrd_equal(thrd_t, thrd_t); +#ifndef __cplusplus +#define thrd_equal(A, B) ((A) == (B)) +#endif + +void call_once(once_flag *, void (*)(void)); + +int mtx_init(mtx_t *, int); +void mtx_destroy(mtx_t *); + +int mtx_lock(mtx_t *); +int mtx_timedlock(mtx_t *__restrict, const struct timespec *__restrict); +int mtx_trylock(mtx_t *); +int mtx_unlock(mtx_t *); + +int cnd_init(cnd_t *); +void cnd_destroy(cnd_t *); + +int cnd_broadcast(cnd_t *); +int cnd_signal(cnd_t *); + +int cnd_timedwait(cnd_t *__restrict, mtx_t *__restrict, const struct timespec *__restrict); +int cnd_wait(cnd_t *, mtx_t *); + +int tss_create(tss_t *, tss_dtor_t); +void tss_delete(tss_t); + +int tss_set(tss_t, void *); +void *tss_get(tss_t); + +#if _REDIR_TIME64 +__REDIR(thrd_sleep, __thrd_sleep_time64); +__REDIR(mtx_timedlock, __mtx_timedlock_time64); +__REDIR(cnd_timedwait, __cnd_timedwait_time64); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/time.h b/third_party/musl/ndk_musl_include/time.h new file mode 100644 index 0000000000000000000000000000000000000000..48ef6dc7031e68d61b227d5e6ab8934c6c0f0620 --- /dev/null +++ b/third_party/musl/ndk_musl_include/time.h @@ -0,0 +1,163 @@ +#ifndef _TIME_H +#define _TIME_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#ifdef __cplusplus +#define NULL 0L +#else +#define NULL ((void*)0) +#endif + + +#define __NEED_size_t +#define __NEED_time_t +#define __NEED_clock_t +#define __NEED_struct_timespec + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) +#define __NEED_clockid_t +#define __NEED_timer_t +#define __NEED_pid_t +#define __NEED_locale_t +#endif + +#include + +#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE) +#define __tm_gmtoff tm_gmtoff +#define __tm_zone tm_zone +#endif + +struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; + long __tm_gmtoff; + const char *__tm_zone; +}; + +clock_t clock (void); +time_t time (time_t *); +double difftime (time_t, time_t); +time_t mktime (struct tm *); +size_t strftime (char *__restrict, size_t, const char *__restrict, const struct tm *__restrict); +struct tm *gmtime (const time_t *); +struct tm *localtime (const time_t *); +char *asctime (const struct tm *); +char *ctime (const time_t *); +int timespec_get(struct timespec *, int); + +#define CLOCKS_PER_SEC 1000000L + +#define TIME_UTC 1 + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) + +size_t strftime_l (char * __restrict, size_t, const char * __restrict, const struct tm * __restrict, locale_t); + +struct tm *gmtime_r (const time_t *__restrict, struct tm *__restrict); +struct tm *localtime_r (const time_t *__restrict, struct tm *__restrict); +char *asctime_r (const struct tm *__restrict, char *__restrict); +char *ctime_r (const time_t *, char *); + +void tzset (void); + +struct itimerspec { + struct timespec it_interval; + struct timespec it_value; +}; + +#define CLOCK_REALTIME 0 +#define CLOCK_MONOTONIC 1 +#define CLOCK_PROCESS_CPUTIME_ID 2 +#define CLOCK_THREAD_CPUTIME_ID 3 +#define CLOCK_MONOTONIC_RAW 4 +#define CLOCK_REALTIME_COARSE 5 +#define CLOCK_MONOTONIC_COARSE 6 +#define CLOCK_BOOTTIME 7 +#define CLOCK_REALTIME_ALARM 8 +#define CLOCK_BOOTTIME_ALARM 9 +#define CLOCK_SGI_CYCLE 10 +#define CLOCK_TAI 11 + +#define TIMER_ABSTIME 1 + +int nanosleep (const struct timespec *, struct timespec *); +int clock_getres (clockid_t, struct timespec *); +int clock_gettime (clockid_t, struct timespec *); +int clock_settime (clockid_t, const struct timespec *); +int clock_nanosleep (clockid_t, int, const struct timespec *, struct timespec *); +int clock_getcpuclockid (pid_t, clockid_t *); + +struct sigevent; +int timer_create (clockid_t, struct sigevent *__restrict, timer_t *__restrict); +int timer_delete (timer_t); +int timer_settime (timer_t, int, const struct itimerspec *__restrict, struct itimerspec *__restrict); +int timer_gettime (timer_t, struct itimerspec *); +int timer_getoverrun (timer_t); + +extern char *tzname[2]; + +#endif + + +#if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) || defined(_GNU_SOURCE) +char *strptime (const char *__restrict, const char *__restrict, struct tm *__restrict); +extern int daylight; +extern long timezone; +extern int getdate_err; +#endif + + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +time_t timegm(struct tm *); +#endif + +#if _REDIR_TIME64 +__REDIR(time, __time64); +__REDIR(difftime, __difftime64); +__REDIR(mktime, __mktime64); +__REDIR(gmtime, __gmtime64); +__REDIR(localtime, __localtime64); +__REDIR(ctime, __ctime64); +__REDIR(timespec_get, __timespec_get_time64); +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ + || defined(_BSD_SOURCE) +__REDIR(gmtime_r, __gmtime64_r); +__REDIR(localtime_r, __localtime64_r); +__REDIR(ctime_r, __ctime64_r); +__REDIR(nanosleep, __nanosleep_time64); +__REDIR(clock_getres, __clock_getres_time64); +__REDIR(clock_gettime, __clock_gettime64); +__REDIR(clock_settime, __clock_settime64); +__REDIR(clock_nanosleep, __clock_nanosleep_time64); +__REDIR(timer_settime, __timer_settime64); +__REDIR(timer_gettime, __timer_gettime64); +#endif +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +__REDIR(timegm, __timegm_time64); +#endif +#endif + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/third_party/musl/ndk_musl_include/uchar.h b/third_party/musl/ndk_musl_include/uchar.h new file mode 100644 index 0000000000000000000000000000000000000000..f4191ae440d5753c4f1d96a41e30a934c0e2e30d --- /dev/null +++ b/third_party/musl/ndk_musl_include/uchar.h @@ -0,0 +1,29 @@ +#ifndef _UCHAR_H +#define _UCHAR_H + +#ifdef __cplusplus +extern "C" { +#endif + +#if __cplusplus < 201103L +typedef unsigned short char16_t; +typedef unsigned char32_t; +#endif + +#define __NEED_mbstate_t +#define __NEED_size_t + +#include +#include + +size_t c16rtomb(char *__restrict, char16_t, mbstate_t *__restrict); +size_t mbrtoc16(char16_t *__restrict, const char *__restrict, size_t, mbstate_t *__restrict); + +size_t c32rtomb(char *__restrict, char32_t, mbstate_t *__restrict); +size_t mbrtoc32(char32_t *__restrict, const char *__restrict, size_t, mbstate_t *__restrict); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/ucontext.h b/third_party/musl/ndk_musl_include/ucontext.h new file mode 100644 index 0000000000000000000000000000000000000000..15bf47415ede885a377cc224f1d20bb9254d7c6e --- /dev/null +++ b/third_party/musl/ndk_musl_include/ucontext.h @@ -0,0 +1,20 @@ +#ifndef _UCONTEXT_H +#define _UCONTEXT_H +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define NGREG (sizeof(gregset_t)/sizeof(greg_t)) +#endif + +struct __ucontext; + +#ifdef __cplusplus +} +#endif +#endif diff --git a/third_party/musl/ndk_musl_include/ulimit.h b/third_party/musl/ndk_musl_include/ulimit.h new file mode 100644 index 0000000000000000000000000000000000000000..3087ea64199d4b6188857d414d10fafea81f03d0 --- /dev/null +++ b/third_party/musl/ndk_musl_include/ulimit.h @@ -0,0 +1,15 @@ +#ifndef _ULIMIT_H +#define _ULIMIT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define UL_GETFSIZE 1 +#define UL_SETFSIZE 2 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/unistd.h b/third_party/musl/ndk_musl_include/unistd.h new file mode 100644 index 0000000000000000000000000000000000000000..b1706ca213df438ed933dbc49dab6101e1b50bf2 --- /dev/null +++ b/third_party/musl/ndk_musl_include/unistd.h @@ -0,0 +1,471 @@ +#ifndef _UNISTD_H +#define _UNISTD_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 + +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +#ifdef __cplusplus +#define NULL 0L +#else +#define NULL ((void*)0) +#endif + +#define __NEED_size_t +#define __NEED_ssize_t +#define __NEED_uid_t +#define __NEED_gid_t +#define __NEED_off_t +#define __NEED_pid_t +#define __NEED_intptr_t +#define __NEED_useconds_t + +#include + +int pipe(int [2]); +int pipe2(int [2], int); +int close(int); +int dup(int); +int dup2(int, int); +int dup3(int, int, int); +off_t lseek(int, off_t, int); +int fsync(int); +int fdatasync(int); + +ssize_t read(int, void *, size_t); +ssize_t write(int, const void *, size_t); +ssize_t pread(int, void *, size_t, off_t); +ssize_t pwrite(int, const void *, size_t, off_t); + +int chown(const char *, uid_t, gid_t); +int fchown(int, uid_t, gid_t); +int lchown(const char *, uid_t, gid_t); +int fchownat(int, const char *, uid_t, gid_t, int); + +int link(const char *, const char *); +int linkat(int, const char *, int, const char *, int); +int symlink(const char *, const char *); +int symlinkat(const char *, int, const char *); +ssize_t readlink(const char *__restrict, char *__restrict, size_t); +ssize_t readlinkat(int, const char *__restrict, char *__restrict, size_t); +int unlink(const char *); +int unlinkat(int, const char *, int); +int rmdir(const char *); +int truncate(const char *, off_t); +int ftruncate(int, off_t); + +#define F_OK 0 +#define R_OK 4 +#define W_OK 2 +#define X_OK 1 + +int access(const char *, int); +int faccessat(int, const char *, int, int); + +int chdir(const char *); +int fchdir(int); +char *getcwd(char *, size_t); + +unsigned alarm(unsigned); +unsigned sleep(unsigned); +int pause(void); + +pid_t fork(void); +int execve(const char *, char *const [], char *const []); +int execv(const char *, char *const []); +int execle(const char *, const char *, ...); +int execl(const char *, const char *, ...); +int execvp(const char *, char *const []); +int execlp(const char *, const char *, ...); +int fexecve(int, char *const [], char *const []); +_Noreturn void _exit(int); + +pid_t getpid(void); +pid_t getppid(void); +pid_t getpgrp(void); +pid_t getpgid(pid_t); +int setpgid(pid_t, pid_t); +pid_t setsid(void); +pid_t getsid(pid_t); +char *ttyname(int); +int ttyname_r(int, char *, size_t); +int isatty(int); +pid_t tcgetpgrp(int); +int tcsetpgrp(int, pid_t); + +uid_t getuid(void); +uid_t geteuid(void); +gid_t getgid(void); +gid_t getegid(void); +int getgroups(int, gid_t []); +int setuid(uid_t); +int seteuid(uid_t); +int setgid(gid_t); +int setegid(gid_t); + +char *getlogin(void); +int getlogin_r(char *, size_t); +int gethostname(char *, size_t); +char *ctermid(char *); + +int getopt(int, char * const [], const char *); +extern char *optarg; +extern int optind, opterr, optopt; + +long pathconf(const char *, int); +long fpathconf(int, int); +long sysconf(int); + +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define F_ULOCK 0 +#define F_LOCK 1 +#define F_TLOCK 2 +#define F_TEST 3 +int setreuid(uid_t, uid_t); +int setregid(gid_t, gid_t); +int lockf(int, int, off_t); +int nice(int); +void sync(void); +pid_t setpgrp(void); +void swab(const void *__restrict, void *__restrict, ssize_t); +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) \ + || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE+0 < 700) +int usleep(unsigned); +#endif + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define L_SET 0 +#define L_INCR 1 +#define L_XTND 2 +int brk(void *); +void *sbrk(intptr_t); +pid_t vfork(void); +int chroot(const char *); +int getpagesize(void); +int getdtablesize(void); +int sethostname(const char *, size_t); +int getdomainname(char *, size_t); +int setdomainname(const char *, size_t); +int setgroups(size_t, const gid_t *); +int daemon(int, int); +int acct(const char *); +long syscall(long, ...); +int execvpe(const char *, char *const [], char *const []); +int issetugid(void); +int getentropy(void *, size_t); +extern int optreset; +#endif + +#ifdef _GNU_SOURCE +extern char **environ; +int setresuid(uid_t, uid_t, uid_t); +int setresgid(gid_t, gid_t, gid_t); +int getresuid(uid_t *, uid_t *, uid_t *); +int getresgid(gid_t *, gid_t *, gid_t *); +int syncfs(int); +ssize_t copy_file_range(int, off_t *, int, off_t *, size_t, unsigned); +pid_t gettid(void); +#endif + +#if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) +#define lseek64 lseek +#define pread64 pread +#define pwrite64 pwrite +#define truncate64 truncate +#define ftruncate64 ftruncate +#define lockf64 lockf +#define off64_t off_t +#endif + +#define POSIX_CLOSE_RESTART 0 + +#define _XOPEN_VERSION 700 +#define _XOPEN_UNIX 1 +#define _XOPEN_ENH_I18N 1 + +#define _POSIX_VERSION 200809L +#define _POSIX2_VERSION _POSIX_VERSION + +#define _POSIX_ADVISORY_INFO _POSIX_VERSION +#define _POSIX_CHOWN_RESTRICTED 1 +#define _POSIX_IPV6 _POSIX_VERSION +#define _POSIX_JOB_CONTROL 1 +#define _POSIX_MAPPED_FILES _POSIX_VERSION +#define _POSIX_MEMLOCK _POSIX_VERSION +#define _POSIX_MEMLOCK_RANGE _POSIX_VERSION +#define _POSIX_MEMORY_PROTECTION _POSIX_VERSION +#define _POSIX_MESSAGE_PASSING _POSIX_VERSION +#define _POSIX_FSYNC _POSIX_VERSION +#define _POSIX_NO_TRUNC 1 +#define _POSIX_RAW_SOCKETS _POSIX_VERSION +#define _POSIX_REALTIME_SIGNALS _POSIX_VERSION +#define _POSIX_REGEXP 1 +#define _POSIX_SAVED_IDS 1 +#define _POSIX_SHELL 1 +#define _POSIX_SPAWN _POSIX_VERSION +#define _POSIX_VDISABLE 0 + +#define _POSIX_THREADS _POSIX_VERSION +#define _POSIX_THREAD_PROCESS_SHARED _POSIX_VERSION +#define _POSIX_THREAD_SAFE_FUNCTIONS _POSIX_VERSION +#define _POSIX_THREAD_ATTR_STACKADDR _POSIX_VERSION +#define _POSIX_THREAD_ATTR_STACKSIZE _POSIX_VERSION +#define _POSIX_THREAD_PRIORITY_SCHEDULING _POSIX_VERSION +#define _POSIX_THREAD_CPUTIME _POSIX_VERSION +#define _POSIX_TIMERS _POSIX_VERSION +#define _POSIX_TIMEOUTS _POSIX_VERSION +#define _POSIX_MONOTONIC_CLOCK _POSIX_VERSION +#define _POSIX_CPUTIME _POSIX_VERSION +#define _POSIX_CLOCK_SELECTION _POSIX_VERSION +#define _POSIX_BARRIERS _POSIX_VERSION +#define _POSIX_SPIN_LOCKS _POSIX_VERSION +#define _POSIX_READER_WRITER_LOCKS _POSIX_VERSION +#define _POSIX_ASYNCHRONOUS_IO _POSIX_VERSION +#define _POSIX_SEMAPHORES _POSIX_VERSION +#define _POSIX_SHARED_MEMORY_OBJECTS _POSIX_VERSION + +#define _POSIX2_C_BIND _POSIX_VERSION + +#include + + + +#define _PC_LINK_MAX 0 +#define _PC_MAX_CANON 1 +#define _PC_MAX_INPUT 2 +#define _PC_NAME_MAX 3 +#define _PC_PATH_MAX 4 +#define _PC_PIPE_BUF 5 +#define _PC_CHOWN_RESTRICTED 6 +#define _PC_NO_TRUNC 7 +#define _PC_VDISABLE 8 +#define _PC_SYNC_IO 9 +#define _PC_ASYNC_IO 10 +#define _PC_PRIO_IO 11 +#define _PC_SOCK_MAXBUF 12 +#define _PC_FILESIZEBITS 13 +#define _PC_REC_INCR_XFER_SIZE 14 +#define _PC_REC_MAX_XFER_SIZE 15 +#define _PC_REC_MIN_XFER_SIZE 16 +#define _PC_REC_XFER_ALIGN 17 +#define _PC_ALLOC_SIZE_MIN 18 +#define _PC_SYMLINK_MAX 19 +#define _PC_2_SYMLINKS 20 + +#define _SC_ARG_MAX 0 +#define _SC_CHILD_MAX 1 +#define _SC_CLK_TCK 2 +#define _SC_NGROUPS_MAX 3 +#define _SC_OPEN_MAX 4 +#define _SC_STREAM_MAX 5 +#define _SC_TZNAME_MAX 6 +#define _SC_JOB_CONTROL 7 +#define _SC_SAVED_IDS 8 +#define _SC_REALTIME_SIGNALS 9 +#define _SC_PRIORITY_SCHEDULING 10 +#define _SC_TIMERS 11 +#define _SC_ASYNCHRONOUS_IO 12 +#define _SC_PRIORITIZED_IO 13 +#define _SC_SYNCHRONIZED_IO 14 +#define _SC_FSYNC 15 +#define _SC_MAPPED_FILES 16 +#define _SC_MEMLOCK 17 +#define _SC_MEMLOCK_RANGE 18 +#define _SC_MEMORY_PROTECTION 19 +#define _SC_MESSAGE_PASSING 20 +#define _SC_SEMAPHORES 21 +#define _SC_SHARED_MEMORY_OBJECTS 22 +#define _SC_AIO_LISTIO_MAX 23 +#define _SC_AIO_MAX 24 +#define _SC_AIO_PRIO_DELTA_MAX 25 +#define _SC_DELAYTIMER_MAX 26 +#define _SC_MQ_OPEN_MAX 27 +#define _SC_MQ_PRIO_MAX 28 +#define _SC_VERSION 29 +#define _SC_PAGE_SIZE 30 +#define _SC_PAGESIZE 30 /* !! */ +#define _SC_RTSIG_MAX 31 +#define _SC_SEM_NSEMS_MAX 32 +#define _SC_SEM_VALUE_MAX 33 +#define _SC_SIGQUEUE_MAX 34 +#define _SC_TIMER_MAX 35 +#define _SC_BC_BASE_MAX 36 +#define _SC_BC_DIM_MAX 37 +#define _SC_BC_SCALE_MAX 38 +#define _SC_BC_STRING_MAX 39 +#define _SC_COLL_WEIGHTS_MAX 40 +#define _SC_EXPR_NEST_MAX 42 +#define _SC_LINE_MAX 43 +#define _SC_RE_DUP_MAX 44 +#define _SC_2_VERSION 46 +#define _SC_2_C_BIND 47 +#define _SC_2_C_DEV 48 +#define _SC_2_FORT_DEV 49 +#define _SC_2_FORT_RUN 50 +#define _SC_2_SW_DEV 51 +#define _SC_2_LOCALEDEF 52 +#define _SC_UIO_MAXIOV 60 /* !! */ +#define _SC_IOV_MAX 60 +#define _SC_THREADS 67 +#define _SC_THREAD_SAFE_FUNCTIONS 68 +#define _SC_GETGR_R_SIZE_MAX 69 +#define _SC_GETPW_R_SIZE_MAX 70 +#define _SC_LOGIN_NAME_MAX 71 +#define _SC_TTY_NAME_MAX 72 +#define _SC_THREAD_DESTRUCTOR_ITERATIONS 73 +#define _SC_THREAD_KEYS_MAX 74 +#define _SC_THREAD_STACK_MIN 75 +#define _SC_THREAD_THREADS_MAX 76 +#define _SC_THREAD_ATTR_STACKADDR 77 +#define _SC_THREAD_ATTR_STACKSIZE 78 +#define _SC_THREAD_PRIORITY_SCHEDULING 79 +#define _SC_THREAD_PRIO_INHERIT 80 +#define _SC_THREAD_PRIO_PROTECT 81 +#define _SC_THREAD_PROCESS_SHARED 82 +#define _SC_NPROCESSORS_CONF 83 +#define _SC_NPROCESSORS_ONLN 84 +#define _SC_PHYS_PAGES 85 +#define _SC_AVPHYS_PAGES 86 +#define _SC_ATEXIT_MAX 87 +#define _SC_PASS_MAX 88 +#define _SC_XOPEN_VERSION 89 +#define _SC_XOPEN_XCU_VERSION 90 +#define _SC_XOPEN_UNIX 91 +#define _SC_XOPEN_CRYPT 92 +#define _SC_XOPEN_ENH_I18N 93 +#define _SC_XOPEN_SHM 94 +#define _SC_2_CHAR_TERM 95 +#define _SC_2_UPE 97 +#define _SC_XOPEN_XPG2 98 +#define _SC_XOPEN_XPG3 99 +#define _SC_XOPEN_XPG4 100 +#define _SC_NZERO 109 +#define _SC_XBS5_ILP32_OFF32 125 +#define _SC_XBS5_ILP32_OFFBIG 126 +#define _SC_XBS5_LP64_OFF64 127 +#define _SC_XBS5_LPBIG_OFFBIG 128 +#define _SC_XOPEN_LEGACY 129 +#define _SC_XOPEN_REALTIME 130 +#define _SC_XOPEN_REALTIME_THREADS 131 +#define _SC_ADVISORY_INFO 132 +#define _SC_BARRIERS 133 +#define _SC_CLOCK_SELECTION 137 +#define _SC_CPUTIME 138 +#define _SC_THREAD_CPUTIME 139 +#define _SC_MONOTONIC_CLOCK 149 +#define _SC_READER_WRITER_LOCKS 153 +#define _SC_SPIN_LOCKS 154 +#define _SC_REGEXP 155 +#define _SC_SHELL 157 +#define _SC_SPAWN 159 +#define _SC_SPORADIC_SERVER 160 +#define _SC_THREAD_SPORADIC_SERVER 161 +#define _SC_TIMEOUTS 164 +#define _SC_TYPED_MEMORY_OBJECTS 165 +#define _SC_2_PBS 168 +#define _SC_2_PBS_ACCOUNTING 169 +#define _SC_2_PBS_LOCATE 170 +#define _SC_2_PBS_MESSAGE 171 +#define _SC_2_PBS_TRACK 172 +#define _SC_SYMLOOP_MAX 173 +#define _SC_STREAMS 174 +#define _SC_2_PBS_CHECKPOINT 175 +#define _SC_V6_ILP32_OFF32 176 +#define _SC_V6_ILP32_OFFBIG 177 +#define _SC_V6_LP64_OFF64 178 +#define _SC_V6_LPBIG_OFFBIG 179 +#define _SC_HOST_NAME_MAX 180 +#define _SC_TRACE 181 +#define _SC_TRACE_EVENT_FILTER 182 +#define _SC_TRACE_INHERIT 183 +#define _SC_TRACE_LOG 184 + +#define _SC_IPV6 235 +#define _SC_RAW_SOCKETS 236 +#define _SC_V7_ILP32_OFF32 237 +#define _SC_V7_ILP32_OFFBIG 238 +#define _SC_V7_LP64_OFF64 239 +#define _SC_V7_LPBIG_OFFBIG 240 +#define _SC_SS_REPL_MAX 241 +#define _SC_TRACE_EVENT_NAME_MAX 242 +#define _SC_TRACE_NAME_MAX 243 +#define _SC_TRACE_SYS_MAX 244 +#define _SC_TRACE_USER_EVENT_MAX 245 +#define _SC_XOPEN_STREAMS 246 +#define _SC_THREAD_ROBUST_PRIO_INHERIT 247 +#define _SC_THREAD_ROBUST_PRIO_PROTECT 248 + +#define _CS_PATH 0 +#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS 1 +#define _CS_GNU_LIBC_VERSION 2 +#define _CS_GNU_LIBPTHREAD_VERSION 3 +#define _CS_POSIX_V5_WIDTH_RESTRICTED_ENVS 4 +#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS 5 + +#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS 1116 +#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS 1117 +#define _CS_POSIX_V6_ILP32_OFF32_LIBS 1118 +#define _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS 1119 +#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS 1120 +#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS 1121 +#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS 1122 +#define _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS 1123 +#define _CS_POSIX_V6_LP64_OFF64_CFLAGS 1124 +#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS 1125 +#define _CS_POSIX_V6_LP64_OFF64_LIBS 1126 +#define _CS_POSIX_V6_LP64_OFF64_LINTFLAGS 1127 +#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS 1128 +#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS 1129 +#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS 1130 +#define _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS 1131 +#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS 1132 +#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS 1133 +#define _CS_POSIX_V7_ILP32_OFF32_LIBS 1134 +#define _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS 1135 +#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS 1136 +#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS 1137 +#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS 1138 +#define _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS 1139 +#define _CS_POSIX_V7_LP64_OFF64_CFLAGS 1140 +#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS 1141 +#define _CS_POSIX_V7_LP64_OFF64_LIBS 1142 +#define _CS_POSIX_V7_LP64_OFF64_LINTFLAGS 1143 +#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS 1144 +#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS 1145 +#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS 1146 +#define _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS 1147 +#define _CS_V6_ENV 1148 +#define _CS_V7_ENV 1149 + +#ifdef _GNU_SOURCE +#ifndef TEMP_FAILURE_RETRY +#define MUSL_TEMP_FAILURE_RETRY(expression) \ + (__extension__ \ + ({ long int __result; \ + do __result = (long int)(expression); \ + while(__result == -1L&& errno == EINTR); \ + __result;})) + +#define TEMP_FAILURE_RETRY(expression) MUSL_TEMP_FAILURE_RETRY(expression) +#endif +#endif + +#include + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/utime.h b/third_party/musl/ndk_musl_include/utime.h new file mode 100644 index 0000000000000000000000000000000000000000..93ccad97173da18ea46a78aa32db8c225da8663f --- /dev/null +++ b/third_party/musl/ndk_musl_include/utime.h @@ -0,0 +1,29 @@ +#ifndef _UTIME_H +#define _UTIME_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_time_t + +#include + +struct utimbuf { + time_t actime; + time_t modtime; +}; + +int utime (const char *, const struct utimbuf *); + +#if _REDIR_TIME64 +__REDIR(utime, __utime64); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/utmp.h b/third_party/musl/ndk_musl_include/utmp.h new file mode 100644 index 0000000000000000000000000000000000000000..a39f20098947604c0b98fa1c78a15dd5575fa18d --- /dev/null +++ b/third_party/musl/ndk_musl_include/utmp.h @@ -0,0 +1,49 @@ +#ifndef _UTMP_H +#define _UTMP_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define ACCOUNTING 9 +#define UT_NAMESIZE 32 +#define UT_HOSTSIZE 256 +#define UT_LINESIZE 32 + +struct lastlog { + time_t ll_time; + char ll_line[UT_LINESIZE]; + char ll_host[UT_HOSTSIZE]; +}; + +#define ut_time ut_tv.tv_sec +#define ut_name ut_user +#define ut_addr ut_addr_v6[0] +#define utmp utmpx +#define e_exit __e_exit +#define e_termination __e_termination + +void endutent(void); +struct utmp *getutent(void); +struct utmp *pututline(const struct utmp *); +void setutent(void); + +int utmpname(const char *); + +int login_tty(int); + +#define _PATH_UTMP "/dev/null/utmp" +#define _PATH_WTMP "/dev/null/wtmp" + +#define UTMP_FILE _PATH_UTMP +#define WTMP_FILE _PATH_WTMP +#define UTMP_FILENAME _PATH_UTMP +#define WTMP_FILENAME _PATH_WTMP + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/utmpx.h b/third_party/musl/ndk_musl_include/utmpx.h new file mode 100644 index 0000000000000000000000000000000000000000..a79116a04f7127f2a3d4aa950465bbf20dd5ab13 --- /dev/null +++ b/third_party/musl/ndk_musl_include/utmpx.h @@ -0,0 +1,58 @@ +#ifndef _UTMPX_H +#define _UTMPX_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_pid_t +#define __NEED_time_t +#define __NEED_suseconds_t +#define __NEED_struct_timeval + +#include + +struct utmpx { + short ut_type; + short __ut_pad1; + pid_t ut_pid; + char ut_line[32]; + char ut_id[4]; + char ut_user[32]; + char ut_host[256]; + struct { + short __e_termination; + short __e_exit; + } ut_exit; +#if __BYTE_ORDER == 1234 + int ut_session, __ut_pad2; +#else + int __ut_pad2, ut_session; +#endif + struct timeval ut_tv; + unsigned ut_addr_v6[4]; + char __unused[20]; +}; + +#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE) +#define e_exit __e_exit +#define e_termination __e_termination +#endif + +#define EMPTY 0 +#define RUN_LVL 1 +#define BOOT_TIME 2 +#define NEW_TIME 3 +#define OLD_TIME 4 +#define INIT_PROCESS 5 +#define LOGIN_PROCESS 6 +#define USER_PROCESS 7 +#define DEAD_PROCESS 8 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/values.h b/third_party/musl/ndk_musl_include/values.h new file mode 100644 index 0000000000000000000000000000000000000000..c53f1bc3572357e945f5292f58f961df18136241 --- /dev/null +++ b/third_party/musl/ndk_musl_include/values.h @@ -0,0 +1,39 @@ +#ifndef _VALUES_H +#define _VALUES_H + +#include + +#define CHARBITS (sizeof(char) * 8) +#define SHORTBITS (sizeof(short) * 8) +#define INTBITS (sizeof(int) * 8) +#define LONGBITS (sizeof(long) * 8) +#define PTRBITS (sizeof(char *) * 8) +#define DOUBLEBITS (sizeof(double) * 8) +#define FLOATBITS (sizeof(float) * 8) + +#define MINSHORT SHRT_MIN +#define MININT INT_MIN +#define MINLONG LONG_MIN + +#define MAXSHORT SHRT_MAX +#define MAXINT INT_MAX +#define MAXLONG LONG_MAX + +#define HIBITS MINSHORT +#define HIBITL MINLONG + +#include + +#define MAXDOUBLE DBL_MAX +#undef MAXFLOAT +#define MAXFLOAT FLT_MAX +#define MINDOUBLE DBL_MIN +#define MINFLOAT FLT_MIN +#define DMINEXP DBL_MIN_EXP +#define FMINEXP FLT_MIN_EXP +#define DMAXEXP DBL_MAX_EXP +#define FMAXEXP FLT_MAX_EXP + +#define BITSPERBYTE CHAR_BIT + +#endif diff --git a/third_party/musl/ndk_musl_include/version.h b/third_party/musl/ndk_musl_include/version.h new file mode 100644 index 0000000000000000000000000000000000000000..311b29e77deaa118d78f18498a30b5b3d1bf557c --- /dev/null +++ b/third_party/musl/ndk_musl_include/version.h @@ -0,0 +1 @@ +#define VERSION "1.2.0" diff --git a/third_party/musl/ndk_musl_include/wait.h b/third_party/musl/ndk_musl_include/wait.h new file mode 100644 index 0000000000000000000000000000000000000000..c56b51880dc1b6eb4f877b910fdf00a2e06f22b5 --- /dev/null +++ b/third_party/musl/ndk_musl_include/wait.h @@ -0,0 +1,2 @@ +#warning redirecting incorrect #include to +#include diff --git a/third_party/musl/ndk_musl_include/wchar.h b/third_party/musl/ndk_musl_include/wchar.h new file mode 100644 index 0000000000000000000000000000000000000000..e8826200ee9837725bd9370cdfbfefbbcf7707de --- /dev/null +++ b/third_party/musl/ndk_musl_include/wchar.h @@ -0,0 +1,194 @@ +#ifndef _WCHAR_H +#define _WCHAR_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_FILE +#define __NEED___isoc_va_list +#define __NEED_size_t +#define __NEED_wchar_t +#define __NEED_wint_t +#define __NEED_mbstate_t + +#if __STDC_VERSION__ < 201112L +#define __NEED_struct__IO_FILE +#endif + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define __NEED_locale_t +#define __NEED_va_list +#endif + +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define __NEED_wctype_t +#endif + +#include + +#if L'\0'-1 > 0 +#define WCHAR_MAX (0xffffffffu+L'\0') +#define WCHAR_MIN (0+L'\0') +#else +#define WCHAR_MAX (0x7fffffff+L'\0') +#define WCHAR_MIN (-1-0x7fffffff+L'\0') +#endif + +#ifdef __cplusplus +#define NULL 0L +#else +#define NULL ((void*)0) +#endif + +#undef WEOF +#define WEOF 0xffffffffU + +wchar_t *wcscpy (wchar_t *__restrict, const wchar_t *__restrict); +wchar_t *wcsncpy (wchar_t *__restrict, const wchar_t *__restrict, size_t); + +wchar_t *wcscat (wchar_t *__restrict, const wchar_t *__restrict); +wchar_t *wcsncat (wchar_t *__restrict, const wchar_t *__restrict, size_t); + +int wcscmp (const wchar_t *, const wchar_t *); +int wcsncmp (const wchar_t *, const wchar_t *, size_t); + +int wcscoll(const wchar_t *, const wchar_t *); +size_t wcsxfrm (wchar_t *__restrict, const wchar_t *__restrict, size_t); + +wchar_t *wcschr (const wchar_t *, wchar_t); +wchar_t *wcsrchr (const wchar_t *, wchar_t); + +size_t wcscspn (const wchar_t *, const wchar_t *); +size_t wcsspn (const wchar_t *, const wchar_t *); +wchar_t *wcspbrk (const wchar_t *, const wchar_t *); + +wchar_t *wcstok (wchar_t *__restrict, const wchar_t *__restrict, wchar_t **__restrict); + +size_t wcslen (const wchar_t *); + +wchar_t *wcsstr (const wchar_t *__restrict, const wchar_t *__restrict); +wchar_t *wcswcs (const wchar_t *, const wchar_t *); + +wchar_t *wmemchr (const wchar_t *, wchar_t, size_t); +int wmemcmp (const wchar_t *, const wchar_t *, size_t); +wchar_t *wmemcpy (wchar_t *__restrict, const wchar_t *__restrict, size_t); +wchar_t *wmemmove (wchar_t *, const wchar_t *, size_t); +wchar_t *wmemset (wchar_t *, wchar_t, size_t); + +wint_t btowc (int); +int wctob (wint_t); + +int mbsinit (const mbstate_t *); +size_t mbrtowc (wchar_t *__restrict, const char *__restrict, size_t, mbstate_t *__restrict); +size_t wcrtomb (char *__restrict, wchar_t, mbstate_t *__restrict); + +size_t mbrlen (const char *__restrict, size_t, mbstate_t *__restrict); + +size_t mbsrtowcs (wchar_t *__restrict, const char **__restrict, size_t, mbstate_t *__restrict); +size_t wcsrtombs (char *__restrict, const wchar_t **__restrict, size_t, mbstate_t *__restrict); + +float wcstof (const wchar_t *__restrict, wchar_t **__restrict); +double wcstod (const wchar_t *__restrict, wchar_t **__restrict); +long double wcstold (const wchar_t *__restrict, wchar_t **__restrict); + +long wcstol (const wchar_t *__restrict, wchar_t **__restrict, int); +unsigned long wcstoul (const wchar_t *__restrict, wchar_t **__restrict, int); + +long long wcstoll (const wchar_t *__restrict, wchar_t **__restrict, int); +unsigned long long wcstoull (const wchar_t *__restrict, wchar_t **__restrict, int); + + + +int fwide (FILE *, int); + + +int wprintf (const wchar_t *__restrict, ...); +int fwprintf (FILE *__restrict, const wchar_t *__restrict, ...); +int swprintf (wchar_t *__restrict, size_t, const wchar_t *__restrict, ...); + +int vwprintf (const wchar_t *__restrict, __isoc_va_list); +int vfwprintf (FILE *__restrict, const wchar_t *__restrict, __isoc_va_list); +int vswprintf (wchar_t *__restrict, size_t, const wchar_t *__restrict, __isoc_va_list); + +int wscanf (const wchar_t *__restrict, ...); +int fwscanf (FILE *__restrict, const wchar_t *__restrict, ...); +int swscanf (const wchar_t *__restrict, const wchar_t *__restrict, ...); + +int vwscanf (const wchar_t *__restrict, __isoc_va_list); +int vfwscanf (FILE *__restrict, const wchar_t *__restrict, __isoc_va_list); +int vswscanf (const wchar_t *__restrict, const wchar_t *__restrict, __isoc_va_list); + +wint_t fgetwc (FILE *); +wint_t getwc (FILE *); +wint_t getwchar (void); + +wint_t fputwc (wchar_t, FILE *); +wint_t putwc (wchar_t, FILE *); +wint_t putwchar (wchar_t); + +wchar_t *fgetws (wchar_t *__restrict, int, FILE *__restrict); +int fputws (const wchar_t *__restrict, FILE *__restrict); + +wint_t ungetwc (wint_t, FILE *); + +struct tm; +size_t wcsftime (wchar_t *__restrict, size_t, const wchar_t *__restrict, const struct tm *__restrict); + +#undef iswdigit + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +size_t wcsftime_l (wchar_t *__restrict, size_t, const wchar_t *__restrict, const struct tm *__restrict, locale_t); +#endif + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +FILE *open_wmemstream(wchar_t **, size_t *); +size_t mbsnrtowcs(wchar_t *__restrict, const char **__restrict, size_t, size_t, mbstate_t *__restrict); +size_t wcsnrtombs(char *__restrict, const wchar_t **__restrict, size_t, size_t, mbstate_t *__restrict); +wchar_t *wcsdup(const wchar_t *); +size_t wcsnlen (const wchar_t *, size_t); +wchar_t *wcpcpy (wchar_t *__restrict, const wchar_t *__restrict); +wchar_t *wcpncpy (wchar_t *__restrict, const wchar_t *__restrict, size_t); +int wcscasecmp(const wchar_t *, const wchar_t *); +int wcscasecmp_l(const wchar_t *, const wchar_t *, locale_t); +int wcsncasecmp(const wchar_t *, const wchar_t *, size_t); +int wcsncasecmp_l(const wchar_t *, const wchar_t *, size_t, locale_t); +int wcscoll_l(const wchar_t *, const wchar_t *, locale_t); +size_t wcsxfrm_l(wchar_t *__restrict, const wchar_t *__restrict, size_t, locale_t); +#endif + +#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +int wcwidth (wchar_t); +int wcswidth (const wchar_t *, size_t); +int iswalnum(wint_t); +int iswalpha(wint_t); +int iswblank(wint_t); +int iswcntrl(wint_t); +int iswdigit(wint_t); +int iswgraph(wint_t); +int iswlower(wint_t); +int iswprint(wint_t); +int iswpunct(wint_t); +int iswspace(wint_t); +int iswupper(wint_t); +int iswxdigit(wint_t); +int iswctype(wint_t, wctype_t); +wint_t towlower(wint_t); +wint_t towupper(wint_t); +wctype_t wctype(const char *); + +#ifndef __cplusplus +#undef iswdigit +#define iswdigit(a) (0 ? iswdigit(a) : ((unsigned)(a)-'0') < 10) +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/wctype.h b/third_party/musl/ndk_musl_include/wctype.h new file mode 100644 index 0000000000000000000000000000000000000000..fe9d62ed7fc88cd9554364f67c17b7fcd44b070d --- /dev/null +++ b/third_party/musl/ndk_musl_include/wctype.h @@ -0,0 +1,79 @@ +#ifndef _WCTYPE_H +#define _WCTYPE_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_wint_t +#define __NEED_wctype_t + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define __NEED_locale_t +#endif + +#include + +typedef const int * wctrans_t; + +#undef WEOF +#define WEOF 0xffffffffU + +#undef iswdigit + +int iswalnum(wint_t); +int iswalpha(wint_t); +int iswblank(wint_t); +int iswcntrl(wint_t); +int iswdigit(wint_t); +int iswgraph(wint_t); +int iswlower(wint_t); +int iswprint(wint_t); +int iswpunct(wint_t); +int iswspace(wint_t); +int iswupper(wint_t); +int iswxdigit(wint_t); +int iswctype(wint_t, wctype_t); +wint_t towctrans(wint_t, wctrans_t); +wint_t towlower(wint_t); +wint_t towupper(wint_t); +wctrans_t wctrans(const char *); +wctype_t wctype(const char *); + +#ifndef __cplusplus +#undef iswdigit +#define iswdigit(a) (0 ? iswdigit(a) : ((unsigned)(a)-'0') < 10) +#endif + +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) + +int iswalnum_l(wint_t, locale_t); +int iswalpha_l(wint_t, locale_t); +int iswblank_l(wint_t, locale_t); +int iswcntrl_l(wint_t, locale_t); +int iswdigit_l(wint_t, locale_t); +int iswgraph_l(wint_t, locale_t); +int iswlower_l(wint_t, locale_t); +int iswprint_l(wint_t, locale_t); +int iswpunct_l(wint_t, locale_t); +int iswspace_l(wint_t, locale_t); +int iswupper_l(wint_t, locale_t); +int iswxdigit_l(wint_t, locale_t); +int iswctype_l(wint_t, wctype_t, locale_t); +wint_t towlower_l(wint_t, locale_t); +wint_t towupper_l(wint_t, locale_t); +wint_t towctrans_l(wint_t, wctrans_t, locale_t); +wctrans_t wctrans_l(const char *, locale_t); +wctype_t wctype_l(const char *, locale_t); + +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_musl_include/wordexp.h b/third_party/musl/ndk_musl_include/wordexp.h new file mode 100644 index 0000000000000000000000000000000000000000..42de360f338a2d3ebb229aafcd40c50a6ecf7971 --- /dev/null +++ b/third_party/musl/ndk_musl_include/wordexp.h @@ -0,0 +1,38 @@ +#ifndef _WORDEXP_H +#define _WORDEXP_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#define __NEED_size_t + +#include + +#define WRDE_DOOFFS 1 +#define WRDE_APPEND 2 +#define WRDE_NOCMD 4 +#define WRDE_REUSE 8 +#define WRDE_SHOWERR 16 +#define WRDE_UNDEF 32 + +typedef struct { + size_t we_wordc; + char **we_wordv; + size_t we_offs; +} wordexp_t; + +#define WRDE_NOSYS -1 +#define WRDE_NOSPACE 1 +#define WRDE_BADCHAR 2 +#define WRDE_BADVAL 3 +#define WRDE_CMDSUB 4 +#define WRDE_SYNTAX 5 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/musl/ndk_script/BUILD.gn b/third_party/musl/ndk_script/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..b28fcf880755836d2f9ce012ea57996bb8701dbf --- /dev/null +++ b/third_party/musl/ndk_script/BUILD.gn @@ -0,0 +1,384 @@ +# Copyright (C) 2021 Huawei Device Co., Ltd. +# Copyright (C) 2019 The Android Open Source Project +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos/ndk/ndk.gni") +import("//third_party/musl/musl_config.gni") +import("//third_party/musl/musl_src.gni") +import("//third_party/musl/musl_template.gni") + +toolchains_dir = "//prebuilts/clang/ohos" +musl_target_out_dir = "${root_out_dir}/obj/third_party/musl" +ndk_musl_include = "ndk_musl_include" + +if (host_os == "mac") { + if (host_cpu == "arm64") { + toolchains_file_name = "darwin-arm64" + deps_name = "darwin_arm64" + } else { + toolchains_file_name = "darwin-x86_64" + deps_name = "darwin_x86_64" + } + + darwin_system_toolchains_dir = "${toolchains_dir}/${toolchains_file_name}" + ohos_ndk_toolchains("${deps_name}") { + dest_dir = "$ndk_darwin_toolchains_out_dir" + sources = [ + "${darwin_system_toolchains_dir}/llvm/NOTICE", + "${darwin_system_toolchains_dir}/llvm/bin", + "${darwin_system_toolchains_dir}/llvm/include", + "${darwin_system_toolchains_dir}/llvm/lib", + "${darwin_system_toolchains_dir}/llvm/libexec", + "${darwin_system_toolchains_dir}/llvm/python3", + "${darwin_system_toolchains_dir}/llvm/script", + "${darwin_system_toolchains_dir}/llvm/share", + ] + license_file = "${darwin_system_toolchains_dir}/llvm/NOTICE" + } + + action("darwin_toolchain") { + outputs = [ "${ndk_darwin_toolchains_out_dir}" ] + script = "toolchain.sh" + args = + [ "-i" ] + [ rebase_path("${darwin_system_toolchains_dir}/libcxx-ndk") ] + args += [ "-o" ] + [ rebase_path("${ndk_darwin_toolchains_out_dir}") ] + if (host_cpu == "arm64") { + deps = [ ":darwin_arm64" ] + } else { + deps = [ ":darwin_x86_64" ] + } + } +} else { + linux_x86_64_toolchains_dir = "${toolchains_dir}/linux-x86_64" + windows_x86_64_toolchain_dir = "${toolchains_dir}/windows-x86_64" + + ohos_ndk_toolchains("linux_x86_64") { + dest_dir = "$ndk_linux_toolchains_out_dir" + sources = [ + "${linux_x86_64_toolchains_dir}/llvm/NOTICE", + "${linux_x86_64_toolchains_dir}/llvm/bin", + "${linux_x86_64_toolchains_dir}/llvm/include", + "${linux_x86_64_toolchains_dir}/llvm/lib", + "${linux_x86_64_toolchains_dir}/llvm/libexec", + "${linux_x86_64_toolchains_dir}/llvm/python3", + "${linux_x86_64_toolchains_dir}/llvm/script", + "${linux_x86_64_toolchains_dir}/llvm/share", + ] + license_file = "${linux_x86_64_toolchains_dir}/llvm/NOTICE" + } + + ohos_ndk_toolchains("windows_x86_64") { + dest_dir = "$ndk_windows_toolchains_out_dir" + sources = [ + "${windows_x86_64_toolchain_dir}/llvm/NOTICE", + "${windows_x86_64_toolchain_dir}/llvm/bin", + "${windows_x86_64_toolchain_dir}/llvm/include", + "${windows_x86_64_toolchain_dir}/llvm/lib", + "${windows_x86_64_toolchain_dir}/llvm/libexec", + "${windows_x86_64_toolchain_dir}/llvm/script", + "${windows_x86_64_toolchain_dir}/llvm/share", + ] + args = [ "--follow-all-symlinks" ] + license_file = "${windows_x86_64_toolchain_dir}/llvm/NOTICE" + } + action("linux_toolchain") { + outputs = [ "${ndk_linux_toolchains_out_dir}" ] + script = "toolchain.sh" + args = + [ "-i" ] + [ rebase_path("${linux_x86_64_toolchains_dir}/libcxx-ndk") ] + args += [ "-o" ] + [ rebase_path("${ndk_linux_toolchains_out_dir}") ] + deps = [ ":linux_x86_64" ] + } + + action("windows_toolchain") { + outputs = [ "${ndk_windows_toolchains_out_dir}" ] + script = "toolchain.sh" + args = + [ "-i" ] + [ rebase_path("${windows_x86_64_toolchain_dir}/libcxx-ndk") ] + args += [ "-o" ] + [ rebase_path("${ndk_windows_toolchains_out_dir}") ] + deps = [ ":windows_x86_64" ] + } +} + +group("ndk_toolchain") { + if (host_os == "mac") { + deps = [ ":darwin_toolchain" ] + } else { + deps = [ + ":linux_toolchain", + ":windows_toolchain", + ] + } +} + +group("musl_sysroot") { + deps = [ + ":copy_musl_sysroot", + ":musl_arm_bits_arm32", + ":musl_arm_uapi_arm32", + ":musl_bits_aarch64", + ":musl_bits_x86_64", + ] +} + +action("copy_ndk_uapi") { + outputs = [ "${musl_target_out_dir}/${ndk_musl_include}/linux" ] + script = "${musl_dir}/scripts/copy_uapi.sh" + args = [ "-i" ] + [ rebase_path("${uapi_dir}") ] + args += + [ "-o" ] + [ rebase_path("${musl_target_out_dir}/${ndk_musl_include}") ] + args += [ "-t" ] + [ "${musl_arch}" ] +} + +action("copy_ndk_musl_headers") { + outputs = [ "${musl_target_out_dir}/${ndk_musl_include}" ] + script = "copy_ndk_musl_headers.sh" + args = [ "-i" ] + [ rebase_path("${musl_dir}/${ndk_musl_include}") ] + args += + [ "-o" ] + [ rebase_path("${musl_target_out_dir}/${ndk_musl_include}") ] + deps = [ ":copy_ndk_uapi" ] +} + +action("copy_musl_sysroot") { + outputs = [ "${ndk_headers_out_dir}" ] + script = "copy_musl_sysroot.sh" + args = + [ "-i" ] + [ rebase_path("${musl_target_out_dir}/${ndk_musl_include}") ] + args += [ "-o" ] + [ rebase_path("${ndk_headers_out_dir}") ] + args += [ "-t" ] + [ "${musl_arch}" ] + deps = [ ":copy_ndk_musl_headers" ] +} + +musl_libs_arm32 = [ + "//third_party/musl:create_alltypes_h(//build/toolchain/ohos:ohos_clang_arm)", + "//third_party/musl:create_syscall_h(//build/toolchain/ohos:ohos_clang_arm)", + "//third_party/musl:musl_copy_inc_bits(//build/toolchain/ohos:ohos_clang_arm)", +] + +musl_libs_aarch64 = [ + "//third_party/musl:create_alltypes_h(//build/toolchain/ohos:ohos_clang_arm64)", + "//third_party/musl:create_syscall_h(//build/toolchain/ohos:ohos_clang_arm64)", + "//third_party/musl:musl_copy_inc_bits(//build/toolchain/ohos:ohos_clang_arm64)", +] + +musl_libs_x86_64 = [ + "//third_party/musl:create_alltypes_h(//build/toolchain/ohos:ohos_clang_x86_64)", + "//third_party/musl:create_syscall_h(//build/toolchain/ohos:ohos_clang_x86_64)", + "//third_party/musl:musl_copy_inc_bits(//build/toolchain/ohos:ohos_clang_x86_64)", +] + +musl_lib_arm32 = [ + "//third_party/musl:soft_musl_crt_install_action(//build/toolchain/ohos:ohos_clang_arm)", + "//third_party/musl:soft_libc_musl_static(//build/toolchain/ohos:ohos_clang_arm)", + "//third_party/musl:soft_libm(//build/toolchain/ohos:ohos_clang_arm)", + "//third_party/musl:soft_libdl(//build/toolchain/ohos:ohos_clang_arm)", + "//third_party/musl:soft_libpthread(//build/toolchain/ohos:ohos_clang_arm)", + "//third_party/musl:soft_libcrypt(//build/toolchain/ohos:ohos_clang_arm)", + "//third_party/musl:soft_libutil(//build/toolchain/ohos:ohos_clang_arm)", + "//third_party/musl:soft_libxnet(//build/toolchain/ohos:ohos_clang_arm)", + "//third_party/musl:soft_libresolv(//build/toolchain/ohos:ohos_clang_arm)", + "//third_party/musl:soft_librt(//build/toolchain/ohos:ohos_clang_arm)", +] + +musl_lib_arm64 = [ + "//third_party/musl:soft_musl_crt_install_action(//build/toolchain/ohos:ohos_clang_arm64)", + "//third_party/musl:soft_libc_musl_static(//build/toolchain/ohos:ohos_clang_arm64)", + "//third_party/musl:soft_libm(//build/toolchain/ohos:ohos_clang_arm64)", + "//third_party/musl:soft_libdl(//build/toolchain/ohos:ohos_clang_arm64)", + "//third_party/musl:soft_libpthread(//build/toolchain/ohos:ohos_clang_arm64)", + "//third_party/musl:soft_libcrypt(//build/toolchain/ohos:ohos_clang_arm64)", + "//third_party/musl:soft_libutil(//build/toolchain/ohos:ohos_clang_arm64)", + "//third_party/musl:soft_libxnet(//build/toolchain/ohos:ohos_clang_arm64)", + "//third_party/musl:soft_libresolv(//build/toolchain/ohos:ohos_clang_arm64)", + "//third_party/musl:soft_librt(//build/toolchain/ohos:ohos_clang_arm64)", +] + +musl_lib_x86_64 = [ + "//third_party/musl:soft_musl_crt_install_action(//build/toolchain/ohos:ohos_clang_x86_64)", + "//third_party/musl:soft_libc_musl_static(//build/toolchain/ohos:ohos_clang_x86_64)", + "//third_party/musl:soft_libm(//build/toolchain/ohos:ohos_clang_x86_64)", + "//third_party/musl:soft_libdl(//build/toolchain/ohos:ohos_clang_x86_64)", + "//third_party/musl:soft_libpthread(//build/toolchain/ohos:ohos_clang_x86_64)", + "//third_party/musl:soft_libcrypt(//build/toolchain/ohos:ohos_clang_x86_64)", + "//third_party/musl:soft_libutil(//build/toolchain/ohos:ohos_clang_x86_64)", + "//third_party/musl:soft_libxnet(//build/toolchain/ohos:ohos_clang_x86_64)", + "//third_party/musl:soft_libresolv(//build/toolchain/ohos:ohos_clang_x86_64)", + "//third_party/musl:soft_librt(//build/toolchain/ohos:ohos_clang_x86_64)", +] + +## arm-linux-ohos asm directory +ohos_ndk_copy("musl_arm_uapi_arm32") { + dest_dir = "$ndk_os_irrelevant_out_dir/sysroot/usr/include/arm-linux-ohos" + + sources = + [ "//kernel/linux/patches/linux-5.10/prebuilts/usr/include/asm-arm/asm" ] + args = [ "--ignore-stale" ] +} + +## arm-linux-ohos bits directory +ohos_copy("musl_arm_bits_arm32") { + deps = musl_libs_arm32 + sources = [] + sources_temp = [ + "alltypes.h", + "syscall.h", + ] + sources_temp += musl_inc_bits_files + sources_orig = get_path_info(sources_temp, "file") + + # print("${sources_orig}") + + foreach(s, sources_orig) { + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/include/arm-linux-ohos/bits/${s}" ] + } + outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/include/arm-linux-ohos/bits/{{source_file_part}}" ] +} + +## aarch64-linux-ohos bits directory +ohos_copy("musl_bits_aarch64") { + deps = musl_libs_aarch64 + sources = [] + sources_temp = [ + "alltypes.h", + "syscall.h", + ] + sources_temp += musl_inc_bits_files + sources_orig = get_path_info(sources_temp, "file") + + # print("${sources_orig}") + + foreach(s, sources_orig) { + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/include/aarch64-linux-ohos/bits/${s}" ] + } + outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/include/aarch64-linux-ohos/bits/{{source_file_part}}" ] +} + +## x86_64-linux-ohos bits directory +ohos_copy("musl_bits_x86_64") { + deps = musl_libs_x86_64 + sources = [] + sources_temp = [ + "alltypes.h", + "syscall.h", + ] + sources_temp += musl_inc_bits_files + sources_orig = get_path_info(sources_temp, "file") + + # print("${sources_orig}") + + foreach(s, sources_orig) { + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/include/x86_64-linux-ohos/bits/${s}" ] + } + outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/include/x86_64-linux-ohos/bits/{{source_file_part}}" ] +} + +ohos_copy("musl_ndk_libs_arm32") { + deps = musl_lib_arm32 + crt_dir = "${root_build_dir}/obj/third_party/musl/usr/lib/arm-linux-ohos" + sources = [ + "${crt_dir}/Scrt1.o", + "${crt_dir}/crt1.o", + "${crt_dir}/crti.o", + "${crt_dir}/crtn.o", + "${crt_dir}/rcrt1.o", + ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/arm-linux-ohos/libm.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/arm-linux-ohos/libdl.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/arm-linux-ohos/libc.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/arm-linux-ohos/libcrypt.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/arm-linux-ohos/libpthread.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/arm-linux-ohos/libresolv.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/arm-linux-ohos/librt.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/arm-linux-ohos/libutil.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/arm-linux-ohos/libxnet.a" ] + + outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/lib/arm-linux-ohos/{{source_file_part}}" ] +} + +ohos_copy("musl_ndk_libs_aarch64") { + deps = musl_lib_arm64 + sources = [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/aarch64-linux-ohos/Scrt1.o" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/aarch64-linux-ohos/crt1.o" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/aarch64-linux-ohos/crti.o" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/aarch64-linux-ohos/crtn.o" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/aarch64-linux-ohos/rcrt1.o" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/aarch64-linux-ohos/libc.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/aarch64-linux-ohos/libdl.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/aarch64-linux-ohos/libm.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/aarch64-linux-ohos/libcrypt.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/aarch64-linux-ohos/libpthread.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/aarch64-linux-ohos/libresolv.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/aarch64-linux-ohos/librt.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/aarch64-linux-ohos/libutil.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/aarch64-linux-ohos/libxnet.a" ] + + outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/lib/aarch64-linux-ohos/{{source_file_part}}" ] +} + +ohos_copy("musl_ndk_libs_x86_64") { + deps = musl_lib_x86_64 + crt_dir = "${root_build_dir}/obj/third_party/musl/usr/lib/x86_64-linux-ohos" + sources = [ + "${crt_dir}/Scrt1.o", + "${crt_dir}/crt1.o", + "${crt_dir}/crti.o", + "${crt_dir}/crtn.o", + "${crt_dir}/rcrt1.o", + ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/x86_64-linux-ohos/libc.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/x86_64-linux-ohos/libdl.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/x86_64-linux-ohos/libm.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/x86_64-linux-ohos/libcrypt.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/x86_64-linux-ohos/libpthread.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/x86_64-linux-ohos/libresolv.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/x86_64-linux-ohos/librt.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/x86_64-linux-ohos/libutil.a" ] + sources += [ get_label_info(deps[0], "target_out_dir") + + "/usr/lib/x86_64-linux-ohos/libxnet.a" ] + + outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/lib/x86_64-linux-ohos/{{source_file_part}}" ] +} diff --git a/third_party/musl/ndk_script/adapter/BUILD.gn b/third_party/musl/ndk_script/adapter/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..28fedf77cb9ea0ec1736db7a35594c1be5065df4 --- /dev/null +++ b/third_party/musl/ndk_script/adapter/BUILD.gn @@ -0,0 +1,28 @@ +# Copyright (C) 2021 Huawei Device Co., Ltd. +# Copyright (C) 2019 The Android Open Source Project +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") + +ohos_ndk_library("libc_ndk") { + output_name = "c" + output_extension = "so" + ndk_description_file = "./libc.ndk.json" + cflags = [ + "-Wno-incompatible-library-redeclaration", + "-Wno-builtin-requires-header", + "-Wno-invalid-noreturn", + "-Wno-incomplete-setjmp-declaration", + ] +} diff --git a/third_party/musl/ndk_script/adapter/libc.ndk.json b/third_party/musl/ndk_script/adapter/libc.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..72943024255789021754e025c149a01c78c73396 --- /dev/null +++ b/third_party/musl/ndk_script/adapter/libc.ndk.json @@ -0,0 +1,1563 @@ +[ + { "name": "__assert_fail" }, + { "name": "__ctype_get_mb_cur_max" }, + { "name": "__cxa_atexit" }, + { "name": "__cxa_finalize" }, + { "name": "__duplocale" }, + { "name": "__errno_location" }, + { "name": "__fbufsize" }, + { "name": "__flbf" }, + { "name": "__flt_rounds" }, + { "name": "__fpclassify" }, + { "name": "__fpclassifyf" }, + { "name": "__fpclassifyl" }, + { "name": "__fpending" }, + { "name": "__fpurge" }, + { "name": "__freadable" }, + { "name": "__freading" }, + { "name": "__fseterr" }, + { "name": "__fsetlocking" }, + { "name": "__fwritable" }, + { "name": "__fwriting" }, + { "name": "__h_errno_location" }, + { "name": "__libc_current_sigrtmax" }, + { "name": "__libc_current_sigrtmin" }, + { "name": "__libc_start_main" }, + { "name": "__overflow" }, + { "name": "__sched_cpucount" }, + { "name": "__signbit" }, + { "name": "__signbitf" }, + { "name": "__signbitl" }, + { "name": "__stack_chk_fail" }, + { "name": "__tls_get_addr" }, + { "name": "__uflow" }, + { "name": "__clock_gettime64" }, + { "name": "__pthread_cond_timedwait_time64" }, + { "name": "__nanosleep_time64" }, + { "name": "__fstat_time64" }, + { "name": "__lstat_time64" }, + { "name": "__stat_time64" }, + { "name": "__utimensat_time64" }, + { "name": "__adjtimex_time64" }, + { "name": "__clock_adjtime64" }, + { "name": "__clock_getres_time64" }, + { "name": "__clock_nanosleep_time64" }, + { "name": "__clock_settime64" }, + { "name": "__cnd_timedwait_time64" }, + { "name": "__ctime64" }, + { "name": "__ctime64_r" }, + { "name": "__difftime64" }, + { "name": "__dlsym_time64" }, + { "name": "__fstatat_time64" }, + { "name": "__futimens_time64" }, + { "name": "__futimes_time64" }, + { "name": "__futimesat_time64" }, + { "name": "__getitimer_time64" }, + { "name": "__getrusage_time64" }, + { "name": "__gettimeofday_time64" }, + { "name": "__gmtime64" }, + { "name": "__gmtime64_r" }, + { "name": "__localtime64" }, + { "name": "__localtime64_r" }, + { "name": "__lutimes_time64" }, + { "name": "__mktime64" }, + { "name": "__mtx_timedlock_time64" }, + { "name": "__ppoll_time64" }, + { "name": "__pselect_time64" }, + { "name": "__pthread_mutex_timedlock_time64" }, + { "name": "__pthread_rwlock_timedrdlock_time64" }, + { "name": "__pthread_rwlock_timedwrlock_time64" }, + { "name": "__recvmmsg_time64" }, + { "name": "__sched_rr_get_interval_time64" }, + { "name": "__select_time64" }, + { "name": "__sem_timedwait_time64" }, + { "name": "__semtimedop_time64" }, + { "name": "__setitimer_time64" }, + { "name": "__settimeofday_time64" }, + { "name": "__sigtimedwait_time64" }, + { "name": "__thrd_sleep_time64" }, + { "name": "__time64" }, + { "name": "__timegm_time64" }, + { "name": "__timer_gettime64" }, + { "name": "__timer_settime64" }, + { "name": "__timerfd_gettime64" }, + { "name": "__timerfd_settime64" }, + { "name": "__timespec_get_time64" }, + { "name": "__utime64" }, + { "name": "__utimes_time64" }, + { "name": "__wait4_time64" }, + { "name": "_dlstart" }, + { "name": "_exit" }, + { "name": "_Exit" }, + { "name": "_flushlbf" }, + { "name": "_longjmp" }, + { "name": "_pthread_cleanup_pop" }, + { "name": "_pthread_cleanup_push" }, + { "name": "_setjmp" }, + { "name": "abort" }, + { "name": "abs" }, + { "name": "accept" }, + { "name": "accept4" }, + { "name": "access" }, + { "name": "acct" }, + { "name": "acos" }, + { "name": "acosf" }, + { "name": "acosh" }, + { "name": "acoshf" }, + { "name": "acoshl" }, + { "name": "acosl" }, + { "name": "adjtimex" }, + { "name": "alarm" }, + { "name": "aligned_alloc" }, + { "name": "alphasort" }, + { "name": "alphasort64" }, + { "name": "asctime" }, + { "name": "asctime_r" }, + { "name": "asin" }, + { "name": "asinf" }, + { "name": "asinh" }, + { "name": "asinhf" }, + { "name": "asinhl" }, + { "name": "asinl" }, + { "name": "asprintf" }, + { "name": "at_quick_exit" }, + { "name": "atan" }, + { "name": "atan2" }, + { "name": "atan2f" }, + { "name": "atan2l" }, + { "name": "atanf" }, + { "name": "atanh" }, + { "name": "atanhf" }, + { "name": "atanhl" }, + { "name": "atanl" }, + { "name": "atof" }, + { "name": "atoi" }, + { "name": "atol" }, + { "name": "atoll" }, + { "name": "basename" }, + { "name": "bcmp" }, + { "name": "bind" }, + { "name": "brk" }, + { "name": "bsearch" }, + { "name": "btowc" }, + { "name": "c16rtomb" }, + { "name": "c32rtomb" }, + { "name": "cabs" }, + { "name": "cabsf" }, + { "name": "cabsl" }, + { "name": "cacos" }, + { "name": "cacosf" }, + { "name": "cacosh" }, + { "name": "cacoshf" }, + { "name": "cacoshl" }, + { "name": "cacosl" }, + { "name": "call_once" }, + { "name": "calloc" }, + { "name": "capget" }, + { "name": "capset" }, + { "name": "carg" }, + { "name": "cargf" }, + { "name": "cargl" }, + { "name": "casin" }, + { "name": "casinf" }, + { "name": "casinh" }, + { "name": "casinhf" }, + { "name": "casinhl" }, + { "name": "casinl" }, + { "name": "catan" }, + { "name": "catanf" }, + { "name": "catanh" }, + { "name": "catanhf" }, + { "name": "catanhl" }, + { "name": "catanl" }, + { "name": "catclose" }, + { "name": "catgets" }, + { "name": "catopen" }, + { "name": "cbrt" }, + { "name": "cbrtf" }, + { "name": "cbrtl" }, + { "name": "ccos" }, + { "name": "ccosf" }, + { "name": "ccosh" }, + { "name": "ccoshf" }, + { "name": "ccoshl" }, + { "name": "ccosl" }, + { "name": "ceil" }, + { "name": "ceilf" }, + { "name": "ceill" }, + { "name": "cexp" }, + { "name": "cexpf" }, + { "name": "cexpl" }, + { "name": "cfgetispeed" }, + { "name": "cfgetospeed" }, + { "name": "cfmakeraw" }, + { "name": "cfsetispeed" }, + { "name": "cfsetospeed" }, + { "name": "cfsetspeed" }, + { "name": "chdir" }, + { "name": "chmod" }, + { "name": "chown" }, + { "name": "chroot" }, + { "name": "cimag" }, + { "name": "cimagf" }, + { "name": "cimagl" }, + { "name": "clearenv" }, + { "name": "clearerr" }, + { "name": "clearerr_unlocked" }, + { "name": "clock" }, + { "name": "clock_adjtime" }, + { "name": "clock_getcpuclockid" }, + { "name": "clock_getres" }, + { "name": "clock_gettime" }, + { "name": "clock_nanosleep" }, + { "name": "clock_settime" }, + { "name": "clog" }, + { "name": "clogf" }, + { "name": "clogl" }, + { "name": "clone" }, + { "name": "close" }, + { "name": "closedir" }, + { "name": "closelog" }, + { "name": "cnd_broadcast" }, + { "name": "cnd_destroy" }, + { "name": "cnd_init" }, + { "name": "cnd_signal" }, + { "name": "cnd_timedwait" }, + { "name": "cnd_wait" }, + { "name": "conj" }, + { "name": "conjf" }, + { "name": "conjl" }, + { "name": "connect" }, + { "name": "copy_file_range" }, + { "name": "copysign" }, + { "name": "copysignf" }, + { "name": "copysignl" }, + { "name": "cos" }, + { "name": "cosf" }, + { "name": "cosh" }, + { "name": "coshf" }, + { "name": "coshl" }, + { "name": "cosl" }, + { "name": "cpow" }, + { "name": "cpowf" }, + { "name": "cpowl" }, + { "name": "cproj" }, + { "name": "cprojf" }, + { "name": "cprojl" }, + { "name": "creal" }, + { "name": "crealf" }, + { "name": "creall" }, + { "name": "creat" }, + { "name": "creat64" }, + { "name": "csin" }, + { "name": "csinf" }, + { "name": "csinh" }, + { "name": "csinhf" }, + { "name": "csinhl" }, + { "name": "csinl" }, + { "name": "csqrt" }, + { "name": "csqrtf" }, + { "name": "csqrtl" }, + { "name": "ctan" }, + { "name": "ctanf" }, + { "name": "ctanh" }, + { "name": "ctanhf" }, + { "name": "ctanhl" }, + { "name": "ctanl" }, + { "name": "ctermid" }, + { "name": "ctime" }, + { "name": "ctime_r" }, + { "name": "daemon" }, + { "name": "delete_module" }, + { "name": "difftime" }, + { "name": "dirfd" }, + { "name": "dirname" }, + { "name": "div" }, + { "name": "dl_iterate_phdr" }, + { "name": "dladdr" }, + { "name": "dlclose" }, + { "name": "dlerror" }, + { "name": "dlopen" }, + { "name": "dlsym" }, + { "name": "dn_comp" }, + { "name": "dn_expand" }, + { "name": "dn_skipname" }, + { "name": "dprintf" }, + { "name": "drand48" }, + { "name": "drem" }, + { "name": "dremf" }, + { "name": "dup" }, + { "name": "dup2" }, + { "name": "dup3" }, + { "name": "duplocale" }, + { "name": "endgrent" }, + { "name": "endhostent" }, + { "name": "endmntent" }, + { "name": "endnetent" }, + { "name": "endprotoent" }, + { "name": "endpwent" }, + { "name": "endservent" }, + { "name": "endutent" }, + { "name": "epoll_create" }, + { "name": "epoll_create1" }, + { "name": "epoll_ctl" }, + { "name": "epoll_pwait" }, + { "name": "epoll_wait" }, + { "name": "erand48" }, + { "name": "erf" }, + { "name": "erfc" }, + { "name": "erfcf" }, + { "name": "erfcl" }, + { "name": "erff" }, + { "name": "erfl" }, + { "name": "err" }, + { "name": "errx" }, + { "name": "ether_aton" }, + { "name": "ether_aton_r" }, + { "name": "ether_ntoa" }, + { "name": "ether_ntoa_r" }, + { "name": "eventfd" }, + { "name": "eventfd_read" }, + { "name": "eventfd_write" }, + { "name": "execl" }, + { "name": "execle" }, + { "name": "execlp" }, + { "name": "execv" }, + { "name": "execve" }, + { "name": "execvp" }, + { "name": "execvpe" }, + { "name": "exit" }, + { "name": "exp" }, + { "name": "exp2" }, + { "name": "exp2f" }, + { "name": "exp2l" }, + { "name": "expf" }, + { "name": "expl" }, + { "name": "expm1" }, + { "name": "expm1f" }, + { "name": "expm1l" }, + { "name": "fabs" }, + { "name": "fabsf" }, + { "name": "fabsl" }, + { "name": "faccessat" }, + { "name": "fallocate" }, + { "name": "fallocate64" }, + { "name": "fanotify_init" }, + { "name": "fanotify_mark" }, + { "name": "fchdir" }, + { "name": "fchmod" }, + { "name": "fchmodat" }, + { "name": "fchown" }, + { "name": "fchownat" }, + { "name": "fclose" }, + { "name": "fcntl" }, + { "name": "fdatasync" }, + { "name": "fdim" }, + { "name": "fdimf" }, + { "name": "fdiml" }, + { "name": "fdopen" }, + { "name": "fdopendir" }, + { "name": "feclearexcept" }, + { "name": "fegetenv" }, + { "name": "fegetexceptflag" }, + { "name": "fegetround" }, + { "name": "feholdexcept" }, + { "name": "feof" }, + { "name": "feof_unlocked" }, + { "name": "feraiseexcept" }, + { "name": "ferror" }, + { "name": "ferror_unlocked" }, + { "name": "fesetenv" }, + { "name": "fesetexceptflag" }, + { "name": "fesetround" }, + { "name": "fetestexcept" }, + { "name": "feupdateenv" }, + { "name": "fexecve" }, + { "name": "fflush" }, + { "name": "fflush_unlocked" }, + { "name": "ffs" }, + { "name": "ffsl" }, + { "name": "ffsll" }, + { "name": "fgetc" }, + { "name": "fgetc_unlocked" }, + { "name": "fgetln" }, + { "name": "fgetpos" }, + { "name": "fgetpos64" }, + { "name": "fgets" }, + { "name": "fgets_unlocked" }, + { "name": "fgetwc" }, + { "name": "fgetws" }, + { "name": "fgetxattr" }, + { "name": "fileno" }, + { "name": "fileno_unlocked" }, + { "name": "finite" }, + { "name": "finitef" }, + { "name": "flistxattr" }, + { "name": "flock" }, + { "name": "flockfile" }, + { "name": "floor" }, + { "name": "floorf" }, + { "name": "floorl" }, + { "name": "fma" }, + { "name": "fmaf" }, + { "name": "fmal" }, + { "name": "fmax" }, + { "name": "fmaxf" }, + { "name": "fmaxl" }, + { "name": "fmemopen" }, + { "name": "fmin" }, + { "name": "fminf" }, + { "name": "fminl" }, + { "name": "fmod" }, + { "name": "fmodf" }, + { "name": "fmodl" }, + { "name": "fnmatch" }, + { "name": "fopen" }, + { "name": "fopen64" }, + { "name": "fork" }, + { "name": "forkpty" }, + { "name": "fpathconf" }, + { "name": "fprintf" }, + { "name": "fpurge" }, + { "name": "fputc" }, + { "name": "fputc_unlocked" }, + { "name": "fputs" }, + { "name": "fputs_unlocked" }, + { "name": "fputwc" }, + { "name": "fputws" }, + { "name": "fread" }, + { "name": "fread_unlocked" }, + { "name": "free" }, + { "name": "freeaddrinfo" }, + { "name": "freeifaddrs" }, + { "name": "freelocale" }, + { "name": "fremovexattr" }, + { "name": "freopen" }, + { "name": "freopen64" }, + { "name": "frexp" }, + { "name": "frexpf" }, + { "name": "frexpl" }, + { "name": "fscanf" }, + { "name": "fseek" }, + { "name": "fseeko" }, + { "name": "fseeko64" }, + { "name": "fsetpos" }, + { "name": "fsetpos64" }, + { "name": "fsetxattr" }, + { "name": "fstat" }, + { "name": "fstat64" }, + { "name": "fstatat" }, + { "name": "fstatat64" }, + { "name": "fstatfs" }, + { "name": "fstatfs64" }, + { "name": "fstatvfs" }, + { "name": "fstatvfs64" }, + { "name": "fsync" }, + { "name": "ftell" }, + { "name": "ftello" }, + { "name": "ftello64" }, + { "name": "ftok" }, + { "name": "ftruncate" }, + { "name": "ftruncate64" }, + { "name": "ftrylockfile" }, + { "name": "ftw" }, + { "name": "ftw64" }, + { "name": "funlockfile" }, + { "name": "futimens" }, + { "name": "futimes" }, + { "name": "futimesat" }, + { "name": "fwide" }, + { "name": "fwprintf" }, + { "name": "fwrite" }, + { "name": "fwrite_unlocked" }, + { "name": "fwscanf" }, + { "name": "gai_strerror" }, + { "name": "get_avphys_pages" }, + { "name": "get_nprocs" }, + { "name": "get_nprocs_conf" }, + { "name": "get_phys_pages" }, + { "name": "getaddrinfo" }, + { "name": "getauxval" }, + { "name": "getc" }, + { "name": "getc_unlocked" }, + { "name": "getchar" }, + { "name": "getchar_unlocked" }, + { "name": "getcwd" }, + { "name": "getdelim" }, + { "name": "getdents" }, + { "name": "getdents64" }, + { "name": "getdomainname" }, + { "name": "getegid" }, + { "name": "getentropy" }, + { "name": "getenv" }, + { "name": "geteuid" }, + { "name": "getgid" }, + { "name": "getgrent" }, + { "name": "getgrgid" }, + { "name": "getgrgid_r" }, + { "name": "getgrnam" }, + { "name": "getgrnam_r" }, + { "name": "getgrouplist" }, + { "name": "getgroups" }, + { "name": "gethostbyaddr" }, + { "name": "gethostbyaddr_r" }, + { "name": "gethostbyname" }, + { "name": "gethostbyname_r" }, + { "name": "gethostbyname2" }, + { "name": "gethostbyname2_r" }, + { "name": "gethostent" }, + { "name": "gethostname" }, + { "name": "getifaddrs" }, + { "name": "getitimer" }, + { "name": "getline" }, + { "name": "getloadavg" }, + { "name": "getlogin" }, + { "name": "getlogin_r" }, + { "name": "getmntent" }, + { "name": "getmntent_r" }, + { "name": "getnameinfo" }, + { "name": "getnetbyaddr" }, + { "name": "getnetbyname" }, + { "name": "getnetent" }, + { "name": "getopt" }, + { "name": "getopt_long" }, + { "name": "getopt_long_only" }, + { "name": "getpagesize" }, + { "name": "getpeername" }, + { "name": "getpgid" }, + { "name": "getpgrp" }, + { "name": "getpid" }, + { "name": "getppid" }, + { "name": "getpriority" }, + { "name": "getprotobyname" }, + { "name": "getprotobynumber" }, + { "name": "getprotoent" }, + { "name": "getpwent" }, + { "name": "getpwnam" }, + { "name": "getpwnam_r" }, + { "name": "getpwuid" }, + { "name": "getpwuid_r" }, + { "name": "getrandom" }, + { "name": "getresgid" }, + { "name": "getresuid" }, + { "name": "getrlimit" }, + { "name": "getrlimit64" }, + { "name": "getrusage" }, + { "name": "gets" }, + { "name": "getservbyname" }, + { "name": "getservbyport" }, + { "name": "getservent" }, + { "name": "getsid" }, + { "name": "getsockname" }, + { "name": "getsockopt" }, + { "name": "getsubopt" }, + { "name": "gettid" }, + { "name": "gettimeofday" }, + { "name": "getuid" }, + { "name": "getutent" }, + { "name": "getwc" }, + { "name": "getwchar" }, + { "name": "getxattr" }, + { "name": "glob" }, + { "name": "globfree" }, + { "name": "gmtime" }, + { "name": "gmtime_r" }, + { "name": "grantpt" }, + { "name": "hasmntopt" }, + { "name": "hcreate" }, + { "name": "hcreate_r" }, + { "name": "hdestroy" }, + { "name": "hdestroy_r" }, + { "name": "herror" }, + { "name": "hsearch" }, + { "name": "hsearch_r" }, + { "name": "hstrerror" }, + { "name": "htonl" }, + { "name": "htons" }, + { "name": "hypot" }, + { "name": "hypotf" }, + { "name": "hypotl" }, + { "name": "iconv" }, + { "name": "iconv_close" }, + { "name": "iconv_open" }, + { "name": "if_freenameindex" }, + { "name": "if_indextoname" }, + { "name": "if_nameindex" }, + { "name": "if_nametoindex" }, + { "name": "ilogb" }, + { "name": "ilogbf" }, + { "name": "ilogbl" }, + { "name": "imaxabs" }, + { "name": "imaxdiv" }, + { "name": "inet_addr" }, + { "name": "inet_aton" }, + { "name": "inet_lnaof" }, + { "name": "inet_makeaddr" }, + { "name": "inet_netof" }, + { "name": "inet_network" }, + { "name": "inet_ntoa" }, + { "name": "inet_ntop" }, + { "name": "inet_pton" }, + { "name": "init_module" }, + { "name": "initgroups" }, + { "name": "initstate" }, + { "name": "inotify_add_watch" }, + { "name": "inotify_init" }, + { "name": "inotify_init1" }, + { "name": "inotify_rm_watch" }, + { "name": "insque" }, + { "name": "ioctl" }, + { "name": "isalnum" }, + { "name": "isalnum_l" }, + { "name": "isalpha" }, + { "name": "isalpha_l" }, + { "name": "isascii" }, + { "name": "isatty" }, + { "name": "isblank" }, + { "name": "isblank_l" }, + { "name": "iscntrl" }, + { "name": "iscntrl_l" }, + { "name": "isdigit" }, + { "name": "isdigit_l" }, + { "name": "isgraph" }, + { "name": "isgraph_l" }, + { "name": "islower" }, + { "name": "islower_l" }, + { "name": "isprint" }, + { "name": "isprint_l" }, + { "name": "ispunct" }, + { "name": "ispunct_l" }, + { "name": "isspace" }, + { "name": "isspace_l" }, + { "name": "isupper" }, + { "name": "isupper_l" }, + { "name": "iswalnum" }, + { "name": "iswalnum_l" }, + { "name": "iswalpha" }, + { "name": "iswalpha_l" }, + { "name": "iswblank" }, + { "name": "iswblank_l" }, + { "name": "iswcntrl" }, + { "name": "iswcntrl_l" }, + { "name": "iswctype" }, + { "name": "iswctype_l" }, + { "name": "iswdigit" }, + { "name": "iswdigit_l" }, + { "name": "iswgraph" }, + { "name": "iswgraph_l" }, + { "name": "iswlower" }, + { "name": "iswlower_l" }, + { "name": "iswprint" }, + { "name": "iswprint_l" }, + { "name": "iswpunct" }, + { "name": "iswpunct_l" }, + { "name": "iswspace" }, + { "name": "iswspace_l" }, + { "name": "iswupper" }, + { "name": "iswupper_l" }, + { "name": "iswxdigit" }, + { "name": "iswxdigit_l" }, + { "name": "isxdigit" }, + { "name": "isxdigit_l" }, + { "name": "j0" }, + { "name": "j0f" }, + { "name": "j1" }, + { "name": "j1f" }, + { "name": "jn" }, + { "name": "jnf" }, + { "name": "jrand48" }, + { "name": "kill" }, + { "name": "killpg" }, + { "name": "klogctl" }, + { "name": "labs" }, + { "name": "lchown" }, + { "name": "lcong48" }, + { "name": "ldexp" }, + { "name": "ldexpf" }, + { "name": "ldexpl" }, + { "name": "ldiv" }, + { "name": "lfind" }, + { "name": "lgamma" }, + { "name": "lgamma_r" }, + { "name": "lgammaf" }, + { "name": "lgammaf_r" }, + { "name": "lgammal" }, + { "name": "lgammal_r" }, + { "name": "lgetxattr" }, + { "name": "link" }, + { "name": "linkat" }, + { "name": "listen" }, + { "name": "listxattr" }, + { "name": "llabs" }, + { "name": "lldiv" }, + { "name": "llistxattr" }, + { "name": "llrint" }, + { "name": "llrintf" }, + { "name": "llrintl" }, + { "name": "llround" }, + { "name": "llroundf" }, + { "name": "llroundl" }, + { "name": "localeconv" }, + { "name": "localtime" }, + { "name": "localtime_r" }, + { "name": "lockf" }, + { "name": "lockf64" }, + { "name": "log" }, + { "name": "log10" }, + { "name": "log10f" }, + { "name": "log10l" }, + { "name": "log1p" }, + { "name": "log1pf" }, + { "name": "log1pl" }, + { "name": "log2" }, + { "name": "log2f" }, + { "name": "log2l" }, + { "name": "logb" }, + { "name": "logbf" }, + { "name": "logbl" }, + { "name": "logf" }, + { "name": "login_tty" }, + { "name": "logl" }, + { "name": "longjmp" }, + { "name": "lrand48" }, + { "name": "lremovexattr" }, + { "name": "lrint" }, + { "name": "lrintf" }, + { "name": "lrintl" }, + { "name": "lround" }, + { "name": "lroundf" }, + { "name": "lroundl" }, + { "name": "lsearch" }, + { "name": "lseek" }, + { "name": "lseek64" }, + { "name": "lsetxattr" }, + { "name": "lstat" }, + { "name": "lstat64" }, + { "name": "lutimes" }, + { "name": "madvise" }, + { "name": "malloc" }, + { "name": "mallopt" }, + { "name": "malloc_usable_size" }, + { "name": "mblen" }, + { "name": "mbrlen" }, + { "name": "mbrtoc16" }, + { "name": "mbrtoc32" }, + { "name": "mbrtowc" }, + { "name": "mbsinit" }, + { "name": "mbsnrtowcs" }, + { "name": "mbsrtowcs" }, + { "name": "mbstowcs" }, + { "name": "mbtowc" }, + { "name": "memalign" }, + { "name": "membarrier" }, + { "name": "memccpy" }, + { "name": "memchr" }, + { "name": "memcmp" }, + { "name": "memcpy" }, + { "name": "memfd_create" }, + { "name": "memmem" }, + { "name": "memmove" }, + { "name": "mempcpy" }, + { "name": "memrchr" }, + { "name": "memset" }, + { "name": "mincore" }, + { "name": "mkdir" }, + { "name": "mkdirat" }, + { "name": "mkdtemp" }, + { "name": "mkfifo" }, + { "name": "mkfifoat" }, + { "name": "mknod" }, + { "name": "mknodat" }, + { "name": "mkostemp" }, + { "name": "mkostemp64" }, + { "name": "mkostemps" }, + { "name": "mkostemps64" }, + { "name": "mkstemp" }, + { "name": "mkstemp64" }, + { "name": "mkstemps" }, + { "name": "mkstemps64" }, + { "name": "mktemp" }, + { "name": "mktime" }, + { "name": "mlock" }, + { "name": "mlock2" }, + { "name": "mlockall" }, + { "name": "mmap" }, + { "name": "mmap64" }, + { "name": "modf" }, + { "name": "modff" }, + { "name": "modfl" }, + { "name": "mount" }, + { "name": "mprotect" }, + { "name": "mrand48" }, + { "name": "mremap" }, + { "name": "msgctl" }, + { "name": "msgget" }, + { "name": "msgrcv" }, + { "name": "msgsnd" }, + { "name": "msync" }, + { "name": "mtx_destroy" }, + { "name": "mtx_init" }, + { "name": "mtx_lock" }, + { "name": "mtx_timedlock" }, + { "name": "mtx_trylock" }, + { "name": "mtx_unlock" }, + { "name": "munlock" }, + { "name": "munlockall" }, + { "name": "munmap" }, + { "name": "name_to_handle_at" }, + { "name": "nan" }, + { "name": "nanf" }, + { "name": "nanl" }, + { "name": "nanosleep" }, + { "name": "nearbyint" }, + { "name": "nearbyintf" }, + { "name": "nearbyintl" }, + { "name": "newlocale" }, + { "name": "nextafter" }, + { "name": "nextafterf" }, + { "name": "nextafterl" }, + { "name": "nexttoward" }, + { "name": "nexttowardf" }, + { "name": "nexttowardl" }, + { "name": "nftw" }, + { "name": "nftw64" }, + { "name": "nice" }, + { "name": "nl_langinfo" }, + { "name": "nl_langinfo_l" }, + { "name": "nrand48" }, + { "name": "ns_get16" }, + { "name": "ns_get32" }, + { "name": "ns_initparse" }, + { "name": "ns_name_uncompress" }, + { "name": "ns_parserr" }, + { "name": "ns_put16" }, + { "name": "ns_put32" }, + { "name": "ns_skiprr" }, + { "name": "ntohl" }, + { "name": "ntohs" }, + { "name": "open" }, + { "name": "open_by_handle_at" }, + { "name": "open_memstream" }, + { "name": "open_wmemstream" }, + { "name": "open64" }, + { "name": "openat" }, + { "name": "openat64" }, + { "name": "opendir" }, + { "name": "openlog" }, + { "name": "openpty" }, + { "name": "pathconf" }, + { "name": "pause" }, + { "name": "pclose" }, + { "name": "perror" }, + { "name": "personality" }, + { "name": "pipe" }, + { "name": "pipe2" }, + { "name": "pivot_root" }, + { "name": "poll" }, + { "name": "popen" }, + { "name": "posix_fadvise" }, + { "name": "posix_fadvise64" }, + { "name": "posix_fallocate" }, + { "name": "posix_fallocate64" }, + { "name": "posix_madvise" }, + { "name": "posix_memalign" }, + { "name": "posix_openpt" }, + { "name": "posix_spawn" }, + { "name": "posix_spawn_file_actions_addclose" }, + { "name": "posix_spawn_file_actions_adddup2" }, + { "name": "posix_spawn_file_actions_addopen" }, + { "name": "posix_spawn_file_actions_destroy" }, + { "name": "posix_spawn_file_actions_init" }, + { "name": "posix_spawnattr_destroy" }, + { "name": "posix_spawnattr_getflags" }, + { "name": "posix_spawnattr_getpgroup" }, + { "name": "posix_spawnattr_getschedparam" }, + { "name": "posix_spawnattr_getschedpolicy" }, + { "name": "posix_spawnattr_getsigdefault" }, + { "name": "posix_spawnattr_getsigmask" }, + { "name": "posix_spawnattr_init" }, + { "name": "posix_spawnattr_setflags" }, + { "name": "posix_spawnattr_setpgroup" }, + { "name": "posix_spawnattr_setschedparam" }, + { "name": "posix_spawnattr_setschedpolicy" }, + { "name": "posix_spawnattr_setsigdefault" }, + { "name": "posix_spawnattr_setsigmask" }, + { "name": "posix_spawnp" }, + { "name": "pow" }, + { "name": "powf" }, + { "name": "powl" }, + { "name": "ppoll" }, + { "name": "prctl" }, + { "name": "pread" }, + { "name": "pread64" }, + { "name": "preadv" }, + { "name": "preadv64" }, + { "name": "printf" }, + { "name": "prlimit" }, + { "name": "prlimit64" }, + { "name": "process_vm_readv" }, + { "name": "process_vm_writev" }, + { "name": "pselect" }, + { "name": "psiginfo" }, + { "name": "psignal" }, + { "name": "pthread_atfork" }, + { "name": "pthread_attr_destroy" }, + { "name": "pthread_attr_getdetachstate" }, + { "name": "pthread_attr_getguardsize" }, + { "name": "pthread_attr_getinheritsched" }, + { "name": "pthread_attr_getschedparam" }, + { "name": "pthread_attr_getschedpolicy" }, + { "name": "pthread_attr_getscope" }, + { "name": "pthread_attr_getstack" }, + { "name": "pthread_attr_getstacksize" }, + { "name": "pthread_attr_init" }, + { "name": "pthread_attr_setdetachstate" }, + { "name": "pthread_attr_setguardsize" }, + { "name": "pthread_attr_setinheritsched" }, + { "name": "pthread_attr_setschedparam" }, + { "name": "pthread_attr_setschedpolicy" }, + { "name": "pthread_attr_setscope" }, + { "name": "pthread_attr_setstack" }, + { "name": "pthread_attr_setstacksize" }, + { "name": "pthread_barrier_destroy" }, + { "name": "pthread_barrier_init" }, + { "name": "pthread_barrier_wait" }, + { "name": "pthread_barrierattr_destroy" }, + { "name": "pthread_barrierattr_init" }, + { "name": "pthread_barrierattr_setpshared" }, + { "name": "pthread_barrierattr_getpshared" }, + { "name": "pthread_cond_broadcast" }, + { "name": "pthread_cond_destroy" }, + { "name": "pthread_cond_init" }, + { "name": "pthread_cond_signal" }, + { "name": "pthread_cond_timedwait" }, + { "name": "pthread_cond_wait" }, + { "name": "pthread_condattr_destroy" }, + { "name": "pthread_condattr_getclock" }, + { "name": "pthread_condattr_getpshared" }, + { "name": "pthread_condattr_init" }, + { "name": "pthread_condattr_setclock" }, + { "name": "pthread_condattr_setpshared" }, + { "name": "pthread_create" }, + { "name": "pthread_detach" }, + { "name": "pthread_equal" }, + { "name": "pthread_exit" }, + { "name": "pthread_getattr_np" }, + { "name": "pthread_getcpuclockid" }, + { "name": "pthread_getschedparam" }, + { "name": "pthread_getspecific" }, + { "name": "pthread_gettid_np" }, + { "name": "pthread_join" }, + { "name": "pthread_key_create" }, + { "name": "pthread_key_delete" }, + { "name": "pthread_kill" }, + { "name": "pthread_mutex_destroy" }, + { "name": "pthread_mutex_init" }, + { "name": "pthread_mutex_lock" }, + { "name": "pthread_mutex_timedlock" }, + { "name": "pthread_mutex_trylock" }, + { "name": "pthread_mutex_unlock" }, + { "name": "pthread_mutexattr_destroy" }, + { "name": "pthread_mutexattr_getprotocol" }, + { "name": "pthread_mutexattr_getpshared" }, + { "name": "pthread_mutexattr_gettype" }, + { "name": "pthread_mutexattr_init" }, + { "name": "pthread_mutexattr_setprotocol" }, + { "name": "pthread_mutexattr_setpshared" }, + { "name": "pthread_mutexattr_settype" }, + { "name": "pthread_once" }, + { "name": "pthread_rwlock_destroy" }, + { "name": "pthread_rwlock_init" }, + { "name": "pthread_rwlock_rdlock" }, + { "name": "pthread_rwlock_timedrdlock" }, + { "name": "pthread_rwlock_timedwrlock" }, + { "name": "pthread_rwlock_tryrdlock" }, + { "name": "pthread_rwlock_trywrlock" }, + { "name": "pthread_rwlock_unlock" }, + { "name": "pthread_rwlock_wrlock" }, + { "name": "pthread_rwlockattr_destroy" }, + { "name": "pthread_rwlockattr_getpshared" }, + { "name": "pthread_rwlockattr_init" }, + { "name": "pthread_rwlockattr_setpshared" }, + { "name": "pthread_self" }, + { "name": "pthread_setname_np" }, + { "name": "pthread_setschedparam" }, + { "name": "pthread_setschedprio" }, + { "name": "pthread_setspecific" }, + { "name": "pthread_sigmask" }, + { "name": "pthread_spin_destroy" }, + { "name": "pthread_spin_init" }, + { "name": "pthread_spin_lock" }, + { "name": "pthread_spin_trylock" }, + { "name": "pthread_spin_unlock" }, + { "name": "ptrace" }, + { "name": "ptsname" }, + { "name": "ptsname_r" }, + { "name": "putc" }, + { "name": "putc_unlocked" }, + { "name": "putchar" }, + { "name": "putchar_unlocked" }, + { "name": "putenv" }, + { "name": "puts" }, + { "name": "pututline" }, + { "name": "putwc" }, + { "name": "putwchar" }, + { "name": "pwrite" }, + { "name": "pwrite64" }, + { "name": "pwritev" }, + { "name": "pwritev64" }, + { "name": "qsort" }, + { "name": "quick_exit" }, + { "name": "quotactl" }, + { "name": "raise" }, + { "name": "rand" }, + { "name": "rand_r" }, + { "name": "random" }, + { "name": "read" }, + { "name": "readahead" }, + { "name": "readdir" }, + { "name": "readdir_r" }, + { "name": "readdir64" }, + { "name": "readdir64_r" }, + { "name": "readlink" }, + { "name": "readlinkat" }, + { "name": "readv" }, + { "name": "realloc" }, + { "name": "realpath" }, + { "name": "reboot" }, + { "name": "recv" }, + { "name": "recvfrom" }, + { "name": "recvmmsg" }, + { "name": "recvmsg" }, + { "name": "regcomp" }, + { "name": "regerror" }, + { "name": "regexec" }, + { "name": "regfree" }, + { "name": "remainder" }, + { "name": "remainderf" }, + { "name": "remainderl" }, + { "name": "remap_file_pages" }, + { "name": "remove" }, + { "name": "removexattr" }, + { "name": "remque" }, + { "name": "remquo" }, + { "name": "remquof" }, + { "name": "remquol" }, + { "name": "rename" }, + { "name": "renameat" }, + { "name": "res_init" }, + { "name": "res_mkquery" }, + { "name": "res_query" }, + { "name": "res_querydomain" }, + { "name": "res_search" }, + { "name": "res_send" }, + { "name": "rewind" }, + { "name": "rewinddir" }, + { "name": "rint" }, + { "name": "rintf" }, + { "name": "rintl" }, + { "name": "rmdir" }, + { "name": "round" }, + { "name": "roundf" }, + { "name": "roundl" }, + { "name": "sbrk" }, + { "name": "scalb" }, + { "name": "scalbf" }, + { "name": "scalbln" }, + { "name": "scalblnf" }, + { "name": "scalblnl" }, + { "name": "scalbn" }, + { "name": "scalbnf" }, + { "name": "scalbnl" }, + { "name": "scandir" }, + { "name": "scandir64" }, + { "name": "scanf" }, + { "name": "sched_get_priority_max" }, + { "name": "sched_get_priority_min" }, + { "name": "sched_getaffinity" }, + { "name": "sched_getcpu" }, + { "name": "sched_getparam" }, + { "name": "sched_getscheduler" }, + { "name": "sched_rr_get_interval" }, + { "name": "sched_setaffinity" }, + { "name": "sched_setparam" }, + { "name": "sched_setscheduler" }, + { "name": "sched_yield" }, + { "name": "seed48" }, + { "name": "seekdir" }, + { "name": "select" }, + { "name": "sem_close" }, + { "name": "sem_destroy" }, + { "name": "sem_getvalue" }, + { "name": "sem_init" }, + { "name": "sem_open" }, + { "name": "sem_post" }, + { "name": "sem_timedwait" }, + { "name": "sem_trywait" }, + { "name": "sem_unlink" }, + { "name": "sem_wait" }, + { "name": "semctl" }, + { "name": "semget" }, + { "name": "semop" }, + { "name": "semtimedop" }, + { "name": "send" }, + { "name": "sendfile" }, + { "name": "sendfile64" }, + { "name": "sendmmsg" }, + { "name": "sendmsg" }, + { "name": "sendto" }, + { "name": "setbuf" }, + { "name": "setbuffer" }, + { "name": "setdomainname" }, + { "name": "setegid" }, + { "name": "setenv" }, + { "name": "seteuid" }, + { "name": "setfsgid" }, + { "name": "setfsuid" }, + { "name": "setgid" }, + { "name": "setgrent" }, + { "name": "setgroups" }, + { "name": "sethostent" }, + { "name": "sethostname" }, + { "name": "setitimer" }, + { "name": "setjmp" }, + { "name": "setlinebuf" }, + { "name": "setlocale" }, + { "name": "setlogmask" }, + { "name": "setmntent" }, + { "name": "setnetent" }, + { "name": "setns" }, + { "name": "setpgid" }, + { "name": "setpgrp" }, + { "name": "setpriority" }, + { "name": "setprotoent" }, + { "name": "setpwent" }, + { "name": "setregid" }, + { "name": "setresgid" }, + { "name": "setresuid" }, + { "name": "setreuid" }, + { "name": "setrlimit" }, + { "name": "setrlimit64" }, + { "name": "setservent" }, + { "name": "setsid" }, + { "name": "setsockopt" }, + { "name": "setstate" }, + { "name": "settimeofday" }, + { "name": "setuid" }, + { "name": "setutent" }, + { "name": "setvbuf" }, + { "name": "setxattr" }, + { "name": "shmat" }, + { "name": "shmctl" }, + { "name": "shmdt" }, + { "name": "shmget" }, + { "name": "shutdown" }, + { "name": "sigaction" }, + { "name": "sigaddset" }, + { "name": "sigaltstack" }, + { "name": "sigdelset" }, + { "name": "sigemptyset" }, + { "name": "sigfillset" }, + { "name": "sighold" }, + { "name": "sigignore" }, + { "name": "siginterrupt" }, + { "name": "sigismember" }, + { "name": "siglongjmp" }, + { "name": "signal" }, + { "name": "signalfd" }, + { "name": "significand" }, + { "name": "significandf" }, + { "name": "sigpause" }, + { "name": "sigpending" }, + { "name": "sigprocmask" }, + { "name": "sigqueue" }, + { "name": "sigrelse" }, + { "name": "sigset" }, + { "name": "sigsetjmp" }, + { "name": "sigsuspend" }, + { "name": "sigtimedwait" }, + { "name": "sigwait" }, + { "name": "sigwaitinfo" }, + { "name": "sin" }, + { "name": "sincos" }, + { "name": "sincosf" }, + { "name": "sincosl" }, + { "name": "sinf" }, + { "name": "sinh" }, + { "name": "sinhf" }, + { "name": "sinhl" }, + { "name": "sinl" }, + { "name": "sleep" }, + { "name": "snprintf" }, + { "name": "socket" }, + { "name": "socketpair" }, + { "name": "splice" }, + { "name": "sprintf" }, + { "name": "sqrt" }, + { "name": "sqrtf" }, + { "name": "sqrtl" }, + { "name": "srand" }, + { "name": "srand48" }, + { "name": "srandom" }, + { "name": "sscanf" }, + { "name": "stat" }, + { "name": "stat64" }, + { "name": "statfs" }, + { "name": "statfs64" }, + { "name": "statvfs" }, + { "name": "statvfs64" }, + { "name": "stpcpy" }, + { "name": "stpncpy" }, + { "name": "strcasecmp" }, + { "name": "strcasecmp_l" }, + { "name": "strcasestr" }, + { "name": "strcat" }, + { "name": "strchr" }, + { "name": "strchrnul" }, + { "name": "strcmp" }, + { "name": "strcoll" }, + { "name": "strcoll_l" }, + { "name": "strcpy" }, + { "name": "strcspn" }, + { "name": "strdup" }, + { "name": "strerror" }, + { "name": "strerror_l" }, + { "name": "strerror_r" }, + { "name": "strftime" }, + { "name": "strftime_l" }, + { "name": "strlcat" }, + { "name": "strlcpy" }, + { "name": "strlen" }, + { "name": "strncasecmp" }, + { "name": "strncasecmp_l" }, + { "name": "strncat" }, + { "name": "strncmp" }, + { "name": "strncpy" }, + { "name": "strndup" }, + { "name": "strnlen" }, + { "name": "strpbrk" }, + { "name": "strptime" }, + { "name": "strrchr" }, + { "name": "strsep" }, + { "name": "strsignal" }, + { "name": "strspn" }, + { "name": "strstr" }, + { "name": "strtod" }, + { "name": "strtod_l" }, + { "name": "strtof" }, + { "name": "strtof_l" }, + { "name": "strtoimax" }, + { "name": "strtok" }, + { "name": "strtok_r" }, + { "name": "strtol" }, + { "name": "strtold" }, + { "name": "strtold_l" }, + { "name": "strtoll" }, + { "name": "strtoul" }, + { "name": "strtoull" }, + { "name": "strtoumax" }, + { "name": "strxfrm" }, + { "name": "strxfrm_l" }, + { "name": "swab" }, + { "name": "swapoff" }, + { "name": "swapon" }, + { "name": "swprintf" }, + { "name": "swscanf" }, + { "name": "symlink" }, + { "name": "symlinkat" }, + { "name": "sync" }, + { "name": "sync_file_range" }, + { "name": "syncfs" }, + { "name": "syscall" }, + { "name": "sysconf" }, + { "name": "sysinfo" }, + { "name": "syslog" }, + { "name": "system" }, + { "name": "tan" }, + { "name": "tanf" }, + { "name": "tanh" }, + { "name": "tanhf" }, + { "name": "tanhl" }, + { "name": "tanl" }, + { "name": "tcdrain" }, + { "name": "tcflow" }, + { "name": "tcflush" }, + { "name": "tcgetattr" }, + { "name": "tcgetpgrp" }, + { "name": "tcgetsid" }, + { "name": "tcsendbreak" }, + { "name": "tcsetattr" }, + { "name": "tcsetpgrp" }, + { "name": "tdelete" }, + { "name": "tdestroy" }, + { "name": "tee" }, + { "name": "telldir" }, + { "name": "tempnam" }, + { "name": "tfind" }, + { "name": "tgamma" }, + { "name": "tgammaf" }, + { "name": "tgammal" }, + { "name": "thrd_create" }, + { "name": "thrd_current" }, + { "name": "thrd_detach" }, + { "name": "thrd_equal" }, + { "name": "thrd_exit" }, + { "name": "thrd_join" }, + { "name": "thrd_sleep" }, + { "name": "thrd_yield" }, + { "name": "time" }, + { "name": "timegm" }, + { "name": "timer_create" }, + { "name": "timer_delete" }, + { "name": "timer_getoverrun" }, + { "name": "timer_gettime" }, + { "name": "timer_settime" }, + { "name": "timerfd_create" }, + { "name": "timerfd_gettime" }, + { "name": "timerfd_settime" }, + { "name": "times" }, + { "name": "timespec_get" }, + { "name": "tmpfile" }, + { "name": "tmpfile64" }, + { "name": "tmpnam" }, + { "name": "toascii" }, + { "name": "tolower" }, + { "name": "tolower_l" }, + { "name": "toupper" }, + { "name": "toupper_l" }, + { "name": "towctrans" }, + { "name": "towctrans_l" }, + { "name": "towlower" }, + { "name": "towlower_l" }, + { "name": "towupper" }, + { "name": "towupper_l" }, + { "name": "trunc" }, + { "name": "truncate" }, + { "name": "truncate64" }, + { "name": "truncf" }, + { "name": "truncl" }, + { "name": "tsearch" }, + { "name": "tss_create" }, + { "name": "tss_delete" }, + { "name": "tss_get" }, + { "name": "tss_set" }, + { "name": "ttyname" }, + { "name": "ttyname_r" }, + { "name": "twalk" }, + { "name": "tzset" }, + { "name": "umask" }, + { "name": "umount" }, + { "name": "umount2" }, + { "name": "uname" }, + { "name": "ungetc" }, + { "name": "ungetwc" }, + { "name": "unlink" }, + { "name": "unlinkat" }, + { "name": "unlockpt" }, + { "name": "unsetenv" }, + { "name": "unshare" }, + { "name": "uselocale" }, + { "name": "usleep" }, + { "name": "utime" }, + { "name": "utimensat" }, + { "name": "utimes" }, + { "name": "utmpname" }, + { "name": "vasprintf" }, + { "name": "vdprintf" }, + { "name": "verr" }, + { "name": "verrx" }, + { "name": "vfork" }, + { "name": "vfprintf" }, + { "name": "vfscanf" }, + { "name": "vfwprintf" }, + { "name": "vfwscanf" }, + { "name": "vmsplice" }, + { "name": "vprintf" }, + { "name": "vscanf" }, + { "name": "vsnprintf" }, + { "name": "vsprintf" }, + { "name": "vsscanf" }, + { "name": "vswprintf" }, + { "name": "vswscanf" }, + { "name": "vsyslog" }, + { "name": "vwarn" }, + { "name": "vwarnx" }, + { "name": "vwprintf" }, + { "name": "vwscanf" }, + { "name": "wait" }, + { "name": "wait4" }, + { "name": "waitid" }, + { "name": "waitpid" }, + { "name": "warn" }, + { "name": "warnx" }, + { "name": "wcpcpy" }, + { "name": "wcpncpy" }, + { "name": "wcrtomb" }, + { "name": "wcscasecmp" }, + { "name": "wcscasecmp_l" }, + { "name": "wcscat" }, + { "name": "wcschr" }, + { "name": "wcscmp" }, + { "name": "wcscoll" }, + { "name": "wcscoll_l" }, + { "name": "wcscpy" }, + { "name": "wcscspn" }, + { "name": "wcsdup" }, + { "name": "wcsftime" }, + { "name": "wcsftime_l" }, + { "name": "wcslen" }, + { "name": "wcsncasecmp" }, + { "name": "wcsncasecmp_l" }, + { "name": "wcsncat" }, + { "name": "wcsncmp" }, + { "name": "wcsncpy" }, + { "name": "wcsnlen" }, + { "name": "wcsnrtombs" }, + { "name": "wcspbrk" }, + { "name": "wcsrchr" }, + { "name": "wcsrtombs" }, + { "name": "wcsspn" }, + { "name": "wcsstr" }, + { "name": "wcstod" }, + { "name": "wcstof" }, + { "name": "wcstoimax" }, + { "name": "wcstok" }, + { "name": "wcstol" }, + { "name": "wcstold" }, + { "name": "wcstoll" }, + { "name": "wcstombs" }, + { "name": "wcstoul" }, + { "name": "wcstoull" }, + { "name": "wcstoumax" }, + { "name": "wcswidth" }, + { "name": "wcsxfrm" }, + { "name": "wcsxfrm_l" }, + { "name": "wctob" }, + { "name": "wctomb" }, + { "name": "wctrans" }, + { "name": "wctrans_l" }, + { "name": "wctype" }, + { "name": "wctype_l" }, + { "name": "wcwidth" }, + { "name": "wmemchr" }, + { "name": "wmemcmp" }, + { "name": "wmemcpy" }, + { "name": "wmemmove" }, + { "name": "wmemset" }, + { "name": "wprintf" }, + { "name": "write" }, + { "name": "writev" }, + { "name": "wscanf" }, + { "name": "y0" }, + { "name": "y0f" }, + { "name": "y1" }, + { "name": "y1f" }, + { "name": "yn" }, + { "name": "ynf" }, + { "name": "__aeabi_atexit" }, + { "name": "__aeabi_memclr" }, + { "name": "__aeabi_memclr4" }, + { "name": "__aeabi_memclr8" }, + { "name": "__aeabi_memcpy" }, + { "name": "__aeabi_memcpy4" }, + { "name": "__aeabi_memcpy8" }, + { "name": "__aeabi_memmove" }, + { "name": "__aeabi_memmove4" }, + { "name": "__aeabi_memmove8" }, + { "name": "__aeabi_memset" }, + { "name": "__aeabi_memset4" }, + { "name": "__aeabi_memset8" }, + { "name": "__aeabi_read_tp" }, + { "name": "__gnu_Unwind_Find_exidx" }, + { "name": "atexit" }, + { "name": "bcopy" }, + { "name": "bsd_signal" }, + { "name": "bzero" }, + { "name": "ftime" }, + { "name": "getdtablesize" }, + { "name": "index" }, + { "name": "issetugid" }, + { "name": "putw" }, + { "name": "valloc" }, + { "name": "wait3" }, + { "name": "wcswcs" }, + { "name": "__progname", "type": "variable" }, + { "name": "__stack_chk_guard", "type": "variable" }, + { "name": "_ns_flagdata", "type": "variable" }, + { "name": "daylight", "type": "variable" }, + { "name": "environ", "type": "variable" }, + { "name": "getdate_err", "type": "variable" }, + { "name": "in6addr_any", "type": "variable" }, + { "name": "in6addr_loopback", "type": "variable" }, + { "name": "optarg", "type": "variable" }, + { "name": "opterr", "type": "variable" }, + { "name": "optind", "type": "variable" }, + { "name": "optopt", "type": "variable" }, + { "name": "optreset", "type": "variable" }, + { "name": "signgam", "type": "variable" }, + { "name": "stderr", "type": "variable" }, + { "name": "stdin", "type": "variable" }, + { "name": "stdout", "type": "variable" }, + { "name": "timezone", "type": "variable" }, + { "name": "tzname", "type": "variable" }, + { "name": "__sched_cpualloc" }, + { "name": "get_application_target_sdk_version" }, + { "name": "get_device_api_version" }, + { "name": "get_fatal_message" }, + { "name": "pthread_cond_clockwait" }, + { "name": "pthread_cond_timedwait_monotonic_np" }, + { "name": "pthread_cond_timeout_np" }, + { "name": "pthread_getname_np" }, + { "name": "pthread_mutex_lock_timeout_np" }, + { "name": "pthread_mutex_timedlock_monotonic_np" }, + { "name": "pthread_mutex_clocklock" }, + { "name": "pthread_rwlock_clockrdlock" }, + { "name": "pthread_rwlock_clockwrlock" }, + { "name": "pthread_rwlock_timedrdlock_monotonic_np" }, + { "name": "pthread_rwlock_timedwrlock_monotonic_np" }, + { "name": "set_application_target_sdk_version" }, + { "name": "set_fatal_message" }, + { "name": "tgkill" }, + { "name": "__read_chk"}, + { "name": "__strncat_chk"}, + { "name": "__readlink_chk"}, + { "name": "__getcwd_chk"}, + { "name": "__fread_chk"}, + { "name": "__memmove_chk"}, + { "name": "__memset_chk"}, + { "name": "__stpncpy_chk"}, + { "name": "__mempcpy_chk"}, + { "name": "__strlen_chk"}, + { "name": "__strncpy_chk"}, + { "name": "__pread_chk"}, + { "name": "__vsnprintf_chk"}, + { "name": "__strcat_chk"}, + { "name": "__fgets_chk"}, + { "name": "__vsprintf_chk"}, + { "name": "__memcpy_chk"}, + { "name": "__fwrite_chk"}, + { "name": "__memrchr_chk"}, + { "name": "__strcpy_chk"}, + { "name": "__stpcpy_chk"}, + { "name": "__sprintf_chk"}, + { "name": "__pwrite_chk"}, + { "name": "__snprintf_chk"}, + { "name": "__readlinkat_chk"}, + { "name": "__ppoll_chk"}, + { "name": "__write_chk"}, + { "name": "__poll_chk"}, + { "name": "__strchr_chk"}, + { "name": "__sendto_chk"}, + { "name": "__umask_chk"}, + { "name": "__openat_chk"}, + { "name": "__openat64_chk"}, + { "name": "__strrchr_chk"}, + { "name": "__open64_chk"}, + { "name": "__send_chk"}, + { "name": "__memchr_chk"}, + { "name": "__strlcpy_chk"}, + { "name": "__recv_chk"}, + { "name": "__recvfrom_chk"}, + { "name": "__open_chk"}, + { "name": "__strlcat_chk"} +] diff --git a/third_party/musl/ndk_script/copy_musl_sysroot.sh b/third_party/musl/ndk_script/copy_musl_sysroot.sh new file mode 100755 index 0000000000000000000000000000000000000000..d8c700b3b63f98e0381695faecb852b70d101a15 --- /dev/null +++ b/third_party/musl/ndk_script/copy_musl_sysroot.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Copyright (c) Huawei Technologies Co., Ltd. 2020-2030. All rights reserved. +set -e + +while getopts "o:i:t:h" arg +do + case "${arg}" in + "o") + OUT_DIR=${OPTARG} + ;; + "i") + SOURCE_DIR=${OPTARG} + ;; + "t") + TARGET_ARCH=${OPTARG} + ;; + "h") + echo "help" + ;; + ?) + echo "unkonw argument" + exit 1 + ;; + esac +done + +if [ ! -d "${OUT_DIR}" ];then + mkdir -p ${OUT_DIR} +fi + +mkdir -p ${OUT_DIR}/${TARGET_ARCH}-linux-ohos +mkdir -p ${OUT_DIR}/x86_64-linux-ohos +mkdir -p ${OUT_DIR}/i686-linux-ohos + +cp -rp ${SOURCE_DIR}/* ${OUT_DIR} +mv ${OUT_DIR}/asm ${OUT_DIR}/${TARGET_ARCH}-linux-ohos/ + +cp -rp ${OUT_DIR}/asm-x86/asm ${OUT_DIR}/x86_64-linux-ohos +mv ${OUT_DIR}/asm-x86/asm ${OUT_DIR}/i686-linux-ohos +rm -fr ${OUT_DIR}/asm-x86 diff --git a/third_party/musl/ndk_script/copy_ndk_musl_headers.sh b/third_party/musl/ndk_script/copy_ndk_musl_headers.sh new file mode 100755 index 0000000000000000000000000000000000000000..40d8099fe468cf5977476e42d0545d95c4b6bf37 --- /dev/null +++ b/third_party/musl/ndk_script/copy_ndk_musl_headers.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Copyright (c) Huawei Technologies Co., Ltd. 2020-2030. All rights reserved. +set -e + +while getopts "o:i:b:h" arg +do + case "${arg}" in + "o") + OUT_DIR=${OPTARG} + ;; + "i") + SOURCE_DIR=${OPTARG} + ;; + "h") + echo "help" + ;; + ?) + echo "unkonw argument" + exit 1 + ;; + esac +done + +if [ ! -d "${OUT_DIR}" ];then + mkdir -p ${OUT_DIR} +fi + +cp -rp ${SOURCE_DIR}/* ${OUT_DIR} diff --git a/third_party/musl/ndk_script/toolchain.sh b/third_party/musl/ndk_script/toolchain.sh new file mode 100755 index 0000000000000000000000000000000000000000..7e9acb9de0a8310f931848561eeb434570b23c31 --- /dev/null +++ b/third_party/musl/ndk_script/toolchain.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# Copyright (c) Huawei Technologies Co., Ltd. 2020-2030. All rights reserved. +set -e + +while getopts "o:i:t:h" arg +do + case "${arg}" in + "o") + OUT_DIR=${OPTARG} + ;; + "i") + SOURCE_DIR=${OPTARG} + ;; + "h") + echo "help" + ;; + ?) + echo "unkonw argument" + exit 1 + ;; + esac +done + + +ndk_dir=$(ls ${SOURCE_DIR}/lib/|more |grep ohos |grep -v mipsel |grep -v riscv |awk '{print $NF}') + +for i in $ndk_dir +do + find ${OUT_DIR}/lib/$i -name 'libc++.a' -type f -exec bash -c 'echo "INPUT(-lc++_static -lc++abi)" > $1' _ {} \; + find ${OUT_DIR}/lib/$i -name 'libc++.so' -type f -exec bash -c 'echo "INPUT(-lc++_shared)" > $1' _ {} \; +done + +cp -rfp ${SOURCE_DIR}/lib ${OUT_DIR} +cp -rfp ${SOURCE_DIR}/include ${OUT_DIR} + diff --git a/third_party/node/BUILD.gn b/third_party/node/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..254f38555d0f37183f6a5736d43a277d625376fc --- /dev/null +++ b/third_party/node/BUILD.gn @@ -0,0 +1,24 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") + +ohos_ndk_headers("node_header") { + dest_dir = "$ndk_headers_out_dir" + sources = [ + "//third_party/node/src/js_native_api.h", + "//third_party/node/src/js_native_api_types.h", + "//third_party/node/src/node_api.h", + "//third_party/node/src/node_api_types.h", + ] +} diff --git a/third_party/node/LICENSE b/third_party/node/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..67f19ba95fa7284340745af1227cc6d2c5070da2 --- /dev/null +++ b/third_party/node/LICENSE @@ -0,0 +1,1616 @@ +Node.js is licensed for use as follows: + +""" +Copyright Node.js contributors. All rights reserved. + +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 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. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +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 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. +""" + +The Node.js license applies to all parts of Node.js that are not externally +maintained libraries. + +The externally maintained libraries used by Node.js are: + +- Acorn, located at deps/acorn, is licensed as follows: + """ + MIT License + + Copyright (C) 2012-2020 by various contributors (see AUTHORS) + + 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 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. + """ + +- c-ares, located at deps/cares, is licensed as follows: + """ + Copyright (c) 2007 - 2018, Daniel Stenberg with many contributors, see AUTHORS + file. + + Copyright 1998 by the Massachusetts Institute of Technology. + + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, provided that + the above copyright notice appear in all copies and that both that copyright + notice and this permission notice appear in supporting documentation, and that + the name of M.I.T. not be used in advertising or publicity pertaining to + distribution of the software without specific, written prior permission. + M.I.T. makes no representations about the suitability of this software for any + purpose. It is provided "as is" without express or implied warranty. + """ + +- cjs-module-lexer, located at deps/cjs-module-lexer, is licensed as follows: + """ + MIT License + ----------- + + Copyright (C) 2018-2020 Guy Bedford + + 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 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. + """ + +- ICU, located at deps/icu-small, is licensed as follows: + """ + COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later) + + Copyright © 1991-2020 Unicode, Inc. All rights reserved. + Distributed under the Terms of Use in https://www.unicode.org/copyright.html. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of the Unicode data files and any associated documentation + (the "Data Files") or Unicode software and any associated documentation + (the "Software") to deal in the Data Files or Software + without restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, and/or sell copies of + the Data Files or Software, and to permit persons to whom the Data Files + or Software are furnished to do so, provided that either + (a) this copyright and permission notice appear with all copies + of the Data Files or Software, or + (b) this copyright and permission notice appear in associated + Documentation. + + THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS. + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS + NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL + DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THE DATA FILES OR SOFTWARE. + + Except as contained in this notice, the name of a copyright holder + shall not be used in advertising or otherwise to promote the sale, + use or other dealings in these Data Files or Software without prior + written authorization of the copyright holder. + + --------------------- + + Third-Party Software Licenses + + This section contains third-party software notices and/or additional + terms for licensed third-party software components included within ICU + libraries. + + 1. ICU License - ICU 1.8.1 to ICU 57.1 + + COPYRIGHT AND PERMISSION NOTICE + + Copyright (c) 1995-2016 International Business Machines Corporation and others + All rights reserved. + + 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, and/or sell copies of the Software, and to permit persons + to whom the Software is furnished to do so, provided that the above + copyright notice(s) and this permission notice appear in all copies of + the Software and that both the above copyright notice(s) and this + permission notice appear in supporting documentation. + + 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 + OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY + SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER + RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF + CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + Except as contained in this notice, the name of a copyright holder + shall not be used in advertising or otherwise to promote the sale, use + or other dealings in this Software without prior written authorization + of the copyright holder. + + All trademarks and registered trademarks mentioned herein are the + property of their respective owners. + + 2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt) + + # The Google Chrome software developed by Google is licensed under + # the BSD license. Other software included in this distribution is + # provided under other licenses, as set forth below. + # + # The BSD License + # http://opensource.org/licenses/bsd-license.php + # Copyright (C) 2006-2008, Google Inc. + # + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are met: + # + # Redistributions of source code must retain the above copyright notice, + # this list of conditions and the following disclaimer. + # Redistributions in binary form must reproduce the above + # copyright notice, this list of conditions and the following + # disclaimer in the documentation and/or other materials provided with + # the distribution. + # Neither the name of Google Inc. nor the names of its + # contributors may be used to endorse or promote products derived from + # this software without specific prior written permission. + # + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + # + # + # The word list in cjdict.txt are generated by combining three word lists + # listed below with further processing for compound word breaking. The + # frequency is generated with an iterative training against Google web + # corpora. + # + # * Libtabe (Chinese) + # - https://sourceforge.net/project/?group_id=1519 + # - Its license terms and conditions are shown below. + # + # * IPADIC (Japanese) + # - http://chasen.aist-nara.ac.jp/chasen/distribution.html + # - Its license terms and conditions are shown below. + # + # ---------COPYING.libtabe ---- BEGIN-------------------- + # + # /* + # * Copyright (c) 1999 TaBE Project. + # * Copyright (c) 1999 Pai-Hsiang Hsiao. + # * All rights reserved. + # * + # * Redistribution and use in source and binary forms, with or without + # * modification, are permitted provided that the following conditions + # * are met: + # * + # * . Redistributions of source code must retain the above copyright + # * notice, this list of conditions and the following disclaimer. + # * . Redistributions in binary form must reproduce the above copyright + # * notice, this list of conditions and the following disclaimer in + # * the documentation and/or other materials provided with the + # * distribution. + # * . Neither the name of the TaBE Project nor the names of its + # * contributors may be used to endorse or promote products derived + # * from this software without specific prior written permission. + # * + # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # * OF THE POSSIBILITY OF SUCH DAMAGE. + # */ + # + # /* + # * Copyright (c) 1999 Computer Systems and Communication Lab, + # * Institute of Information Science, Academia + # * Sinica. All rights reserved. + # * + # * Redistribution and use in source and binary forms, with or without + # * modification, are permitted provided that the following conditions + # * are met: + # * + # * . Redistributions of source code must retain the above copyright + # * notice, this list of conditions and the following disclaimer. + # * . Redistributions in binary form must reproduce the above copyright + # * notice, this list of conditions and the following disclaimer in + # * the documentation and/or other materials provided with the + # * distribution. + # * . Neither the name of the Computer Systems and Communication Lab + # * nor the names of its contributors may be used to endorse or + # * promote products derived from this software without specific + # * prior written permission. + # * + # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # * OF THE POSSIBILITY OF SUCH DAMAGE. + # */ + # + # Copyright 1996 Chih-Hao Tsai @ Beckman Institute, + # University of Illinois + # c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4 + # + # ---------------COPYING.libtabe-----END-------------------------------- + # + # + # ---------------COPYING.ipadic-----BEGIN------------------------------- + # + # Copyright 2000, 2001, 2002, 2003 Nara Institute of Science + # and Technology. All Rights Reserved. + # + # Use, reproduction, and distribution of this software is permitted. + # Any copy of this software, whether in its original form or modified, + # must include both the above copyright notice and the following + # paragraphs. + # + # Nara Institute of Science and Technology (NAIST), + # the copyright holders, disclaims all warranties with regard to this + # software, including all implied warranties of merchantability and + # fitness, in no event shall NAIST be liable for + # any special, indirect or consequential damages or any damages + # whatsoever resulting from loss of use, data or profits, whether in an + # action of contract, negligence or other tortuous action, arising out + # of or in connection with the use or performance of this software. + # + # A large portion of the dictionary entries + # originate from ICOT Free Software. The following conditions for ICOT + # Free Software applies to the current dictionary as well. + # + # Each User may also freely distribute the Program, whether in its + # original form or modified, to any third party or parties, PROVIDED + # that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear + # on, or be attached to, the Program, which is distributed substantially + # in the same form as set out herein and that such intended + # distribution, if actually made, will neither violate or otherwise + # contravene any of the laws and regulations of the countries having + # jurisdiction over the User or the intended distribution itself. + # + # NO WARRANTY + # + # The program was produced on an experimental basis in the course of the + # research and development conducted during the project and is provided + # to users as so produced on an experimental basis. Accordingly, the + # program is provided without any warranty whatsoever, whether express, + # implied, statutory or otherwise. The term "warranty" used herein + # includes, but is not limited to, any warranty of the quality, + # performance, merchantability and fitness for a particular purpose of + # the program and the nonexistence of any infringement or violation of + # any right of any third party. + # + # Each user of the program will agree and understand, and be deemed to + # have agreed and understood, that there is no warranty whatsoever for + # the program and, accordingly, the entire risk arising from or + # otherwise connected with the program is assumed by the user. + # + # Therefore, neither ICOT, the copyright holder, or any other + # organization that participated in or was otherwise related to the + # development of the program and their respective officials, directors, + # officers and other employees shall be held liable for any and all + # damages, including, without limitation, general, special, incidental + # and consequential damages, arising out of or otherwise in connection + # with the use or inability to use the program or any product, material + # or result produced or otherwise obtained by using the program, + # regardless of whether they have been advised of, or otherwise had + # knowledge of, the possibility of such damages at any time during the + # project or thereafter. Each user will be deemed to have agreed to the + # foregoing by his or her commencement of use of the program. The term + # "use" as used herein includes, but is not limited to, the use, + # modification, copying and distribution of the program and the + # production of secondary products from the program. + # + # In the case where the program, whether in its original form or + # modified, was distributed or delivered to or received by a user from + # any person, organization or entity other than ICOT, unless it makes or + # grants independently of ICOT any specific warranty to the user in + # writing, such person, organization or entity, will also be exempted + # from and not be held liable to the user for any such damages as noted + # above as far as the program is concerned. + # + # ---------------COPYING.ipadic-----END---------------------------------- + + 3. Lao Word Break Dictionary Data (laodict.txt) + + # Copyright (C) 2016 and later: Unicode, Inc. and others. + # License & terms of use: http://www.unicode.org/copyright.html + # Copyright (c) 2015 International Business Machines Corporation + # and others. All Rights Reserved. + # + # Project: https://github.com/rober42539/lao-dictionary + # Dictionary: https://github.com/rober42539/lao-dictionary/laodict.txt + # License: https://github.com/rober42539/lao-dictionary/LICENSE.txt + # (copied below) + # + # This file is derived from the above dictionary version of Nov 22, 2020 + # ---------------------------------------------------------------------- + # Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are met: + # + # Redistributions of source code must retain the above copyright notice, this + # list of conditions and the following disclaimer. Redistributions in binary + # form must reproduce the above copyright notice, this list of conditions and + # the following disclaimer in the documentation and/or other materials + # provided with the distribution. + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # OF THE POSSIBILITY OF SUCH DAMAGE. + # -------------------------------------------------------------------------- + + 4. Burmese Word Break Dictionary Data (burmesedict.txt) + + # Copyright (c) 2014 International Business Machines Corporation + # and others. All Rights Reserved. + # + # This list is part of a project hosted at: + # github.com/kanyawtech/myanmar-karen-word-lists + # + # -------------------------------------------------------------------------- + # Copyright (c) 2013, LeRoy Benjamin Sharon + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions + # are met: Redistributions of source code must retain the above + # copyright notice, this list of conditions and the following + # disclaimer. Redistributions in binary form must reproduce the + # above copyright notice, this list of conditions and the following + # disclaimer in the documentation and/or other materials provided + # with the distribution. + # + # Neither the name Myanmar Karen Word Lists, nor the names of its + # contributors may be used to endorse or promote products derived + # from this software without specific prior written permission. + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS + # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + # SUCH DAMAGE. + # -------------------------------------------------------------------------- + + 5. Time Zone Database + + ICU uses the public domain data and code derived from Time Zone + Database for its time zone support. The ownership of the TZ database + is explained in BCP 175: Procedure for Maintaining the Time Zone + Database section 7. + + # 7. Database Ownership + # + # The TZ database itself is not an IETF Contribution or an IETF + # document. Rather it is a pre-existing and regularly updated work + # that is in the public domain, and is intended to remain in the + # public domain. Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do + # not apply to the TZ Database or contributions that individuals make + # to it. Should any claims be made and substantiated against the TZ + # Database, the organization that is providing the IANA + # Considerations defined in this RFC, under the memorandum of + # understanding with the IETF, currently ICANN, may act in accordance + # with all competent court orders. No ownership claims will be made + # by ICANN or the IETF Trust on the database or the code. Any person + # making a contribution to the database or code waives all rights to + # future claims in that contribution or in the TZ Database. + + 6. Google double-conversion + + Copyright 2006-2011, the V8 project authors. All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + """ + +- libuv, located at deps/uv, is licensed as follows: + """ + libuv is licensed for use as follows: + + ==== + Copyright (c) 2015-present libuv project contributors. + + 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 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. + ==== + + This license applies to parts of libuv originating from the + https://github.com/joyent/libuv repository: + + ==== + + Copyright Joyent, Inc. and other Node contributors. All rights reserved. + 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 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. + + ==== + + This license applies to all parts of libuv that are not externally + maintained libraries. + + The externally maintained libraries used by libuv are: + + - tree.h (from FreeBSD), copyright Niels Provos. Two clause BSD license. + + - inet_pton and inet_ntop implementations, contained in src/inet.c, are + copyright the Internet Systems Consortium, Inc., and licensed under the ISC + license. + + - stdint-msvc2008.h (from msinttypes), copyright Alexander Chemeris. Three + clause BSD license. + + - pthread-fixes.c, copyright Google Inc. and Sony Mobile Communications AB. + Three clause BSD license. + + - android-ifaddrs.h, android-ifaddrs.c, copyright Berkeley Software Design + Inc, Kenneth MacKay and Emergya (Cloud4all, FP7/2007-2013, grant agreement + n° 289016). Three clause BSD license. + """ + +- llhttp, located at deps/llhttp, is licensed as follows: + """ + This software is licensed under the MIT License. + + Copyright Fedor Indutny, 2018. + + 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 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. + """ + +- corepack, located at deps/corepack, is licensed as follows: + """ + **Copyright © Corepack contributors** + + 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 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. + """ + +- OpenSSL, located at deps/openssl, is licensed as follows: + """ + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a double license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. + + OpenSSL License + --------------- + + /* ==================================================================== + * Copyright (c) 1998-2019 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + + /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * "This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com)" + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * The licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] + */ + """ + +- Punycode.js, located at lib/punycode.js, is licensed as follows: + """ + Copyright Mathias Bynens + + 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 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. + """ + +- V8, located at deps/v8, is licensed as follows: + """ + This license applies to all parts of V8 that are not externally + maintained libraries. The externally maintained libraries used by V8 + are: + + - PCRE test suite, located in + test/mjsunit/third_party/regexp-pcre/regexp-pcre.js. This is based on the + test suite from PCRE-7.3, which is copyrighted by the University + of Cambridge and Google, Inc. The copyright notice and license + are embedded in regexp-pcre.js. + + - Layout tests, located in test/mjsunit/third_party/object-keys. These are + based on layout tests from webkit.org which are copyrighted by + Apple Computer, Inc. and released under a 3-clause BSD license. + + - Strongtalk assembler, the basis of the files assembler-arm-inl.h, + assembler-arm.cc, assembler-arm.h, assembler-ia32-inl.h, + assembler-ia32.cc, assembler-ia32.h, assembler-x64-inl.h, + assembler-x64.cc, assembler-x64.h, assembler-mips-inl.h, + assembler-mips.cc, assembler-mips.h, assembler.cc and assembler.h. + This code is copyrighted by Sun Microsystems Inc. and released + under a 3-clause BSD license. + + - Valgrind client API header, located at src/third_party/valgrind/valgrind.h + This is released under the BSD license. + + - The Wasm C/C++ API headers, located at third_party/wasm-api/wasm.{h,hh} + This is released under the Apache license. The API's upstream prototype + implementation also formed the basis of V8's implementation in + src/wasm/c-api.cc. + + These libraries have their own licenses; we recommend you read them, + as their terms may differ from the terms below. + + Further license information can be found in LICENSE files located in + sub-directories. + + Copyright 2014, the V8 project authors. All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + """ + +- SipHash, located at deps/v8/src/third_party/siphash, is licensed as follows: + """ + SipHash reference C implementation + + Copyright (c) 2016 Jean-Philippe Aumasson + + To the extent possible under law, the author(s) have dedicated all + copyright and related and neighboring rights to this software to the public + domain worldwide. This software is distributed without any warranty. + """ + +- zlib, located at deps/zlib, is licensed as follows: + """ + zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.11, January 15th, 2017 + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + """ + +- npm, located at deps/npm, is licensed as follows: + """ + The npm application + Copyright (c) npm, Inc. and Contributors + Licensed on the terms of The Artistic License 2.0 + + Node package dependencies of the npm application + Copyright (c) their respective copyright owners + Licensed on their respective license terms + + The npm public registry at https://registry.npmjs.org + and the npm website at https://www.npmjs.com + Operated by npm, Inc. + Use governed by terms published on https://www.npmjs.com + + "Node.js" + Trademark Joyent, Inc., https://joyent.com + Neither npm nor npm, Inc. are affiliated with Joyent, Inc. + + The Node.js application + Project of Node Foundation, https://nodejs.org + + The npm Logo + Copyright (c) Mathias Pettersson and Brian Hammond + + "Gubblebum Blocky" typeface + Copyright (c) Tjarda Koster, https://jelloween.deviantart.com + Used with permission + + -------- + + The Artistic License 2.0 + + Copyright (c) 2000-2006, The Perl Foundation. + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + This license establishes the terms under which a given free software + Package may be copied, modified, distributed, and/or redistributed. + The intent is that the Copyright Holder maintains some artistic + control over the development of that Package while still keeping the + Package available as open source and free software. + + You are always permitted to make arrangements wholly outside of this + license directly with the Copyright Holder of a given Package. If the + terms of this license do not permit the full use that you propose to + make of the Package, you should contact the Copyright Holder and seek + a different licensing arrangement. + + Definitions + + "Copyright Holder" means the individual(s) or organization(s) + named in the copyright notice for the entire Package. + + "Contributor" means any party that has contributed code or other + material to the Package, in accordance with the Copyright Holder's + procedures. + + "You" and "your" means any person who would like to copy, + distribute, or modify the Package. + + "Package" means the collection of files distributed by the + Copyright Holder, and derivatives of that collection and/or of + those files. A given Package may consist of either the Standard + Version, or a Modified Version. + + "Distribute" means providing a copy of the Package or making it + accessible to anyone else, or in the case of a company or + organization, to others outside of your company or organization. + + "Distributor Fee" means any fee that you charge for Distributing + this Package or providing support for this Package to another + party. It does not mean licensing fees. + + "Standard Version" refers to the Package if it has not been + modified, or has been modified only in ways explicitly requested + by the Copyright Holder. + + "Modified Version" means the Package, if it has been changed, and + such changes were not explicitly requested by the Copyright + Holder. + + "Original License" means this Artistic License as Distributed with + the Standard Version of the Package, in its current version or as + it may be modified by The Perl Foundation in the future. + + "Source" form means the source code, documentation source, and + configuration files for the Package. + + "Compiled" form means the compiled bytecode, object code, binary, + or any other form resulting from mechanical transformation or + translation of the Source form. + + Permission for Use and Modification Without Distribution + + (1) You are permitted to use the Standard Version and create and use + Modified Versions for any purpose without restriction, provided that + you do not Distribute the Modified Version. + + Permissions for Redistribution of the Standard Version + + (2) You may Distribute verbatim copies of the Source form of the + Standard Version of this Package in any medium without restriction, + either gratis or for a Distributor Fee, provided that you duplicate + all of the original copyright notices and associated disclaimers. At + your discretion, such verbatim copies may or may not include a + Compiled form of the Package. + + (3) You may apply any bug fixes, portability changes, and other + modifications made available from the Copyright Holder. The resulting + Package will still be considered the Standard Version, and as such + will be subject to the Original License. + + Distribution of Modified Versions of the Package as Source + + (4) You may Distribute your Modified Version as Source (either gratis + or for a Distributor Fee, and with or without a Compiled form of the + Modified Version) provided that you clearly document how it differs + from the Standard Version, including, but not limited to, documenting + any non-standard features, executables, or modules, and provided that + you do at least ONE of the following: + + (a) make the Modified Version available to the Copyright Holder + of the Standard Version, under the Original License, so that the + Copyright Holder may include your modifications in the Standard + Version. + + (b) ensure that installation of your Modified Version does not + prevent the user installing or running the Standard Version. In + addition, the Modified Version must bear a name that is different + from the name of the Standard Version. + + (c) allow anyone who receives a copy of the Modified Version to + make the Source form of the Modified Version available to others + under + + (i) the Original License or + + (ii) a license that permits the licensee to freely copy, + modify and redistribute the Modified Version using the same + licensing terms that apply to the copy that the licensee + received, and requires that the Source form of the Modified + Version, and of any works derived from it, be made freely + available in that license fees are prohibited but Distributor + Fees are allowed. + + Distribution of Compiled Forms of the Standard Version + or Modified Versions without the Source + + (5) You may Distribute Compiled forms of the Standard Version without + the Source, provided that you include complete instructions on how to + get the Source of the Standard Version. Such instructions must be + valid at the time of your distribution. If these instructions, at any + time while you are carrying out such distribution, become invalid, you + must provide new instructions on demand or cease further distribution. + If you provide valid instructions or cease distribution within thirty + days after you become aware that the instructions are invalid, then + you do not forfeit any of your rights under this license. + + (6) You may Distribute a Modified Version in Compiled form without + the Source, provided that you comply with Section 4 with respect to + the Source of the Modified Version. + + Aggregating or Linking the Package + + (7) You may aggregate the Package (either the Standard Version or + Modified Version) with other packages and Distribute the resulting + aggregation provided that you do not charge a licensing fee for the + Package. Distributor Fees are permitted, and licensing fees for other + components in the aggregation are permitted. The terms of this license + apply to the use and Distribution of the Standard or Modified Versions + as included in the aggregation. + + (8) You are permitted to link Modified and Standard Versions with + other works, to embed the Package in a larger work of your own, or to + build stand-alone binary or bytecode versions of applications that + include the Package, and Distribute the result without restriction, + provided the result does not expose a direct interface to the Package. + + Items That are Not Considered Part of a Modified Version + + (9) Works (including, but not limited to, modules and scripts) that + merely extend or make use of the Package, do not, by themselves, cause + the Package to be a Modified Version. In addition, such works are not + considered parts of the Package itself, and are not subject to the + terms of this license. + + General Provisions + + (10) Any use, modification, and distribution of the Standard or + Modified Versions is governed by this Artistic License. By using, + modifying or distributing the Package, you accept this license. Do not + use, modify, or distribute the Package, if you do not accept this + license. + + (11) If your Modified Version has been derived from a Modified + Version made by someone other than you, you are nevertheless required + to ensure that your Modified Version complies with the requirements of + this license. + + (12) This license does not grant you the right to use any trademark, + service mark, tradename, or logo of the Copyright Holder. + + (13) This license includes the non-exclusive, worldwide, + free-of-charge patent license to make, have made, use, offer to sell, + sell, import and otherwise transfer the Package with respect to any + patent claims licensable by the Copyright Holder that are necessarily + infringed by the Package. If you institute patent litigation + (including a cross-claim or counterclaim) against any party alleging + that the Package constitutes direct or contributory patent + infringement, then this Artistic License to you shall terminate on the + date that such litigation is filed. + + (14) Disclaimer of Warranty: + THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS + IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR + NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL + LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL + BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL + DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + -------- + """ + +- GYP, located at tools/gyp, is licensed as follows: + """ + Copyright (c) 2020 Node.js contributors. All rights reserved. + Copyright (c) 2009 Google Inc. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + """ + +- inspector_protocol, located at tools/inspector_protocol, is licensed as follows: + """ + // Copyright 2016 The Chromium Authors. All rights reserved. + // + // Redistribution and use in source and binary forms, with or without + // modification, are permitted provided that the following conditions are + // met: + // + // * Redistributions of source code must retain the above copyright + // notice, this list of conditions and the following disclaimer. + // * Redistributions in binary form must reproduce the above + // copyright notice, this list of conditions and the following disclaimer + // in the documentation and/or other materials provided with the + // distribution. + // * Neither the name of Google Inc. nor the names of its + // contributors may be used to endorse or promote products derived from + // this software without specific prior written permission. + // + // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + """ + +- jinja2, located at tools/inspector_protocol/jinja2, is licensed as follows: + """ + Copyright (c) 2009 by the Jinja Team, see AUTHORS for more details. + + Some rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * The names of the contributors may not be used to endorse or + promote products derived from this software without specific + prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + """ + +- markupsafe, located at tools/inspector_protocol/markupsafe, is licensed as follows: + """ + Copyright (c) 2010 by Armin Ronacher and contributors. See AUTHORS + for more details. + + Some rights reserved. + + Redistribution and use in source and binary forms of the software as well + as documentation, with or without modification, are permitted provided + that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * The names of the contributors may not be used to endorse or + promote products derived from this software without specific + prior written permission. + + THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT + NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + DAMAGE. + """ + +- cpplint.py, located at tools/cpplint.py, is licensed as follows: + """ + Copyright (c) 2009 Google Inc. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + """ + +- ESLint, located at tools/node_modules/eslint, is licensed as follows: + """ + Copyright JS Foundation and other contributors, https://js.foundation + + 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 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. + """ + +- Babel, located at tools/node_modules/@babel, is licensed as follows: + """ + MIT License + + Copyright (c) 2014-present Sebastian McKenzie and other contributors + + 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 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. + """ + +- gtest, located at deps/googletest, is licensed as follows: + """ + Copyright 2008, Google Inc. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + """ + +- nghttp2, located at deps/nghttp2, is licensed as follows: + """ + The MIT License + + Copyright (c) 2012, 2014, 2015, 2016 Tatsuhiro Tsujikawa + Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors + + 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 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. + """ + +- large_pages, located at src/large_pages, is licensed as follows: + """ + Copyright (C) 2018 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 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. + """ + +- caja, located at lib/internal/freeze_intrinsics.js, is licensed as follows: + """ + Adapted from SES/Caja - Copyright (C) 2011 Google Inc. + Copyright (C) 2018 Agoric + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + """ + +- brotli, located at deps/brotli, is licensed as follows: + """ + Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. + + 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 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. + """ + +- HdrHistogram, located at deps/histogram, is licensed as follows: + """ + The code in this repository code was Written by Gil Tene, Michael Barker, + and Matt Warren, and released to the public domain, as explained at + http://creativecommons.org/publicdomain/zero/1.0/ + + For users of this code who wish to consume it under the "BSD" license + rather than under the public domain or CC0 contribution text mentioned + above, the code found under this directory is *also* provided under the + following license (commonly referred to as the BSD 2-Clause License). This + license does not detract from the above stated release of the code into + the public domain, and simply represents an additional license granted by + the Author. + + ----------------------------------------------------------------------------- + ** Beginning of "BSD 2-Clause License" text. ** + + Copyright (c) 2012, 2013, 2014 Gil Tene + Copyright (c) 2014 Michael Barker + Copyright (c) 2014 Matt Warren + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + THE POSSIBILITY OF SUCH DAMAGE. + """ + +- highlight.js, located at doc/api_assets/highlight.pack.js, is licensed as follows: + """ + BSD 3-Clause License + + Copyright (c) 2006, Ivan Sagalaev. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + """ + +- node-heapdump, located at src/heap_utils.cc, is licensed as follows: + """ + ISC License + + Copyright (c) 2012, Ben Noordhuis + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + === src/compat.h src/compat-inl.h === + + ISC License + + Copyright (c) 2014, StrongLoop Inc. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + """ + +- rimraf, located at lib/internal/fs/rimraf.js, is licensed as follows: + """ + The ISC License + + Copyright (c) Isaac Z. Schlueter and Contributors + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR + IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + """ + +- uvwasi, located at deps/uvwasi, is licensed as follows: + """ + MIT License + + Copyright (c) 2019 Colin Ihrig and Contributors + + 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 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. + """ diff --git a/third_party/node/OAT.xml b/third_party/node/OAT.xml new file mode 100644 index 0000000000000000000000000000000000000000..7202aa8c820db41fbbb3d0ccc9894b51689a1751 --- /dev/null +++ b/third_party/node/OAT.xml @@ -0,0 +1,403 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third_party/node/README.OpenSource b/third_party/node/README.OpenSource new file mode 100644 index 0000000000000000000000000000000000000000..4679c4961f3f76cc4898efd35bfe241823854214 --- /dev/null +++ b/third_party/node/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "node", + "License": "ISC License,Public Domain,MIT License,Free Software Foundation - MIT License,Apache License V2.0,ICU License,zlib/libpng License,BSD 2-Clause License,BSD 3-Clause License", + "License File": "LICENSE", + "Version Number": "14.21.2", + "Owner": "sunbingxin@huawei.com", + "Upstream URL": "http://www.nodejs.org/", + "Description": "Node.js is an open-source, cross-platform, JavaScript runtime environment. It executes JavaScript code outside of a browser." + } +] diff --git a/third_party/node/src/js_native_api.h b/third_party/node/src/js_native_api.h new file mode 100644 index 0000000000000000000000000000000000000000..e804d1d45d236519d248e3d40fa0a6c2a6d378ec --- /dev/null +++ b/third_party/node/src/js_native_api.h @@ -0,0 +1,561 @@ +#ifndef SRC_JS_NATIVE_API_H_ +#define SRC_JS_NATIVE_API_H_ + +// This file needs to be compatible with C compilers. +#include // NOLINT(modernize-deprecated-headers) +#include // NOLINT(modernize-deprecated-headers) + +// Use INT_MAX, this should only be consumed by the pre-processor anyway. +#define NAPI_VERSION_EXPERIMENTAL 2147483647 +#ifndef NAPI_VERSION +#ifdef NAPI_EXPERIMENTAL +#define NAPI_VERSION NAPI_VERSION_EXPERIMENTAL +#else +// The baseline version for N-API. +// The NAPI_VERSION controls which version will be used by default when +// compilling a native addon. If the addon developer specifically wants to use +// functions available in a new version of N-API that is not yet ported in all +// LTS versions, they can set NAPI_VERSION knowing that they have specifically +// depended on that version. +#define NAPI_VERSION 8 +#endif +#endif + +#include "js_native_api_types.h" + +// If you need __declspec(dllimport), either include instead, or +// define NAPI_EXTERN as __declspec(dllimport) on the compiler's command line. +#ifndef NAPI_EXTERN + #ifdef _WIN32 + #define NAPI_EXTERN __declspec(dllexport) + #elif defined(__wasm32__) + #define NAPI_EXTERN __attribute__((visibility("default"))) \ + __attribute__((__import_module__("napi"))) + #else + #define NAPI_EXTERN __attribute__((visibility("default"))) + #endif +#endif + +#define NAPI_AUTO_LENGTH SIZE_MAX + +#ifdef __cplusplus +#define EXTERN_C_START extern "C" { +#define EXTERN_C_END } +#else +#define EXTERN_C_START +#define EXTERN_C_END +#endif + +EXTERN_C_START + +NAPI_EXTERN napi_status +napi_get_last_error_info(napi_env env, + const napi_extended_error_info** result); + +// Getters for defined singletons +NAPI_EXTERN napi_status napi_get_undefined(napi_env env, napi_value* result); +NAPI_EXTERN napi_status napi_get_null(napi_env env, napi_value* result); +NAPI_EXTERN napi_status napi_get_global(napi_env env, napi_value* result); +NAPI_EXTERN napi_status napi_get_boolean(napi_env env, + bool value, + napi_value* result); + +// Methods to create Primitive types/Objects +NAPI_EXTERN napi_status napi_create_object(napi_env env, napi_value* result); +NAPI_EXTERN napi_status napi_create_array(napi_env env, napi_value* result); +NAPI_EXTERN napi_status napi_create_array_with_length(napi_env env, + size_t length, + napi_value* result); +NAPI_EXTERN napi_status napi_create_double(napi_env env, + double value, + napi_value* result); +NAPI_EXTERN napi_status napi_create_int32(napi_env env, + int32_t value, + napi_value* result); +NAPI_EXTERN napi_status napi_create_uint32(napi_env env, + uint32_t value, + napi_value* result); +NAPI_EXTERN napi_status napi_create_int64(napi_env env, + int64_t value, + napi_value* result); +NAPI_EXTERN napi_status napi_create_string_latin1(napi_env env, + const char* str, + size_t length, + napi_value* result); +NAPI_EXTERN napi_status napi_create_string_utf8(napi_env env, + const char* str, + size_t length, + napi_value* result); +NAPI_EXTERN napi_status napi_create_string_utf16(napi_env env, + const char16_t* str, + size_t length, + napi_value* result); +NAPI_EXTERN napi_status napi_create_symbol(napi_env env, + napi_value description, + napi_value* result); +NAPI_EXTERN napi_status napi_create_function(napi_env env, + const char* utf8name, + size_t length, + napi_callback cb, + void* data, + napi_value* result); +NAPI_EXTERN napi_status napi_create_error(napi_env env, + napi_value code, + napi_value msg, + napi_value* result); +NAPI_EXTERN napi_status napi_create_type_error(napi_env env, + napi_value code, + napi_value msg, + napi_value* result); +NAPI_EXTERN napi_status napi_create_range_error(napi_env env, + napi_value code, + napi_value msg, + napi_value* result); + +// Methods to get the native napi_value from Primitive type +NAPI_EXTERN napi_status napi_typeof(napi_env env, + napi_value value, + napi_valuetype* result); +NAPI_EXTERN napi_status napi_get_value_double(napi_env env, + napi_value value, + double* result); +NAPI_EXTERN napi_status napi_get_value_int32(napi_env env, + napi_value value, + int32_t* result); +NAPI_EXTERN napi_status napi_get_value_uint32(napi_env env, + napi_value value, + uint32_t* result); +NAPI_EXTERN napi_status napi_get_value_int64(napi_env env, + napi_value value, + int64_t* result); +NAPI_EXTERN napi_status napi_get_value_bool(napi_env env, + napi_value value, + bool* result); + +// Copies LATIN-1 encoded bytes from a string into a buffer. +NAPI_EXTERN napi_status napi_get_value_string_latin1(napi_env env, + napi_value value, + char* buf, + size_t bufsize, + size_t* result); + +// Copies UTF-8 encoded bytes from a string into a buffer. +NAPI_EXTERN napi_status napi_get_value_string_utf8(napi_env env, + napi_value value, + char* buf, + size_t bufsize, + size_t* result); + +// Copies UTF-16 encoded bytes from a string into a buffer. +NAPI_EXTERN napi_status napi_get_value_string_utf16(napi_env env, + napi_value value, + char16_t* buf, + size_t bufsize, + size_t* result); + +// Methods to coerce values +// These APIs may execute user scripts +NAPI_EXTERN napi_status napi_coerce_to_bool(napi_env env, + napi_value value, + napi_value* result); +NAPI_EXTERN napi_status napi_coerce_to_number(napi_env env, + napi_value value, + napi_value* result); +NAPI_EXTERN napi_status napi_coerce_to_object(napi_env env, + napi_value value, + napi_value* result); +NAPI_EXTERN napi_status napi_coerce_to_string(napi_env env, + napi_value value, + napi_value* result); + +// Methods to work with Objects +NAPI_EXTERN napi_status napi_get_prototype(napi_env env, + napi_value object, + napi_value* result); +NAPI_EXTERN napi_status napi_get_property_names(napi_env env, + napi_value object, + napi_value* result); +NAPI_EXTERN napi_status napi_set_property(napi_env env, + napi_value object, + napi_value key, + napi_value value); +NAPI_EXTERN napi_status napi_has_property(napi_env env, + napi_value object, + napi_value key, + bool* result); +NAPI_EXTERN napi_status napi_get_property(napi_env env, + napi_value object, + napi_value key, + napi_value* result); +NAPI_EXTERN napi_status napi_delete_property(napi_env env, + napi_value object, + napi_value key, + bool* result); +NAPI_EXTERN napi_status napi_has_own_property(napi_env env, + napi_value object, + napi_value key, + bool* result); +NAPI_EXTERN napi_status napi_set_named_property(napi_env env, + napi_value object, + const char* utf8name, + napi_value value); +NAPI_EXTERN napi_status napi_has_named_property(napi_env env, + napi_value object, + const char* utf8name, + bool* result); +NAPI_EXTERN napi_status napi_get_named_property(napi_env env, + napi_value object, + const char* utf8name, + napi_value* result); +NAPI_EXTERN napi_status napi_set_element(napi_env env, + napi_value object, + uint32_t index, + napi_value value); +NAPI_EXTERN napi_status napi_has_element(napi_env env, + napi_value object, + uint32_t index, + bool* result); +NAPI_EXTERN napi_status napi_get_element(napi_env env, + napi_value object, + uint32_t index, + napi_value* result); +NAPI_EXTERN napi_status napi_delete_element(napi_env env, + napi_value object, + uint32_t index, + bool* result); +NAPI_EXTERN napi_status +napi_define_properties(napi_env env, + napi_value object, + size_t property_count, + const napi_property_descriptor* properties); + +// Methods to work with Arrays +NAPI_EXTERN napi_status napi_is_array(napi_env env, + napi_value value, + bool* result); +NAPI_EXTERN napi_status napi_get_array_length(napi_env env, + napi_value value, + uint32_t* result); + +// Methods to compare values +NAPI_EXTERN napi_status napi_strict_equals(napi_env env, + napi_value lhs, + napi_value rhs, + bool* result); + +// Methods to work with Functions +NAPI_EXTERN napi_status napi_call_function(napi_env env, + napi_value recv, + napi_value func, + size_t argc, + const napi_value* argv, + napi_value* result); +NAPI_EXTERN napi_status napi_new_instance(napi_env env, + napi_value constructor, + size_t argc, + const napi_value* argv, + napi_value* result); +NAPI_EXTERN napi_status napi_instanceof(napi_env env, + napi_value object, + napi_value constructor, + bool* result); + +// Methods to work with napi_callbacks + +// Gets all callback info in a single call. (Ugly, but faster.) +NAPI_EXTERN napi_status napi_get_cb_info( + napi_env env, // [in] NAPI environment handle + napi_callback_info cbinfo, // [in] Opaque callback-info handle + size_t* argc, // [in-out] Specifies the size of the provided argv array + // and receives the actual count of args. + napi_value* argv, // [out] Array of values + napi_value* this_arg, // [out] Receives the JS 'this' arg for the call + void** data); // [out] Receives the data pointer for the callback. + +NAPI_EXTERN napi_status napi_get_new_target(napi_env env, + napi_callback_info cbinfo, + napi_value* result); +NAPI_EXTERN napi_status +napi_define_class(napi_env env, + const char* utf8name, + size_t length, + napi_callback constructor, + void* data, + size_t property_count, + const napi_property_descriptor* properties, + napi_value* result); + +// Methods to work with external data objects +NAPI_EXTERN napi_status napi_wrap(napi_env env, + napi_value js_object, + void* native_object, + napi_finalize finalize_cb, + void* finalize_hint, + napi_ref* result); +NAPI_EXTERN napi_status napi_unwrap(napi_env env, + napi_value js_object, + void** result); +NAPI_EXTERN napi_status napi_remove_wrap(napi_env env, + napi_value js_object, + void** result); +NAPI_EXTERN napi_status napi_create_external(napi_env env, + void* data, + napi_finalize finalize_cb, + void* finalize_hint, + napi_value* result); +NAPI_EXTERN napi_status napi_get_value_external(napi_env env, + napi_value value, + void** result); + +// Methods to control object lifespan + +// Set initial_refcount to 0 for a weak reference, >0 for a strong reference. +NAPI_EXTERN napi_status napi_create_reference(napi_env env, + napi_value value, + uint32_t initial_refcount, + napi_ref* result); + +// Deletes a reference. The referenced value is released, and may +// be GC'd unless there are other references to it. +NAPI_EXTERN napi_status napi_delete_reference(napi_env env, napi_ref ref); + +// Increments the reference count, optionally returning the resulting count. +// After this call the reference will be a strong reference because its +// refcount is >0, and the referenced object is effectively "pinned". +// Calling this when the refcount is 0 and the object is unavailable +// results in an error. +NAPI_EXTERN napi_status napi_reference_ref(napi_env env, + napi_ref ref, + uint32_t* result); + +// Decrements the reference count, optionally returning the resulting count. +// If the result is 0 the reference is now weak and the object may be GC'd +// at any time if there are no other references. Calling this when the +// refcount is already 0 results in an error. +NAPI_EXTERN napi_status napi_reference_unref(napi_env env, + napi_ref ref, + uint32_t* result); + +// Attempts to get a referenced value. If the reference is weak, +// the value might no longer be available, in that case the call +// is still successful but the result is NULL. +NAPI_EXTERN napi_status napi_get_reference_value(napi_env env, + napi_ref ref, + napi_value* result); + +NAPI_EXTERN napi_status napi_open_handle_scope(napi_env env, + napi_handle_scope* result); +NAPI_EXTERN napi_status napi_close_handle_scope(napi_env env, + napi_handle_scope scope); +NAPI_EXTERN napi_status +napi_open_escapable_handle_scope(napi_env env, + napi_escapable_handle_scope* result); +NAPI_EXTERN napi_status +napi_close_escapable_handle_scope(napi_env env, + napi_escapable_handle_scope scope); + +NAPI_EXTERN napi_status napi_escape_handle(napi_env env, + napi_escapable_handle_scope scope, + napi_value escapee, + napi_value* result); + +// Methods to support error handling +NAPI_EXTERN napi_status napi_throw(napi_env env, napi_value error); +NAPI_EXTERN napi_status napi_throw_error(napi_env env, + const char* code, + const char* msg); +NAPI_EXTERN napi_status napi_throw_type_error(napi_env env, + const char* code, + const char* msg); +NAPI_EXTERN napi_status napi_throw_range_error(napi_env env, + const char* code, + const char* msg); +NAPI_EXTERN napi_status napi_is_error(napi_env env, + napi_value value, + bool* result); + +// Methods to support catching exceptions +NAPI_EXTERN napi_status napi_is_exception_pending(napi_env env, bool* result); +NAPI_EXTERN napi_status napi_get_and_clear_last_exception(napi_env env, + napi_value* result); + +// Methods to work with array buffers and typed arrays +NAPI_EXTERN napi_status napi_is_arraybuffer(napi_env env, + napi_value value, + bool* result); +NAPI_EXTERN napi_status napi_create_arraybuffer(napi_env env, + size_t byte_length, + void** data, + napi_value* result); +NAPI_EXTERN napi_status +napi_create_external_arraybuffer(napi_env env, + void* external_data, + size_t byte_length, + napi_finalize finalize_cb, + void* finalize_hint, + napi_value* result); +NAPI_EXTERN napi_status napi_get_arraybuffer_info(napi_env env, + napi_value arraybuffer, + void** data, + size_t* byte_length); +NAPI_EXTERN napi_status napi_is_typedarray(napi_env env, + napi_value value, + bool* result); +NAPI_EXTERN napi_status napi_create_typedarray(napi_env env, + napi_typedarray_type type, + size_t length, + napi_value arraybuffer, + size_t byte_offset, + napi_value* result); +NAPI_EXTERN napi_status napi_get_typedarray_info(napi_env env, + napi_value typedarray, + napi_typedarray_type* type, + size_t* length, + void** data, + napi_value* arraybuffer, + size_t* byte_offset); + +NAPI_EXTERN napi_status napi_create_dataview(napi_env env, + size_t length, + napi_value arraybuffer, + size_t byte_offset, + napi_value* result); +NAPI_EXTERN napi_status napi_is_dataview(napi_env env, + napi_value value, + bool* result); +NAPI_EXTERN napi_status napi_get_dataview_info(napi_env env, + napi_value dataview, + size_t* bytelength, + void** data, + napi_value* arraybuffer, + size_t* byte_offset); + +// version management +NAPI_EXTERN napi_status napi_get_version(napi_env env, uint32_t* result); + +// Promises +NAPI_EXTERN napi_status napi_create_promise(napi_env env, + napi_deferred* deferred, + napi_value* promise); +NAPI_EXTERN napi_status napi_resolve_deferred(napi_env env, + napi_deferred deferred, + napi_value resolution); +NAPI_EXTERN napi_status napi_reject_deferred(napi_env env, + napi_deferred deferred, + napi_value rejection); +NAPI_EXTERN napi_status napi_is_promise(napi_env env, + napi_value value, + bool* is_promise); + +// Running a script +NAPI_EXTERN napi_status napi_run_script(napi_env env, + napi_value script, + napi_value* result); + +// Memory management +NAPI_EXTERN napi_status napi_adjust_external_memory(napi_env env, + int64_t change_in_bytes, + int64_t* adjusted_value); + +#if NAPI_VERSION >= 5 + +// Dates +NAPI_EXTERN napi_status napi_create_date(napi_env env, + double time, + napi_value* result); + +NAPI_EXTERN napi_status napi_is_date(napi_env env, + napi_value value, + bool* is_date); + +NAPI_EXTERN napi_status napi_get_date_value(napi_env env, + napi_value value, + double* result); + +// Add finalizer for pointer +NAPI_EXTERN napi_status napi_add_finalizer(napi_env env, + napi_value js_object, + void* native_object, + napi_finalize finalize_cb, + void* finalize_hint, + napi_ref* result); + +#endif // NAPI_VERSION >= 5 + +#if NAPI_VERSION >= 6 + +// BigInt +NAPI_EXTERN napi_status napi_create_bigint_int64(napi_env env, + int64_t value, + napi_value* result); +NAPI_EXTERN napi_status napi_create_bigint_uint64(napi_env env, + uint64_t value, + napi_value* result); +NAPI_EXTERN napi_status napi_create_bigint_words(napi_env env, + int sign_bit, + size_t word_count, + const uint64_t* words, + napi_value* result); +NAPI_EXTERN napi_status napi_get_value_bigint_int64(napi_env env, + napi_value value, + int64_t* result, + bool* lossless); +NAPI_EXTERN napi_status napi_get_value_bigint_uint64(napi_env env, + napi_value value, + uint64_t* result, + bool* lossless); +NAPI_EXTERN napi_status napi_get_value_bigint_words(napi_env env, + napi_value value, + int* sign_bit, + size_t* word_count, + uint64_t* words); + +// Object +NAPI_EXTERN napi_status +napi_get_all_property_names(napi_env env, + napi_value object, + napi_key_collection_mode key_mode, + napi_key_filter key_filter, + napi_key_conversion key_conversion, + napi_value* result); + +// Instance data +NAPI_EXTERN napi_status napi_set_instance_data(napi_env env, + void* data, + napi_finalize finalize_cb, + void* finalize_hint); + +NAPI_EXTERN napi_status napi_get_instance_data(napi_env env, + void** data); +#endif // NAPI_VERSION >= 6 + +#if NAPI_VERSION >= 7 +// ArrayBuffer detaching +NAPI_EXTERN napi_status napi_detach_arraybuffer(napi_env env, + napi_value arraybuffer); + +NAPI_EXTERN napi_status napi_is_detached_arraybuffer(napi_env env, + napi_value value, + bool* result); +#endif // NAPI_VERSION >= 7 + +#if NAPI_VERSION >= 8 +// Type tagging +NAPI_EXTERN napi_status napi_type_tag_object(napi_env env, + napi_value value, + const napi_type_tag* type_tag); + +NAPI_EXTERN napi_status +napi_check_object_type_tag(napi_env env, + napi_value value, + const napi_type_tag* type_tag, + bool* result); +NAPI_EXTERN napi_status napi_object_freeze(napi_env env, + napi_value object); +NAPI_EXTERN napi_status napi_object_seal(napi_env env, + napi_value object); +#endif // NAPI_VERSION >= 8 + +EXTERN_C_END + +#endif // SRC_JS_NATIVE_API_H_ diff --git a/third_party/node/src/js_native_api_types.h b/third_party/node/src/js_native_api_types.h new file mode 100644 index 0000000000000000000000000000000000000000..6aba06629b31543c13698dbb02b82db309587c4a --- /dev/null +++ b/third_party/node/src/js_native_api_types.h @@ -0,0 +1,160 @@ +#ifndef SRC_JS_NATIVE_API_TYPES_H_ +#define SRC_JS_NATIVE_API_TYPES_H_ + +// This file needs to be compatible with C compilers. +// This is a public include file, and these includes have essentially +// became part of it's API. +#include // NOLINT(modernize-deprecated-headers) +#include // NOLINT(modernize-deprecated-headers) + +#if !defined __cplusplus || (defined(_MSC_VER) && _MSC_VER < 1900) + typedef uint16_t char16_t; +#endif + +// JSVM API types are all opaque pointers for ABI stability +// typedef undefined structs instead of void* for compile time type safety +typedef struct napi_env__* napi_env; +typedef struct napi_value__* napi_value; +typedef struct napi_ref__* napi_ref; +typedef struct napi_handle_scope__* napi_handle_scope; +typedef struct napi_escapable_handle_scope__* napi_escapable_handle_scope; +typedef struct napi_callback_info__* napi_callback_info; +typedef struct napi_deferred__* napi_deferred; + +typedef enum { + napi_default = 0, + napi_writable = 1 << 0, + napi_enumerable = 1 << 1, + napi_configurable = 1 << 2, + + // Used with napi_define_class to distinguish static properties + // from instance properties. Ignored by napi_define_properties. + napi_static = 1 << 10, + +#if NAPI_VERSION >= 8 + // Default for class methods. + napi_default_method = napi_writable | napi_configurable, + + // Default for object properties, like in JS obj[prop]. + napi_default_jsproperty = napi_writable | + napi_enumerable | + napi_configurable, +#endif // NAPI_VERSION >= 8 +} napi_property_attributes; + +typedef enum { + // ES6 types (corresponds to typeof) + napi_undefined, + napi_null, + napi_boolean, + napi_number, + napi_string, + napi_symbol, + napi_object, + napi_function, + napi_external, + napi_bigint, +} napi_valuetype; + +typedef enum { + napi_int8_array, + napi_uint8_array, + napi_uint8_clamped_array, + napi_int16_array, + napi_uint16_array, + napi_int32_array, + napi_uint32_array, + napi_float32_array, + napi_float64_array, + napi_bigint64_array, + napi_biguint64_array, +} napi_typedarray_type; + +typedef enum { + napi_ok, + napi_invalid_arg, + napi_object_expected, + napi_string_expected, + napi_name_expected, + napi_function_expected, + napi_number_expected, + napi_boolean_expected, + napi_array_expected, + napi_generic_failure, + napi_pending_exception, + napi_cancelled, + napi_escape_called_twice, + napi_handle_scope_mismatch, + napi_callback_scope_mismatch, + napi_queue_full, + napi_closing, + napi_bigint_expected, + napi_date_expected, + napi_arraybuffer_expected, + napi_detachable_arraybuffer_expected, + napi_would_deadlock // unused +} napi_status; +// Note: when adding a new enum value to `napi_status`, please also update +// * `const int last_status` in the definition of `napi_get_last_error_info()' +// in file js_native_api_v8.cc. +// * `const char* error_messages[]` in file js_native_api_v8.cc with a brief +// message explaining the error. +// * the definition of `napi_status` in doc/api/n-api.md to reflect the newly +// added value(s). + +typedef napi_value (*napi_callback)(napi_env env, + napi_callback_info info); +typedef void (*napi_finalize)(napi_env env, + void* finalize_data, + void* finalize_hint); + +typedef struct { + // One of utf8name or name should be NULL. + const char* utf8name; + napi_value name; + + napi_callback method; + napi_callback getter; + napi_callback setter; + napi_value value; + + napi_property_attributes attributes; + void* data; +} napi_property_descriptor; + +typedef struct { + const char* error_message; + void* engine_reserved; + uint32_t engine_error_code; + napi_status error_code; +} napi_extended_error_info; + +#if NAPI_VERSION >= 6 +typedef enum { + napi_key_include_prototypes, + napi_key_own_only +} napi_key_collection_mode; + +typedef enum { + napi_key_all_properties = 0, + napi_key_writable = 1, + napi_key_enumerable = 1 << 1, + napi_key_configurable = 1 << 2, + napi_key_skip_strings = 1 << 3, + napi_key_skip_symbols = 1 << 4 +} napi_key_filter; + +typedef enum { + napi_key_keep_numbers, + napi_key_numbers_to_strings +} napi_key_conversion; +#endif // NAPI_VERSION >= 6 + +#if NAPI_VERSION >= 8 +typedef struct { + uint64_t lower; + uint64_t upper; +} napi_type_tag; +#endif // NAPI_VERSION >= 8 + +#endif // SRC_JS_NATIVE_API_TYPES_H_ diff --git a/third_party/node/src/node_api.h b/third_party/node/src/node_api.h new file mode 100644 index 0000000000000000000000000000000000000000..1772c67c15afb2d2712b1900a584f627852e3d7e --- /dev/null +++ b/third_party/node/src/node_api.h @@ -0,0 +1,275 @@ +#ifndef SRC_NODE_API_H_ +#define SRC_NODE_API_H_ + +#ifdef BUILDING_NODE_EXTENSION + #ifdef _WIN32 + // Building native module against node + #define NAPI_EXTERN __declspec(dllimport) + #elif defined(__wasm32__) + #define NAPI_EXTERN __attribute__((__import_module__("napi"))) + #endif +#endif +#include "js_native_api.h" +#include "node_api_types.h" + +struct uv_loop_s; // Forward declaration. + +#ifdef _WIN32 +# define NAPI_MODULE_EXPORT __declspec(dllexport) +#else +# define NAPI_MODULE_EXPORT __attribute__((visibility("default"))) +#endif + +#if defined(__GNUC__) +# define NAPI_NO_RETURN __attribute__((noreturn)) +#elif defined(_WIN32) +# define NAPI_NO_RETURN __declspec(noreturn) +#else +# define NAPI_NO_RETURN +#endif + +typedef napi_value (*napi_addon_register_func)(napi_env env, + napi_value exports); + +typedef struct napi_module { + int nm_version; + unsigned int nm_flags; + const char* nm_filename; + napi_addon_register_func nm_register_func; + const char* nm_modname; + void* nm_priv; + void* reserved[4]; +} napi_module; + +#define NAPI_MODULE_VERSION 1 + +#if defined(_MSC_VER) +#pragma section(".CRT$XCU", read) +#define NAPI_C_CTOR(fn) \ + static void __cdecl fn(void); \ + __declspec(dllexport, allocate(".CRT$XCU")) void(__cdecl * fn##_)(void) = \ + fn; \ + static void __cdecl fn(void) +#else +#define NAPI_C_CTOR(fn) \ + static void fn(void) __attribute__((constructor)); \ + static void fn(void) +#endif + +#define NAPI_MODULE_X(modname, regfunc, priv, flags) \ + EXTERN_C_START \ + static napi_module _module = \ + { \ + NAPI_MODULE_VERSION, \ + flags, \ + __FILE__, \ + regfunc, \ + #modname, \ + priv, \ + {0}, \ + }; \ + NAPI_C_CTOR(_register_ ## modname) { \ + napi_module_register(&_module); \ + } \ + EXTERN_C_END + +#define NAPI_MODULE_INITIALIZER_X(base, version) \ + NAPI_MODULE_INITIALIZER_X_HELPER(base, version) +#define NAPI_MODULE_INITIALIZER_X_HELPER(base, version) base##version + +#ifdef __wasm32__ +#define NAPI_WASM_INITIALIZER \ + NAPI_MODULE_INITIALIZER_X(napi_register_wasm_v, NAPI_MODULE_VERSION) +#define NAPI_MODULE(modname, regfunc) \ + EXTERN_C_START \ + NAPI_MODULE_EXPORT napi_value NAPI_WASM_INITIALIZER(napi_env env, \ + napi_value exports) { \ + return regfunc(env, exports); \ + } \ + EXTERN_C_END +#else +#define NAPI_MODULE(modname, regfunc) \ + NAPI_MODULE_X(modname, regfunc, NULL, 0) // NOLINT (readability/null_usage) +#endif + +#define NAPI_MODULE_INITIALIZER_BASE napi_register_module_v + +#define NAPI_MODULE_INITIALIZER \ + NAPI_MODULE_INITIALIZER_X(NAPI_MODULE_INITIALIZER_BASE, \ + NAPI_MODULE_VERSION) + +#define NAPI_MODULE_INIT() \ + EXTERN_C_START \ + NAPI_MODULE_EXPORT napi_value \ + NAPI_MODULE_INITIALIZER(napi_env env, napi_value exports); \ + EXTERN_C_END \ + NAPI_MODULE(NODE_GYP_MODULE_NAME, NAPI_MODULE_INITIALIZER) \ + napi_value NAPI_MODULE_INITIALIZER(napi_env env, \ + napi_value exports) + +EXTERN_C_START + +NAPI_EXTERN void napi_module_register(napi_module* mod); + +NAPI_EXTERN NAPI_NO_RETURN void napi_fatal_error(const char* location, + size_t location_len, + const char* message, + size_t message_len); + +// Methods for custom handling of async operations +NAPI_EXTERN napi_status napi_async_init(napi_env env, + napi_value async_resource, + napi_value async_resource_name, + napi_async_context* result); + +NAPI_EXTERN napi_status napi_async_destroy(napi_env env, + napi_async_context async_context); + +NAPI_EXTERN napi_status napi_make_callback(napi_env env, + napi_async_context async_context, + napi_value recv, + napi_value func, + size_t argc, + const napi_value* argv, + napi_value* result); + +// Methods to provide node::Buffer functionality with napi types +NAPI_EXTERN napi_status napi_create_buffer(napi_env env, + size_t length, + void** data, + napi_value* result); +NAPI_EXTERN napi_status napi_create_external_buffer(napi_env env, + size_t length, + void* data, + napi_finalize finalize_cb, + void* finalize_hint, + napi_value* result); +NAPI_EXTERN napi_status napi_create_buffer_copy(napi_env env, + size_t length, + const void* data, + void** result_data, + napi_value* result); +NAPI_EXTERN napi_status napi_is_buffer(napi_env env, + napi_value value, + bool* result); +NAPI_EXTERN napi_status napi_get_buffer_info(napi_env env, + napi_value value, + void** data, + size_t* length); + +// Methods to manage simple async operations +NAPI_EXTERN +napi_status napi_create_async_work(napi_env env, + napi_value async_resource, + napi_value async_resource_name, + napi_async_execute_callback execute, + napi_async_complete_callback complete, + void* data, + napi_async_work* result); +NAPI_EXTERN napi_status napi_delete_async_work(napi_env env, + napi_async_work work); +NAPI_EXTERN napi_status napi_queue_async_work(napi_env env, + napi_async_work work); +NAPI_EXTERN napi_status napi_cancel_async_work(napi_env env, + napi_async_work work); + +// version management +NAPI_EXTERN +napi_status napi_get_node_version(napi_env env, + const napi_node_version** version); + +#if NAPI_VERSION >= 2 + +// Return the current libuv event loop for a given environment +NAPI_EXTERN napi_status napi_get_uv_event_loop(napi_env env, + struct uv_loop_s** loop); + +#endif // NAPI_VERSION >= 2 + +#if NAPI_VERSION >= 3 + +NAPI_EXTERN napi_status napi_fatal_exception(napi_env env, napi_value err); + +NAPI_EXTERN napi_status napi_add_env_cleanup_hook(napi_env env, + void (*fun)(void* arg), + void* arg); + +NAPI_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env, + void (*fun)(void* arg), + void* arg); + +NAPI_EXTERN napi_status napi_open_callback_scope(napi_env env, + napi_value resource_object, + napi_async_context context, + napi_callback_scope* result); + +NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env, + napi_callback_scope scope); + +#endif // NAPI_VERSION >= 3 + +#if NAPI_VERSION >= 4 + +#ifndef __wasm32__ +// Calling into JS from other threads +NAPI_EXTERN napi_status +napi_create_threadsafe_function(napi_env env, + napi_value func, + napi_value async_resource, + napi_value async_resource_name, + size_t max_queue_size, + size_t initial_thread_count, + void* thread_finalize_data, + napi_finalize thread_finalize_cb, + void* context, + napi_threadsafe_function_call_js call_js_cb, + napi_threadsafe_function* result); + +NAPI_EXTERN napi_status +napi_get_threadsafe_function_context(napi_threadsafe_function func, + void** result); + +NAPI_EXTERN napi_status +napi_call_threadsafe_function(napi_threadsafe_function func, + void* data, + napi_threadsafe_function_call_mode is_blocking); + +NAPI_EXTERN napi_status +napi_acquire_threadsafe_function(napi_threadsafe_function func); + +NAPI_EXTERN napi_status +napi_release_threadsafe_function(napi_threadsafe_function func, + napi_threadsafe_function_release_mode mode); + +NAPI_EXTERN napi_status +napi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func); + +NAPI_EXTERN napi_status +napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func); +#endif // __wasm32__ + +#endif // NAPI_VERSION >= 4 + +#if NAPI_VERSION >= 8 + +NAPI_EXTERN napi_status napi_add_async_cleanup_hook( + napi_env env, + napi_async_cleanup_hook hook, + void* arg, + napi_async_cleanup_hook_handle* remove_handle); + +NAPI_EXTERN napi_status napi_remove_async_cleanup_hook( + napi_async_cleanup_hook_handle remove_handle); + +#endif // NAPI_VERSION >= 8 + +#ifdef NAPI_EXPERIMENTAL + +NAPI_EXTERN napi_status +node_api_get_module_file_name(napi_env env, const char** result); + +#endif // NAPI_EXPERIMENTAL + +EXTERN_C_END + +#endif // SRC_NODE_API_H_ diff --git a/third_party/node/src/node_api_types.h b/third_party/node/src/node_api_types.h new file mode 100644 index 0000000000000000000000000000000000000000..58ffc61b3a5f51b71f33f6dd904d61da12089f3b --- /dev/null +++ b/third_party/node/src/node_api_types.h @@ -0,0 +1,50 @@ +#ifndef SRC_NODE_API_TYPES_H_ +#define SRC_NODE_API_TYPES_H_ + +#include "js_native_api_types.h" + +typedef struct napi_callback_scope__* napi_callback_scope; +typedef struct napi_async_context__* napi_async_context; +typedef struct napi_async_work__* napi_async_work; +#if NAPI_VERSION >= 4 +typedef struct napi_threadsafe_function__* napi_threadsafe_function; +#endif // NAPI_VERSION >= 4 + +#if NAPI_VERSION >= 4 +typedef enum { + napi_tsfn_release, + napi_tsfn_abort +} napi_threadsafe_function_release_mode; + +typedef enum { + napi_tsfn_nonblocking, + napi_tsfn_blocking +} napi_threadsafe_function_call_mode; +#endif // NAPI_VERSION >= 4 + +typedef void (*napi_async_execute_callback)(napi_env env, + void* data); +typedef void (*napi_async_complete_callback)(napi_env env, + napi_status status, + void* data); +#if NAPI_VERSION >= 4 +typedef void (*napi_threadsafe_function_call_js)(napi_env env, + napi_value js_callback, + void* context, + void* data); +#endif // NAPI_VERSION >= 4 + +typedef struct { + uint32_t major; + uint32_t minor; + uint32_t patch; + const char* release; +} napi_node_version; + +#if NAPI_VERSION >= 8 +typedef struct napi_async_cleanup_hook_handle__* napi_async_cleanup_hook_handle; +typedef void (*napi_async_cleanup_hook)(napi_async_cleanup_hook_handle handle, + void* data); +#endif // NAPI_VERSION >= 8 + +#endif // SRC_NODE_API_TYPES_H_ diff --git a/third_party/openSLES/BUILD.gn b/third_party/openSLES/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..9a1e8993079b00af5eda1808cb0d985c1473139e --- /dev/null +++ b/third_party/openSLES/BUILD.gn @@ -0,0 +1,43 @@ +# Copyright (c) 2022 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos/ndk/ndk.gni") + +config("libSLES_public_config") { + include_dirs = [ "api" ] +} + +group("libSLES") { + public_configs = [ ":libSLES_public_config" ] +} + +ohos_ndk_headers("sles_header") { + dest_dir = "$ndk_headers_out_dir/SLES" + sources = [ + "api/1.0.1/OpenSLES.h", + "api/1.0.1/OpenSLES_OpenHarmony.h", + "api/1.0.1/OpenSLES_Platform.h", + ] +} + +ohos_ndk_library("libOpenSLES_ndk") { + output_name = "OpenSLES" + output_extension = "so" + ndk_description_file = "./openSLES.ndk.json" + system_capability = "SystemCapability.Multimedia.Audio.Core" + system_capability_headers = [ + "SLES/OpenSLES.h", + "SLES/OpenSLES_Platform.h", + "SLES/OpenSLES_OpenHarmony.h", + ] +} diff --git a/third_party/openSLES/NOTICE b/third_party/openSLES/NOTICE new file mode 100644 index 0000000000000000000000000000000000000000..3484e4f258b20fb65a9fb63fbbaa9f997aadce39 --- /dev/null +++ b/third_party/openSLES/NOTICE @@ -0,0 +1,20 @@ +Copyright (c) 2007-2009 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and /or associated documentation files (the "Materials "), to +deal in the Materials without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Materials, and to permit persons to whom the Materials are +furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS IN THE +MATERIALS. \ No newline at end of file diff --git a/third_party/openSLES/OAT.xml b/third_party/openSLES/OAT.xml new file mode 100644 index 0000000000000000000000000000000000000000..6d58a7cb629407f8d4c3d32808f94834c68f3f0a --- /dev/null +++ b/third_party/openSLES/OAT.xml @@ -0,0 +1,95 @@ + + + + + + COPYING + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third_party/openSLES/README.OpenSource b/third_party/openSLES/README.OpenSource new file mode 100644 index 0000000000000000000000000000000000000000..2eda1e4fdac76f25a768837cd831a5bb01ea1cb9 --- /dev/null +++ b/third_party/openSLES/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "Khronos Group - OpenSL ES", + "License": "null", + "License File": "NOTICE", + "Version Number": "1.0.1", + "Owner": "yangshuai67@huawei.com", + "Upstream URL": "https://github.com/KhronosGroup/OpenSL-ES-Registry.git", + "Description": "OpenSL ES™ is a royalty-free, cross-platform, hardware-accelerated audio API tuned for embedded systems." + } +] \ No newline at end of file diff --git a/third_party/openSLES/api/1.0.1/OpenSLES.h b/third_party/openSLES/api/1.0.1/OpenSLES.h new file mode 100644 index 0000000000000000000000000000000000000000..7dbdbd32fdcd03e2a230f7b456e6c8671fa2314d --- /dev/null +++ b/third_party/openSLES/api/1.0.1/OpenSLES.h @@ -0,0 +1,2774 @@ +/* + * Copyright (c) 2007-2009 The Khronos Group Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and /or associated documentation files (the "Materials "), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS IN THE + * MATERIALS. + * + * OpenSLES.h - OpenSL ES version 1.0.1 + * + */ + +/****************************************************************************/ +/* NOTE: This file is a standard OpenSL ES header file and should not be */ +/* modified in any way. */ +/****************************************************************************/ + +#ifndef OPENSL_ES_H_ +#define OPENSL_ES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "OpenSLES_Platform.h" + + +/*****************************************************************************/ +/* Common types, structures, and defines */ +/*****************************************************************************/ + +#ifndef _KHRONOS_KEYS_ +#define _KHRONOS_KEYS_ + +#define KHRONOS_TITLE "KhronosTitle" +#define KHRONOS_ALBUM "KhronosAlbum" +#define KHRONOS_TRACK_NUMBER "KhronosTrackNumber" +#define KHRONOS_ARTIST "KhronosArtist" +#define KHRONOS_GENRE "KhronosGenre" +#define KHRONOS_YEAR "KhronosYear" +#define KHRONOS_COMMENT "KhronosComment" +#define KHRONOS_ARTIST_URL "KhronosArtistURL" +#define KHRONOS_CONTENT_URL "KhronosContentURL" +#define KHRONOS_RATING "KhronosRating" +#define KHRONOS_ALBUM_ART "KhronosAlbumArt" +#define KHRONOS_COPYRIGHT "KhronosCopyright" + +#endif + + +/* remap common types to SL types for clarity */ +typedef sl_int8_t SLint8; /* 8 bit signed integer */ +typedef sl_uint8_t SLuint8; /* 8 bit unsigned integer */ +typedef sl_int16_t SLint16; /* 16 bit signed integer */ +typedef sl_uint16_t SLuint16; /* 16 bit unsigned integer */ +typedef sl_int32_t SLint32; /* 32 bit signed integer */ +typedef sl_uint32_t SLuint32; /* 32 bit unsigned integer */ + +typedef SLuint32 SLboolean; +#define SL_BOOLEAN_FALSE ((SLboolean) 0x00000000) +#define SL_BOOLEAN_TRUE ((SLboolean) 0x00000001) + +typedef SLuint8 SLchar; /* UTF-8 is to be used */ +typedef SLint16 SLmillibel; +typedef SLuint32 SLmillisecond; +typedef SLuint32 SLmilliHertz; +typedef SLint32 SLmillimeter; +typedef SLint32 SLmillidegree; +typedef SLint16 SLpermille; +typedef SLuint32 SLmicrosecond; +typedef SLuint32 SLresult; + +#define SL_MILLIBEL_MAX ((SLmillibel) 0x7FFF) +#define SL_MILLIBEL_MIN ((SLmillibel) (-SL_MILLIBEL_MAX-1)) + +#define SL_MILLIHERTZ_MAX ((SLmilliHertz) 0xFFFFFFFF) +#define SL_MILLIMETER_MAX ((SLmillimeter) 0x7FFFFFFF) + +/** Interface ID defined as a UUID */ +typedef const struct SLInterfaceID_ { + SLuint32 time_low; + SLuint16 time_mid; + SLuint16 time_hi_and_version; + SLuint16 clock_seq; + SLuint8 node[6]; +} * SLInterfaceID; + +/* Forward declaration for the object interface */ +struct SLObjectItf_; + +typedef const struct SLObjectItf_ * const * SLObjectItf; + +/* Objects ID's */ + +#define SL_OBJECTID_ENGINE ((SLuint32) 0x00001001) +#define SL_OBJECTID_LEDDEVICE ((SLuint32) 0x00001002) +#define SL_OBJECTID_VIBRADEVICE ((SLuint32) 0x00001003) +#define SL_OBJECTID_AUDIOPLAYER ((SLuint32) 0x00001004) +#define SL_OBJECTID_AUDIORECORDER ((SLuint32) 0x00001005) +#define SL_OBJECTID_MIDIPLAYER ((SLuint32) 0x00001006) +#define SL_OBJECTID_LISTENER ((SLuint32) 0x00001007) +#define SL_OBJECTID_3DGROUP ((SLuint32) 0x00001008) +#define SL_OBJECTID_OUTPUTMIX ((SLuint32) 0x00001009) +#define SL_OBJECTID_METADATAEXTRACTOR ((SLuint32) 0x0000100A) + + +/* SL Profiles */ + +#define SL_PROFILES_PHONE ((SLuint16) 0x0001) +#define SL_PROFILES_MUSIC ((SLuint16) 0x0002) +#define SL_PROFILES_GAME ((SLuint16) 0x0004) + +/* Types of voices supported by the system */ + +#define SL_VOICETYPE_2D_AUDIO ((SLuint16) 0x0001) +#define SL_VOICETYPE_MIDI ((SLuint16) 0x0002) +#define SL_VOICETYPE_3D_AUDIO ((SLuint16) 0x0004) +#define SL_VOICETYPE_3D_MIDIOUTPUT ((SLuint16) 0x0008) + +/* Convenient macros representing various different priority levels, for use with the SetPriority method */ + +#define SL_PRIORITY_LOWEST ((SLint32) (-0x7FFFFFFF-1)) +#define SL_PRIORITY_VERYLOW ((SLint32) -0x60000000) +#define SL_PRIORITY_LOW ((SLint32) -0x40000000) +#define SL_PRIORITY_BELOWNORMAL ((SLint32) -0x20000000) +#define SL_PRIORITY_NORMAL ((SLint32) 0x00000000) +#define SL_PRIORITY_ABOVENORMAL ((SLint32) 0x20000000) +#define SL_PRIORITY_HIGH ((SLint32) 0x40000000) +#define SL_PRIORITY_VERYHIGH ((SLint32) 0x60000000) +#define SL_PRIORITY_HIGHEST ((SLint32) 0x7FFFFFFF) + + +/** These macros list the various sample formats that are possible on audio input and output devices. */ + +#define SL_PCMSAMPLEFORMAT_FIXED_8 ((SLuint16) 0x0008) +#define SL_PCMSAMPLEFORMAT_FIXED_16 ((SLuint16) 0x0010) +#define SL_PCMSAMPLEFORMAT_FIXED_20 ((SLuint16) 0x0014) +#define SL_PCMSAMPLEFORMAT_FIXED_24 ((SLuint16) 0x0018) +#define SL_PCMSAMPLEFORMAT_FIXED_28 ((SLuint16) 0x001C) +#define SL_PCMSAMPLEFORMAT_FIXED_32 ((SLuint16) 0x0020) + + +/** These macros specify the commonly used sampling rates (in milliHertz) supported by most audio I/O devices. */ + +#define SL_SAMPLINGRATE_8 ((SLuint32) 8000000) +#define SL_SAMPLINGRATE_11_025 ((SLuint32) 11025000) +#define SL_SAMPLINGRATE_12 ((SLuint32) 12000000) +#define SL_SAMPLINGRATE_16 ((SLuint32) 16000000) +#define SL_SAMPLINGRATE_22_05 ((SLuint32) 22050000) +#define SL_SAMPLINGRATE_24 ((SLuint32) 24000000) +#define SL_SAMPLINGRATE_32 ((SLuint32) 32000000) +#define SL_SAMPLINGRATE_44_1 ((SLuint32) 44100000) +#define SL_SAMPLINGRATE_48 ((SLuint32) 48000000) +#define SL_SAMPLINGRATE_64 ((SLuint32) 64000000) +#define SL_SAMPLINGRATE_88_2 ((SLuint32) 88200000) +#define SL_SAMPLINGRATE_96 ((SLuint32) 96000000) +#define SL_SAMPLINGRATE_192 ((SLuint32) 192000000) + +#define SL_SPEAKER_FRONT_LEFT ((SLuint32) 0x00000001) +#define SL_SPEAKER_FRONT_RIGHT ((SLuint32) 0x00000002) +#define SL_SPEAKER_FRONT_CENTER ((SLuint32) 0x00000004) +#define SL_SPEAKER_LOW_FREQUENCY ((SLuint32) 0x00000008) +#define SL_SPEAKER_BACK_LEFT ((SLuint32) 0x00000010) +#define SL_SPEAKER_BACK_RIGHT ((SLuint32) 0x00000020) +#define SL_SPEAKER_FRONT_LEFT_OF_CENTER ((SLuint32) 0x00000040) +#define SL_SPEAKER_FRONT_RIGHT_OF_CENTER ((SLuint32) 0x00000080) +#define SL_SPEAKER_BACK_CENTER ((SLuint32) 0x00000100) +#define SL_SPEAKER_SIDE_LEFT ((SLuint32) 0x00000200) +#define SL_SPEAKER_SIDE_RIGHT ((SLuint32) 0x00000400) +#define SL_SPEAKER_TOP_CENTER ((SLuint32) 0x00000800) +#define SL_SPEAKER_TOP_FRONT_LEFT ((SLuint32) 0x00001000) +#define SL_SPEAKER_TOP_FRONT_CENTER ((SLuint32) 0x00002000) +#define SL_SPEAKER_TOP_FRONT_RIGHT ((SLuint32) 0x00004000) +#define SL_SPEAKER_TOP_BACK_LEFT ((SLuint32) 0x00008000) +#define SL_SPEAKER_TOP_BACK_CENTER ((SLuint32) 0x00010000) +#define SL_SPEAKER_TOP_BACK_RIGHT ((SLuint32) 0x00020000) + + +/*****************************************************************************/ +/* Errors */ +/* */ +/*****************************************************************************/ + +#define SL_RESULT_SUCCESS ((SLuint32) 0x00000000) +#define SL_RESULT_PRECONDITIONS_VIOLATED ((SLuint32) 0x00000001) +#define SL_RESULT_PARAMETER_INVALID ((SLuint32) 0x00000002) +#define SL_RESULT_MEMORY_FAILURE ((SLuint32) 0x00000003) +#define SL_RESULT_RESOURCE_ERROR ((SLuint32) 0x00000004) +#define SL_RESULT_RESOURCE_LOST ((SLuint32) 0x00000005) +#define SL_RESULT_IO_ERROR ((SLuint32) 0x00000006) +#define SL_RESULT_BUFFER_INSUFFICIENT ((SLuint32) 0x00000007) +#define SL_RESULT_CONTENT_CORRUPTED ((SLuint32) 0x00000008) +#define SL_RESULT_CONTENT_UNSUPPORTED ((SLuint32) 0x00000009) +#define SL_RESULT_CONTENT_NOT_FOUND ((SLuint32) 0x0000000A) +#define SL_RESULT_PERMISSION_DENIED ((SLuint32) 0x0000000B) +#define SL_RESULT_FEATURE_UNSUPPORTED ((SLuint32) 0x0000000C) +#define SL_RESULT_INTERNAL_ERROR ((SLuint32) 0x0000000D) +#define SL_RESULT_UNKNOWN_ERROR ((SLuint32) 0x0000000E) +#define SL_RESULT_OPERATION_ABORTED ((SLuint32) 0x0000000F) +#define SL_RESULT_CONTROL_LOST ((SLuint32) 0x00000010) + + +/* Object state definitions */ + +#define SL_OBJECT_STATE_UNREALIZED ((SLuint32) 0x00000001) +#define SL_OBJECT_STATE_REALIZED ((SLuint32) 0x00000002) +#define SL_OBJECT_STATE_SUSPENDED ((SLuint32) 0x00000003) + +/* Object event definitions */ + +#define SL_OBJECT_EVENT_RUNTIME_ERROR ((SLuint32) 0x00000001) +#define SL_OBJECT_EVENT_ASYNC_TERMINATION ((SLuint32) 0x00000002) +#define SL_OBJECT_EVENT_RESOURCES_LOST ((SLuint32) 0x00000003) +#define SL_OBJECT_EVENT_RESOURCES_AVAILABLE ((SLuint32) 0x00000004) +#define SL_OBJECT_EVENT_ITF_CONTROL_TAKEN ((SLuint32) 0x00000005) +#define SL_OBJECT_EVENT_ITF_CONTROL_RETURNED ((SLuint32) 0x00000006) +#define SL_OBJECT_EVENT_ITF_PARAMETERS_CHANGED ((SLuint32) 0x00000007) + + +/*****************************************************************************/ +/* Interface definitions */ +/*****************************************************************************/ + +/** NULL Interface */ + +extern const SLInterfaceID SL_IID_NULL; + +/*---------------------------------------------------------------------------*/ +/* Data Source and Data Sink Structures */ +/*---------------------------------------------------------------------------*/ + +/** Data locator macros */ +#define SL_DATALOCATOR_URI ((SLuint32) 0x00000001) +#define SL_DATALOCATOR_ADDRESS ((SLuint32) 0x00000002) +#define SL_DATALOCATOR_IODEVICE ((SLuint32) 0x00000003) +#define SL_DATALOCATOR_OUTPUTMIX ((SLuint32) 0x00000004) +#define SL_DATALOCATOR_RESERVED5 ((SLuint32) 0x00000005) +#define SL_DATALOCATOR_BUFFERQUEUE ((SLuint32) 0x00000006) +#define SL_DATALOCATOR_MIDIBUFFERQUEUE ((SLuint32) 0x00000007) +#define SL_DATALOCATOR_RESERVED8 ((SLuint32) 0x00000008) + + + +/** URI-based data locator definition where locatorType must be SL_DATALOCATOR_URI*/ +typedef struct SLDataLocator_URI_ { + SLuint32 locatorType; + SLchar * URI; +} SLDataLocator_URI; + +/** Address-based data locator definition where locatorType must be SL_DATALOCATOR_ADDRESS*/ +typedef struct SLDataLocator_Address_ { + SLuint32 locatorType; + void *pAddress; + SLuint32 length; +} SLDataLocator_Address; + +/** IODevice-types */ +#define SL_IODEVICE_AUDIOINPUT ((SLuint32) 0x00000001) +#define SL_IODEVICE_LEDARRAY ((SLuint32) 0x00000002) +#define SL_IODEVICE_VIBRA ((SLuint32) 0x00000003) +#define SL_IODEVICE_RESERVED4 ((SLuint32) 0x00000004) +#define SL_IODEVICE_RESERVED5 ((SLuint32) 0x00000005) + +/** IODevice-based data locator definition where locatorType must be SL_DATALOCATOR_IODEVICE*/ +typedef struct SLDataLocator_IODevice_ { + SLuint32 locatorType; + SLuint32 deviceType; + SLuint32 deviceID; + SLObjectItf device; +} SLDataLocator_IODevice; + +/** OutputMix-based data locator definition where locatorType must be SL_DATALOCATOR_OUTPUTMIX*/ +typedef struct SLDataLocator_OutputMix { + SLuint32 locatorType; + SLObjectItf outputMix; +} SLDataLocator_OutputMix; + + +/** BufferQueue-based data locator definition where locatorType must be SL_DATALOCATOR_BUFFERQUEUE*/ +typedef struct SLDataLocator_BufferQueue { + SLuint32 locatorType; + SLuint32 numBuffers; +} SLDataLocator_BufferQueue; + +/** MidiBufferQueue-based data locator definition where locatorType must be SL_DATALOCATOR_MIDIBUFFERQUEUE*/ +typedef struct SLDataLocator_MIDIBufferQueue { + SLuint32 locatorType; + SLuint32 tpqn; + SLuint32 numBuffers; +} SLDataLocator_MIDIBufferQueue; + +/** Data format defines */ +#define SL_DATAFORMAT_MIME ((SLuint32) 0x00000001) +#define SL_DATAFORMAT_PCM ((SLuint32) 0x00000002) +#define SL_DATAFORMAT_RESERVED3 ((SLuint32) 0x00000003) + + +/** MIME-type-based data format definition where formatType must be SL_DATAFORMAT_MIME*/ +typedef struct SLDataFormat_MIME_ { + SLuint32 formatType; + SLchar * mimeType; + SLuint32 containerType; +} SLDataFormat_MIME; + +/* Byte order of a block of 16- or 32-bit data */ +#define SL_BYTEORDER_BIGENDIAN ((SLuint32) 0x00000001) +#define SL_BYTEORDER_LITTLEENDIAN ((SLuint32) 0x00000002) + +/* Container type */ +#define SL_CONTAINERTYPE_UNSPECIFIED ((SLuint32) 0x00000001) +#define SL_CONTAINERTYPE_RAW ((SLuint32) 0x00000002) +#define SL_CONTAINERTYPE_ASF ((SLuint32) 0x00000003) +#define SL_CONTAINERTYPE_AVI ((SLuint32) 0x00000004) +#define SL_CONTAINERTYPE_BMP ((SLuint32) 0x00000005) +#define SL_CONTAINERTYPE_JPG ((SLuint32) 0x00000006) +#define SL_CONTAINERTYPE_JPG2000 ((SLuint32) 0x00000007) +#define SL_CONTAINERTYPE_M4A ((SLuint32) 0x00000008) +#define SL_CONTAINERTYPE_MP3 ((SLuint32) 0x00000009) +#define SL_CONTAINERTYPE_MP4 ((SLuint32) 0x0000000A) +#define SL_CONTAINERTYPE_MPEG_ES ((SLuint32) 0x0000000B) +#define SL_CONTAINERTYPE_MPEG_PS ((SLuint32) 0x0000000C) +#define SL_CONTAINERTYPE_MPEG_TS ((SLuint32) 0x0000000D) +#define SL_CONTAINERTYPE_QT ((SLuint32) 0x0000000E) +#define SL_CONTAINERTYPE_WAV ((SLuint32) 0x0000000F) +#define SL_CONTAINERTYPE_XMF_0 ((SLuint32) 0x00000010) +#define SL_CONTAINERTYPE_XMF_1 ((SLuint32) 0x00000011) +#define SL_CONTAINERTYPE_XMF_2 ((SLuint32) 0x00000012) +#define SL_CONTAINERTYPE_XMF_3 ((SLuint32) 0x00000013) +#define SL_CONTAINERTYPE_XMF_GENERIC ((SLuint32) 0x00000014) +#define SL_CONTAINERTYPE_AMR ((SLuint32) 0x00000015) +#define SL_CONTAINERTYPE_AAC ((SLuint32) 0x00000016) +#define SL_CONTAINERTYPE_3GPP ((SLuint32) 0x00000017) +#define SL_CONTAINERTYPE_3GA ((SLuint32) 0x00000018) +#define SL_CONTAINERTYPE_RM ((SLuint32) 0x00000019) +#define SL_CONTAINERTYPE_DMF ((SLuint32) 0x0000001A) +#define SL_CONTAINERTYPE_SMF ((SLuint32) 0x0000001B) +#define SL_CONTAINERTYPE_MOBILE_DLS ((SLuint32) 0x0000001C) +#define SL_CONTAINERTYPE_OGG ((SLuint32) 0x0000001D) + + +/** PCM-type-based data format definition where formatType must be SL_DATAFORMAT_PCM*/ +typedef struct SLDataFormat_PCM_ { + SLuint32 formatType; + SLuint32 numChannels; + SLuint32 samplesPerSec; + SLuint32 bitsPerSample; + SLuint32 containerSize; + SLuint32 channelMask; + SLuint32 endianness; +} SLDataFormat_PCM; + +typedef struct SLDataSource_ { + void *pLocator; + void *pFormat; +} SLDataSource; + + +typedef struct SLDataSink_ { + void *pLocator; + void *pFormat; +} SLDataSink; + + + + + + +/*---------------------------------------------------------------------------*/ +/* Standard Object Interface */ +/*---------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_OBJECT; + +/** Object callback */ + + +typedef void (SLAPIENTRY *slObjectCallback) ( + SLObjectItf caller, + const void * pContext, + SLuint32 event, + SLresult result, + SLuint32 param, + void *pInterface +); + + +struct SLObjectItf_ { + SLresult (*Realize) ( + SLObjectItf self, + SLboolean async + ); + SLresult (*Resume) ( + SLObjectItf self, + SLboolean async + ); + SLresult (*GetState) ( + SLObjectItf self, + SLuint32 * pState + ); + SLresult (*GetInterface) ( + SLObjectItf self, + const SLInterfaceID iid, + void * pInterface + ); + SLresult (*RegisterCallback) ( + SLObjectItf self, + slObjectCallback callback, + void * pContext + ); + void (*AbortAsyncOperation) ( + SLObjectItf self + ); + void (*Destroy) ( + SLObjectItf self + ); + SLresult (*SetPriority) ( + SLObjectItf self, + SLint32 priority, + SLboolean preemptable + ); + SLresult (*GetPriority) ( + SLObjectItf self, + SLint32 *pPriority, + SLboolean *pPreemptable + ); + SLresult (*SetLossOfControlInterfaces) ( + SLObjectItf self, + SLint16 numInterfaces, + SLInterfaceID * pInterfaceIDs, + SLboolean enabled + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Audio IO Device capabilities interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_DEFAULTDEVICEID_AUDIOINPUT ((SLuint32) 0xFFFFFFFF) +#define SL_DEFAULTDEVICEID_AUDIOOUTPUT ((SLuint32) 0xFFFFFFFE) +#define SL_DEFAULTDEVICEID_LED ((SLuint32) 0xFFFFFFFD) +#define SL_DEFAULTDEVICEID_VIBRA ((SLuint32) 0xFFFFFFFC) +#define SL_DEFAULTDEVICEID_RESERVED1 ((SLuint32) 0xFFFFFFFB) + + +#define SL_DEVCONNECTION_INTEGRATED ((SLint16) 0x0001) +#define SL_DEVCONNECTION_ATTACHED_WIRED ((SLint16) 0x0100) +#define SL_DEVCONNECTION_ATTACHED_WIRELESS ((SLint16) 0x0200) +#define SL_DEVCONNECTION_NETWORK ((SLint16) 0x0400) + + +#define SL_DEVLOCATION_HANDSET ((SLuint16) 0x0001) +#define SL_DEVLOCATION_HEADSET ((SLuint16) 0x0002) +#define SL_DEVLOCATION_CARKIT ((SLuint16) 0x0003) +#define SL_DEVLOCATION_DOCK ((SLuint16) 0x0004) +#define SL_DEVLOCATION_REMOTE ((SLuint16) 0x0005) +/* Note: SL_DEVLOCATION_RESLTE is deprecated, use SL_DEVLOCATION_REMOTE instead. */ +#define SL_DEVLOCATION_RESLTE ((SLuint16) 0x0005) + + +#define SL_DEVSCOPE_UNKNOWN ((SLuint16) 0x0001) +#define SL_DEVSCOPE_ENVIRONMENT ((SLuint16) 0x0002) +#define SL_DEVSCOPE_USER ((SLuint16) 0x0003) + + +typedef struct SLAudioInputDescriptor_ { + SLchar *deviceName; + SLint16 deviceConnection; + SLint16 deviceScope; + SLint16 deviceLocation; + SLboolean isForTelephony; + SLmilliHertz minSampleRate; + SLmilliHertz maxSampleRate; + SLboolean isFreqRangeContinuous; + SLmilliHertz *samplingRatesSupported; + SLint16 numOfSamplingRatesSupported; + SLint16 maxChannels; +} SLAudioInputDescriptor; + + +typedef struct SLAudioOutputDescriptor_ { + SLchar *pDeviceName; + SLint16 deviceConnection; + SLint16 deviceScope; + SLint16 deviceLocation; + SLboolean isForTelephony; + SLmilliHertz minSampleRate; + SLmilliHertz maxSampleRate; + SLboolean isFreqRangeContinuous; + SLmilliHertz *samplingRatesSupported; + SLint16 numOfSamplingRatesSupported; + SLint16 maxChannels; +} SLAudioOutputDescriptor; + + + +extern const SLInterfaceID SL_IID_AUDIOIODEVICECAPABILITIES; + +struct SLAudioIODeviceCapabilitiesItf_; +typedef const struct SLAudioIODeviceCapabilitiesItf_ * const * SLAudioIODeviceCapabilitiesItf; + + +typedef void (SLAPIENTRY *slAvailableAudioInputsChangedCallback) ( + SLAudioIODeviceCapabilitiesItf caller, + void *pContext, + SLuint32 deviceID, + SLint32 numInputs, + SLboolean isNew +); + + +typedef void (SLAPIENTRY *slAvailableAudioOutputsChangedCallback) ( + SLAudioIODeviceCapabilitiesItf caller, + void *pContext, + SLuint32 deviceID, + SLint32 numOutputs, + SLboolean isNew +); + +typedef void (SLAPIENTRY *slDefaultDeviceIDMapChangedCallback) ( + SLAudioIODeviceCapabilitiesItf caller, + void *pContext, + SLboolean isOutput, + SLint32 numDevices +); + + +struct SLAudioIODeviceCapabilitiesItf_ { + SLresult (*GetAvailableAudioInputs)( + SLAudioIODeviceCapabilitiesItf self, + SLint32 *pNumInputs, + SLuint32 *pInputDeviceIDs + ); + SLresult (*QueryAudioInputCapabilities)( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLAudioInputDescriptor *pDescriptor + ); + SLresult (*RegisterAvailableAudioInputsChangedCallback) ( + SLAudioIODeviceCapabilitiesItf self, + slAvailableAudioInputsChangedCallback callback, + void *pContext + ); + SLresult (*GetAvailableAudioOutputs)( + SLAudioIODeviceCapabilitiesItf self, + SLint32 *pNumOutputs, + SLuint32 *pOutputDeviceIDs + ); + SLresult (*QueryAudioOutputCapabilities)( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLAudioOutputDescriptor *pDescriptor + ); + SLresult (*RegisterAvailableAudioOutputsChangedCallback) ( + SLAudioIODeviceCapabilitiesItf self, + slAvailableAudioOutputsChangedCallback callback, + void *pContext + ); + SLresult (*RegisterDefaultDeviceIDMapChangedCallback) ( + SLAudioIODeviceCapabilitiesItf self, + slDefaultDeviceIDMapChangedCallback callback, + void *pContext + ); + SLresult (*GetAssociatedAudioInputs) ( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLint32 *pNumAudioInputs, + SLuint32 *pAudioInputDeviceIDs + ); + SLresult (*GetAssociatedAudioOutputs) ( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLint32 *pNumAudioOutputs, + SLuint32 *pAudioOutputDeviceIDs + ); + SLresult (*GetDefaultAudioDevices) ( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 defaultDeviceID, + SLint32 *pNumAudioDevices, + SLuint32 *pAudioDeviceIDs + ); + SLresult (*QuerySampleFormatsSupported)( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLmilliHertz samplingRate, + SLint32 *pSampleFormats, + SLint32 *pNumOfSampleFormats + ); +}; + + + +/*---------------------------------------------------------------------------*/ +/* Capabilities of the LED array IODevice */ +/*---------------------------------------------------------------------------*/ + +typedef struct SLLEDDescriptor_ { + SLuint8 ledCount; + SLuint8 primaryLED; + SLuint32 colorMask; +} SLLEDDescriptor; + + +/*---------------------------------------------------------------------------*/ +/* LED Array interface */ +/*---------------------------------------------------------------------------*/ + +typedef struct SLHSL_ { + SLmillidegree hue; + SLpermille saturation; + SLpermille lightness; +} SLHSL; + + +extern const SLInterfaceID SL_IID_LED; + +struct SLLEDArrayItf_; +typedef const struct SLLEDArrayItf_ * const * SLLEDArrayItf; + +struct SLLEDArrayItf_ { + SLresult (*ActivateLEDArray) ( + SLLEDArrayItf self, + SLuint32 lightMask + ); + SLresult (*IsLEDArrayActivated) ( + SLLEDArrayItf self, + SLuint32 *lightMask + ); + SLresult (*SetColor) ( + SLLEDArrayItf self, + SLuint8 index, + const SLHSL *color + ); + SLresult (*GetColor) ( + SLLEDArrayItf self, + SLuint8 index, + SLHSL *color + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Capabilities of the Vibra IODevice */ +/*---------------------------------------------------------------------------*/ + +typedef struct SLVibraDescriptor_ { + SLboolean supportsFrequency; + SLboolean supportsIntensity; + SLmilliHertz minFrequency; + SLmilliHertz maxFrequency; +} SLVibraDescriptor; + + + +/*---------------------------------------------------------------------------*/ +/* Vibra interface */ +/*---------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_VIBRA; + + +struct SLVibraItf_; +typedef const struct SLVibraItf_ * const * SLVibraItf; + +struct SLVibraItf_ { + SLresult (*Vibrate) ( + SLVibraItf self, + SLboolean vibrate + ); + SLresult (*IsVibrating) ( + SLVibraItf self, + SLboolean *pVibrating + ); + SLresult (*SetFrequency) ( + SLVibraItf self, + SLmilliHertz frequency + ); + SLresult (*GetFrequency) ( + SLVibraItf self, + SLmilliHertz *pFrequency + ); + SLresult (*SetIntensity) ( + SLVibraItf self, + SLpermille intensity + ); + SLresult (*GetIntensity) ( + SLVibraItf self, + SLpermille *pIntensity + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Meta data extraction related types and interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_CHARACTERENCODING_UNKNOWN ((SLuint32) 0x00000000) +#define SL_CHARACTERENCODING_BINARY ((SLuint32) 0x00000001) +#define SL_CHARACTERENCODING_ASCII ((SLuint32) 0x00000002) +#define SL_CHARACTERENCODING_BIG5 ((SLuint32) 0x00000003) +#define SL_CHARACTERENCODING_CODEPAGE1252 ((SLuint32) 0x00000004) +#define SL_CHARACTERENCODING_GB2312 ((SLuint32) 0x00000005) +#define SL_CHARACTERENCODING_HZGB2312 ((SLuint32) 0x00000006) +#define SL_CHARACTERENCODING_GB12345 ((SLuint32) 0x00000007) +#define SL_CHARACTERENCODING_GB18030 ((SLuint32) 0x00000008) +#define SL_CHARACTERENCODING_GBK ((SLuint32) 0x00000009) +#define SL_CHARACTERENCODING_IMAPUTF7 ((SLuint32) 0x0000000A) +#define SL_CHARACTERENCODING_ISO2022JP ((SLuint32) 0x0000000B) +#define SL_CHARACTERENCODING_ISO2022JP1 ((SLuint32) 0x0000000B) +#define SL_CHARACTERENCODING_ISO88591 ((SLuint32) 0x0000000C) +#define SL_CHARACTERENCODING_ISO885910 ((SLuint32) 0x0000000D) +#define SL_CHARACTERENCODING_ISO885913 ((SLuint32) 0x0000000E) +#define SL_CHARACTERENCODING_ISO885914 ((SLuint32) 0x0000000F) +#define SL_CHARACTERENCODING_ISO885915 ((SLuint32) 0x00000010) +#define SL_CHARACTERENCODING_ISO88592 ((SLuint32) 0x00000011) +#define SL_CHARACTERENCODING_ISO88593 ((SLuint32) 0x00000012) +#define SL_CHARACTERENCODING_ISO88594 ((SLuint32) 0x00000013) +#define SL_CHARACTERENCODING_ISO88595 ((SLuint32) 0x00000014) +#define SL_CHARACTERENCODING_ISO88596 ((SLuint32) 0x00000015) +#define SL_CHARACTERENCODING_ISO88597 ((SLuint32) 0x00000016) +#define SL_CHARACTERENCODING_ISO88598 ((SLuint32) 0x00000017) +#define SL_CHARACTERENCODING_ISO88599 ((SLuint32) 0x00000018) +#define SL_CHARACTERENCODING_ISOEUCJP ((SLuint32) 0x00000019) +#define SL_CHARACTERENCODING_SHIFTJIS ((SLuint32) 0x0000001A) +#define SL_CHARACTERENCODING_SMS7BIT ((SLuint32) 0x0000001B) +#define SL_CHARACTERENCODING_UTF7 ((SLuint32) 0x0000001C) +#define SL_CHARACTERENCODING_UTF8 ((SLuint32) 0x0000001D) +#define SL_CHARACTERENCODING_JAVACONFORMANTUTF8 ((SLuint32) 0x0000001E) +#define SL_CHARACTERENCODING_UTF16BE ((SLuint32) 0x0000001F) +#define SL_CHARACTERENCODING_UTF16LE ((SLuint32) 0x00000020) + + +#define SL_METADATA_FILTER_KEY ((SLuint8) 0x01) +#define SL_METADATA_FILTER_LANG ((SLuint8) 0x02) +#define SL_METADATA_FILTER_ENCODING ((SLuint8) 0x04) + + +typedef struct SLMetadataInfo_ { + SLuint32 size; + SLuint32 encoding; + SLchar langCountry[16]; + SLuint8 data[1]; +} SLMetadataInfo; + +extern const SLInterfaceID SL_IID_METADATAEXTRACTION; + +struct SLMetadataExtractionItf_; +typedef const struct SLMetadataExtractionItf_ * const * SLMetadataExtractionItf; + + +struct SLMetadataExtractionItf_ { + SLresult (*GetItemCount) ( + SLMetadataExtractionItf self, + SLuint32 *pItemCount + ); + SLresult (*GetKeySize) ( + SLMetadataExtractionItf self, + SLuint32 index, + SLuint32 *pKeySize + ); + SLresult (*GetKey) ( + SLMetadataExtractionItf self, + SLuint32 index, + SLuint32 keySize, + SLMetadataInfo *pKey + ); + SLresult (*GetValueSize) ( + SLMetadataExtractionItf self, + SLuint32 index, + SLuint32 *pValueSize + ); + SLresult (*GetValue) ( + SLMetadataExtractionItf self, + SLuint32 index, + SLuint32 valueSize, + SLMetadataInfo *pValue + ); + SLresult (*AddKeyFilter) ( + SLMetadataExtractionItf self, + SLuint32 keySize, + const void *pKey, + SLuint32 keyEncoding, + const SLchar *pValueLangCountry, + SLuint32 valueEncoding, + SLuint8 filterMask + ); + SLresult (*ClearKeyFilter) ( + SLMetadataExtractionItf self + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Meta data traversal related types and interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_METADATATRAVERSALMODE_ALL ((SLuint32) 0x00000001) +#define SL_METADATATRAVERSALMODE_NODE ((SLuint32) 0x00000002) + + +#define SL_NODETYPE_UNSPECIFIED ((SLuint32) 0x00000001) +#define SL_NODETYPE_AUDIO ((SLuint32) 0x00000002) +#define SL_NODETYPE_VIDEO ((SLuint32) 0x00000003) +#define SL_NODETYPE_IMAGE ((SLuint32) 0x00000004) + +#define SL_NODE_PARENT 0xFFFFFFFF + +extern const SLInterfaceID SL_IID_METADATATRAVERSAL; + +struct SLMetadataTraversalItf_; +typedef const struct SLMetadataTraversalItf_ * const * SLMetadataTraversalItf; + +struct SLMetadataTraversalItf_ { + SLresult (*SetMode) ( + SLMetadataTraversalItf self, + SLuint32 mode + ); + SLresult (*GetChildCount) ( + SLMetadataTraversalItf self, + SLuint32 *pCount + ); + SLresult (*GetChildMIMETypeSize) ( + SLMetadataTraversalItf self, + SLuint32 index, + SLuint32 *pSize + ); + SLresult (*GetChildInfo) ( + SLMetadataTraversalItf self, + SLuint32 index, + SLint32 *pNodeID, + SLuint32 *pType, + SLuint32 size, + SLchar *pMimeType + ); + SLresult (*SetActiveNode) ( + SLMetadataTraversalItf self, + SLuint32 index + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Dynamic Source types and interface */ +/*---------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_DYNAMICSOURCE; + +struct SLDynamicSourceItf_; +typedef const struct SLDynamicSourceItf_ * const * SLDynamicSourceItf; + +struct SLDynamicSourceItf_ { + SLresult (*SetSource) ( + SLDynamicSourceItf self, + SLDataSource *pDataSource + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Output Mix interface */ +/*---------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_OUTPUTMIX; + +struct SLOutputMixItf_; +typedef const struct SLOutputMixItf_ * const * SLOutputMixItf; + +typedef void (SLAPIENTRY *slMixDeviceChangeCallback) ( + SLOutputMixItf caller, + void *pContext +); + + +struct SLOutputMixItf_ { + SLresult (*GetDestinationOutputDeviceIDs) ( + SLOutputMixItf self, + SLint32 *pNumDevices, + SLuint32 *pDeviceIDs + ); + SLresult (*RegisterDeviceChangeCallback) ( + SLOutputMixItf self, + slMixDeviceChangeCallback callback, + void *pContext + ); + SLresult (*ReRoute)( + SLOutputMixItf self, + SLint32 numOutputDevices, + SLuint32 *pOutputDeviceIDs + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Playback interface */ +/*---------------------------------------------------------------------------*/ + +/** Playback states */ +#define SL_PLAYSTATE_STOPPED ((SLuint32) 0x00000001) +#define SL_PLAYSTATE_PAUSED ((SLuint32) 0x00000002) +#define SL_PLAYSTATE_PLAYING ((SLuint32) 0x00000003) + +/** Play events **/ +#define SL_PLAYEVENT_HEADATEND ((SLuint32) 0x00000001) +#define SL_PLAYEVENT_HEADATMARKER ((SLuint32) 0x00000002) +#define SL_PLAYEVENT_HEADATNEWPOS ((SLuint32) 0x00000004) +#define SL_PLAYEVENT_HEADMOVING ((SLuint32) 0x00000008) +#define SL_PLAYEVENT_HEADSTALLED ((SLuint32) 0x00000010) + +#define SL_TIME_UNKNOWN ((SLuint32) 0xFFFFFFFF) + + +extern const SLInterfaceID SL_IID_PLAY; + +/** Playback interface methods */ + +struct SLPlayItf_; +typedef const struct SLPlayItf_ * const * SLPlayItf; + +typedef void (SLAPIENTRY *slPlayCallback) ( + SLPlayItf caller, + void *pContext, + SLuint32 event +); + +struct SLPlayItf_ { + SLresult (*SetPlayState) ( + SLPlayItf self, + SLuint32 state + ); + SLresult (*GetPlayState) ( + SLPlayItf self, + SLuint32 *pState + ); + SLresult (*GetDuration) ( + SLPlayItf self, + SLmillisecond *pMsec + ); + SLresult (*GetPosition) ( + SLPlayItf self, + SLmillisecond *pMsec + ); + SLresult (*RegisterCallback) ( + SLPlayItf self, + slPlayCallback callback, + void *pContext + ); + SLresult (*SetCallbackEventsMask) ( + SLPlayItf self, + SLuint32 eventFlags + ); + SLresult (*GetCallbackEventsMask) ( + SLPlayItf self, + SLuint32 *pEventFlags + ); + SLresult (*SetMarkerPosition) ( + SLPlayItf self, + SLmillisecond mSec + ); + SLresult (*ClearMarkerPosition) ( + SLPlayItf self + ); + SLresult (*GetMarkerPosition) ( + SLPlayItf self, + SLmillisecond *pMsec + ); + SLresult (*SetPositionUpdatePeriod) ( + SLPlayItf self, + SLmillisecond mSec + ); + SLresult (*GetPositionUpdatePeriod) ( + SLPlayItf self, + SLmillisecond *pMsec + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Prefetch status interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_PREFETCHEVENT_STATUSCHANGE ((SLuint32) 0x00000001) +#define SL_PREFETCHEVENT_FILLLEVELCHANGE ((SLuint32) 0x00000002) + +#define SL_PREFETCHSTATUS_UNDERFLOW ((SLuint32) 0x00000001) +#define SL_PREFETCHSTATUS_SUFFICIENTDATA ((SLuint32) 0x00000002) +#define SL_PREFETCHSTATUS_OVERFLOW ((SLuint32) 0x00000003) + + +extern const SLInterfaceID SL_IID_PREFETCHSTATUS; + + +/** Prefetch status interface methods */ + +struct SLPrefetchStatusItf_; +typedef const struct SLPrefetchStatusItf_ * const * SLPrefetchStatusItf; + +typedef void (SLAPIENTRY *slPrefetchCallback) ( + SLPrefetchStatusItf caller, + void *pContext, + SLuint32 event +); + +struct SLPrefetchStatusItf_ { + SLresult (*GetPrefetchStatus) ( + SLPrefetchStatusItf self, + SLuint32 *pStatus + ); + SLresult (*GetFillLevel) ( + SLPrefetchStatusItf self, + SLpermille *pLevel + ); + SLresult (*RegisterCallback) ( + SLPrefetchStatusItf self, + slPrefetchCallback callback, + void *pContext + ); + SLresult (*SetCallbackEventsMask) ( + SLPrefetchStatusItf self, + SLuint32 eventFlags + ); + SLresult (*GetCallbackEventsMask) ( + SLPrefetchStatusItf self, + SLuint32 *pEventFlags + ); + SLresult (*SetFillUpdatePeriod) ( + SLPrefetchStatusItf self, + SLpermille period + ); + SLresult (*GetFillUpdatePeriod) ( + SLPrefetchStatusItf self, + SLpermille *pPeriod + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Playback Rate interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_RATEPROP_RESERVED1 ((SLuint32) 0x00000001) +#define SL_RATEPROP_RESERVED2 ((SLuint32) 0x00000002) +#define SL_RATEPROP_SILENTAUDIO ((SLuint32) 0x00000100) +#define SL_RATEPROP_STAGGEREDAUDIO ((SLuint32) 0x00000200) +#define SL_RATEPROP_NOPITCHCORAUDIO ((SLuint32) 0x00000400) +#define SL_RATEPROP_PITCHCORAUDIO ((SLuint32) 0x00000800) + + +extern const SLInterfaceID SL_IID_PLAYBACKRATE; + +struct SLPlaybackRateItf_; +typedef const struct SLPlaybackRateItf_ * const * SLPlaybackRateItf; + +struct SLPlaybackRateItf_ { + SLresult (*SetRate)( + SLPlaybackRateItf self, + SLpermille rate + ); + SLresult (*GetRate)( + SLPlaybackRateItf self, + SLpermille *pRate + ); + SLresult (*SetPropertyConstraints)( + SLPlaybackRateItf self, + SLuint32 constraints + ); + SLresult (*GetProperties)( + SLPlaybackRateItf self, + SLuint32 *pProperties + ); + SLresult (*GetCapabilitiesOfRate)( + SLPlaybackRateItf self, + SLpermille rate, + SLuint32 *pCapabilities + ); + SLresult (*GetRateRange) ( + SLPlaybackRateItf self, + SLuint8 index, + SLpermille *pMinRate, + SLpermille *pMaxRate, + SLpermille *pStepSize, + SLuint32 *pCapabilities + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Seek Interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_SEEKMODE_FAST ((SLuint32) 0x0001) +#define SL_SEEKMODE_ACCURATE ((SLuint32) 0x0002) + +extern const SLInterfaceID SL_IID_SEEK; + +struct SLSeekItf_; +typedef const struct SLSeekItf_ * const * SLSeekItf; + +struct SLSeekItf_ { + SLresult (*SetPosition)( + SLSeekItf self, + SLmillisecond pos, + SLuint32 seekMode + ); + SLresult (*SetLoop)( + SLSeekItf self, + SLboolean loopEnable, + SLmillisecond startPos, + SLmillisecond endPos + ); + SLresult (*GetLoop)( + SLSeekItf self, + SLboolean *pLoopEnabled, + SLmillisecond *pStartPos, + SLmillisecond *pEndPos + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Standard Recording Interface */ +/*---------------------------------------------------------------------------*/ + +/** Recording states */ +#define SL_RECORDSTATE_STOPPED ((SLuint32) 0x00000001) +#define SL_RECORDSTATE_PAUSED ((SLuint32) 0x00000002) +#define SL_RECORDSTATE_RECORDING ((SLuint32) 0x00000003) + + +/** Record event **/ +#define SL_RECORDEVENT_HEADATLIMIT ((SLuint32) 0x00000001) +#define SL_RECORDEVENT_HEADATMARKER ((SLuint32) 0x00000002) +#define SL_RECORDEVENT_HEADATNEWPOS ((SLuint32) 0x00000004) +#define SL_RECORDEVENT_HEADMOVING ((SLuint32) 0x00000008) +#define SL_RECORDEVENT_HEADSTALLED ((SLuint32) 0x00000010) +/* Note: SL_RECORDEVENT_BUFFER_INSUFFICIENT is deprecated, use SL_RECORDEVENT_BUFFER_FULL instead. */ +#define SL_RECORDEVENT_BUFFER_INSUFFICIENT ((SLuint32) 0x00000020) +#define SL_RECORDEVENT_BUFFER_FULL ((SLuint32) 0x00000020) + + +extern const SLInterfaceID SL_IID_RECORD; + +struct SLRecordItf_; +typedef const struct SLRecordItf_ * const * SLRecordItf; + +typedef void (SLAPIENTRY *slRecordCallback) ( + SLRecordItf caller, + void *pContext, + SLuint32 event +); + +/** Recording interface methods */ +struct SLRecordItf_ { + SLresult (*SetRecordState) ( + SLRecordItf self, + SLuint32 state + ); + SLresult (*GetRecordState) ( + SLRecordItf self, + SLuint32 *pState + ); + SLresult (*SetDurationLimit) ( + SLRecordItf self, + SLmillisecond msec + ); + SLresult (*GetPosition) ( + SLRecordItf self, + SLmillisecond *pMsec + ); + SLresult (*RegisterCallback) ( + SLRecordItf self, + slRecordCallback callback, + void *pContext + ); + SLresult (*SetCallbackEventsMask) ( + SLRecordItf self, + SLuint32 eventFlags + ); + SLresult (*GetCallbackEventsMask) ( + SLRecordItf self, + SLuint32 *pEventFlags + ); + SLresult (*SetMarkerPosition) ( + SLRecordItf self, + SLmillisecond mSec + ); + SLresult (*ClearMarkerPosition) ( + SLRecordItf self + ); + SLresult (*GetMarkerPosition) ( + SLRecordItf self, + SLmillisecond *pMsec + ); + SLresult (*SetPositionUpdatePeriod) ( + SLRecordItf self, + SLmillisecond mSec + ); + SLresult (*GetPositionUpdatePeriod) ( + SLRecordItf self, + SLmillisecond *pMsec + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Equalizer interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_EQUALIZER_UNDEFINED ((SLuint16) 0xFFFF) + +extern const SLInterfaceID SL_IID_EQUALIZER; + +struct SLEqualizerItf_; +typedef const struct SLEqualizerItf_ * const * SLEqualizerItf; + +struct SLEqualizerItf_ { + SLresult (*SetEnabled)( + SLEqualizerItf self, + SLboolean enabled + ); + SLresult (*IsEnabled)( + SLEqualizerItf self, + SLboolean *pEnabled + ); + SLresult (*GetNumberOfBands)( + SLEqualizerItf self, + SLuint16 *pAmount + ); + SLresult (*GetBandLevelRange)( + SLEqualizerItf self, + SLmillibel *pMin, + SLmillibel *pMax + ); + SLresult (*SetBandLevel)( + SLEqualizerItf self, + SLuint16 band, + SLmillibel level + ); + SLresult (*GetBandLevel)( + SLEqualizerItf self, + SLuint16 band, + SLmillibel *pLevel + ); + SLresult (*GetCenterFreq)( + SLEqualizerItf self, + SLuint16 band, + SLmilliHertz *pCenter + ); + SLresult (*GetBandFreqRange)( + SLEqualizerItf self, + SLuint16 band, + SLmilliHertz *pMin, + SLmilliHertz *pMax + ); + SLresult (*GetBand)( + SLEqualizerItf self, + SLmilliHertz frequency, + SLuint16 *pBand + ); + SLresult (*GetCurrentPreset)( + SLEqualizerItf self, + SLuint16 *pPreset + ); + SLresult (*UsePreset)( + SLEqualizerItf self, + SLuint16 index + ); + SLresult (*GetNumberOfPresets)( + SLEqualizerItf self, + SLuint16 *pNumPresets + ); + SLresult (*GetPresetName)( + SLEqualizerItf self, + SLuint16 index, + const SLchar ** ppName + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Volume Interface */ +/* --------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_VOLUME; + +struct SLVolumeItf_; +typedef const struct SLVolumeItf_ * const * SLVolumeItf; + +struct SLVolumeItf_ { + SLresult (*SetVolumeLevel) ( + SLVolumeItf self, + SLmillibel level + ); + SLresult (*GetVolumeLevel) ( + SLVolumeItf self, + SLmillibel *pLevel + ); + SLresult (*GetMaxVolumeLevel) ( + SLVolumeItf self, + SLmillibel *pMaxLevel + ); + SLresult (*SetMute) ( + SLVolumeItf self, + SLboolean mute + ); + SLresult (*GetMute) ( + SLVolumeItf self, + SLboolean *pMute + ); + SLresult (*EnableStereoPosition) ( + SLVolumeItf self, + SLboolean enable + ); + SLresult (*IsEnabledStereoPosition) ( + SLVolumeItf self, + SLboolean *pEnable + ); + SLresult (*SetStereoPosition) ( + SLVolumeItf self, + SLpermille stereoPosition + ); + SLresult (*GetStereoPosition) ( + SLVolumeItf self, + SLpermille *pStereoPosition + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Device Volume Interface */ +/* --------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_DEVICEVOLUME; + +struct SLDeviceVolumeItf_; +typedef const struct SLDeviceVolumeItf_ * const * SLDeviceVolumeItf; + +struct SLDeviceVolumeItf_ { + SLresult (*GetVolumeScale) ( + SLDeviceVolumeItf self, + SLuint32 deviceID, + SLint32 *pMinValue, + SLint32 *pMaxValue, + SLboolean *pIsMillibelScale + ); + SLresult (*SetVolume) ( + SLDeviceVolumeItf self, + SLuint32 deviceID, + SLint32 volume + ); + SLresult (*GetVolume) ( + SLDeviceVolumeItf self, + SLuint32 deviceID, + SLint32 *pVolume + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Buffer Queue Interface */ +/*---------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_BUFFERQUEUE; + +struct SLBufferQueueItf_; +typedef const struct SLBufferQueueItf_ * const * SLBufferQueueItf; + +typedef void (SLAPIENTRY *slBufferQueueCallback)( + SLBufferQueueItf caller, + void *pContext +); + +/** Buffer queue state **/ + +typedef struct SLBufferQueueState_ { + SLuint32 count; + SLuint32 playIndex; +} SLBufferQueueState; + + +struct SLBufferQueueItf_ { + SLresult (*Enqueue) ( + SLBufferQueueItf self, + const void *pBuffer, + SLuint32 size + ); + SLresult (*Clear) ( + SLBufferQueueItf self + ); + SLresult (*GetState) ( + SLBufferQueueItf self, + SLBufferQueueState *pState + ); + SLresult (*RegisterCallback) ( + SLBufferQueueItf self, + slBufferQueueCallback callback, + void* pContext + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* PresetReverb */ +/*---------------------------------------------------------------------------*/ + +#define SL_REVERBPRESET_NONE ((SLuint16) 0x0000) +#define SL_REVERBPRESET_SMALLROOM ((SLuint16) 0x0001) +#define SL_REVERBPRESET_MEDIUMROOM ((SLuint16) 0x0002) +#define SL_REVERBPRESET_LARGEROOM ((SLuint16) 0x0003) +#define SL_REVERBPRESET_MEDIUMHALL ((SLuint16) 0x0004) +#define SL_REVERBPRESET_LARGEHALL ((SLuint16) 0x0005) +#define SL_REVERBPRESET_PLATE ((SLuint16) 0x0006) + + +extern const SLInterfaceID SL_IID_PRESETREVERB; + +struct SLPresetReverbItf_; +typedef const struct SLPresetReverbItf_ * const * SLPresetReverbItf; + +struct SLPresetReverbItf_ { + SLresult (*SetPreset) ( + SLPresetReverbItf self, + SLuint16 preset + ); + SLresult (*GetPreset) ( + SLPresetReverbItf self, + SLuint16 *pPreset + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* EnvironmentalReverb */ +/*---------------------------------------------------------------------------*/ + +#define SL_I3DL2_ENVIRONMENT_PRESET_DEFAULT \ + { SL_MILLIBEL_MIN, 0, 1000, 500, SL_MILLIBEL_MIN, 20, SL_MILLIBEL_MIN, 40, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_GENERIC \ + { -1000, -100, 1490, 830, -2602, 7, 200, 11, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL \ + { -1000,-6000, 170, 100, -1204, 1, 207, 2, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_ROOM \ + { -1000, -454, 400, 830, -1646, 2, 53, 3, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_BATHROOM \ + { -1000,-1200, 1490, 540, -370, 7, 1030, 11, 1000, 600 } +#define SL_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM \ + { -1000,-6000, 500, 100, -1376, 3, -1104, 4, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_STONEROOM \ + { -1000, -300, 2310, 640, -711, 12, 83, 17, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM \ + { -1000, -476, 4320, 590, -789, 20, -289, 30, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL \ + { -1000, -500, 3920, 700, -1230, 20, -2, 29, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_CAVE \ + { -1000, 0, 2910, 1300, -602, 15, -302, 22, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_ARENA \ + { -1000, -698, 7240, 330, -1166, 20, 16, 30, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_HANGAR \ + { -1000,-1000, 10050, 230, -602, 20, 198, 30, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY \ + { -1000,-4000, 300, 100, -1831, 2, -1630, 30, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_HALLWAY \ + { -1000, -300, 1490, 590, -1219, 7, 441, 11, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR \ + { -1000, -237, 2700, 790, -1214, 13, 395, 20, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_ALLEY \ + { -1000, -270, 1490, 860, -1204, 7, -4, 11, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_FOREST \ + { -1000,-3300, 1490, 540, -2560, 162, -613, 88, 790,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_CITY \ + { -1000, -800, 1490, 670, -2273, 7, -2217, 11, 500,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS \ + { -1000,-2500, 1490, 210, -2780, 300, -2014, 100, 270,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_QUARRY \ + { -1000,-1000, 1490, 830, SL_MILLIBEL_MIN, 61, 500, 25, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_PLAIN \ + { -1000,-2000, 1490, 500, -2466, 179, -2514, 100, 210,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT \ + { -1000, 0, 1650, 1500, -1363, 8, -1153, 12, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE \ + { -1000,-1000, 2810, 140, 429, 14, 648, 21, 800, 600 } +#define SL_I3DL2_ENVIRONMENT_PRESET_UNDERWATER \ + { -1000,-4000, 1490, 100, -449, 7, 1700, 11, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_SMALLROOM \ + { -1000,-600, 1100, 830, -400, 5, 500, 10, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM \ + { -1000,-600, 1300, 830, -1000, 20, -200, 20, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_LARGEROOM \ + { -1000,-600, 1500, 830, -1600, 5, -1000, 40, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL \ + { -1000,-600, 1800, 700, -1300, 15, -800, 30, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_LARGEHALL \ + { -1000,-600, 1800, 700, -2000, 30, -1400, 60, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_PLATE \ + { -1000,-200, 1300, 900, 0, 2, 0, 10, 1000, 750 } + + +typedef struct SLEnvironmentalReverbSettings_ { + SLmillibel roomLevel; + SLmillibel roomHFLevel; + SLmillisecond decayTime; + SLpermille decayHFRatio; + SLmillibel reflectionsLevel; + SLmillisecond reflectionsDelay; + SLmillibel reverbLevel; + SLmillisecond reverbDelay; + SLpermille diffusion; + SLpermille density; +} SLEnvironmentalReverbSettings; + + + + +extern const SLInterfaceID SL_IID_ENVIRONMENTALREVERB; + + +struct SLEnvironmentalReverbItf_; +typedef const struct SLEnvironmentalReverbItf_ * const * SLEnvironmentalReverbItf; + +struct SLEnvironmentalReverbItf_ { + SLresult (*SetRoomLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel room + ); + SLresult (*GetRoomLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel *pRoom + ); + SLresult (*SetRoomHFLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel roomHF + ); + SLresult (*GetRoomHFLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel *pRoomHF + ); + SLresult (*SetDecayTime) ( + SLEnvironmentalReverbItf self, + SLmillisecond decayTime + ); + SLresult (*GetDecayTime) ( + SLEnvironmentalReverbItf self, + SLmillisecond *pDecayTime + ); + SLresult (*SetDecayHFRatio) ( + SLEnvironmentalReverbItf self, + SLpermille decayHFRatio + ); + SLresult (*GetDecayHFRatio) ( + SLEnvironmentalReverbItf self, + SLpermille *pDecayHFRatio + ); + SLresult (*SetReflectionsLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel reflectionsLevel + ); + SLresult (*GetReflectionsLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel *pReflectionsLevel + ); + SLresult (*SetReflectionsDelay) ( + SLEnvironmentalReverbItf self, + SLmillisecond reflectionsDelay + ); + SLresult (*GetReflectionsDelay) ( + SLEnvironmentalReverbItf self, + SLmillisecond *pReflectionsDelay + ); + SLresult (*SetReverbLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel reverbLevel + ); + SLresult (*GetReverbLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel *pReverbLevel + ); + SLresult (*SetReverbDelay) ( + SLEnvironmentalReverbItf self, + SLmillisecond reverbDelay + ); + SLresult (*GetReverbDelay) ( + SLEnvironmentalReverbItf self, + SLmillisecond *pReverbDelay + ); + SLresult (*SetDiffusion) ( + SLEnvironmentalReverbItf self, + SLpermille diffusion + ); + SLresult (*GetDiffusion) ( + SLEnvironmentalReverbItf self, + SLpermille *pDiffusion + ); + SLresult (*SetDensity) ( + SLEnvironmentalReverbItf self, + SLpermille density + ); + SLresult (*GetDensity) ( + SLEnvironmentalReverbItf self, + SLpermille *pDensity + ); + SLresult (*SetEnvironmentalReverbProperties) ( + SLEnvironmentalReverbItf self, + const SLEnvironmentalReverbSettings *pProperties + ); + SLresult (*GetEnvironmentalReverbProperties) ( + SLEnvironmentalReverbItf self, + SLEnvironmentalReverbSettings *pProperties + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Effects Send Interface */ +/*---------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_EFFECTSEND; + +struct SLEffectSendItf_; +typedef const struct SLEffectSendItf_ * const * SLEffectSendItf; + +struct SLEffectSendItf_ { + SLresult (*EnableEffectSend) ( + SLEffectSendItf self, + const void *pAuxEffect, + SLboolean enable, + SLmillibel initialLevel + ); + SLresult (*IsEnabled) ( + SLEffectSendItf self, + const void * pAuxEffect, + SLboolean *pEnable + ); + SLresult (*SetDirectLevel) ( + SLEffectSendItf self, + SLmillibel directLevel + ); + SLresult (*GetDirectLevel) ( + SLEffectSendItf self, + SLmillibel *pDirectLevel + ); + SLresult (*SetSendLevel) ( + SLEffectSendItf self, + const void *pAuxEffect, + SLmillibel sendLevel + ); + SLresult (*GetSendLevel)( + SLEffectSendItf self, + const void *pAuxEffect, + SLmillibel *pSendLevel + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* 3D Grouping Interface */ +/*---------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_3DGROUPING; + + +struct SL3DGroupingItf_ ; +typedef const struct SL3DGroupingItf_ * const * SL3DGroupingItf; + +struct SL3DGroupingItf_ { + SLresult (*Set3DGroup) ( + SL3DGroupingItf self, + SLObjectItf group + ); + SLresult (*Get3DGroup) ( + SL3DGroupingItf self, + SLObjectItf *pGroup + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* 3D Commit Interface */ +/*---------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_3DCOMMIT; + +struct SL3DCommitItf_; +typedef const struct SL3DCommitItf_* const * SL3DCommitItf; + +struct SL3DCommitItf_ { + SLresult (*Commit) ( + SL3DCommitItf self + ); + SLresult (*SetDeferred) ( + SL3DCommitItf self, + SLboolean deferred + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* 3D Location Interface */ +/*---------------------------------------------------------------------------*/ + +typedef struct SLVec3D_ { + SLint32 x; + SLint32 y; + SLint32 z; +} SLVec3D; + +extern const SLInterfaceID SL_IID_3DLOCATION; + +struct SL3DLocationItf_; +typedef const struct SL3DLocationItf_ * const * SL3DLocationItf; + +struct SL3DLocationItf_ { + SLresult (*SetLocationCartesian) ( + SL3DLocationItf self, + const SLVec3D *pLocation + ); + SLresult (*SetLocationSpherical) ( + SL3DLocationItf self, + SLmillidegree azimuth, + SLmillidegree elevation, + SLmillimeter distance + ); + SLresult (*Move) ( + SL3DLocationItf self, + const SLVec3D *pMovement + ); + SLresult (*GetLocationCartesian) ( + SL3DLocationItf self, + SLVec3D *pLocation + ); + SLresult (*SetOrientationVectors) ( + SL3DLocationItf self, + const SLVec3D *pFront, + const SLVec3D *pAbove + ); + SLresult (*SetOrientationAngles) ( + SL3DLocationItf self, + SLmillidegree heading, + SLmillidegree pitch, + SLmillidegree roll + ); + SLresult (*Rotate) ( + SL3DLocationItf self, + SLmillidegree theta, + const SLVec3D *pAxis + ); + SLresult (*GetOrientationVectors) ( + SL3DLocationItf self, + SLVec3D *pFront, + SLVec3D *pUp + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* 3D Doppler Interface */ +/*---------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_3DDOPPLER; + +struct SL3DDopplerItf_; +typedef const struct SL3DDopplerItf_ * const * SL3DDopplerItf; + +struct SL3DDopplerItf_ { + SLresult (*SetVelocityCartesian) ( + SL3DDopplerItf self, + const SLVec3D *pVelocity + ); + SLresult (*SetVelocitySpherical) ( + SL3DDopplerItf self, + SLmillidegree azimuth, + SLmillidegree elevation, + SLmillimeter speed + ); + SLresult (*GetVelocityCartesian) ( + SL3DDopplerItf self, + SLVec3D *pVelocity + ); + SLresult (*SetDopplerFactor) ( + SL3DDopplerItf self, + SLpermille dopplerFactor + ); + SLresult (*GetDopplerFactor) ( + SL3DDopplerItf self, + SLpermille *pDopplerFactor + ); +}; + +/*---------------------------------------------------------------------------*/ +/* 3D Source Interface and associated defines */ +/* --------------------------------------------------------------------------*/ + +#define SL_ROLLOFFMODEL_EXPONENTIAL ((SLuint32) 0x00000000) +#define SL_ROLLOFFMODEL_LINEAR ((SLuint32) 0x00000001) + + +extern const SLInterfaceID SL_IID_3DSOURCE; + +struct SL3DSourceItf_; +typedef const struct SL3DSourceItf_ * const * SL3DSourceItf; + +struct SL3DSourceItf_ { + SLresult (*SetHeadRelative) ( + SL3DSourceItf self, + SLboolean headRelative + ); + SLresult (*GetHeadRelative) ( + SL3DSourceItf self, + SLboolean *pHeadRelative + ); + SLresult (*SetRolloffDistances) ( + SL3DSourceItf self, + SLmillimeter minDistance, + SLmillimeter maxDistance + ); + SLresult (*GetRolloffDistances) ( + SL3DSourceItf self, + SLmillimeter *pMinDistance, + SLmillimeter *pMaxDistance + ); + SLresult (*SetRolloffMaxDistanceMute) ( + SL3DSourceItf self, + SLboolean mute + ); + SLresult (*GetRolloffMaxDistanceMute) ( + SL3DSourceItf self, + SLboolean *pMute + ); + SLresult (*SetRolloffFactor) ( + SL3DSourceItf self, + SLpermille rolloffFactor + ); + SLresult (*GetRolloffFactor) ( + SL3DSourceItf self, + SLpermille *pRolloffFactor + ); + SLresult (*SetRoomRolloffFactor) ( + SL3DSourceItf self, + SLpermille roomRolloffFactor + ); + SLresult (*GetRoomRolloffFactor) ( + SL3DSourceItf self, + SLpermille *pRoomRolloffFactor + ); + SLresult (*SetRolloffModel) ( + SL3DSourceItf self, + SLuint8 model + ); + SLresult (*GetRolloffModel) ( + SL3DSourceItf self, + SLuint8 *pModel + ); + SLresult (*SetCone) ( + SL3DSourceItf self, + SLmillidegree innerAngle, + SLmillidegree outerAngle, + SLmillibel outerLevel + ); + SLresult (*GetCone) ( + SL3DSourceItf self, + SLmillidegree *pInnerAngle, + SLmillidegree *pOuterAngle, + SLmillibel *pOuterLevel + ); +}; + +/*---------------------------------------------------------------------------*/ +/* 3D Macroscopic Interface */ +/* --------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_3DMACROSCOPIC; + +struct SL3DMacroscopicItf_; +typedef const struct SL3DMacroscopicItf_ * const * SL3DMacroscopicItf; + +struct SL3DMacroscopicItf_ { + SLresult (*SetSize) ( + SL3DMacroscopicItf self, + SLmillimeter width, + SLmillimeter height, + SLmillimeter depth + ); + SLresult (*GetSize) ( + SL3DMacroscopicItf self, + SLmillimeter *pWidth, + SLmillimeter *pHeight, + SLmillimeter *pDepth + ); + SLresult (*SetOrientationAngles) ( + SL3DMacroscopicItf self, + SLmillidegree heading, + SLmillidegree pitch, + SLmillidegree roll + ); + SLresult (*SetOrientationVectors) ( + SL3DMacroscopicItf self, + const SLVec3D *pFront, + const SLVec3D *pAbove + ); + SLresult (*Rotate) ( + SL3DMacroscopicItf self, + SLmillidegree theta, + const SLVec3D *pAxis + ); + SLresult (*GetOrientationVectors) ( + SL3DMacroscopicItf self, + SLVec3D *pFront, + SLVec3D *pUp + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Mute Solo Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_MUTESOLO; + +struct SLMuteSoloItf_; +typedef const struct SLMuteSoloItf_ * const * SLMuteSoloItf; + +struct SLMuteSoloItf_ { + SLresult (*SetChannelMute) ( + SLMuteSoloItf self, + SLuint8 chan, + SLboolean mute + ); + SLresult (*GetChannelMute) ( + SLMuteSoloItf self, + SLuint8 chan, + SLboolean *pMute + ); + SLresult (*SetChannelSolo) ( + SLMuteSoloItf self, + SLuint8 chan, + SLboolean solo + ); + SLresult (*GetChannelSolo) ( + SLMuteSoloItf self, + SLuint8 chan, + SLboolean *pSolo + ); + SLresult (*GetNumChannels) ( + SLMuteSoloItf self, + SLuint8 *pNumChannels + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Dynamic Interface Management Interface and associated types and macros */ +/* --------------------------------------------------------------------------*/ + +#define SL_DYNAMIC_ITF_EVENT_RUNTIME_ERROR ((SLuint32) 0x00000001) +#define SL_DYNAMIC_ITF_EVENT_ASYNC_TERMINATION ((SLuint32) 0x00000002) +#define SL_DYNAMIC_ITF_EVENT_RESOURCES_LOST ((SLuint32) 0x00000003) +#define SL_DYNAMIC_ITF_EVENT_RESOURCES_LOST_PERMANENTLY ((SLuint32) 0x00000004) +#define SL_DYNAMIC_ITF_EVENT_RESOURCES_AVAILABLE ((SLuint32) 0x00000005) + + + + +extern const SLInterfaceID SL_IID_DYNAMICINTERFACEMANAGEMENT; + +struct SLDynamicInterfaceManagementItf_; +typedef const struct SLDynamicInterfaceManagementItf_ * const * SLDynamicInterfaceManagementItf; + +typedef void (SLAPIENTRY *slDynamicInterfaceManagementCallback) ( + SLDynamicInterfaceManagementItf caller, + void * pContext, + SLuint32 event, + SLresult result, + const SLInterfaceID iid +); + + +struct SLDynamicInterfaceManagementItf_ { + SLresult (*AddInterface) ( + SLDynamicInterfaceManagementItf self, + const SLInterfaceID iid, + SLboolean async + ); + SLresult (*RemoveInterface) ( + SLDynamicInterfaceManagementItf self, + const SLInterfaceID iid + ); + SLresult (*ResumeInterface) ( + SLDynamicInterfaceManagementItf self, + const SLInterfaceID iid, + SLboolean async + ); + SLresult (*RegisterCallback) ( + SLDynamicInterfaceManagementItf self, + slDynamicInterfaceManagementCallback callback, + void * pContext + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Midi Message Interface and associated types */ +/* --------------------------------------------------------------------------*/ + +#define SL_MIDIMESSAGETYPE_NOTE_ON_OFF ((SLuint32) 0x00000001) +#define SL_MIDIMESSAGETYPE_POLY_PRESSURE ((SLuint32) 0x00000002) +#define SL_MIDIMESSAGETYPE_CONTROL_CHANGE ((SLuint32) 0x00000003) +#define SL_MIDIMESSAGETYPE_PROGRAM_CHANGE ((SLuint32) 0x00000004) +#define SL_MIDIMESSAGETYPE_CHANNEL_PRESSURE ((SLuint32) 0x00000005) +#define SL_MIDIMESSAGETYPE_PITCH_BEND ((SLuint32) 0x00000006) +#define SL_MIDIMESSAGETYPE_SYSTEM_MESSAGE ((SLuint32) 0x00000007) + + +extern const SLInterfaceID SL_IID_MIDIMESSAGE; + +struct SLMIDIMessageItf_; +typedef const struct SLMIDIMessageItf_ * const * SLMIDIMessageItf; + +typedef void (SLAPIENTRY *slMetaEventCallback) ( + SLMIDIMessageItf caller, + void *pContext, + SLuint8 type, + SLuint32 length, + const SLuint8 *pData, + SLuint32 tick, + SLuint16 track +); + +typedef void (SLAPIENTRY *slMIDIMessageCallback) ( + SLMIDIMessageItf caller, + void *pContext, + SLuint8 statusByte, + SLuint32 length, + const SLuint8 *pData, + SLuint32 tick, + SLuint16 track +); + +struct SLMIDIMessageItf_ { + SLresult (*SendMessage) ( + SLMIDIMessageItf self, + const SLuint8 *data, + SLuint32 length + ); + SLresult (*RegisterMetaEventCallback) ( + SLMIDIMessageItf self, + slMetaEventCallback callback, + void *pContext + ); + SLresult (*RegisterMIDIMessageCallback) ( + SLMIDIMessageItf self, + slMIDIMessageCallback callback, + void *pContext + ); + SLresult (*AddMIDIMessageCallbackFilter) ( + SLMIDIMessageItf self, + SLuint32 messageType + ); + SLresult (*ClearMIDIMessageCallbackFilter) ( + SLMIDIMessageItf self + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Midi Mute Solo interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_MIDIMUTESOLO; + +struct SLMIDIMuteSoloItf_; +typedef const struct SLMIDIMuteSoloItf_ * const * SLMIDIMuteSoloItf; + +struct SLMIDIMuteSoloItf_ { + SLresult (*SetChannelMute) ( + SLMIDIMuteSoloItf self, + SLuint8 channel, + SLboolean mute + ); + SLresult (*GetChannelMute) ( + SLMIDIMuteSoloItf self, + SLuint8 channel, + SLboolean *pMute + ); + SLresult (*SetChannelSolo) ( + SLMIDIMuteSoloItf self, + SLuint8 channel, + SLboolean solo + ); + SLresult (*GetChannelSolo) ( + SLMIDIMuteSoloItf self, + SLuint8 channel, + SLboolean *pSolo + ); + SLresult (*GetTrackCount) ( + SLMIDIMuteSoloItf self, + SLuint16 *pCount + ); + SLresult (*SetTrackMute) ( + SLMIDIMuteSoloItf self, + SLuint16 track, + SLboolean mute + ); + SLresult (*GetTrackMute) ( + SLMIDIMuteSoloItf self, + SLuint16 track, + SLboolean *pMute + ); + SLresult (*SetTrackSolo) ( + SLMIDIMuteSoloItf self, + SLuint16 track, + SLboolean solo + ); + SLresult (*GetTrackSolo) ( + SLMIDIMuteSoloItf self, + SLuint16 track, + SLboolean *pSolo + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Midi Tempo interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_MIDITEMPO; + +struct SLMIDITempoItf_; +typedef const struct SLMIDITempoItf_ * const * SLMIDITempoItf; + +struct SLMIDITempoItf_ { + SLresult (*SetTicksPerQuarterNote) ( + SLMIDITempoItf self, + SLuint32 tpqn + ); + SLresult (*GetTicksPerQuarterNote) ( + SLMIDITempoItf self, + SLuint32 *pTpqn + ); + SLresult (*SetMicrosecondsPerQuarterNote) ( + SLMIDITempoItf self, + SLmicrosecond uspqn + ); + SLresult (*GetMicrosecondsPerQuarterNote) ( + SLMIDITempoItf self, + SLmicrosecond *uspqn + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Midi Time interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_MIDITIME; + +struct SLMIDITimeItf_; +typedef const struct SLMIDITimeItf_ * const * SLMIDITimeItf; + +struct SLMIDITimeItf_ { + SLresult (*GetDuration) ( + SLMIDITimeItf self, + SLuint32 *pDuration + ); + SLresult (*SetPosition) ( + SLMIDITimeItf self, + SLuint32 position + ); + SLresult (*GetPosition) ( + SLMIDITimeItf self, + SLuint32 *pPosition + ); + SLresult (*SetLoopPoints) ( + SLMIDITimeItf self, + SLuint32 startTick, + SLuint32 numTicks + ); + SLresult (*GetLoopPoints) ( + SLMIDITimeItf self, + SLuint32 *pStartTick, + SLuint32 *pNumTicks + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Audio Decoder Capabilities Interface */ +/* --------------------------------------------------------------------------*/ + +/*Audio Codec related defines*/ + +#define SL_RATECONTROLMODE_CONSTANTBITRATE ((SLuint32) 0x00000001) +#define SL_RATECONTROLMODE_VARIABLEBITRATE ((SLuint32) 0x00000002) + +#define SL_AUDIOCODEC_PCM ((SLuint32) 0x00000001) +#define SL_AUDIOCODEC_MP3 ((SLuint32) 0x00000002) +#define SL_AUDIOCODEC_AMR ((SLuint32) 0x00000003) +#define SL_AUDIOCODEC_AMRWB ((SLuint32) 0x00000004) +#define SL_AUDIOCODEC_AMRWBPLUS ((SLuint32) 0x00000005) +#define SL_AUDIOCODEC_AAC ((SLuint32) 0x00000006) +#define SL_AUDIOCODEC_WMA ((SLuint32) 0x00000007) +#define SL_AUDIOCODEC_REAL ((SLuint32) 0x00000008) + +#define SL_AUDIOPROFILE_PCM ((SLuint32) 0x00000001) + +#define SL_AUDIOPROFILE_MPEG1_L3 ((SLuint32) 0x00000001) +#define SL_AUDIOPROFILE_MPEG2_L3 ((SLuint32) 0x00000002) +#define SL_AUDIOPROFILE_MPEG25_L3 ((SLuint32) 0x00000003) + +#define SL_AUDIOCHANMODE_MP3_MONO ((SLuint32) 0x00000001) +#define SL_AUDIOCHANMODE_MP3_STEREO ((SLuint32) 0x00000002) +#define SL_AUDIOCHANMODE_MP3_JOINTSTEREO ((SLuint32) 0x00000003) +#define SL_AUDIOCHANMODE_MP3_DUAL ((SLuint32) 0x00000004) + +#define SL_AUDIOPROFILE_AMR ((SLuint32) 0x00000001) + +#define SL_AUDIOSTREAMFORMAT_CONFORMANCE ((SLuint32) 0x00000001) +#define SL_AUDIOSTREAMFORMAT_IF1 ((SLuint32) 0x00000002) +#define SL_AUDIOSTREAMFORMAT_IF2 ((SLuint32) 0x00000003) +#define SL_AUDIOSTREAMFORMAT_FSF ((SLuint32) 0x00000004) +#define SL_AUDIOSTREAMFORMAT_RTPPAYLOAD ((SLuint32) 0x00000005) +#define SL_AUDIOSTREAMFORMAT_ITU ((SLuint32) 0x00000006) + +#define SL_AUDIOPROFILE_AMRWB ((SLuint32) 0x00000001) + +#define SL_AUDIOPROFILE_AMRWBPLUS ((SLuint32) 0x00000001) + +#define SL_AUDIOPROFILE_AAC_AAC ((SLuint32) 0x00000001) + +#define SL_AUDIOMODE_AAC_MAIN ((SLuint32) 0x00000001) +#define SL_AUDIOMODE_AAC_LC ((SLuint32) 0x00000002) +#define SL_AUDIOMODE_AAC_SSR ((SLuint32) 0x00000003) +#define SL_AUDIOMODE_AAC_LTP ((SLuint32) 0x00000004) +#define SL_AUDIOMODE_AAC_HE ((SLuint32) 0x00000005) +#define SL_AUDIOMODE_AAC_SCALABLE ((SLuint32) 0x00000006) +#define SL_AUDIOMODE_AAC_ERLC ((SLuint32) 0x00000007) +#define SL_AUDIOMODE_AAC_LD ((SLuint32) 0x00000008) +#define SL_AUDIOMODE_AAC_HE_PS ((SLuint32) 0x00000009) +#define SL_AUDIOMODE_AAC_HE_MPS ((SLuint32) 0x0000000A) + +#define SL_AUDIOSTREAMFORMAT_MP2ADTS ((SLuint32) 0x00000001) +#define SL_AUDIOSTREAMFORMAT_MP4ADTS ((SLuint32) 0x00000002) +#define SL_AUDIOSTREAMFORMAT_MP4LOAS ((SLuint32) 0x00000003) +#define SL_AUDIOSTREAMFORMAT_MP4LATM ((SLuint32) 0x00000004) +#define SL_AUDIOSTREAMFORMAT_ADIF ((SLuint32) 0x00000005) +#define SL_AUDIOSTREAMFORMAT_MP4FF ((SLuint32) 0x00000006) +#define SL_AUDIOSTREAMFORMAT_RAW ((SLuint32) 0x00000007) + +#define SL_AUDIOPROFILE_WMA7 ((SLuint32) 0x00000001) +#define SL_AUDIOPROFILE_WMA8 ((SLuint32) 0x00000002) +#define SL_AUDIOPROFILE_WMA9 ((SLuint32) 0x00000003) +#define SL_AUDIOPROFILE_WMA10 ((SLuint32) 0x00000004) + +#define SL_AUDIOMODE_WMA_LEVEL1 ((SLuint32) 0x00000001) +#define SL_AUDIOMODE_WMA_LEVEL2 ((SLuint32) 0x00000002) +#define SL_AUDIOMODE_WMA_LEVEL3 ((SLuint32) 0x00000003) +#define SL_AUDIOMODE_WMA_LEVEL4 ((SLuint32) 0x00000004) +#define SL_AUDIOMODE_WMAPRO_LEVELM0 ((SLuint32) 0x00000005) +#define SL_AUDIOMODE_WMAPRO_LEVELM1 ((SLuint32) 0x00000006) +#define SL_AUDIOMODE_WMAPRO_LEVELM2 ((SLuint32) 0x00000007) +#define SL_AUDIOMODE_WMAPRO_LEVELM3 ((SLuint32) 0x00000008) + +#define SL_AUDIOPROFILE_REALAUDIO ((SLuint32) 0x00000001) + +#define SL_AUDIOMODE_REALAUDIO_G2 ((SLuint32) 0x00000001) +#define SL_AUDIOMODE_REALAUDIO_8 ((SLuint32) 0x00000002) +#define SL_AUDIOMODE_REALAUDIO_10 ((SLuint32) 0x00000003) +#define SL_AUDIOMODE_REALAUDIO_SURROUND ((SLuint32) 0x00000004) + +typedef struct SLAudioCodecDescriptor_ { + SLuint32 maxChannels; + SLuint32 minBitsPerSample; + SLuint32 maxBitsPerSample; + SLmilliHertz minSampleRate; + SLmilliHertz maxSampleRate; + SLboolean isFreqRangeContinuous; + SLmilliHertz *pSampleRatesSupported; + SLuint32 numSampleRatesSupported; + SLuint32 minBitRate; + SLuint32 maxBitRate; + SLboolean isBitrateRangeContinuous; + SLuint32 *pBitratesSupported; + SLuint32 numBitratesSupported; + SLuint32 profileSetting; + SLuint32 modeSetting; +} SLAudioCodecDescriptor; + +/*Structure used to retrieve the profile and level settings supported by an audio encoder */ + +typedef struct SLAudioCodecProfileMode_ { + SLuint32 profileSetting; + SLuint32 modeSetting; +} SLAudioCodecProfileMode; + +extern const SLInterfaceID SL_IID_AUDIODECODERCAPABILITIES; + +struct SLAudioDecoderCapabilitiesItf_; +typedef const struct SLAudioDecoderCapabilitiesItf_ * const * SLAudioDecoderCapabilitiesItf; + +struct SLAudioDecoderCapabilitiesItf_ { + SLresult (*GetAudioDecoders) ( + SLAudioDecoderCapabilitiesItf self, + SLuint32 * pNumDecoders , + SLuint32 *pDecoderIds + ); + SLresult (*GetAudioDecoderCapabilities) ( + SLAudioDecoderCapabilitiesItf self, + SLuint32 decoderId, + SLuint32 *pIndex, + SLAudioCodecDescriptor *pDescriptor + ); +}; + + + + +/*---------------------------------------------------------------------------*/ +/* Audio Encoder Capabilities Interface */ +/* --------------------------------------------------------------------------*/ + +/* Structure used when setting audio encoding parameters */ + +typedef struct SLAudioEncoderSettings_ { + SLuint32 encoderId; + SLuint32 channelsIn; + SLuint32 channelsOut; + SLmilliHertz sampleRate; + SLuint32 bitRate; + SLuint32 bitsPerSample; + SLuint32 rateControl; + SLuint32 profileSetting; + SLuint32 levelSetting; + SLuint32 channelMode; + SLuint32 streamFormat; + SLuint32 encodeOptions; + SLuint32 blockAlignment; +} SLAudioEncoderSettings; + +extern const SLInterfaceID SL_IID_AUDIOENCODERCAPABILITIES; + +struct SLAudioEncoderCapabilitiesItf_; +typedef const struct SLAudioEncoderCapabilitiesItf_ * const * SLAudioEncoderCapabilitiesItf; + +struct SLAudioEncoderCapabilitiesItf_ { + SLresult (*GetAudioEncoders) ( + SLAudioEncoderCapabilitiesItf self, + SLuint32 *pNumEncoders , + SLuint32 *pEncoderIds + ); + SLresult (*GetAudioEncoderCapabilities) ( + SLAudioEncoderCapabilitiesItf self, + SLuint32 encoderId, + SLuint32 *pIndex, + SLAudioCodecDescriptor * pDescriptor + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Audio Encoder Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_AUDIOENCODER; + +struct SLAudioEncoderItf_; +typedef const struct SLAudioEncoderItf_ * const * SLAudioEncoderItf; + +struct SLAudioEncoderItf_ { + SLresult (*SetEncoderSettings) ( + SLAudioEncoderItf self, + SLAudioEncoderSettings *pSettings + ); + SLresult (*GetEncoderSettings) ( + SLAudioEncoderItf self, + SLAudioEncoderSettings *pSettings + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Bass Boost Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_BASSBOOST; + +struct SLBassBoostItf_; +typedef const struct SLBassBoostItf_ * const * SLBassBoostItf; + +struct SLBassBoostItf_ { + SLresult (*SetEnabled)( + SLBassBoostItf self, + SLboolean enabled + ); + SLresult (*IsEnabled)( + SLBassBoostItf self, + SLboolean *pEnabled + ); + SLresult (*SetStrength)( + SLBassBoostItf self, + SLpermille strength + ); + SLresult (*GetRoundedStrength)( + SLBassBoostItf self, + SLpermille *pStrength + ); + SLresult (*IsStrengthSupported)( + SLBassBoostItf self, + SLboolean *pSupported + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Pitch Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_PITCH; + +struct SLPitchItf_; +typedef const struct SLPitchItf_ * const * SLPitchItf; + +struct SLPitchItf_ { + SLresult (*SetPitch) ( + SLPitchItf self, + SLpermille pitch + ); + SLresult (*GetPitch) ( + SLPitchItf self, + SLpermille *pPitch + ); + SLresult (*GetPitchCapabilities) ( + SLPitchItf self, + SLpermille *pMinPitch, + SLpermille *pMaxPitch + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Rate Pitch Interface */ +/* RatePitchItf is an interface for controlling the rate a sound is played */ +/* back. A change in rate will cause a change in pitch. */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_RATEPITCH; + +struct SLRatePitchItf_; +typedef const struct SLRatePitchItf_ * const * SLRatePitchItf; + +struct SLRatePitchItf_ { + SLresult (*SetRate) ( + SLRatePitchItf self, + SLpermille rate + ); + SLresult (*GetRate) ( + SLRatePitchItf self, + SLpermille *pRate + ); + SLresult (*GetRatePitchCapabilities) ( + SLRatePitchItf self, + SLpermille *pMinRate, + SLpermille *pMaxRate + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Virtualizer Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_VIRTUALIZER; + +struct SLVirtualizerItf_; +typedef const struct SLVirtualizerItf_ * const * SLVirtualizerItf; + +struct SLVirtualizerItf_ { + SLresult (*SetEnabled)( + SLVirtualizerItf self, + SLboolean enabled + ); + SLresult (*IsEnabled)( + SLVirtualizerItf self, + SLboolean *pEnabled + ); + SLresult (*SetStrength)( + SLVirtualizerItf self, + SLpermille strength + ); + SLresult (*GetRoundedStrength)( + SLVirtualizerItf self, + SLpermille *pStrength + ); + SLresult (*IsStrengthSupported)( + SLVirtualizerItf self, + SLboolean *pSupported + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Visualization Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_VISUALIZATION; + +struct SLVisualizationItf_; +typedef const struct SLVisualizationItf_ * const * SLVisualizationItf; + +typedef void (SLAPIENTRY *slVisualizationCallback) ( + void *pContext, + const SLuint8 waveform[], + const SLuint8 fft[], + SLmilliHertz samplerate +); + +struct SLVisualizationItf_{ + SLresult (*RegisterVisualizationCallback)( + SLVisualizationItf self, + slVisualizationCallback callback, + void *pContext, + SLmilliHertz rate + ); + SLresult (*GetMaxRate)( + SLVisualizationItf self, + SLmilliHertz* pRate + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Engine Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_ENGINE; + +struct SLEngineItf_; +typedef const struct SLEngineItf_ * const * SLEngineItf; + + +struct SLEngineItf_ { + + SLresult (*CreateLEDDevice) ( + SLEngineItf self, + SLObjectItf * pDevice, + SLuint32 deviceID, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateVibraDevice) ( + SLEngineItf self, + SLObjectItf * pDevice, + SLuint32 deviceID, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateAudioPlayer) ( + SLEngineItf self, + SLObjectItf * pPlayer, + SLDataSource *pAudioSrc, + SLDataSink *pAudioSnk, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateAudioRecorder) ( + SLEngineItf self, + SLObjectItf * pRecorder, + SLDataSource *pAudioSrc, + SLDataSink *pAudioSnk, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateMidiPlayer) ( + SLEngineItf self, + SLObjectItf * pPlayer, + SLDataSource *pMIDISrc, + SLDataSource *pBankSrc, + SLDataSink *pAudioOutput, + SLDataSink *pVibra, + SLDataSink *pLEDArray, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateListener) ( + SLEngineItf self, + SLObjectItf * pListener, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*Create3DGroup) ( + SLEngineItf self, + SLObjectItf * pGroup, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateOutputMix) ( + SLEngineItf self, + SLObjectItf * pMix, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateMetadataExtractor) ( + SLEngineItf self, + SLObjectItf * pMetadataExtractor, + SLDataSource * pDataSource, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateExtensionObject) ( + SLEngineItf self, + SLObjectItf * pObject, + void * pParameters, + SLuint32 objectID, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*QueryNumSupportedInterfaces) ( + SLEngineItf self, + SLuint32 objectID, + SLuint32 * pNumSupportedInterfaces + ); + SLresult (*QuerySupportedInterfaces) ( + SLEngineItf self, + SLuint32 objectID, + SLuint32 index, + SLInterfaceID * pInterfaceId + ); + SLresult (*QueryNumSupportedExtensions) ( + SLEngineItf self, + SLuint32 * pNumExtensions + ); + SLresult (*QuerySupportedExtension) ( + SLEngineItf self, + SLuint32 index, + SLchar * pExtensionName, + SLint16 * pNameLength + ); + SLresult (*IsExtensionSupported) ( + SLEngineItf self, + const SLchar * pExtensionName, + SLboolean * pSupported + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Engine Capabilities Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_ENGINECAPABILITIES; + +struct SLEngineCapabilitiesItf_; +typedef const struct SLEngineCapabilitiesItf_ * const * SLEngineCapabilitiesItf; + +struct SLEngineCapabilitiesItf_ { + SLresult (*QuerySupportedProfiles) ( + SLEngineCapabilitiesItf self, + SLuint16 *pProfilesSupported + ); + SLresult (*QueryAvailableVoices) ( + SLEngineCapabilitiesItf self, + SLuint16 voiceType, + SLint16 *pNumMaxVoices, + SLboolean *pIsAbsoluteMax, + SLint16 *pNumFreeVoices + ); + SLresult (*QueryNumberOfMIDISynthesizers) ( + SLEngineCapabilitiesItf self, + SLint16 *pNumMIDIsynthesizers + ); + SLresult (*QueryAPIVersion) ( + SLEngineCapabilitiesItf self, + SLint16 *pMajor, + SLint16 *pMinor, + SLint16 *pStep + ); + SLresult (*QueryLEDCapabilities) ( + SLEngineCapabilitiesItf self, + SLuint32 *pIndex, + SLuint32 *pLEDDeviceID, + SLLEDDescriptor *pDescriptor + ); + SLresult (*QueryVibraCapabilities) ( + SLEngineCapabilitiesItf self, + SLuint32 *pIndex, + SLuint32 *pVibraDeviceID, + SLVibraDescriptor *pDescriptor + ); + SLresult (*IsThreadSafe) ( + SLEngineCapabilitiesItf self, + SLboolean *pIsThreadSafe + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Thread Sync Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_THREADSYNC; + +struct SLThreadSyncItf_; +typedef const struct SLThreadSyncItf_ * const * SLThreadSyncItf; + + +struct SLThreadSyncItf_ { + SLresult (*EnterCriticalSection) ( + SLThreadSyncItf self + ); + SLresult (*ExitCriticalSection) ( + SLThreadSyncItf self + ); +}; + + +/*****************************************************************************/ +/* SL engine constructor */ +/*****************************************************************************/ + +#define SL_ENGINEOPTION_THREADSAFE ((SLuint32) 0x00000001) +#define SL_ENGINEOPTION_LOSSOFCONTROL ((SLuint32) 0x00000002) + +typedef struct SLEngineOption_ { + SLuint32 feature; + SLuint32 data; +} SLEngineOption; + + +SLresult SLAPIENTRY slCreateEngine( + SLObjectItf *pEngine, + SLuint32 numOptions, + const SLEngineOption *pEngineOptions, + SLuint32 numInterfaces, + const SLInterfaceID *pInterfaceIds, + const SLboolean * pInterfaceRequired +); + +SLresult SLAPIENTRY slQueryNumSupportedEngineInterfaces( + SLuint32 * pNumSupportedInterfaces +); + +SLresult SLAPIENTRY slQuerySupportedEngineInterfaces( + SLuint32 index, + SLInterfaceID * pInterfaceId +); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENSL_ES_H_ */ diff --git a/third_party/openSLES/api/1.0.1/OpenSLES_OpenHarmony.h b/third_party/openSLES/api/1.0.1/OpenSLES_OpenHarmony.h new file mode 100644 index 0000000000000000000000000000000000000000..8feed06a4c447e1b8f3d5f29baf11949f9db8646 --- /dev/null +++ b/third_party/openSLES/api/1.0.1/OpenSLES_OpenHarmony.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef OPENSLES_OPENHARMONY_H +#define OPENSLES_OPENHARMONY_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "OpenSLES.h" +#include "OpenSLES_Platform.h" + +/*---------------------------------------------------------------------------*/ +/* OH Buffer Queue Interface */ +/*---------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_OH_BUFFERQUEUE; + +struct SLOHBufferQueueItf_; +typedef const struct SLOHBufferQueueItf_ * const * SLOHBufferQueueItf; + +typedef void (SLAPIENTRY *SlOHBufferQueueCallback)( + SLOHBufferQueueItf caller, + void *pContext, + SLuint32 size +); + +/** OH Buffer queue state **/ + +typedef struct SLOHBufferQueueState_ { + SLuint32 count; + SLuint32 index; +} SLOHBufferQueueState; + + +struct SLOHBufferQueueItf_ { + SLresult (*Enqueue) ( + SLOHBufferQueueItf self, + const void *buffer, + SLuint32 size + ); + SLresult (*Clear) ( + SLOHBufferQueueItf self + ); + SLresult (*GetState) ( + SLOHBufferQueueItf self, + SLOHBufferQueueState *state + ); + SLresult (*GetBuffer) ( + SLOHBufferQueueItf self, + SLuint8** buffer, + SLuint32* size + ); + SLresult (*RegisterCallback) ( + SLOHBufferQueueItf self, + SlOHBufferQueueCallback callback, + void* pContext + ); +}; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENSLES_OPENHARMONY_H */ diff --git a/third_party/openSLES/api/1.0.1/OpenSLES_Platform.h b/third_party/openSLES/api/1.0.1/OpenSLES_Platform.h new file mode 100644 index 0000000000000000000000000000000000000000..afce98a1e369acfd9e3a12f13aa0af76779a3207 --- /dev/null +++ b/third_party/openSLES/api/1.0.1/OpenSLES_Platform.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2007-2009 The Khronos Group Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and /or associated documentation files (the "Materials "), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS IN THE + * MATERIALS. + * + * OpenSLES_Platform.h - OpenSL ES version 1.0 + * + */ + +/****************************************************************************/ +/* NOTE: This file contains definitions for the base types and the */ +/* SLAPIENTRY macro. This file **WILL NEED TO BE EDITED** to provide */ +/* the correct definitions specific to the platform being used. */ +/****************************************************************************/ + +#ifndef _OPENSLES_PLATFORM_H_ +#define _OPENSLES_PLATFORM_H_ + +typedef unsigned char sl_uint8_t; +typedef signed char sl_int8_t; +typedef unsigned short sl_uint16_t; +typedef signed short sl_int16_t; +typedef unsigned long sl_uint32_t; +typedef signed long sl_int32_t; + +#ifndef SLAPIENTRY +#define SLAPIENTRY /* override per-platform */ +#endif + +#endif /* _OPENSLES_PLATFORM_H_ */ diff --git a/third_party/openSLES/api/1.0.1/README.txt b/third_party/openSLES/api/1.0.1/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..7ed9498ee7b6a335d00273c3554b5cc4d771018c --- /dev/null +++ b/third_party/openSLES/api/1.0.1/README.txt @@ -0,0 +1,2 @@ +When building applications using the OpenSL-ES API you should compile and link the OpenSLES_IID.c file into your project. This file contains unique interface IDs for all OpenSL-ES API interfaces. These IDs have +have been automatically generated. Application developers should not edit these interface IDs. \ No newline at end of file diff --git a/third_party/openSLES/api/1.0/OpenSLES.h b/third_party/openSLES/api/1.0/OpenSLES.h new file mode 100644 index 0000000000000000000000000000000000000000..7d028334f4f829fd1e7ff2cbff582da91901eaf9 --- /dev/null +++ b/third_party/openSLES/api/1.0/OpenSLES.h @@ -0,0 +1,2768 @@ +/* + * Copyright (c) 2008 The Khronos Group Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and /or associated documentation files (the "Materials "), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS IN THE + * MATERIALS. + * + * OpenSLES.h - OpenSL ES version 1.0 + * + */ + +/****************************************************************************/ +/* NOTE: This file is a standard OpenSL ES header file and should not be */ +/* modified in any way. */ +/****************************************************************************/ + +#ifndef OPENSL_ES_H_ +#define OPENSL_ES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "OpenSLES_Platform.h" + + +/*****************************************************************************/ +/* Common types, structures, and defines */ +/*****************************************************************************/ + +#ifndef _KHRONOS_KEYS_ +#define _KHRONOS_KEYS_ + +#define KHRONOS_TITLE "KhronosTitle" +#define KHRONOS_ALBUM "KhronosAlbum" +#define KHRONOS_TRACK_NUMBER "KhronosTrackNumber" +#define KHRONOS_ARTIST "KhronosArtist" +#define KHRONOS_GENRE "KhronosGenre" +#define KHRONOS_YEAR "KhronosYear" +#define KHRONOS_COMMENT "KhronosComment" +#define KHRONOS_ARTIST_URL "KhronosArtistURL" +#define KHRONOS_CONTENT_URL "KhronosContentURL" +#define KHRONOS_RATING "KhronosRating" +#define KHRONOS_ALBUM_ART "KhronosAlbumArt" +#define KHRONOS_COPYRIGHT "KhronosCopyright" + +#endif + + +/* remap common types to SL types for clarity */ +typedef sl_int8_t SLint8; /* 8 bit signed integer */ +typedef sl_uint8_t SLuint8; /* 8 bit unsigned integer */ +typedef sl_int16_t SLint16; /* 16 bit signed integer */ +typedef sl_uint16_t SLuint16; /* 16 bit unsigned integer */ +typedef sl_int32_t SLint32; /* 32 bit signed integer */ +typedef sl_uint32_t SLuint32; /* 32 bit unsigned integer */ + +typedef SLuint32 SLboolean; +#define SL_BOOLEAN_FALSE ((SLboolean) 0x00000000) +#define SL_BOOLEAN_TRUE ((SLboolean) 0x00000001) + +typedef SLuint8 SLchar; /* UTF-8 is to be used */ +typedef SLint16 SLmillibel; +typedef SLuint32 SLmillisecond; +typedef SLuint32 SLmilliHertz; +typedef SLint32 SLmillimeter; +typedef SLint32 SLmillidegree; +typedef SLint16 SLpermille; +typedef SLuint32 SLmicrosecond; +typedef SLuint32 SLresult; + +#define SL_MILLIBEL_MAX ((SLmillibel) 0x7FFF) +#define SL_MILLIBEL_MIN ((SLmillibel) (-SL_MILLIBEL_MAX-1)) + +#define SL_MILLIHERTZ_MAX ((SLmilliHertz) 0xFFFFFFFF) +#define SL_MILLIMETER_MAX ((SLmillimeter) 0x7FFFFFFF) + +/** Interface ID defined as a UUID */ +typedef const struct SLInterfaceID_ { + SLuint32 time_low; + SLuint16 time_mid; + SLuint16 time_hi_and_version; + SLuint16 clock_seq; + SLuint8 node[6]; +} * SLInterfaceID; + +/* Forward declaration for the object interface */ +struct SLObjectItf_; + +typedef const struct SLObjectItf_ * const * SLObjectItf; + +/* Objects ID's */ + +#define SL_OBJECTID_ENGINE ((SLuint32) 0x00001001) +#define SL_OBJECTID_LEDDEVICE ((SLuint32) 0x00001002) +#define SL_OBJECTID_VIBRADEVICE ((SLuint32) 0x00001003) +#define SL_OBJECTID_AUDIOPLAYER ((SLuint32) 0x00001004) +#define SL_OBJECTID_AUDIORECORDER ((SLuint32) 0x00001005) +#define SL_OBJECTID_MIDIPLAYER ((SLuint32) 0x00001006) +#define SL_OBJECTID_LISTENER ((SLuint32) 0x00001007) +#define SL_OBJECTID_3DGROUP ((SLuint32) 0x00001008) +#define SL_OBJECTID_OUTPUTMIX ((SLuint32) 0x00001009) +#define SL_OBJECTID_METADATAEXTRACTOR ((SLuint32) 0x0000100A) + + +/* SL Profiles */ + +#define SL_PROFILES_PHONE ((SLuint16) 0x0001) +#define SL_PROFILES_MUSIC ((SLuint16) 0x0002) +#define SL_PROFILES_GAME ((SLuint16) 0x0004) + +/* Types of voices supported by the system */ + +#define SL_VOICETYPE_2D_AUDIO ((SLuint16) 0x0001) +#define SL_VOICETYPE_MIDI ((SLuint16) 0x0002) +#define SL_VOICETYPE_3D_AUDIO ((SLuint16) 0x0004) +#define SL_VOICETYPE_3D_MIDIOUTPUT ((SLuint16) 0x0008) + +/* Convenient macros representing various different priority levels, for use with the SetPriority method */ + +#define SL_PRIORITY_LOWEST ((SLint32) (-0x7FFFFFFF-1)) +#define SL_PRIORITY_VERYLOW ((SLint32) -0x60000000) +#define SL_PRIORITY_LOW ((SLint32) -0x40000000) +#define SL_PRIORITY_BELOWNORMAL ((SLint32) -0x20000000) +#define SL_PRIORITY_NORMAL ((SLint32) 0x00000000) +#define SL_PRIORITY_ABOVENORMAL ((SLint32) 0x20000000) +#define SL_PRIORITY_HIGH ((SLint32) 0x40000000) +#define SL_PRIORITY_VERYHIGH ((SLint32) 0x60000000) +#define SL_PRIORITY_HIGHEST ((SLint32) 0x7FFFFFFF) + + +/** These macros list the various sample formats that are possible on audio input and output devices. */ + +#define SL_PCMSAMPLEFORMAT_FIXED_8 ((SLuint16) 0x0008) +#define SL_PCMSAMPLEFORMAT_FIXED_16 ((SLuint16) 0x0010) +#define SL_PCMSAMPLEFORMAT_FIXED_20 ((SLuint16) 0x0014) +#define SL_PCMSAMPLEFORMAT_FIXED_24 ((SLuint16) 0x0018) +#define SL_PCMSAMPLEFORMAT_FIXED_28 ((SLuint16) 0x001C) +#define SL_PCMSAMPLEFORMAT_FIXED_32 ((SLuint16) 0x0020) + + +/** These macros specify the commonly used sampling rates (in milliHertz) supported by most audio I/O devices. */ + +#define SL_SAMPLINGRATE_8 ((SLuint32) 8000000) +#define SL_SAMPLINGRATE_11_025 ((SLuint32) 11025000) +#define SL_SAMPLINGRATE_12 ((SLuint32) 12000000) +#define SL_SAMPLINGRATE_16 ((SLuint32) 16000000) +#define SL_SAMPLINGRATE_22_05 ((SLuint32) 22050000) +#define SL_SAMPLINGRATE_24 ((SLuint32) 24000000) +#define SL_SAMPLINGRATE_32 ((SLuint32) 32000000) +#define SL_SAMPLINGRATE_44_1 ((SLuint32) 44100000) +#define SL_SAMPLINGRATE_48 ((SLuint32) 48000000) +#define SL_SAMPLINGRATE_64 ((SLuint32) 64000000) +#define SL_SAMPLINGRATE_88_2 ((SLuint32) 88200000) +#define SL_SAMPLINGRATE_96 ((SLuint32) 96000000) +#define SL_SAMPLINGRATE_192 ((SLuint32) 192000000) + +#define SL_SPEAKER_FRONT_LEFT ((SLuint32) 0x00000001) +#define SL_SPEAKER_FRONT_RIGHT ((SLuint32) 0x00000002) +#define SL_SPEAKER_FRONT_CENTER ((SLuint32) 0x00000004) +#define SL_SPEAKER_LOW_FREQUENCY ((SLuint32) 0x00000008) +#define SL_SPEAKER_BACK_LEFT ((SLuint32) 0x00000010) +#define SL_SPEAKER_BACK_RIGHT ((SLuint32) 0x00000020) +#define SL_SPEAKER_FRONT_LEFT_OF_CENTER ((SLuint32) 0x00000040) +#define SL_SPEAKER_FRONT_RIGHT_OF_CENTER ((SLuint32) 0x00000080) +#define SL_SPEAKER_BACK_CENTER ((SLuint32) 0x00000100) +#define SL_SPEAKER_SIDE_LEFT ((SLuint32) 0x00000200) +#define SL_SPEAKER_SIDE_RIGHT ((SLuint32) 0x00000400) +#define SL_SPEAKER_TOP_CENTER ((SLuint32) 0x00000800) +#define SL_SPEAKER_TOP_FRONT_LEFT ((SLuint32) 0x00001000) +#define SL_SPEAKER_TOP_FRONT_CENTER ((SLuint32) 0x00002000) +#define SL_SPEAKER_TOP_FRONT_RIGHT ((SLuint32) 0x00004000) +#define SL_SPEAKER_TOP_BACK_LEFT ((SLuint32) 0x00008000) +#define SL_SPEAKER_TOP_BACK_CENTER ((SLuint32) 0x00010000) +#define SL_SPEAKER_TOP_BACK_RIGHT ((SLuint32) 0x00020000) + + +/*****************************************************************************/ +/* Errors */ +/* */ +/*****************************************************************************/ + +#define SL_RESULT_SUCCESS ((SLuint32) 0x00000000) +#define SL_RESULT_PRECONDITIONS_VIOLATED ((SLuint32) 0x00000001) +#define SL_RESULT_PARAMETER_INVALID ((SLuint32) 0x00000002) +#define SL_RESULT_MEMORY_FAILURE ((SLuint32) 0x00000003) +#define SL_RESULT_RESOURCE_ERROR ((SLuint32) 0x00000004) +#define SL_RESULT_RESOURCE_LOST ((SLuint32) 0x00000005) +#define SL_RESULT_IO_ERROR ((SLuint32) 0x00000006) +#define SL_RESULT_BUFFER_INSUFFICIENT ((SLuint32) 0x00000007) +#define SL_RESULT_CONTENT_CORRUPTED ((SLuint32) 0x00000008) +#define SL_RESULT_CONTENT_UNSUPPORTED ((SLuint32) 0x00000009) +#define SL_RESULT_CONTENT_NOT_FOUND ((SLuint32) 0x0000000A) +#define SL_RESULT_PERMISSION_DENIED ((SLuint32) 0x0000000B) +#define SL_RESULT_FEATURE_UNSUPPORTED ((SLuint32) 0x0000000C) +#define SL_RESULT_INTERNAL_ERROR ((SLuint32) 0x0000000D) +#define SL_RESULT_UNKNOWN_ERROR ((SLuint32) 0x0000000E) +#define SL_RESULT_OPERATION_ABORTED ((SLuint32) 0x0000000F) +#define SL_RESULT_CONTROL_LOST ((SLuint32) 0x00000010) + + +/* Object state definitions */ + +#define SL_OBJECT_STATE_UNREALIZED ((SLuint32) 0x00000001) +#define SL_OBJECT_STATE_REALIZED ((SLuint32) 0x00000002) +#define SL_OBJECT_STATE_SUSPENDED ((SLuint32) 0x00000003) + +/* Object event definitions */ + +#define SL_OBJECT_EVENT_RUNTIME_ERROR ((SLuint32) 0x00000001) +#define SL_OBJECT_EVENT_ASYNC_TERMINATION ((SLuint32) 0x00000002) +#define SL_OBJECT_EVENT_RESOURCES_LOST ((SLuint32) 0x00000003) +#define SL_OBJECT_EVENT_RESOURCES_AVAILABLE ((SLuint32) 0x00000004) +#define SL_OBJECT_EVENT_ITF_CONTROL_TAKEN ((SLuint32) 0x00000005) +#define SL_OBJECT_EVENT_ITF_CONTROL_RETURNED ((SLuint32) 0x00000006) +#define SL_OBJECT_EVENT_ITF_PARAMETERS_CHANGED ((SLuint32) 0x00000007) + + +/*****************************************************************************/ +/* Interface definitions */ +/*****************************************************************************/ + +/** NULL Interface */ + +extern const SLInterfaceID SL_IID_NULL; + +/*---------------------------------------------------------------------------*/ +/* Data Source and Data Sink Structures */ +/*---------------------------------------------------------------------------*/ + +/** Data locator macros */ +#define SL_DATALOCATOR_URI ((SLuint32) 0x00000001) +#define SL_DATALOCATOR_ADDRESS ((SLuint32) 0x00000002) +#define SL_DATALOCATOR_IODEVICE ((SLuint32) 0x00000003) +#define SL_DATALOCATOR_OUTPUTMIX ((SLuint32) 0x00000004) +#define SL_DATALOCATOR_RESERVED5 ((SLuint32) 0x00000005) +#define SL_DATALOCATOR_BUFFERQUEUE ((SLuint32) 0x00000006) +#define SL_DATALOCATOR_MIDIBUFFERQUEUE ((SLuint32) 0x00000007) +#define SL_DATALOCATOR_RESERVED8 ((SLuint32) 0x00000008) + + + +/** URI-based data locator definition where locatorType must be SL_DATALOCATOR_URI*/ +typedef struct SLDataLocator_URI_ { + SLuint32 locatorType; + SLchar * URI; +} SLDataLocator_URI; + +/** Address-based data locator definition where locatorType must be SL_DATALOCATOR_ADDRESS*/ +typedef struct SLDataLocator_Address_ { + SLuint32 locatorType; + void *pAddress; + SLuint32 length; +} SLDataLocator_Address; + +/** IODevice-types */ +#define SL_IODEVICE_AUDIOINPUT ((SLuint32) 0x00000001) +#define SL_IODEVICE_LEDARRAY ((SLuint32) 0x00000002) +#define SL_IODEVICE_VIBRA ((SLuint32) 0x00000003) +#define SL_IODEVICE_RESERVED4 ((SLuint32) 0x00000004) +#define SL_IODEVICE_RESERVED5 ((SLuint32) 0x00000005) + +/** IODevice-based data locator definition where locatorType must be SL_DATALOCATOR_IODEVICE*/ +typedef struct SLDataLocator_IODevice_ { + SLuint32 locatorType; + SLuint32 deviceType; + SLuint32 deviceID; + SLObjectItf device; +} SLDataLocator_IODevice; + +/** OutputMix-based data locator definition where locatorType must be SL_DATALOCATOR_OUTPUTMIX*/ +typedef struct SLDataLocator_OutputMix { + SLuint32 locatorType; + SLObjectItf outputMix; +} SLDataLocator_OutputMix; + + +/** BufferQueue-based data locator definition where locatorType must be SL_DATALOCATOR_BUFFERQUEUE*/ +typedef struct SLDataLocator_BufferQueue { + SLuint32 locatorType; + SLuint32 numBuffers; +} SLDataLocator_BufferQueue; + +/** MidiBufferQueue-based data locator definition where locatorType must be SL_DATALOCATOR_MIDIBUFFERQUEUE*/ +typedef struct SLDataLocator_MIDIBufferQueue { + SLuint32 locatorType; + SLuint32 tpqn; + SLuint32 numBuffers; +} SLDataLocator_MIDIBufferQueue; + +/** Data format defines */ +#define SL_DATAFORMAT_MIME ((SLuint32) 0x00000001) +#define SL_DATAFORMAT_PCM ((SLuint32) 0x00000002) +#define SL_DATAFORMAT_RESERVED3 ((SLuint32) 0x00000003) + + +/** MIME-type-based data format definition where formatType must be SL_DATAFORMAT_MIME*/ +typedef struct SLDataFormat_MIME_ { + SLuint32 formatType; + SLchar * mimeType; + SLuint32 containerType; +} SLDataFormat_MIME; + +/* Byte order of a block of 16- or 32-bit data */ +#define SL_BYTEORDER_BIGENDIAN ((SLuint32) 0x00000001) +#define SL_BYTEORDER_LITTLEENDIAN ((SLuint32) 0x00000002) + +/* Container type */ +#define SL_CONTAINERTYPE_UNSPECIFIED ((SLuint32) 0x00000001) +#define SL_CONTAINERTYPE_RAW ((SLuint32) 0x00000002) +#define SL_CONTAINERTYPE_ASF ((SLuint32) 0x00000003) +#define SL_CONTAINERTYPE_AVI ((SLuint32) 0x00000004) +#define SL_CONTAINERTYPE_BMP ((SLuint32) 0x00000005) +#define SL_CONTAINERTYPE_JPG ((SLuint32) 0x00000006) +#define SL_CONTAINERTYPE_JPG2000 ((SLuint32) 0x00000007) +#define SL_CONTAINERTYPE_M4A ((SLuint32) 0x00000008) +#define SL_CONTAINERTYPE_MP3 ((SLuint32) 0x00000009) +#define SL_CONTAINERTYPE_MP4 ((SLuint32) 0x0000000A) +#define SL_CONTAINERTYPE_MPEG_ES ((SLuint32) 0x0000000B) +#define SL_CONTAINERTYPE_MPEG_PS ((SLuint32) 0x0000000C) +#define SL_CONTAINERTYPE_MPEG_TS ((SLuint32) 0x0000000D) +#define SL_CONTAINERTYPE_QT ((SLuint32) 0x0000000E) +#define SL_CONTAINERTYPE_WAV ((SLuint32) 0x0000000F) +#define SL_CONTAINERTYPE_XMF_0 ((SLuint32) 0x00000010) +#define SL_CONTAINERTYPE_XMF_1 ((SLuint32) 0x00000011) +#define SL_CONTAINERTYPE_XMF_2 ((SLuint32) 0x00000012) +#define SL_CONTAINERTYPE_XMF_3 ((SLuint32) 0x00000013) +#define SL_CONTAINERTYPE_XMF_GENERIC ((SLuint32) 0x00000014) +#define SL_CONTAINERTYPE_AMR ((SLuint32) 0x00000015) +#define SL_CONTAINERTYPE_AAC ((SLuint32) 0x00000016) +#define SL_CONTAINERTYPE_3GPP ((SLuint32) 0x00000017) +#define SL_CONTAINERTYPE_3GA ((SLuint32) 0x00000018) +#define SL_CONTAINERTYPE_RM ((SLuint32) 0x00000019) +#define SL_CONTAINERTYPE_DMF ((SLuint32) 0x0000001A) +#define SL_CONTAINERTYPE_SMF ((SLuint32) 0x0000001B) +#define SL_CONTAINERTYPE_MOBILE_DLS ((SLuint32) 0x0000001C) + + +/** PCM-type-based data format definition where formatType must be SL_DATAFORMAT_PCM*/ +typedef struct SLDataFormat_PCM_ { + SLuint32 formatType; + SLuint32 numChannels; + SLuint32 samplesPerSec; + SLuint32 bitsPerSample; + SLuint32 containerSize; + SLuint32 channelMask; + SLuint32 endianness; +} SLDataFormat_PCM; + +typedef struct SLDataSource_ { + void *pLocator; + void *pFormat; +} SLDataSource; + + +typedef struct SLDataSink_ { + void *pLocator; + void *pFormat; +} SLDataSink; + + + + + + +/*---------------------------------------------------------------------------*/ +/* Standard Object Interface */ +/*---------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_OBJECT; + +/** Object callback */ + + +typedef void (SLAPIENTRY *slObjectCallback) ( + SLObjectItf caller, + const void * pContext, + SLuint32 event, + SLresult result, + SLuint32 param, + void *pInterface +); + + +struct SLObjectItf_ { + SLresult (*Realize) ( + SLObjectItf self, + SLboolean async + ); + SLresult (*Resume) ( + SLObjectItf self, + SLboolean async + ); + SLresult (*GetState) ( + SLObjectItf self, + SLuint32 * pState + ); + SLresult (*GetInterface) ( + SLObjectItf self, + const SLInterfaceID iid, + void * pInterface + ); + SLresult (*RegisterCallback) ( + SLObjectItf self, + slObjectCallback callback, + void * pContext + ); + void (*AbortAsyncOperation) ( + SLObjectItf self + ); + void (*Destroy) ( + SLObjectItf self + ); + SLresult (*SetPriority) ( + SLObjectItf self, + SLint32 priority, + SLboolean preemptable + ); + SLresult (*GetPriority) ( + SLObjectItf self, + SLint32 *pPriority, + SLboolean *pPreemptable + ); + SLresult (*SetLossOfControlInterfaces) ( + SLObjectItf self, + SLint16 numInterfaces, + SLInterfaceID * pInterfaceIDs, + SLboolean enabled + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Audio IO Device capabilities interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_DEFAULTDEVICEID_AUDIOINPUT ((SLuint32) 0xFFFFFFFF) +#define SL_DEFAULTDEVICEID_AUDIOOUTPUT ((SLuint32) 0xFFFFFFFE) +#define SL_DEFAULTDEVICEID_LED ((SLuint32) 0xFFFFFFFD) +#define SL_DEFAULTDEVICEID_VIBRA ((SLuint32) 0xFFFFFFFC) +#define SL_DEFAULTDEVICEID_RESERVED1 ((SLuint32) 0xFFFFFFFB) + + +#define SL_DEVCONNECTION_INTEGRATED ((SLuint16) 0x0001) +#define SL_DEVCONNECTION_ATTACHED_WIRED ((SLuint16) 0x0100) +#define SL_DEVCONNECTION_ATTACHED_WIRELESS ((SLuint16) 0x0200) +#define SL_DEVCONNECTION_NETWORK ((SLuint16) 0x0400) + + +#define SL_DEVLOCATION_HANDSET ((SLuint16) 0x0001) +#define SL_DEVLOCATION_HEADSET ((SLuint16) 0x0002) +#define SL_DEVLOCATION_CARKIT ((SLuint16) 0x0003) +#define SL_DEVLOCATION_DOCK ((SLuint16) 0x0004) +#define SL_DEVLOCATION_RESLTE ((SLuint16) 0x0005) + + +#define SL_DEVSCOPE_UNKNOWN ((SLuint16) 0x0001) +#define SL_DEVSCOPE_ENVIRONMENT ((SLuint16) 0x0002) +#define SL_DEVSCOPE_USER ((SLuint16) 0x0003) + + +typedef struct SLAudioInputDescriptor_ { + SLchar *deviceName; + SLint16 deviceConnection; + SLint16 deviceScope; + SLint16 deviceLocation; + SLboolean isForTelephony; + SLmilliHertz minSampleRate; + SLmilliHertz maxSampleRate; + SLboolean isFreqRangeContinuous; + SLmilliHertz *samplingRatesSupported; + SLint16 numOfSamplingRatesSupported; + SLint16 maxChannels; +} SLAudioInputDescriptor; + + +typedef struct SLAudioOutputDescriptor_ { + SLchar *pDeviceName; + SLint16 deviceConnection; + SLint16 deviceScope; + SLint16 deviceLocation; + SLboolean isForTelephony; + SLmilliHertz minSampleRate; + SLmilliHertz maxSampleRate; + SLboolean isFreqRangeContinuous; + SLmilliHertz *samplingRatesSupported; + SLint16 numOfSamplingRatesSupported; + SLint16 maxChannels; +} SLAudioOutputDescriptor; + + + +extern const SLInterfaceID SL_IID_AUDIOIODEVICECAPABILITIES; + +struct SLAudioIODeviceCapabilitiesItf_; +typedef const struct SLAudioIODeviceCapabilitiesItf_ * const * SLAudioIODeviceCapabilitiesItf; + + +typedef void (SLAPIENTRY *slAvailableAudioInputsChangedCallback) ( + SLAudioIODeviceCapabilitiesItf caller, + void *pContext, + SLuint32 deviceID, + SLint32 numInputs, + SLboolean isNew +); + + +typedef void (SLAPIENTRY *slAvailableAudioOutputsChangedCallback) ( + SLAudioIODeviceCapabilitiesItf caller, + void *pContext, + SLuint32 deviceID, + SLint32 numOutputs, + SLboolean isNew +); + +typedef void (SLAPIENTRY *slDefaultDeviceIDMapChangedCallback) ( + SLAudioIODeviceCapabilitiesItf caller, + void *pContext, + SLboolean isOutput, + SLint32 numDevices +); + + +struct SLAudioIODeviceCapabilitiesItf_ { + SLresult (*GetAvailableAudioInputs)( + SLAudioIODeviceCapabilitiesItf self, + SLint32 *pNumInputs, + SLuint32 *pInputDeviceIDs + ); + SLresult (*QueryAudioInputCapabilities)( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLAudioInputDescriptor *pDescriptor + ); + SLresult (*RegisterAvailableAudioInputsChangedCallback) ( + SLAudioIODeviceCapabilitiesItf self, + slAvailableAudioInputsChangedCallback callback, + void *pContext + ); + SLresult (*GetAvailableAudioOutputs)( + SLAudioIODeviceCapabilitiesItf self, + SLint32 *pNumOutputs, + SLuint32 *pOutputDeviceIDs + ); + SLresult (*QueryAudioOutputCapabilities)( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLAudioOutputDescriptor *pDescriptor + ); + SLresult (*RegisterAvailableAudioOutputsChangedCallback) ( + SLAudioIODeviceCapabilitiesItf self, + slAvailableAudioOutputsChangedCallback callback, + void *pContext + ); + SLresult (*RegisterDefaultDeviceIDMapChangedCallback) ( + SLAudioIODeviceCapabilitiesItf self, + slDefaultDeviceIDMapChangedCallback callback, + void *pContext + ); + SLresult (*GetAssociatedAudioInputs) ( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLint32 *pNumAudioInputs, + SLuint32 *pAudioInputDeviceIDs + ); + SLresult (*GetAssociatedAudioOutputs) ( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLint32 *pNumAudioOutputs, + SLuint32 *pAudioOutputDeviceIDs + ); + SLresult (*GetDefaultAudioDevices) ( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 defaultDeviceID, + SLint32 *pNumAudioDevices, + SLuint32 *pAudioDeviceIDs + ); + SLresult (*QuerySampleFormatsSupported)( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLmilliHertz samplingRate, + SLint32 *pSampleFormats, + SLint32 *pNumOfSampleFormats + ); +}; + + + +/*---------------------------------------------------------------------------*/ +/* Capabilities of the LED array IODevice */ +/*---------------------------------------------------------------------------*/ + +typedef struct SLLEDDescriptor_ { + SLuint8 ledCount; + SLuint8 primaryLED; + SLuint32 colorMask; +} SLLEDDescriptor; + + +/*---------------------------------------------------------------------------*/ +/* LED Array interface */ +/*---------------------------------------------------------------------------*/ + +typedef struct SLHSL_ { + SLmillidegree hue; + SLpermille saturation; + SLpermille lightness; +} SLHSL; + + +extern const SLInterfaceID SL_IID_LED; + +struct SLLEDArrayItf_; +typedef const struct SLLEDArrayItf_ * const * SLLEDArrayItf; + +struct SLLEDArrayItf_ { + SLresult (*ActivateLEDArray) ( + SLLEDArrayItf self, + SLuint32 lightMask + ); + SLresult (*IsLEDArrayActivated) ( + SLLEDArrayItf self, + SLuint32 *lightMask + ); + SLresult (*SetColor) ( + SLLEDArrayItf self, + SLuint8 index, + const SLHSL *color + ); + SLresult (*GetColor) ( + SLLEDArrayItf self, + SLuint8 index, + SLHSL *color + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Capabilities of the Vibra IODevice */ +/*---------------------------------------------------------------------------*/ + +typedef struct SLVibraDescriptor_ { + SLboolean supportsFrequency; + SLboolean supportsIntensity; + SLmilliHertz minFrequency; + SLmilliHertz maxFrequency; +} SLVibraDescriptor; + + + +/*---------------------------------------------------------------------------*/ +/* Vibra interface */ +/*---------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_VIBRA; + + +struct SLVibraItf_; +typedef const struct SLVibraItf_ * const * SLVibraItf; + +struct SLVibraItf_ { + SLresult (*Vibrate) ( + SLVibraItf self, + SLboolean vibrate + ); + SLresult (*IsVibrating) ( + SLVibraItf self, + SLboolean *pVibrating + ); + SLresult (*SetFrequency) ( + SLVibraItf self, + SLmilliHertz frequency + ); + SLresult (*GetFrequency) ( + SLVibraItf self, + SLmilliHertz *pFrequency + ); + SLresult (*SetIntensity) ( + SLVibraItf self, + SLpermille intensity + ); + SLresult (*GetIntensity) ( + SLVibraItf self, + SLpermille *pIntensity + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Meta data extraction related types and interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_CHARACTERENCODING_UNKNOWN ((SLuint32) 0x00000000) +#define SL_CHARACTERENCODING_BINARY ((SLuint32) 0x00000001) +#define SL_CHARACTERENCODING_ASCII ((SLuint32) 0x00000002) +#define SL_CHARACTERENCODING_BIG5 ((SLuint32) 0x00000003) +#define SL_CHARACTERENCODING_CODEPAGE1252 ((SLuint32) 0x00000004) +#define SL_CHARACTERENCODING_GB2312 ((SLuint32) 0x00000005) +#define SL_CHARACTERENCODING_HZGB2312 ((SLuint32) 0x00000006) +#define SL_CHARACTERENCODING_GB12345 ((SLuint32) 0x00000007) +#define SL_CHARACTERENCODING_GB18030 ((SLuint32) 0x00000008) +#define SL_CHARACTERENCODING_GBK ((SLuint32) 0x00000009) +#define SL_CHARACTERENCODING_IMAPUTF7 ((SLuint32) 0x0000000A) +#define SL_CHARACTERENCODING_ISO2022JP ((SLuint32) 0x0000000B) +#define SL_CHARACTERENCODING_ISO2022JP1 ((SLuint32) 0x0000000B) +#define SL_CHARACTERENCODING_ISO88591 ((SLuint32) 0x0000000C) +#define SL_CHARACTERENCODING_ISO885910 ((SLuint32) 0x0000000D) +#define SL_CHARACTERENCODING_ISO885913 ((SLuint32) 0x0000000E) +#define SL_CHARACTERENCODING_ISO885914 ((SLuint32) 0x0000000F) +#define SL_CHARACTERENCODING_ISO885915 ((SLuint32) 0x00000010) +#define SL_CHARACTERENCODING_ISO88592 ((SLuint32) 0x00000011) +#define SL_CHARACTERENCODING_ISO88593 ((SLuint32) 0x00000012) +#define SL_CHARACTERENCODING_ISO88594 ((SLuint32) 0x00000013) +#define SL_CHARACTERENCODING_ISO88595 ((SLuint32) 0x00000014) +#define SL_CHARACTERENCODING_ISO88596 ((SLuint32) 0x00000015) +#define SL_CHARACTERENCODING_ISO88597 ((SLuint32) 0x00000016) +#define SL_CHARACTERENCODING_ISO88598 ((SLuint32) 0x00000017) +#define SL_CHARACTERENCODING_ISO88599 ((SLuint32) 0x00000018) +#define SL_CHARACTERENCODING_ISOEUCJP ((SLuint32) 0x00000019) +#define SL_CHARACTERENCODING_SHIFTJIS ((SLuint32) 0x0000001A) +#define SL_CHARACTERENCODING_SMS7BIT ((SLuint32) 0x0000001B) +#define SL_CHARACTERENCODING_UTF7 ((SLuint32) 0x0000001C) +#define SL_CHARACTERENCODING_UTF8 ((SLuint32) 0x0000001D) +#define SL_CHARACTERENCODING_JAVACONFORMANTUTF8 ((SLuint32) 0x0000001E) +#define SL_CHARACTERENCODING_UTF16BE ((SLuint32) 0x0000001F) +#define SL_CHARACTERENCODING_UTF16LE ((SLuint32) 0x00000020) + + +#define SL_METADATA_FILTER_KEY ((SLuint8) 0x01) +#define SL_METADATA_FILTER_LANG ((SLuint8) 0x02) +#define SL_METADATA_FILTER_ENCODING ((SLuint8) 0x04) + + +typedef struct SLMetadataInfo_ { + SLuint32 size; + SLuint32 encoding; + SLchar langCountry[16]; + SLuint8 data[1]; +} SLMetadataInfo; + +extern const SLInterfaceID SL_IID_METADATAEXTRACTION; + +struct SLMetadataExtractionItf_; +typedef const struct SLMetadataExtractionItf_ * const * SLMetadataExtractionItf; + + +struct SLMetadataExtractionItf_ { + SLresult (*GetItemCount) ( + SLMetadataExtractionItf self, + SLuint32 *pItemCount + ); + SLresult (*GetKeySize) ( + SLMetadataExtractionItf self, + SLuint32 index, + SLuint32 *pKeySize + ); + SLresult (*GetKey) ( + SLMetadataExtractionItf self, + SLuint32 index, + SLuint32 keySize, + SLMetadataInfo *pKey + ); + SLresult (*GetValueSize) ( + SLMetadataExtractionItf self, + SLuint32 index, + SLuint32 *pValueSize + ); + SLresult (*GetValue) ( + SLMetadataExtractionItf self, + SLuint32 index, + SLuint32 valueSize, + SLMetadataInfo *pValue + ); + SLresult (*AddKeyFilter) ( + SLMetadataExtractionItf self, + SLuint32 keySize, + const void *pKey, + SLuint32 keyEncoding, + const SLchar *pValueLangCountry, + SLuint32 valueEncoding, + SLuint8 filterMask + ); + SLresult (*ClearKeyFilter) ( + SLMetadataExtractionItf self + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Meta data traversal related types and interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_METADATATRAVERSALMODE_ALL ((SLuint32) 0x00000001) +#define SL_METADATATRAVERSALMODE_NODE ((SLuint32) 0x00000002) + + +#define SL_NODETYPE_UNSPECIFIED ((SLuint32) 0x00000001) +#define SL_NODETYPE_AUDIO ((SLuint32) 0x00000002) +#define SL_NODETYPE_VIDEO ((SLuint32) 0x00000003) +#define SL_NODETYPE_IMAGE ((SLuint32) 0x00000004) + +#define SL_NODE_PARENT 0xFFFFFFFF + +extern const SLInterfaceID SL_IID_METADATATRAVERSAL; + +struct SLMetadataTraversalItf_; +typedef const struct SLMetadataTraversalItf_ * const * SLMetadataTraversalItf; + +struct SLMetadataTraversalItf_ { + SLresult (*SetMode) ( + SLMetadataTraversalItf self, + SLuint32 mode + ); + SLresult (*GetChildCount) ( + SLMetadataTraversalItf self, + SLuint32 *pCount + ); + SLresult (*GetChildMIMETypeSize) ( + SLMetadataTraversalItf self, + SLuint32 index, + SLuint32 *pSize + ); + SLresult (*GetChildInfo) ( + SLMetadataTraversalItf self, + SLuint32 index, + SLint32 *pNodeID, + SLuint32 *pType, + SLuint32 size, + SLchar *pMimeType + ); + SLresult (*SetActiveNode) ( + SLMetadataTraversalItf self, + SLuint32 index + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Dynamic Source types and interface */ +/*---------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_DYNAMICSOURCE; + +struct SLDynamicSourceItf_; +typedef const struct SLDynamicSourceItf_ * const * SLDynamicSourceItf; + +struct SLDynamicSourceItf_ { + SLresult (*SetSource) ( + SLDynamicSourceItf self, + SLDataSource *pDataSource + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Output Mix interface */ +/*---------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_OUTPUTMIX; + +struct SLOutputMixItf_; +typedef const struct SLOutputMixItf_ * const * SLOutputMixItf; + +typedef void (SLAPIENTRY *slMixDeviceChangeCallback) ( + SLOutputMixItf caller, + void *pContext +); + + +struct SLOutputMixItf_ { + SLresult (*GetDestinationOutputDeviceIDs) ( + SLOutputMixItf self, + SLint32 *pNumDevices, + SLuint32 *pDeviceIDs + ); + SLresult (*RegisterDeviceChangeCallback) ( + SLOutputMixItf self, + slMixDeviceChangeCallback callback, + void *pContext + ); + SLresult (*ReRoute)( + SLOutputMixItf self, + SLint32 numOutputDevices, + SLuint32 *pOutputDeviceIDs + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Playback interface */ +/*---------------------------------------------------------------------------*/ + +/** Playback states */ +#define SL_PLAYSTATE_STOPPED ((SLuint32) 0x00000001) +#define SL_PLAYSTATE_PAUSED ((SLuint32) 0x00000002) +#define SL_PLAYSTATE_PLAYING ((SLuint32) 0x00000003) + +/** Play events **/ +#define SL_PLAYEVENT_HEADATEND ((SLuint32) 0x00000001) +#define SL_PLAYEVENT_HEADATMARKER ((SLuint32) 0x00000002) +#define SL_PLAYEVENT_HEADATNEWPOS ((SLuint32) 0x00000004) +#define SL_PLAYEVENT_HEADMOVING ((SLuint32) 0x00000008) +#define SL_PLAYEVENT_HEADSTALLED ((SLuint32) 0x00000010) + +#define SL_TIME_UNKNOWN ((SLuint32) 0xFFFFFFFF) + + +extern const SLInterfaceID SL_IID_PLAY; + +/** Playback interface methods */ + +struct SLPlayItf_; +typedef const struct SLPlayItf_ * const * SLPlayItf; + +typedef void (SLAPIENTRY *slPlayCallback) ( + SLPlayItf caller, + void *pContext, + SLuint32 event +); + +struct SLPlayItf_ { + SLresult (*SetPlayState) ( + SLPlayItf self, + SLuint32 state + ); + SLresult (*GetPlayState) ( + SLPlayItf self, + SLuint32 *pState + ); + SLresult (*GetDuration) ( + SLPlayItf self, + SLmillisecond *pMsec + ); + SLresult (*GetPosition) ( + SLPlayItf self, + SLmillisecond *pMsec + ); + SLresult (*RegisterCallback) ( + SLPlayItf self, + slPlayCallback callback, + void *pContext + ); + SLresult (*SetCallbackEventsMask) ( + SLPlayItf self, + SLuint32 eventFlags + ); + SLresult (*GetCallbackEventsMask) ( + SLPlayItf self, + SLuint32 *pEventFlags + ); + SLresult (*SetMarkerPosition) ( + SLPlayItf self, + SLmillisecond mSec + ); + SLresult (*ClearMarkerPosition) ( + SLPlayItf self + ); + SLresult (*GetMarkerPosition) ( + SLPlayItf self, + SLmillisecond *pMsec + ); + SLresult (*SetPositionUpdatePeriod) ( + SLPlayItf self, + SLmillisecond mSec + ); + SLresult (*GetPositionUpdatePeriod) ( + SLPlayItf self, + SLmillisecond *pMsec + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Prefetch status interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_PREFETCHEVENT_STATUSCHANGE ((SLuint32) 0x00000001) +#define SL_PREFETCHEVENT_FILLLEVELCHANGE ((SLuint32) 0x00000002) + +#define SL_PREFETCHSTATUS_UNDERFLOW ((SLuint32) 0x00000001) +#define SL_PREFETCHSTATUS_SUFFICIENTDATA ((SLuint32) 0x00000002) +#define SL_PREFETCHSTATUS_OVERFLOW ((SLuint32) 0x00000003) + + +extern const SLInterfaceID SL_IID_PREFETCHSTATUS; + + +/** Prefetch status interface methods */ + +struct SLPrefetchStatusItf_; +typedef const struct SLPrefetchStatusItf_ * const * SLPrefetchStatusItf; + +typedef void (SLAPIENTRY *slPrefetchCallback) ( + SLPrefetchStatusItf caller, + void *pContext, + SLuint32 event +); + +struct SLPrefetchStatusItf_ { + SLresult (*GetPrefetchStatus) ( + SLPrefetchStatusItf self, + SLuint32 *pStatus + ); + SLresult (*GetFillLevel) ( + SLPrefetchStatusItf self, + SLpermille *pLevel + ); + SLresult (*RegisterCallback) ( + SLPrefetchStatusItf self, + slPrefetchCallback callback, + void *pContext + ); + SLresult (*SetCallbackEventsMask) ( + SLPrefetchStatusItf self, + SLuint32 eventFlags + ); + SLresult (*GetCallbackEventsMask) ( + SLPrefetchStatusItf self, + SLuint32 *pEventFlags + ); + SLresult (*SetFillUpdatePeriod) ( + SLPrefetchStatusItf self, + SLpermille period + ); + SLresult (*GetFillUpdatePeriod) ( + SLPrefetchStatusItf self, + SLpermille *pPeriod + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Playback Rate interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_RATEPROP_RESERVED1 ((SLuint32) 0x00000001) +#define SL_RATEPROP_RESERVED2 ((SLuint32) 0x00000002) +#define SL_RATEPROP_SILENTAUDIO ((SLuint32) 0x00000100) +#define SL_RATEPROP_STAGGEREDAUDIO ((SLuint32) 0x00000200) +#define SL_RATEPROP_NOPITCHCORAUDIO ((SLuint32) 0x00000400) +#define SL_RATEPROP_PITCHCORAUDIO ((SLuint32) 0x00000800) + + +extern const SLInterfaceID SL_IID_PLAYBACKRATE; + +struct SLPlaybackRateItf_; +typedef const struct SLPlaybackRateItf_ * const * SLPlaybackRateItf; + +struct SLPlaybackRateItf_ { + SLresult (*SetRate)( + SLPlaybackRateItf self, + SLpermille rate + ); + SLresult (*GetRate)( + SLPlaybackRateItf self, + SLpermille *pRate + ); + SLresult (*SetPropertyConstraints)( + SLPlaybackRateItf self, + SLuint32 constraints + ); + SLresult (*GetProperties)( + SLPlaybackRateItf self, + SLuint32 *pProperties + ); + SLresult (*GetCapabilitiesOfRate)( + SLPlaybackRateItf self, + SLpermille rate, + SLuint32 *pCapabilities + ); + SLresult (*GetRateRange) ( + SLPlaybackRateItf self, + SLuint8 index, + SLpermille *pMinRate, + SLpermille *pMaxRate, + SLpermille *pStepSize, + SLuint32 *pCapabilities + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Seek Interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_SEEKMODE_FAST ((SLuint16) 0x0001) +#define SL_SEEKMODE_ACCURATE ((SLuint16) 0x0002) + +extern const SLInterfaceID SL_IID_SEEK; + +struct SLSeekItf_; +typedef const struct SLSeekItf_ * const * SLSeekItf; + +struct SLSeekItf_ { + SLresult (*SetPosition)( + SLSeekItf self, + SLmillisecond pos, + SLuint32 seekMode + ); + SLresult (*SetLoop)( + SLSeekItf self, + SLboolean loopEnable, + SLmillisecond startPos, + SLmillisecond endPos + ); + SLresult (*GetLoop)( + SLSeekItf self, + SLboolean *pLoopEnabled, + SLmillisecond *pStartPos, + SLmillisecond *pEndPos + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Standard Recording Interface */ +/*---------------------------------------------------------------------------*/ + +/** Recording states */ +#define SL_RECORDSTATE_STOPPED ((SLuint32) 0x00000001) +#define SL_RECORDSTATE_PAUSED ((SLuint32) 0x00000002) +#define SL_RECORDSTATE_RECORDING ((SLuint32) 0x00000003) + + +/** Record event **/ +#define SL_RECORDEVENT_HEADATLIMIT ((SLuint32) 0x00000001) +#define SL_RECORDEVENT_HEADATMARKER ((SLuint32) 0x00000002) +#define SL_RECORDEVENT_HEADATNEWPOS ((SLuint32) 0x00000004) +#define SL_RECORDEVENT_HEADMOVING ((SLuint32) 0x00000008) +#define SL_RECORDEVENT_HEADSTALLED ((SLuint32) 0x00000010) + + +extern const SLInterfaceID SL_IID_RECORD; + +struct SLRecordItf_; +typedef const struct SLRecordItf_ * const * SLRecordItf; + +typedef void (SLAPIENTRY *slRecordCallback) ( + SLRecordItf caller, + void *pContext, + SLuint32 event +); + +/** Recording interface methods */ +struct SLRecordItf_ { + SLresult (*SetRecordState) ( + SLRecordItf self, + SLuint32 state + ); + SLresult (*GetRecordState) ( + SLRecordItf self, + SLuint32 *pState + ); + SLresult (*SetDurationLimit) ( + SLRecordItf self, + SLmillisecond msec + ); + SLresult (*GetPosition) ( + SLRecordItf self, + SLmillisecond *pMsec + ); + SLresult (*RegisterCallback) ( + SLRecordItf self, + slRecordCallback callback, + void *pContext + ); + SLresult (*SetCallbackEventsMask) ( + SLRecordItf self, + SLuint32 eventFlags + ); + SLresult (*GetCallbackEventsMask) ( + SLRecordItf self, + SLuint32 *pEventFlags + ); + SLresult (*SetMarkerPosition) ( + SLRecordItf self, + SLmillisecond mSec + ); + SLresult (*ClearMarkerPosition) ( + SLRecordItf self + ); + SLresult (*GetMarkerPosition) ( + SLRecordItf self, + SLmillisecond *pMsec + ); + SLresult (*SetPositionUpdatePeriod) ( + SLRecordItf self, + SLmillisecond mSec + ); + SLresult (*GetPositionUpdatePeriod) ( + SLRecordItf self, + SLmillisecond *pMsec + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Equalizer interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_EQUALIZER_UNDEFINED ((SLuint16) 0xFFFF) + +extern const SLInterfaceID SL_IID_EQUALIZER; + +struct SLEqualizerItf_; +typedef const struct SLEqualizerItf_ * const * SLEqualizerItf; + +struct SLEqualizerItf_ { + SLresult (*SetEnabled)( + SLEqualizerItf self, + SLboolean enabled + ); + SLresult (*IsEnabled)( + SLEqualizerItf self, + SLboolean *pEnabled + ); + SLresult (*GetNumberOfBands)( + SLEqualizerItf self, + SLuint16 *pAmount + ); + SLresult (*GetBandLevelRange)( + SLEqualizerItf self, + SLmillibel *pMin, + SLmillibel *pMax + ); + SLresult (*SetBandLevel)( + SLEqualizerItf self, + SLuint16 band, + SLmillibel level + ); + SLresult (*GetBandLevel)( + SLEqualizerItf self, + SLuint16 band, + SLmillibel *pLevel + ); + SLresult (*GetCenterFreq)( + SLEqualizerItf self, + SLuint16 band, + SLmilliHertz *pCenter + ); + SLresult (*GetBandFreqRange)( + SLEqualizerItf self, + SLuint16 band, + SLmilliHertz *pMin, + SLmilliHertz *pMax + ); + SLresult (*GetBand)( + SLEqualizerItf self, + SLmilliHertz frequency, + SLuint16 *pBand + ); + SLresult (*GetCurrentPreset)( + SLEqualizerItf self, + SLuint16 *pPreset + ); + SLresult (*UsePreset)( + SLEqualizerItf self, + SLuint16 index + ); + SLresult (*GetNumberOfPresets)( + SLEqualizerItf self, + SLuint16 *pNumPresets + ); + SLresult (*GetPresetName)( + SLEqualizerItf self, + SLuint16 index, + const SLchar ** ppName + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Volume Interface */ +/* --------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_VOLUME; + +struct SLVolumeItf_; +typedef const struct SLVolumeItf_ * const * SLVolumeItf; + +struct SLVolumeItf_ { + SLresult (*SetVolumeLevel) ( + SLVolumeItf self, + SLmillibel level + ); + SLresult (*GetVolumeLevel) ( + SLVolumeItf self, + SLmillibel *pLevel + ); + SLresult (*GetMaxVolumeLevel) ( + SLVolumeItf self, + SLmillibel *pMaxLevel + ); + SLresult (*SetMute) ( + SLVolumeItf self, + SLboolean mute + ); + SLresult (*GetMute) ( + SLVolumeItf self, + SLboolean *pMute + ); + SLresult (*EnableStereoPosition) ( + SLVolumeItf self, + SLboolean enable + ); + SLresult (*IsEnabledStereoPosition) ( + SLVolumeItf self, + SLboolean *pEnable + ); + SLresult (*SetStereoPosition) ( + SLVolumeItf self, + SLpermille stereoPosition + ); + SLresult (*GetStereoPosition) ( + SLVolumeItf self, + SLpermille *pStereoPosition + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Device Volume Interface */ +/* --------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_DEVICEVOLUME; + +struct SLDeviceVolumeItf_; +typedef const struct SLDeviceVolumeItf_ * const * SLDeviceVolumeItf; + +struct SLDeviceVolumeItf_ { + SLresult (*GetVolumeScale) ( + SLDeviceVolumeItf self, + SLuint32 deviceID, + SLint32 *pMinValue, + SLint32 *pMaxValue, + SLboolean *pIsMillibelScale + ); + SLresult (*SetVolume) ( + SLDeviceVolumeItf self, + SLuint32 deviceID, + SLint32 volume + ); + SLresult (*GetVolume) ( + SLDeviceVolumeItf self, + SLuint32 deviceID, + SLint32 *pVolume + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Buffer Queue Interface */ +/*---------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_BUFFERQUEUE; + +struct SLBufferQueueItf_; +typedef const struct SLBufferQueueItf_ * const * SLBufferQueueItf; + +typedef void (SLAPIENTRY *slBufferQueueCallback)( + SLBufferQueueItf caller, + void *pContext +); + +/** Buffer queue state **/ + +typedef struct SLBufferQueueState_ { + SLuint32 count; + SLuint32 playIndex; +} SLBufferQueueState; + + +struct SLBufferQueueItf_ { + SLresult (*Enqueue) ( + SLBufferQueueItf self, + const void *pBuffer, + SLuint32 size + ); + SLresult (*Clear) ( + SLBufferQueueItf self + ); + SLresult (*GetState) ( + SLBufferQueueItf self, + SLBufferQueueState *pState + ); + SLresult (*RegisterCallback) ( + SLBufferQueueItf self, + slBufferQueueCallback callback, + void* pContext + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* PresetReverb */ +/*---------------------------------------------------------------------------*/ + +#define SL_REVERBPRESET_NONE ((SLuint16) 0x0000) +#define SL_REVERBPRESET_SMALLROOM ((SLuint16) 0x0001) +#define SL_REVERBPRESET_MEDIUMROOM ((SLuint16) 0x0002) +#define SL_REVERBPRESET_LARGEROOM ((SLuint16) 0x0003) +#define SL_REVERBPRESET_MEDIUMHALL ((SLuint16) 0x0004) +#define SL_REVERBPRESET_LARGEHALL ((SLuint16) 0x0005) +#define SL_REVERBPRESET_PLATE ((SLuint16) 0x0006) + + +extern const SLInterfaceID SL_IID_PRESETREVERB; + +struct SLPresetReverbItf_; +typedef const struct SLPresetReverbItf_ * const * SLPresetReverbItf; + +struct SLPresetReverbItf_ { + SLresult (*SetPreset) ( + SLPresetReverbItf self, + SLuint16 preset + ); + SLresult (*GetPreset) ( + SLPresetReverbItf self, + SLuint16 *pPreset + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* EnvironmentalReverb */ +/*---------------------------------------------------------------------------*/ + +#define SL_I3DL2_ENVIRONMENT_PRESET_DEFAULT \ + { SL_MILLIBEL_MIN, 0, 1000, 500, SL_MILLIBEL_MIN, 20, SL_MILLIBEL_MIN, 40, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_GENERIC \ + { -1000, -100, 1490, 830, -2602, 7, 200, 11, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL \ + { -1000,-6000, 170, 100, -1204, 1, 207, 2, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_ROOM \ + { -1000, -454, 400, 830, -1646, 2, 53, 3, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_BATHROOM \ + { -1000,-1200, 1490, 540, -370, 7, 1030, 11, 1000, 600 } +#define SL_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM \ + { -1000,-6000, 500, 100, -1376, 3, -1104, 4, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_STONEROOM \ + { -1000, -300, 2310, 640, -711, 12, 83, 17, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM \ + { -1000, -476, 4320, 590, -789, 20, -289, 30, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL \ + { -1000, -500, 3920, 700, -1230, 20, -2, 29, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_CAVE \ + { -1000, 0, 2910, 1300, -602, 15, -302, 22, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_ARENA \ + { -1000, -698, 7240, 330, -1166, 20, 16, 30, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_HANGAR \ + { -1000,-1000, 10050, 230, -602, 20, 198, 30, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY \ + { -1000,-4000, 300, 100, -1831, 2, -1630, 30, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_HALLWAY \ + { -1000, -300, 1490, 590, -1219, 7, 441, 11, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR \ + { -1000, -237, 2700, 790, -1214, 13, 395, 20, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_ALLEY \ + { -1000, -270, 1490, 860, -1204, 7, -4, 11, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_FOREST \ + { -1000,-3300, 1490, 540, -2560, 162, -613, 88, 790,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_CITY \ + { -1000, -800, 1490, 670, -2273, 7, -2217, 11, 500,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS \ + { -1000,-2500, 1490, 210, -2780, 300, -2014, 100, 270,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_QUARRY \ + { -1000,-1000, 1490, 830, SL_MILLIBEL_MIN, 61, 500, 25, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_PLAIN \ + { -1000,-2000, 1490, 500, -2466, 179, -2514, 100, 210,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT \ + { -1000, 0, 1650, 1500, -1363, 8, -1153, 12, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE \ + { -1000,-1000, 2810, 140, 429, 14, 648, 21, 800, 600 } +#define SL_I3DL2_ENVIRONMENT_PRESET_UNDERWATER \ + { -1000,-4000, 1490, 100, -449, 7, 1700, 11, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_SMALLROOM \ + { -1000,-600, 1100, 830, -400, 5, 500, 10, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM \ + { -1000,-600, 1300, 830, -1000, 20, -200, 20, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_LARGEROOM \ + { -1000,-600, 1500, 830, -1600, 5, -1000, 40, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL \ + { -1000,-600, 1800, 700, -1300, 15, -800, 30, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_LARGEHALL \ + { -1000,-600, 1800, 700, -2000, 30, -1400, 60, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_PLATE \ + { -1000,-200, 1300, 900, 0, 2, 0, 10, 1000, 750 } + + +typedef struct SLEnvironmentalReverbSettings_ { + SLmillibel roomLevel; + SLmillibel roomHFLevel; + SLmillisecond decayTime; + SLpermille decayHFRatio; + SLmillibel reflectionsLevel; + SLmillisecond reflectionsDelay; + SLmillibel reverbLevel; + SLmillisecond reverbDelay; + SLpermille diffusion; + SLpermille density; +} SLEnvironmentalReverbSettings; + + + + +extern const SLInterfaceID SL_IID_ENVIRONMENTALREVERB; + + +struct SLEnvironmentalReverbItf_; +typedef const struct SLEnvironmentalReverbItf_ * const * SLEnvironmentalReverbItf; + +struct SLEnvironmentalReverbItf_ { + SLresult (*SetRoomLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel room + ); + SLresult (*GetRoomLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel *pRoom + ); + SLresult (*SetRoomHFLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel roomHF + ); + SLresult (*GetRoomHFLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel *pRoomHF + ); + SLresult (*SetDecayTime) ( + SLEnvironmentalReverbItf self, + SLmillisecond decayTime + ); + SLresult (*GetDecayTime) ( + SLEnvironmentalReverbItf self, + SLmillisecond *pDecayTime + ); + SLresult (*SetDecayHFRatio) ( + SLEnvironmentalReverbItf self, + SLpermille decayHFRatio + ); + SLresult (*GetDecayHFRatio) ( + SLEnvironmentalReverbItf self, + SLpermille *pDecayHFRatio + ); + SLresult (*SetReflectionsLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel reflectionsLevel + ); + SLresult (*GetReflectionsLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel *pReflectionsLevel + ); + SLresult (*SetReflectionsDelay) ( + SLEnvironmentalReverbItf self, + SLmillisecond reflectionsDelay + ); + SLresult (*GetReflectionsDelay) ( + SLEnvironmentalReverbItf self, + SLmillisecond *pReflectionsDelay + ); + SLresult (*SetReverbLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel reverbLevel + ); + SLresult (*GetReverbLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel *pReverbLevel + ); + SLresult (*SetReverbDelay) ( + SLEnvironmentalReverbItf self, + SLmillisecond reverbDelay + ); + SLresult (*GetReverbDelay) ( + SLEnvironmentalReverbItf self, + SLmillisecond *pReverbDelay + ); + SLresult (*SetDiffusion) ( + SLEnvironmentalReverbItf self, + SLpermille diffusion + ); + SLresult (*GetDiffusion) ( + SLEnvironmentalReverbItf self, + SLpermille *pDiffusion + ); + SLresult (*SetDensity) ( + SLEnvironmentalReverbItf self, + SLpermille density + ); + SLresult (*GetDensity) ( + SLEnvironmentalReverbItf self, + SLpermille *pDensity + ); + SLresult (*SetEnvironmentalReverbProperties) ( + SLEnvironmentalReverbItf self, + const SLEnvironmentalReverbSettings *pProperties + ); + SLresult (*GetEnvironmentalReverbProperties) ( + SLEnvironmentalReverbItf self, + SLEnvironmentalReverbSettings *pProperties + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Effects Send Interface */ +/*---------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_EFFECTSEND; + +struct SLEffectSendItf_; +typedef const struct SLEffectSendItf_ * const * SLEffectSendItf; + +struct SLEffectSendItf_ { + SLresult (*EnableEffectSend) ( + SLEffectSendItf self, + const void *pAuxEffect, + SLboolean enable, + SLmillibel initialLevel + ); + SLresult (*IsEnabled) ( + SLEffectSendItf self, + const void * pAuxEffect, + SLboolean *pEnable + ); + SLresult (*SetDirectLevel) ( + SLEffectSendItf self, + SLmillibel directLevel + ); + SLresult (*GetDirectLevel) ( + SLEffectSendItf self, + SLmillibel *pDirectLevel + ); + SLresult (*SetSendLevel) ( + SLEffectSendItf self, + const void *pAuxEffect, + SLmillibel sendLevel + ); + SLresult (*GetSendLevel)( + SLEffectSendItf self, + const void *pAuxEffect, + SLmillibel *pSendLevel + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* 3D Grouping Interface */ +/*---------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_3DGROUPING; + + +struct SL3DGroupingItf_ ; +typedef const struct SL3DGroupingItf_ * const * SL3DGroupingItf; + +struct SL3DGroupingItf_ { + SLresult (*Set3DGroup) ( + SL3DGroupingItf self, + SLObjectItf group + ); + SLresult (*Get3DGroup) ( + SL3DGroupingItf self, + SLObjectItf *pGroup + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* 3D Commit Interface */ +/*---------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_3DCOMMIT; + +struct SL3DCommitItf_; +typedef const struct SL3DCommitItf_* const * SL3DCommitItf; + +struct SL3DCommitItf_ { + SLresult (*Commit) ( + SL3DCommitItf self + ); + SLresult (*SetDeferred) ( + SL3DCommitItf self, + SLboolean deferred + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* 3D Location Interface */ +/*---------------------------------------------------------------------------*/ + +typedef struct SLVec3D_ { + SLint32 x; + SLint32 y; + SLint32 z; +} SLVec3D; + +extern const SLInterfaceID SL_IID_3DLOCATION; + +struct SL3DLocationItf_; +typedef const struct SL3DLocationItf_ * const * SL3DLocationItf; + +struct SL3DLocationItf_ { + SLresult (*SetLocationCartesian) ( + SL3DLocationItf self, + const SLVec3D *pLocation + ); + SLresult (*SetLocationSpherical) ( + SL3DLocationItf self, + SLmillidegree azimuth, + SLmillidegree elevation, + SLmillimeter distance + ); + SLresult (*Move) ( + SL3DLocationItf self, + const SLVec3D *pMovement + ); + SLresult (*GetLocationCartesian) ( + SL3DLocationItf self, + SLVec3D *pLocation + ); + SLresult (*SetOrientationVectors) ( + SL3DLocationItf self, + const SLVec3D *pFront, + const SLVec3D *pAbove + ); + SLresult (*SetOrientationAngles) ( + SL3DLocationItf self, + SLmillidegree heading, + SLmillidegree pitch, + SLmillidegree roll + ); + SLresult (*Rotate) ( + SL3DLocationItf self, + SLmillidegree theta, + const SLVec3D *pAxis + ); + SLresult (*GetOrientationVectors) ( + SL3DLocationItf self, + SLVec3D *pFront, + SLVec3D *pUp + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* 3D Doppler Interface */ +/*---------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_3DDOPPLER; + +struct SL3DDopplerItf_; +typedef const struct SL3DDopplerItf_ * const * SL3DDopplerItf; + +struct SL3DDopplerItf_ { + SLresult (*SetVelocityCartesian) ( + SL3DDopplerItf self, + const SLVec3D *pVelocity + ); + SLresult (*SetVelocitySpherical) ( + SL3DDopplerItf self, + SLmillidegree azimuth, + SLmillidegree elevation, + SLmillimeter speed + ); + SLresult (*GetVelocityCartesian) ( + SL3DDopplerItf self, + SLVec3D *pVelocity + ); + SLresult (*SetDopplerFactor) ( + SL3DDopplerItf self, + SLpermille dopplerFactor + ); + SLresult (*GetDopplerFactor) ( + SL3DDopplerItf self, + SLpermille *pDopplerFactor + ); +}; + +/*---------------------------------------------------------------------------*/ +/* 3D Source Interface and associated defines */ +/* --------------------------------------------------------------------------*/ + +#define SL_ROLLOFFMODEL_EXPONENTIAL ((SLuint32) 0x00000000) +#define SL_ROLLOFFMODEL_LINEAR ((SLuint32) 0x00000001) + + +extern const SLInterfaceID SL_IID_3DSOURCE; + +struct SL3DSourceItf_; +typedef const struct SL3DSourceItf_ * const * SL3DSourceItf; + +struct SL3DSourceItf_ { + SLresult (*SetHeadRelative) ( + SL3DSourceItf self, + SLboolean headRelative + ); + SLresult (*GetHeadRelative) ( + SL3DSourceItf self, + SLboolean *pHeadRelative + ); + SLresult (*SetRolloffDistances) ( + SL3DSourceItf self, + SLmillimeter minDistance, + SLmillimeter maxDistance + ); + SLresult (*GetRolloffDistances) ( + SL3DSourceItf self, + SLmillimeter *pMinDistance, + SLmillimeter *pMaxDistance + ); + SLresult (*SetRolloffMaxDistanceMute) ( + SL3DSourceItf self, + SLboolean mute + ); + SLresult (*GetRolloffMaxDistanceMute) ( + SL3DSourceItf self, + SLboolean *pMute + ); + SLresult (*SetRolloffFactor) ( + SL3DSourceItf self, + SLpermille rolloffFactor + ); + SLresult (*GetRolloffFactor) ( + SL3DSourceItf self, + SLpermille *pRolloffFactor + ); + SLresult (*SetRoomRolloffFactor) ( + SL3DSourceItf self, + SLpermille roomRolloffFactor + ); + SLresult (*GetRoomRolloffFactor) ( + SL3DSourceItf self, + SLpermille *pRoomRolloffFactor + ); + SLresult (*SetRolloffModel) ( + SL3DSourceItf self, + SLuint8 model + ); + SLresult (*GetRolloffModel) ( + SL3DSourceItf self, + SLuint8 *pModel + ); + SLresult (*SetCone) ( + SL3DSourceItf self, + SLmillidegree innerAngle, + SLmillidegree outerAngle, + SLmillibel outerLevel + ); + SLresult (*GetCone) ( + SL3DSourceItf self, + SLmillidegree *pInnerAngle, + SLmillidegree *pOuterAngle, + SLmillibel *pOuterLevel + ); +}; + +/*---------------------------------------------------------------------------*/ +/* 3D Macroscopic Interface */ +/* --------------------------------------------------------------------------*/ + +extern const SLInterfaceID SL_IID_3DMACROSCOPIC; + +struct SL3DMacroscopicItf_; +typedef const struct SL3DMacroscopicItf_ * const * SL3DMacroscopicItf; + +struct SL3DMacroscopicItf_ { + SLresult (*SetSize) ( + SL3DMacroscopicItf self, + SLmillimeter width, + SLmillimeter height, + SLmillimeter depth + ); + SLresult (*GetSize) ( + SL3DMacroscopicItf self, + SLmillimeter *pWidth, + SLmillimeter *pHeight, + SLmillimeter *pDepth + ); + SLresult (*SetOrientationAngles) ( + SL3DMacroscopicItf self, + SLmillidegree heading, + SLmillidegree pitch, + SLmillidegree roll + ); + SLresult (*SetOrientationVectors) ( + SL3DMacroscopicItf self, + const SLVec3D *pFront, + const SLVec3D *pAbove + ); + SLresult (*Rotate) ( + SL3DMacroscopicItf self, + SLmillidegree theta, + const SLVec3D *pAxis + ); + SLresult (*GetOrientationVectors) ( + SL3DMacroscopicItf self, + SLVec3D *pFront, + SLVec3D *pUp + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Mute Solo Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_MUTESOLO; + +struct SLMuteSoloItf_; +typedef const struct SLMuteSoloItf_ * const * SLMuteSoloItf; + +struct SLMuteSoloItf_ { + SLresult (*SetChannelMute) ( + SLMuteSoloItf self, + SLuint8 chan, + SLboolean mute + ); + SLresult (*GetChannelMute) ( + SLMuteSoloItf self, + SLuint8 chan, + SLboolean *pMute + ); + SLresult (*SetChannelSolo) ( + SLMuteSoloItf self, + SLuint8 chan, + SLboolean solo + ); + SLresult (*GetChannelSolo) ( + SLMuteSoloItf self, + SLuint8 chan, + SLboolean *pSolo + ); + SLresult (*GetNumChannels) ( + SLMuteSoloItf self, + SLuint8 *pNumChannels + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Dynamic Interface Management Interface and associated types and macros */ +/* --------------------------------------------------------------------------*/ + +#define SL_DYNAMIC_ITF_EVENT_RUNTIME_ERROR ((SLuint32) 0x00000001) +#define SL_DYNAMIC_ITF_EVENT_ASYNC_TERMINATION ((SLuint32) 0x00000002) +#define SL_DYNAMIC_ITF_EVENT_RESOURCES_LOST ((SLuint32) 0x00000003) +#define SL_DYNAMIC_ITF_EVENT_RESOURCES_LOST_PERMANENTLY ((SLuint32) 0x00000004) +#define SL_DYNAMIC_ITF_EVENT_RESOURCES_AVAILABLE ((SLuint32) 0x00000005) + + + + +extern const SLInterfaceID SL_IID_DYNAMICINTERFACEMANAGEMENT; + +struct SLDynamicInterfaceManagementItf_; +typedef const struct SLDynamicInterfaceManagementItf_ * const * SLDynamicInterfaceManagementItf; + +typedef void (SLAPIENTRY *slDynamicInterfaceManagementCallback) ( + SLDynamicInterfaceManagementItf caller, + void * pContext, + SLuint32 event, + SLresult result, + const SLInterfaceID iid +); + + +struct SLDynamicInterfaceManagementItf_ { + SLresult (*AddInterface) ( + SLDynamicInterfaceManagementItf self, + const SLInterfaceID iid, + SLboolean async + ); + SLresult (*RemoveInterface) ( + SLDynamicInterfaceManagementItf self, + const SLInterfaceID iid + ); + SLresult (*ResumeInterface) ( + SLDynamicInterfaceManagementItf self, + const SLInterfaceID iid, + SLboolean async + ); + SLresult (*RegisterCallback) ( + SLDynamicInterfaceManagementItf self, + slDynamicInterfaceManagementCallback callback, + void * pContext + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Midi Message Interface and associated types */ +/* --------------------------------------------------------------------------*/ + +#define SL_MIDIMESSAGETYPE_NOTE_ON_OFF ((SLuint32) 0x00000001) +#define SL_MIDIMESSAGETYPE_POLY_PRESSURE ((SLuint32) 0x00000002) +#define SL_MIDIMESSAGETYPE_CONTROL_CHANGE ((SLuint32) 0x00000003) +#define SL_MIDIMESSAGETYPE_PROGRAM_CHANGE ((SLuint32) 0x00000004) +#define SL_MIDIMESSAGETYPE_CHANNEL_PRESSURE ((SLuint32) 0x00000005) +#define SL_MIDIMESSAGETYPE_PITCH_BEND ((SLuint32) 0x00000006) +#define SL_MIDIMESSAGETYPE_SYSTEM_MESSAGE ((SLuint32) 0x00000007) + + +extern const SLInterfaceID SL_IID_MIDIMESSAGE; + +struct SLMIDIMessageItf_; +typedef const struct SLMIDIMessageItf_ * const * SLMIDIMessageItf; + +typedef void (SLAPIENTRY *slMetaEventCallback) ( + SLMIDIMessageItf caller, + void *pContext, + SLuint8 type, + SLuint32 length, + const SLuint8 *pData, + SLuint32 tick, + SLuint16 track +); + +typedef void (SLAPIENTRY *slMIDIMessageCallback) ( + SLMIDIMessageItf caller, + void *pContext, + SLuint8 statusByte, + SLuint32 length, + const SLuint8 *pData, + SLuint32 tick, + SLuint16 track +); + +struct SLMIDIMessageItf_ { + SLresult (*SendMessage) ( + SLMIDIMessageItf self, + const SLuint8 *data, + SLuint32 length + ); + SLresult (*RegisterMetaEventCallback) ( + SLMIDIMessageItf self, + slMetaEventCallback callback, + void *pContext + ); + SLresult (*RegisterMIDIMessageCallback) ( + SLMIDIMessageItf self, + slMIDIMessageCallback callback, + void *pContext + ); + SLresult (*AddMIDIMessageCallbackFilter) ( + SLMIDIMessageItf self, + SLuint32 messageType + ); + SLresult (*ClearMIDIMessageCallbackFilter) ( + SLMIDIMessageItf self + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Midi Mute Solo interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_MIDIMUTESOLO; + +struct SLMIDIMuteSoloItf_; +typedef const struct SLMIDIMuteSoloItf_ * const * SLMIDIMuteSoloItf; + +struct SLMIDIMuteSoloItf_ { + SLresult (*SetChannelMute) ( + SLMIDIMuteSoloItf self, + SLuint8 channel, + SLboolean mute + ); + SLresult (*GetChannelMute) ( + SLMIDIMuteSoloItf self, + SLuint8 channel, + SLboolean *pMute + ); + SLresult (*SetChannelSolo) ( + SLMIDIMuteSoloItf self, + SLuint8 channel, + SLboolean solo + ); + SLresult (*GetChannelSolo) ( + SLMIDIMuteSoloItf self, + SLuint8 channel, + SLboolean *pSolo + ); + SLresult (*GetTrackCount) ( + SLMIDIMuteSoloItf self, + SLuint16 *pCount + ); + SLresult (*SetTrackMute) ( + SLMIDIMuteSoloItf self, + SLuint16 track, + SLboolean mute + ); + SLresult (*GetTrackMute) ( + SLMIDIMuteSoloItf self, + SLuint16 track, + SLboolean *pMute + ); + SLresult (*SetTrackSolo) ( + SLMIDIMuteSoloItf self, + SLuint16 track, + SLboolean solo + ); + SLresult (*GetTrackSolo) ( + SLMIDIMuteSoloItf self, + SLuint16 track, + SLboolean *pSolo + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Midi Tempo interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_MIDITEMPO; + +struct SLMIDITempoItf_; +typedef const struct SLMIDITempoItf_ * const * SLMIDITempoItf; + +struct SLMIDITempoItf_ { + SLresult (*SetTicksPerQuarterNote) ( + SLMIDITempoItf self, + SLuint32 tpqn + ); + SLresult (*GetTicksPerQuarterNote) ( + SLMIDITempoItf self, + SLuint32 *pTpqn + ); + SLresult (*SetMicrosecondsPerQuarterNote) ( + SLMIDITempoItf self, + SLmicrosecond uspqn + ); + SLresult (*GetMicrosecondsPerQuarterNote) ( + SLMIDITempoItf self, + SLmicrosecond *uspqn + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Midi Time interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_MIDITIME; + +struct SLMIDITimeItf_; +typedef const struct SLMIDITimeItf_ * const * SLMIDITimeItf; + +struct SLMIDITimeItf_ { + SLresult (*GetDuration) ( + SLMIDITimeItf self, + SLuint32 *pDuration + ); + SLresult (*SetPosition) ( + SLMIDITimeItf self, + SLuint32 position + ); + SLresult (*GetPosition) ( + SLMIDITimeItf self, + SLuint32 *pPosition + ); + SLresult (*SetLoopPoints) ( + SLMIDITimeItf self, + SLuint32 startTick, + SLuint32 numTicks + ); + SLresult (*GetLoopPoints) ( + SLMIDITimeItf self, + SLuint32 *pStartTick, + SLuint32 *pNumTicks + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Audio Decoder Capabilities Interface */ +/* --------------------------------------------------------------------------*/ + +/*Audio Codec related defines*/ + +#define SL_RATECONTROLMODE_CONSTANTBITRATE ((SLuint32) 0x00000001) +#define SL_RATECONTROLMODE_VARIABLEBITRATE ((SLuint32) 0x00000002) + +#define SL_AUDIOCODEC_PCM ((SLuint32) 0x00000001) +#define SL_AUDIOCODEC_MP3 ((SLuint32) 0x00000002) +#define SL_AUDIOCODEC_AMR ((SLuint32) 0x00000003) +#define SL_AUDIOCODEC_AMRWB ((SLuint32) 0x00000004) +#define SL_AUDIOCODEC_AMRWBPLUS ((SLuint32) 0x00000005) +#define SL_AUDIOCODEC_AAC ((SLuint32) 0x00000006) +#define SL_AUDIOCODEC_WMA ((SLuint32) 0x00000007) +#define SL_AUDIOCODEC_REAL ((SLuint32) 0x00000008) + +#define SL_AUDIOPROFILE_PCM ((SLuint32) 0x00000001) + +#define SL_AUDIOPROFILE_MPEG1_L3 ((SLuint32) 0x00000001) +#define SL_AUDIOPROFILE_MPEG2_L3 ((SLuint32) 0x00000002) +#define SL_AUDIOPROFILE_MPEG25_L3 ((SLuint32) 0x00000003) + +#define SL_AUDIOCHANMODE_MP3_MONO ((SLuint32) 0x00000001) +#define SL_AUDIOCHANMODE_MP3_STEREO ((SLuint32) 0x00000002) +#define SL_AUDIOCHANMODE_MP3_JOINTSTEREO ((SLuint32) 0x00000003) +#define SL_AUDIOCHANMODE_MP3_DUAL ((SLuint32) 0x00000004) + +#define SL_AUDIOPROFILE_AMR ((SLuint32) 0x00000001) + +#define SL_AUDIOSTREAMFORMAT_CONFORMANCE ((SLuint32) 0x00000001) +#define SL_AUDIOSTREAMFORMAT_IF1 ((SLuint32) 0x00000002) +#define SL_AUDIOSTREAMFORMAT_IF2 ((SLuint32) 0x00000003) +#define SL_AUDIOSTREAMFORMAT_FSF ((SLuint32) 0x00000004) +#define SL_AUDIOSTREAMFORMAT_RTPPAYLOAD ((SLuint32) 0x00000005) +#define SL_AUDIOSTREAMFORMAT_ITU ((SLuint32) 0x00000006) + +#define SL_AUDIOPROFILE_AMRWB ((SLuint32) 0x00000001) + +#define SL_AUDIOPROFILE_AMRWBPLUS ((SLuint32) 0x00000001) + +#define SL_AUDIOPROFILE_AAC_AAC ((SLuint32) 0x00000001) + +#define SL_AUDIOMODE_AAC_MAIN ((SLuint32) 0x00000001) +#define SL_AUDIOMODE_AAC_LC ((SLuint32) 0x00000002) +#define SL_AUDIOMODE_AAC_SSR ((SLuint32) 0x00000003) +#define SL_AUDIOMODE_AAC_LTP ((SLuint32) 0x00000004) +#define SL_AUDIOMODE_AAC_HE ((SLuint32) 0x00000005) +#define SL_AUDIOMODE_AAC_SCALABLE ((SLuint32) 0x00000006) +#define SL_AUDIOMODE_AAC_ERLC ((SLuint32) 0x00000007) +#define SL_AUDIOMODE_AAC_LD ((SLuint32) 0x00000008) +#define SL_AUDIOMODE_AAC_HE_PS ((SLuint32) 0x00000009) +#define SL_AUDIOMODE_AAC_HE_MPS ((SLuint32) 0x0000000A) + +#define SL_AUDIOSTREAMFORMAT_MP2ADTS ((SLuint32) 0x00000001) +#define SL_AUDIOSTREAMFORMAT_MP4ADTS ((SLuint32) 0x00000002) +#define SL_AUDIOSTREAMFORMAT_MP4LOAS ((SLuint32) 0x00000003) +#define SL_AUDIOSTREAMFORMAT_MP4LATM ((SLuint32) 0x00000004) +#define SL_AUDIOSTREAMFORMAT_ADIF ((SLuint32) 0x00000005) +#define SL_AUDIOSTREAMFORMAT_MP4FF ((SLuint32) 0x00000006) +#define SL_AUDIOSTREAMFORMAT_RAW ((SLuint32) 0x00000007) + +#define SL_AUDIOPROFILE_WMA7 ((SLuint32) 0x00000001) +#define SL_AUDIOPROFILE_WMA8 ((SLuint32) 0x00000002) +#define SL_AUDIOPROFILE_WMA9 ((SLuint32) 0x00000003) +#define SL_AUDIOPROFILE_WMA10 ((SLuint32) 0x00000004) + +#define SL_AUDIOMODE_WMA_LEVEL1 ((SLuint32) 0x00000001) +#define SL_AUDIOMODE_WMA_LEVEL2 ((SLuint32) 0x00000002) +#define SL_AUDIOMODE_WMA_LEVEL3 ((SLuint32) 0x00000003) +#define SL_AUDIOMODE_WMA_LEVEL4 ((SLuint32) 0x00000004) +#define SL_AUDIOMODE_WMAPRO_LEVELM0 ((SLuint32) 0x00000005) +#define SL_AUDIOMODE_WMAPRO_LEVELM1 ((SLuint32) 0x00000006) +#define SL_AUDIOMODE_WMAPRO_LEVELM2 ((SLuint32) 0x00000007) +#define SL_AUDIOMODE_WMAPRO_LEVELM3 ((SLuint32) 0x00000008) + +#define SL_AUDIOPROFILE_REALAUDIO ((SLuint32) 0x00000001) + +#define SL_AUDIOMODE_REALAUDIO_G2 ((SLuint32) 0x00000001) +#define SL_AUDIOMODE_REALAUDIO_8 ((SLuint32) 0x00000002) +#define SL_AUDIOMODE_REALAUDIO_10 ((SLuint32) 0x00000003) +#define SL_AUDIOMODE_REALAUDIO_SURROUND ((SLuint32) 0x00000004) + +typedef struct SLAudioCodecDescriptor_ { + SLuint32 maxChannels; + SLuint32 minBitsPerSample; + SLuint32 maxBitsPerSample; + SLmilliHertz minSampleRate; + SLmilliHertz maxSampleRate; + SLboolean isFreqRangeContinuous; + SLmilliHertz *pSampleRatesSupported; + SLuint32 numSampleRatesSupported; + SLuint32 minBitRate; + SLuint32 maxBitRate; + SLboolean isBitrateRangeContinuous; + SLuint32 *pBitratesSupported; + SLuint32 numBitratesSupported; + SLuint32 profileSetting; + SLuint32 modeSetting; +} SLAudioCodecDescriptor; + +/*Structure used to retrieve the profile and level settings supported by an audio encoder */ + +typedef struct SLAudioCodecProfileMode_ { + SLuint32 profileSetting; + SLuint32 modeSetting; +} SLAudioCodecProfileMode; + +extern const SLInterfaceID SL_IID_AUDIODECODERCAPABILITIES; + +struct SLAudioDecoderCapabilitiesItf_; +typedef const struct SLAudioDecoderCapabilitiesItf_ * const * SLAudioDecoderCapabilitiesItf; + +struct SLAudioDecoderCapabilitiesItf_ { + SLresult (*GetAudioDecoders) ( + SLAudioDecoderCapabilitiesItf self, + SLuint32 * pNumDecoders , + SLuint32 *pDecoderIds + ); + SLresult (*GetAudioDecoderCapabilities) ( + SLAudioDecoderCapabilitiesItf self, + SLuint32 decoderId, + SLuint32 *pIndex, + SLAudioCodecDescriptor *pDescriptor + ); +}; + + + + +/*---------------------------------------------------------------------------*/ +/* Audio Encoder Capabilities Interface */ +/* --------------------------------------------------------------------------*/ + +/* Structure used when setting audio encoding parameters */ + +typedef struct SLAudioEncoderSettings_ { + SLuint32 encoderId; + SLuint32 channelsIn; + SLuint32 channelsOut; + SLmilliHertz sampleRate; + SLuint32 bitRate; + SLuint32 bitsPerSample; + SLuint32 rateControl; + SLuint32 profileSetting; + SLuint32 levelSetting; + SLuint32 channelMode; + SLuint32 streamFormat; + SLuint32 encodeOptions; + SLuint32 blockAlignment; +} SLAudioEncoderSettings; + +extern const SLInterfaceID SL_IID_AUDIOENCODERCAPABILITIES; + +struct SLAudioEncoderCapabilitiesItf_; +typedef const struct SLAudioEncoderCapabilitiesItf_ * const * SLAudioEncoderCapabilitiesItf; + +struct SLAudioEncoderCapabilitiesItf_ { + SLresult (*GetAudioEncoders) ( + SLAudioEncoderCapabilitiesItf self, + SLuint32 *pNumEncoders , + SLuint32 *pEncoderIds + ); + SLresult (*GetAudioEncoderCapabilities) ( + SLAudioEncoderCapabilitiesItf self, + SLuint32 encoderId, + SLuint32 *pIndex, + SLAudioCodecDescriptor * pDescriptor + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Audio Encoder Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_AUDIOENCODER; + +struct SLAudioEncoderItf_; +typedef const struct SLAudioEncoderItf_ * const * SLAudioEncoderItf; + +struct SLAudioEncoderItf_ { + SLresult (*SetEncoderSettings) ( + SLAudioEncoderItf self, + SLAudioEncoderSettings *pSettings + ); + SLresult (*GetEncoderSettings) ( + SLAudioEncoderItf self, + SLAudioEncoderSettings *pSettings + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Bass Boost Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_BASSBOOST; + +struct SLBassBoostItf_; +typedef const struct SLBassBoostItf_ * const * SLBassBoostItf; + +struct SLBassBoostItf_ { + SLresult (*SetEnabled)( + SLBassBoostItf self, + SLboolean enabled + ); + SLresult (*IsEnabled)( + SLBassBoostItf self, + SLboolean *pEnabled + ); + SLresult (*SetStrength)( + SLBassBoostItf self, + SLpermille strength + ); + SLresult (*GetRoundedStrength)( + SLBassBoostItf self, + SLpermille *pStrength + ); + SLresult (*IsStrengthSupported)( + SLBassBoostItf self, + SLboolean *pSupported + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Pitch Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_PITCH; + +struct SLPitchItf_; +typedef const struct SLPitchItf_ * const * SLPitchItf; + +struct SLPitchItf_ { + SLresult (*SetPitch) ( + SLPitchItf self, + SLpermille pitch + ); + SLresult (*GetPitch) ( + SLPitchItf self, + SLpermille *pPitch + ); + SLresult (*GetPitchCapabilities) ( + SLPitchItf self, + SLpermille *pMinPitch, + SLpermille *pMaxPitch + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Rate Pitch Interface */ +/* RatePitchItf is an interface for controlling the rate a sound is played */ +/* back. A change in rate will cause a change in pitch. */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_RATEPITCH; + +struct SLRatePitchItf_; +typedef const struct SLRatePitchItf_ * const * SLRatePitchItf; + +struct SLRatePitchItf_ { + SLresult (*SetRate) ( + SLRatePitchItf self, + SLpermille rate + ); + SLresult (*GetRate) ( + SLRatePitchItf self, + SLpermille *pRate + ); + SLresult (*GetRatePitchCapabilities) ( + SLRatePitchItf self, + SLpermille *pMinRate, + SLpermille *pMaxRate + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Virtualizer Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_VIRTUALIZER; + +struct SLVirtualizerItf_; +typedef const struct SLVirtualizerItf_ * const * SLVirtualizerItf; + +struct SLVirtualizerItf_ { + SLresult (*SetEnabled)( + SLVirtualizerItf self, + SLboolean enabled + ); + SLresult (*IsEnabled)( + SLVirtualizerItf self, + SLboolean *pEnabled + ); + SLresult (*SetStrength)( + SLVirtualizerItf self, + SLpermille strength + ); + SLresult (*GetRoundedStrength)( + SLVirtualizerItf self, + SLpermille *pStrength + ); + SLresult (*IsStrengthSupported)( + SLVirtualizerItf self, + SLboolean *pSupported + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Visualization Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_VISUALIZATION; + +struct SLVisualizationItf_; +typedef const struct SLVisualizationItf_ * const * SLVisualizationItf; + +typedef void (SLAPIENTRY *slVisualizationCallback) ( + void *pContext, + const SLuint8 waveform[], + const SLuint8 fft[], + SLmilliHertz samplerate +); + +struct SLVisualizationItf_{ + SLresult (*RegisterVisualizationCallback)( + SLVisualizationItf self, + slVisualizationCallback callback, + void *pContext, + SLmilliHertz rate + ); + SLresult (*GetMaxRate)( + SLVisualizationItf self, + SLmilliHertz* pRate + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Engine Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_ENGINE; + +struct SLEngineItf_; +typedef const struct SLEngineItf_ * const * SLEngineItf; + + +struct SLEngineItf_ { + + SLresult (*CreateLEDDevice) ( + SLEngineItf self, + SLObjectItf * pDevice, + SLuint32 deviceID, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateVibraDevice) ( + SLEngineItf self, + SLObjectItf * pDevice, + SLuint32 deviceID, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateAudioPlayer) ( + SLEngineItf self, + SLObjectItf * pPlayer, + SLDataSource *pAudioSrc, + SLDataSink *pAudioSnk, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateAudioRecorder) ( + SLEngineItf self, + SLObjectItf * pRecorder, + SLDataSource *pAudioSrc, + SLDataSink *pAudioSnk, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateMidiPlayer) ( + SLEngineItf self, + SLObjectItf * pPlayer, + SLDataSource *pMIDISrc, + SLDataSource *pBankSrc, + SLDataSink *pAudioOutput, + SLDataSink *pVibra, + SLDataSink *pLEDArray, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateListener) ( + SLEngineItf self, + SLObjectItf * pListener, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*Create3DGroup) ( + SLEngineItf self, + SLObjectItf * pGroup, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateOutputMix) ( + SLEngineItf self, + SLObjectItf * pMix, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateMetadataExtractor) ( + SLEngineItf self, + SLObjectItf * pMetadataExtractor, + SLDataSource * pDataSource, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateExtensionObject) ( + SLEngineItf self, + SLObjectItf * pObject, + void * pParameters, + SLuint32 objectID, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*QueryNumSupportedInterfaces) ( + SLEngineItf self, + SLuint32 objectID, + SLuint32 * pNumSupportedInterfaces + ); + SLresult (*QuerySupportedInterfaces) ( + SLEngineItf self, + SLuint32 objectID, + SLuint32 index, + SLInterfaceID * pInterfaceId + ); + SLresult (*QueryNumSupportedExtensions) ( + SLEngineItf self, + SLuint32 * pNumExtensions + ); + SLresult (*QuerySupportedExtension) ( + SLEngineItf self, + SLuint32 index, + SLchar * pExtensionName, + SLint16 * pNameLength + ); + SLresult (*IsExtensionSupported) ( + SLEngineItf self, + const SLchar * pExtensionName, + SLboolean * pSupported + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Engine Capabilities Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_ENGINECAPABILITIES; + +struct SLEngineCapabilitiesItf_; +typedef const struct SLEngineCapabilitiesItf_ * const * SLEngineCapabilitiesItf; + +struct SLEngineCapabilitiesItf_ { + SLresult (*QuerySupportedProfiles) ( + SLEngineCapabilitiesItf self, + SLuint16 *pProfilesSupported + ); + SLresult (*QueryAvailableVoices) ( + SLEngineCapabilitiesItf self, + SLuint16 voiceType, + SLint16 *pNumMaxVoices, + SLboolean *pIsAbsoluteMax, + SLint16 *pNumFreeVoices + ); + SLresult (*QueryNumberOfMIDISynthesizers) ( + SLEngineCapabilitiesItf self, + SLint16 *pNumMIDIsynthesizers + ); + SLresult (*QueryAPIVersion) ( + SLEngineCapabilitiesItf self, + SLint16 *pMajor, + SLint16 *pMinor, + SLint16 *pStep + ); + SLresult (*QueryLEDCapabilities) ( + SLEngineCapabilitiesItf self, + SLuint32 *pIndex, + SLuint32 *pLEDDeviceID, + SLLEDDescriptor *pDescriptor + ); + SLresult (*QueryVibraCapabilities) ( + SLEngineCapabilitiesItf self, + SLuint32 *pIndex, + SLuint32 *pVibraDeviceID, + SLVibraDescriptor *pDescriptor + ); + SLresult (*IsThreadSafe) ( + SLEngineCapabilitiesItf self, + SLboolean *pIsThreadSafe + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Thread Sync Interface */ +/* --------------------------------------------------------------------------*/ + + +extern const SLInterfaceID SL_IID_THREADSYNC; + +struct SLThreadSyncItf_; +typedef const struct SLThreadSyncItf_ * const * SLThreadSyncItf; + + +struct SLThreadSyncItf_ { + SLresult (*EnterCriticalSection) ( + SLThreadSyncItf self + ); + SLresult (*ExitCriticalSection) ( + SLThreadSyncItf self + ); +}; + + +/*****************************************************************************/ +/* SL engine constructor */ +/*****************************************************************************/ + +#define SL_ENGINEOPTION_THREADSAFE ((SLuint32) 0x00000001) +#define SL_ENGINEOPTION_LOSSOFCONTROL ((SLuint32) 0x00000002) + +typedef struct SLEngineOption_ { + SLuint32 feature; + SLuint32 data; +} SLEngineOption; + + +SLresult SLAPIENTRY slCreateEngine( + SLObjectItf *pEngine, + SLuint32 numOptions, + const SLEngineOption *pEngineOptions, + SLuint32 numInterfaces, + const SLInterfaceID *pInterfaceIds, + const SLboolean * pInterfaceRequired +); + +SLresult SLAPIENTRY slQueryNumSupportedEngineInterfaces( + SLuint32 * pNumSupportedInterfaces +); + +SLresult SLAPIENTRY slQuerySupportedEngineInterfaces( + SLuint32 index, + SLInterfaceID * pInterfaceId +); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENSL_ES_H_ */ diff --git a/third_party/openSLES/api/1.0/OpenSLES_Platform.h b/third_party/openSLES/api/1.0/OpenSLES_Platform.h new file mode 100644 index 0000000000000000000000000000000000000000..fdf43afd2979355b5f67738d7a7f4b644b861db1 --- /dev/null +++ b/third_party/openSLES/api/1.0/OpenSLES_Platform.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2008 The Khronos Group Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and /or associated documentation files (the "Materials "), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS IN THE + * MATERIALS. + * + * OpenSLES_Platform.h - OpenSL ES version 1.0 + * + */ + +/****************************************************************************/ +/* NOTE: This file contains definitions for the base types and the */ +/* SLAPIENTRY macro. This file **WILL NEED TO BE EDITED** to provide */ +/* the correct definitions specific to the platform being used. */ +/****************************************************************************/ + +#ifndef _OPENSLES_PLATFORM_H_ +#define _OPENSLES_PLATFORM_H_ + +typedef unsigned char sl_uint8_t; +typedef signed char sl_int8_t; +typedef unsigned short sl_uint16_t; +typedef signed short sl_int16_t; +typedef unsigned long sl_uint32_t; +typedef signed long sl_int32_t; + +#ifndef SLAPIENTRY +#define SLAPIENTRY /* override per-platform */ +#endif + +#endif /* _OPENSLES_PLATFORM_H_ */ diff --git a/third_party/openSLES/api/1.0/README.txt b/third_party/openSLES/api/1.0/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..7ed9498ee7b6a335d00273c3554b5cc4d771018c --- /dev/null +++ b/third_party/openSLES/api/1.0/README.txt @@ -0,0 +1,2 @@ +When building applications using the OpenSL-ES API you should compile and link the OpenSLES_IID.c file into your project. This file contains unique interface IDs for all OpenSL-ES API interfaces. These IDs have +have been automatically generated. Application developers should not edit these interface IDs. \ No newline at end of file diff --git a/third_party/openSLES/api/1.1/OpenSLES.h b/third_party/openSLES/api/1.1/OpenSLES.h new file mode 100644 index 0000000000000000000000000000000000000000..4d5de1ad0ac7b6764ef9201aadf34dae55f91719 --- /dev/null +++ b/third_party/openSLES/api/1.1/OpenSLES.h @@ -0,0 +1,2974 @@ +/* + * Copyright (c) 2007-2011 The Khronos Group Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and /or associated documentation files (the "Materials "), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS IN THE + * MATERIALS. + * + * OpenSLES.h - OpenSL ES version 1.1 + * + */ + +/****************************************************************************/ +/* NOTE: This file is a standard OpenSL ES header file and should not be */ +/* modified in any way. */ +/****************************************************************************/ + +#ifndef OPENSL_ES_H_ +#define OPENSL_ES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "OpenSLES_Platform.h" + + +/*****************************************************************************/ +/* Common types, structures, and defines */ +/*****************************************************************************/ + +#ifndef _KHRONOS_KEYS_ +#define _KHRONOS_KEYS_ + +#define KHRONOS_TITLE "KhronosTitle" +#define KHRONOS_ALBUM "KhronosAlbum" +#define KHRONOS_TRACK_NUMBER "KhronosTrackNumber" +#define KHRONOS_ARTIST "KhronosArtist" +#define KHRONOS_GENRE "KhronosGenre" +#define KHRONOS_YEAR "KhronosYear" +#define KHRONOS_COMMENT "KhronosComment" +#define KHRONOS_ARTIST_URL "KhronosArtistURL" +#define KHRONOS_CONTENT_URL "KhronosContentURL" +#define KHRONOS_RATING "KhronosRating" +#define KHRONOS_ALBUM_ART "KhronosAlbumArt" +#define KHRONOS_COPYRIGHT "KhronosCopyright" + +#endif + + +/* remap common types to SL types for clarity */ +typedef sl_char_t SLchar; /* UTF-8 is to be used */ +typedef sl_int8_t SLint8; /* 8 bit signed integer */ +typedef sl_uint8_t SLuint8; /* 8 bit unsigned integer */ +typedef sl_int16_t SLint16; /* 16 bit signed integer */ +typedef sl_uint16_t SLuint16; /* 16 bit unsigned integer */ +typedef sl_int32_t SLint32; /* 32 bit signed integer */ +typedef sl_uint32_t SLuint32; /* 32 bit unsigned integer */ +typedef sl_float32_t SLfloat32; /* 32 bit floating point */ +typedef sl_float64_t Slfloat64; /* 64 bit floating point */ + + +typedef SLuint32 SLboolean; +#define SL_BOOLEAN_FALSE ((SLboolean) 0x00000000) +#define SL_BOOLEAN_TRUE ((SLboolean) 0x00000001) + +typedef SLint16 SLmillibel; +typedef SLuint32 SLmillisecond; +typedef SLuint32 SLmilliHertz; +typedef SLint32 SLmillimeter; +typedef SLint32 SLmillidegree; +typedef SLint16 SLpermille; +typedef SLuint32 SLmicrosecond; +typedef SLuint32 SLresult; + +#define SL_MILLIBEL_MAX ((SLmillibel) 0x7FFF) +#define SL_MILLIBEL_MIN ((SLmillibel) (-SL_MILLIBEL_MAX-1)) + +#define SL_MILLIHERTZ_MAX ((SLmilliHertz) 0xFFFFFFFF) +#define SL_MILLIMETER_MAX ((SLmillimeter) 0x7FFFFFFF) + +/** Interface ID defined as a UUID */ +typedef const struct SLInterfaceID_ { + SLuint32 time_low; + SLuint16 time_mid; + SLuint16 time_hi_and_version; + SLuint16 clock_seq; + SLuint8 node[6]; +} * SLInterfaceID; + +/* Forward declaration for the object interface */ +struct SLObjectItf_; + +typedef const struct SLObjectItf_ * const * SLObjectItf; + +/* Objects ID's */ + +#define SL_OBJECTID_ENGINE ((SLuint32) 0x00001001) +#define SL_OBJECTID_LEDDEVICE ((SLuint32) 0x00001002) +#define SL_OBJECTID_VIBRADEVICE ((SLuint32) 0x00001003) +#define SL_OBJECTID_AUDIOPLAYER ((SLuint32) 0x00001004) +#define SL_OBJECTID_AUDIORECORDER ((SLuint32) 0x00001005) +#define SL_OBJECTID_MIDIPLAYER ((SLuint32) 0x00001006) +#define SL_OBJECTID_LISTENER ((SLuint32) 0x00001007) +#define SL_OBJECTID_3DGROUP ((SLuint32) 0x00001008) +#define SL_OBJECTID_OUTPUTMIX ((SLuint32) 0x00001009) +#define SL_OBJECTID_METADATAEXTRACTOR ((SLuint32) 0x0000100A) + + +/* SL Profiles */ + +#define SL_PROFILES_PHONE ((SLuint16) 0x0001) +#define SL_PROFILES_MUSIC ((SLuint16) 0x0002) +#define SL_PROFILES_GAME ((SLuint16) 0x0004) + +/* Types of voices supported by the system */ + +#define SL_VOICETYPE_2D_AUDIO ((SLuint16) 0x0001) +#define SL_VOICETYPE_MIDI ((SLuint16) 0x0002) +#define SL_VOICETYPE_3D_AUDIO ((SLuint16) 0x0004) +#define SL_VOICETYPE_3D_MIDIOUTPUT ((SLuint16) 0x0008) + +/* Convenient macros representing various different priority levels, for use with the SetPriority method */ + +#define SL_PRIORITY_LOWEST ((SLuint32) 0xFFFFFFFF) +#define SL_PRIORITY_VERYLOW ((SLuint32) 0xE0000000) +#define SL_PRIORITY_LOW ((SLuint32) 0xC0000000) +#define SL_PRIORITY_BELOWNORMAL ((SLuint32) 0xA0000000) +#define SL_PRIORITY_NORMAL ((SLuint32) 0x7FFFFFFF) +#define SL_PRIORITY_ABOVENORMAL ((SLuint32) 0x60000000) +#define SL_PRIORITY_HIGH ((SLuint32) 0x40000000) +#define SL_PRIORITY_VERYHIGH ((SLuint32) 0x20000000) +#define SL_PRIORITY_HIGHEST ((SLuint32) 0x00000000) + +/** These macros list types of PCM data **/ +#define SL_PCM_REPRESENTATION_SIGNED_INT ((SLuint32) 0x00000001) +#define SL_PCM_REPRESENTATION_UNSIGNED_INT ((SLuint32) 0x00000002) +#define SL_PCM_REPRESENTATION_FLOAT ((SLuint32) 0x00000003) + +/** These macros list the various sample formats that are possible on audio input and output devices. */ + +#define SL_PCMSAMPLEFORMAT_FIXED_8 ((SLuint16) 0x0008) +#define SL_PCMSAMPLEFORMAT_FIXED_16 ((SLuint16) 0x0010) +#define SL_PCMSAMPLEFORMAT_FIXED_20 ((SLuint16) 0x0014) +#define SL_PCMSAMPLEFORMAT_FIXED_24 ((SLuint16) 0x0018) +#define SL_PCMSAMPLEFORMAT_FIXED_28 ((SLuint16) 0x001C) +#define SL_PCMSAMPLEFORMAT_FIXED_32 ((SLuint16) 0x0020) +#define SL_PCMSAMPLEFORMAT_FIXED_64 ((SLuint16) 0x0040) + +/** These macros specify the commonly used sampling rates (in milliHertz) supported by most audio I/O devices. */ + +#define SL_SAMPLINGRATE_8 ((SLuint32) 8000000) +#define SL_SAMPLINGRATE_11_025 ((SLuint32) 11025000) +#define SL_SAMPLINGRATE_12 ((SLuint32) 12000000) +#define SL_SAMPLINGRATE_16 ((SLuint32) 16000000) +#define SL_SAMPLINGRATE_22_05 ((SLuint32) 22050000) +#define SL_SAMPLINGRATE_24 ((SLuint32) 24000000) +#define SL_SAMPLINGRATE_32 ((SLuint32) 32000000) +#define SL_SAMPLINGRATE_44_1 ((SLuint32) 44100000) +#define SL_SAMPLINGRATE_48 ((SLuint32) 48000000) +#define SL_SAMPLINGRATE_64 ((SLuint32) 64000000) +#define SL_SAMPLINGRATE_88_2 ((SLuint32) 88200000) +#define SL_SAMPLINGRATE_96 ((SLuint32) 96000000) +#define SL_SAMPLINGRATE_192 ((SLuint32) 192000000) + +#define SL_SPEAKER_FRONT_LEFT ((SLuint32) 0x00000001) +#define SL_SPEAKER_FRONT_RIGHT ((SLuint32) 0x00000002) +#define SL_SPEAKER_FRONT_CENTER ((SLuint32) 0x00000004) +#define SL_SPEAKER_LOW_FREQUENCY ((SLuint32) 0x00000008) +#define SL_SPEAKER_BACK_LEFT ((SLuint32) 0x00000010) +#define SL_SPEAKER_BACK_RIGHT ((SLuint32) 0x00000020) +#define SL_SPEAKER_FRONT_LEFT_OF_CENTER ((SLuint32) 0x00000040) +#define SL_SPEAKER_FRONT_RIGHT_OF_CENTER ((SLuint32) 0x00000080) +#define SL_SPEAKER_BACK_CENTER ((SLuint32) 0x00000100) +#define SL_SPEAKER_SIDE_LEFT ((SLuint32) 0x00000200) +#define SL_SPEAKER_SIDE_RIGHT ((SLuint32) 0x00000400) +#define SL_SPEAKER_TOP_CENTER ((SLuint32) 0x00000800) +#define SL_SPEAKER_TOP_FRONT_LEFT ((SLuint32) 0x00001000) +#define SL_SPEAKER_TOP_FRONT_CENTER ((SLuint32) 0x00002000) +#define SL_SPEAKER_TOP_FRONT_RIGHT ((SLuint32) 0x00004000) +#define SL_SPEAKER_TOP_BACK_LEFT ((SLuint32) 0x00008000) +#define SL_SPEAKER_TOP_BACK_CENTER ((SLuint32) 0x00010000) +#define SL_SPEAKER_TOP_BACK_RIGHT ((SLuint32) 0x00020000) + + +/*****************************************************************************/ +/* Errors */ +/* */ +/*****************************************************************************/ + +#define SL_RESULT_SUCCESS ((SLuint32) 0x00000000) +#define SL_RESULT_PRECONDITIONS_VIOLATED ((SLuint32) 0x00000001) +#define SL_RESULT_PARAMETER_INVALID ((SLuint32) 0x00000002) +#define SL_RESULT_MEMORY_FAILURE ((SLuint32) 0x00000003) +#define SL_RESULT_RESOURCE_ERROR ((SLuint32) 0x00000004) +#define SL_RESULT_RESOURCE_LOST ((SLuint32) 0x00000005) +#define SL_RESULT_IO_ERROR ((SLuint32) 0x00000006) +#define SL_RESULT_BUFFER_INSUFFICIENT ((SLuint32) 0x00000007) +#define SL_RESULT_CONTENT_CORRUPTED ((SLuint32) 0x00000008) +#define SL_RESULT_CONTENT_UNSUPPORTED ((SLuint32) 0x00000009) +#define SL_RESULT_CONTENT_NOT_FOUND ((SLuint32) 0x0000000A) +#define SL_RESULT_PERMISSION_DENIED ((SLuint32) 0x0000000B) +#define SL_RESULT_FEATURE_UNSUPPORTED ((SLuint32) 0x0000000C) +#define SL_RESULT_INTERNAL_ERROR ((SLuint32) 0x0000000D) +#define SL_RESULT_UNKNOWN_ERROR ((SLuint32) 0x0000000E) +#define SL_RESULT_OPERATION_ABORTED ((SLuint32) 0x0000000F) +#define SL_RESULT_CONTROL_LOST ((SLuint32) 0x00000010) +#define SL_RESULT_READONLY ((SLuint32) 0x00000011) +#define SL_RESULT_ENGINEOPTION_UNSUPPORTED ((SLuint32) 0x00000012) +#define SL_RESULT_SOURCE_SINK_INCOMPATIBLE ((SLuint32) 0x00000013) + +/* Object state definitions */ + +#define SL_OBJECT_STATE_UNREALIZED ((SLuint32) 0x00000001) +#define SL_OBJECT_STATE_REALIZED ((SLuint32) 0x00000002) +#define SL_OBJECT_STATE_SUSPENDED ((SLuint32) 0x00000003) + +/* Object event definitions */ + +#define SL_OBJECT_EVENT_RUNTIME_ERROR ((SLuint32) 0x00000001) +#define SL_OBJECT_EVENT_ASYNC_TERMINATION ((SLuint32) 0x00000002) +#define SL_OBJECT_EVENT_RESOURCES_LOST ((SLuint32) 0x00000003) +#define SL_OBJECT_EVENT_RESOURCES_AVAILABLE ((SLuint32) 0x00000004) +#define SL_OBJECT_EVENT_ITF_CONTROL_TAKEN ((SLuint32) 0x00000005) +#define SL_OBJECT_EVENT_ITF_CONTROL_RETURNED ((SLuint32) 0x00000006) +#define SL_OBJECT_EVENT_ITF_PARAMETERS_CHANGED ((SLuint32) 0x00000007) + + +/*****************************************************************************/ +/* Interface definitions */ +/*****************************************************************************/ + +/** NULL Interface */ + +SL_API extern const SLInterfaceID SL_IID_NULL; + +/*---------------------------------------------------------------------------*/ +/* Data Source and Data Sink Structures */ +/*---------------------------------------------------------------------------*/ + +/** Data locator macros */ +#define SL_DATALOCATOR_NULL ((SLuint32) 0x00000000) +#define SL_DATALOCATOR_URI ((SLuint32) 0x00000001) +#define SL_DATALOCATOR_ADDRESS ((SLuint32) 0x00000002) +#define SL_DATALOCATOR_IODEVICE ((SLuint32) 0x00000003) +#define SL_DATALOCATOR_OUTPUTMIX ((SLuint32) 0x00000004) +#define SL_DATALOCATOR_RESERVED5 ((SLuint32) 0x00000005) +#define SL_DATALOCATOR_BUFFERQUEUE ((SLuint32) 0x00000006) +#define SL_DATALOCATOR_MIDIBUFFERQUEUE ((SLuint32) 0x00000007) +#define SL_DATALOCATOR_MEDIAOBJECT ((SLuint32) 0x00000008) +#define SL_DATALOCATOR_CONTENTPIPE ((SLuint32) 0x00000009) + + +/** URI-based data locator definition where locatorType must be SL_DATALOCATOR_URI*/ +typedef struct SLDataLocator_URI_ { + SLuint32 locatorType; + const SLchar * pURI; +} SLDataLocator_URI; + +/** Address-based data locator definition where locatorType must be SL_DATALOCATOR_ADDRESS*/ +typedef struct SLDataLocator_Address_ { + SLuint32 locatorType; + void *pAddress; + SLuint32 length; +} SLDataLocator_Address; + +/** IODevice-types */ +#define SL_IODEVICE_AUDIOINPUT ((SLuint32) 0x00000001) +#define SL_IODEVICE_LEDARRAY ((SLuint32) 0x00000002) +#define SL_IODEVICE_VIBRA ((SLuint32) 0x00000003) +#define SL_IODEVICE_RESERVED4 ((SLuint32) 0x00000004) +#define SL_IODEVICE_RESERVED5 ((SLuint32) 0x00000005) +#define SL_IODEVICE_AUDIOOUTPUT ((SLuint32) 0x00000006) + +/** IODevice-based data locator definition where locatorType must be SL_DATALOCATOR_IODEVICE*/ +typedef struct SLDataLocator_IODevice_ { + SLuint32 locatorType; + SLuint32 deviceType; + SLuint32 deviceID; + SLObjectItf device; +} SLDataLocator_IODevice; + +/** OutputMix-based data locator definition where locatorType must be SL_DATALOCATOR_OUTPUTMIX*/ +typedef struct SLDataLocator_OutputMix_ { + SLuint32 locatorType; + SLObjectItf outputMix; +} SLDataLocator_OutputMix; + + +/** BufferQueue-based data locator definition where locatorType must be SL_DATALOCATOR_BUFFERQUEUE*/ +typedef struct SLDataLocator_BufferQueue_ { + SLuint32 locatorType; + SLuint32 numBuffers; +} SLDataLocator_BufferQueue; + +/** ContentPipe-based data locator definition where locatorType must be SL_DATALOCATOR_CONTENTPIPE */ +typedef struct SLDataLocator_ContentPipe_ { + SLuint32 locatorType; + void * pContentPipe; + const SLchar * pURI; +} SLDataLocator_ContentPipe; + +/** MidiBufferQueue-based data locator definition where locatorType must be SL_DATALOCATOR_MIDIBUFFERQUEUE*/ +typedef struct SLDataLocator_MIDIBufferQueue_ { + SLuint32 locatorType; + SLuint32 tpqn; + SLuint32 numBuffers; +} SLDataLocator_MIDIBufferQueue; + +/** Data format defines */ +#define SL_DATAFORMAT_MIME ((SLuint32) 0x00000001) +#define SL_DATAFORMAT_PCM ((SLuint32) 0x00000002) +#define SL_DATAFORMAT_RESERVED3 ((SLuint32) 0x00000003) +#define SL_DATAFORMAT_PCM_EX ((SLuint32) 0x00000004) + + +/** MIME-type-based data format definition where formatType must be SL_DATAFORMAT_MIME*/ +typedef struct SLDataFormat_MIME_ { + SLuint32 formatType; + const SLchar * pMimeType; + SLuint32 containerType; +} SLDataFormat_MIME; + +/* Byte order of a block of 16- or 32-bit data */ +#define SL_BYTEORDER_BIGENDIAN ((SLuint32) 0x00000001) +#define SL_BYTEORDER_LITTLEENDIAN ((SLuint32) 0x00000002) + +#ifdef SL_BYTEORDER_NATIVEBIGENDIAN +#define SL_BYTEORDER_NATIVE SL_BYTEORDER_BIGENDIAN +#else +#define SL_BYTEORDER_NATIVE SL_BYTEORDER_LITTLEENDIAN +#endif + +/* Container type */ +#define SL_CONTAINERTYPE_UNSPECIFIED ((SLuint32) 0x00000001) +#define SL_CONTAINERTYPE_RAW ((SLuint32) 0x00000002) +#define SL_CONTAINERTYPE_ASF ((SLuint32) 0x00000003) +#define SL_CONTAINERTYPE_AVI ((SLuint32) 0x00000004) +#define SL_CONTAINERTYPE_BMP ((SLuint32) 0x00000005) +#define SL_CONTAINERTYPE_JPG ((SLuint32) 0x00000006) +#define SL_CONTAINERTYPE_JPG2000 ((SLuint32) 0x00000007) +#define SL_CONTAINERTYPE_M4A ((SLuint32) 0x00000008) +#define SL_CONTAINERTYPE_MP3 ((SLuint32) 0x00000009) +#define SL_CONTAINERTYPE_MP4 ((SLuint32) 0x0000000A) +#define SL_CONTAINERTYPE_MPEG_ES ((SLuint32) 0x0000000B) +#define SL_CONTAINERTYPE_MPEG_PS ((SLuint32) 0x0000000C) +#define SL_CONTAINERTYPE_MPEG_TS ((SLuint32) 0x0000000D) +#define SL_CONTAINERTYPE_QT ((SLuint32) 0x0000000E) +#define SL_CONTAINERTYPE_WAV ((SLuint32) 0x0000000F) +#define SL_CONTAINERTYPE_XMF_0 ((SLuint32) 0x00000010) +#define SL_CONTAINERTYPE_XMF_1 ((SLuint32) 0x00000011) +#define SL_CONTAINERTYPE_XMF_2 ((SLuint32) 0x00000012) +#define SL_CONTAINERTYPE_XMF_3 ((SLuint32) 0x00000013) +#define SL_CONTAINERTYPE_XMF_GENERIC ((SLuint32) 0x00000014) +#define SL_CONTAINERTYPE_AMR ((SLuint32) 0x00000015) +#define SL_CONTAINERTYPE_AAC ((SLuint32) 0x00000016) +#define SL_CONTAINERTYPE_3GPP ((SLuint32) 0x00000017) +#define SL_CONTAINERTYPE_3GA ((SLuint32) 0x00000018) +#define SL_CONTAINERTYPE_RM ((SLuint32) 0x00000019) +#define SL_CONTAINERTYPE_DMF ((SLuint32) 0x0000001A) +#define SL_CONTAINERTYPE_SMF ((SLuint32) 0x0000001B) +#define SL_CONTAINERTYPE_MOBILE_DLS ((SLuint32) 0x0000001C) +#define SL_CONTAINERTYPE_OGG ((SLuint32) 0x0000001D) + + +/** PCM-type-based data format definition where formatType must be SL_DATAFORMAT_PCM*/ +/* SLDataFormat_PCM IS DEPRECATED. Use SLDataFormat_PCM_EX instead. */ +typedef struct SLDataFormat_PCM_ { + SLuint32 formatType; + SLuint32 numChannels; + SLuint32 samplesPerSec; + SLuint32 bitsPerSample; + SLuint32 containerSize; + SLuint32 channelMask; + SLuint32 endianness; +} SLDataFormat_PCM; + +/** PCM-type-based data format definition where formatType must be SL_DATAFORMAT_PCM_EX*/ +typedef struct SLDataFormat_PCM_EX_ { + SLuint32 formatType; + SLuint32 numChannels; + SLuint32 sampleRate; + SLuint32 bitsPerSample; + SLuint32 containerSize; + SLuint32 channelMask; + SLuint32 endianness; + SLuint32 representation; +} SLDataFormat_PCM_EX; + +/** MediaObject-type-based data format definition where formatType must be SL_DATAFORMAT_MEDIAOBJECT*/ +typedef struct SLDataLocator_MediaObject_ { + SLuint32 locatorType; + SLObjectItf mediaObject; +} SLDataLocator_MediaObject; + +/** NULL-type-based data format definition where formatType must be SL_DATAFORMAT_NULL*/ +typedef struct SLDataLocator_Null_ { + SLuint32 locatorType; +} SLDataLocator_Null; + + +typedef struct SLDataSource_ { + void *pLocator; + void *pFormat; +} SLDataSource; + + +typedef struct SLDataSink_ { + void *pLocator; + void *pFormat; +} SLDataSink; + +/*---------------------------------------------------------------------------*/ +/* Standard Object Interface */ +/*---------------------------------------------------------------------------*/ + +SL_API extern const SLInterfaceID SL_IID_OBJECT; + +/** Object callback */ + + +typedef void (SLAPIENTRY *slObjectCallback) ( + SLObjectItf caller, + const void * pContext, + SLuint32 event, + SLresult result, + SLuint32 param, + void *pInterface +); + + +struct SLObjectItf_ { + SLresult (*Realize) ( + SLObjectItf self, + SLboolean async + ); + SLresult (*Resume) ( + SLObjectItf self, + SLboolean async + ); + SLresult (*GetState) ( + SLObjectItf self, + SLuint32 * pState + ); + SLresult (*GetInterface) ( + SLObjectItf self, + const SLInterfaceID iid, + void * pInterface + ); + SLresult (*RegisterCallback) ( + SLObjectItf self, + slObjectCallback callback, + void * pContext + ); + void (*AbortAsyncOperation) ( + SLObjectItf self + ); + void (*Destroy) ( + SLObjectItf self + ); + SLresult (*SetPriority) ( + SLObjectItf self, + SLuint32 priority + ); + SLresult (*GetPriority) ( + SLObjectItf self, + SLuint32 *pPriority + ); + SLresult (*SetLossOfControlInterfaces) ( + SLObjectItf self, + SLuint16 numInterfaces, + const SLInterfaceID * pInterfaceIDs, + SLboolean enabled + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Audio IO Device capabilities interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_DEFAULTDEVICEID_AUDIOINPUT ((SLuint32) 0xFFFFFFFF) +#define SL_DEFAULTDEVICEID_AUDIOOUTPUT ((SLuint32) 0xFFFFFFFE) +#define SL_DEFAULTDEVICEID_LED ((SLuint32) 0xFFFFFFFD) +#define SL_DEFAULTDEVICEID_VIBRA ((SLuint32) 0xFFFFFFFC) +#define SL_DEFAULTDEVICEID_RESERVED1 ((SLuint32) 0xFFFFFFFB) + + +#define SL_DEVCONNECTION_INTEGRATED ((SLint16) 0x0001) +#define SL_DEVCONNECTION_ATTACHED_WIRED ((SLint16) 0x0100) +#define SL_DEVCONNECTION_ATTACHED_WIRELESS ((SLint16) 0x0200) +#define SL_DEVCONNECTION_NETWORK ((SLint16) 0x0400) + + +#define SL_DEVLOCATION_HANDSET ((SLuint16) 0x0001) +#define SL_DEVLOCATION_HEADSET ((SLuint16) 0x0002) +#define SL_DEVLOCATION_CARKIT ((SLuint16) 0x0003) +#define SL_DEVLOCATION_DOCK ((SLuint16) 0x0004) +#define SL_DEVLOCATION_REMOTE ((SLuint16) 0x0005) +/* Note: SL_DEVLOCATION_RESLTE is deprecated, use SL_DEVLOCATION_REMOTE instead. */ +#define SL_DEVLOCATION_RESLTE ((SLuint16) 0x0005) + + +#define SL_DEVSCOPE_UNKNOWN ((SLuint16) 0x0001) +#define SL_DEVSCOPE_ENVIRONMENT ((SLuint16) 0x0002) +#define SL_DEVSCOPE_USER ((SLuint16) 0x0003) + + +typedef struct SLAudioInputDescriptor_ { + SLchar *pDeviceName; + SLint16 deviceNameLength; + SLint16 deviceConnection; + SLint16 deviceScope; + SLint16 deviceLocation; + SLboolean isForTelephony; + SLmilliHertz minSampleRate; + SLmilliHertz maxSampleRate; + SLboolean isFreqRangeContinuous; + SLmilliHertz *pSamplingRatesSupported; + SLint16 numOfSamplingRatesSupported; + SLint16 maxChannels; +} SLAudioInputDescriptor; + + +typedef struct SLAudioOutputDescriptor_ { + SLchar *pDeviceName; + SLint16 deviceNameLength; + SLint16 deviceConnection; + SLint16 deviceScope; + SLint16 deviceLocation; + SLboolean isForTelephony; + SLmilliHertz minSampleRate; + SLmilliHertz maxSampleRate; + SLboolean isFreqRangeContinuous; + SLmilliHertz *pSamplingRatesSupported; + SLint16 numOfSamplingRatesSupported; + SLint16 maxChannels; +} SLAudioOutputDescriptor; + + + +SL_API extern const SLInterfaceID SL_IID_AUDIOIODEVICECAPABILITIES; + +struct SLAudioIODeviceCapabilitiesItf_; +typedef const struct SLAudioIODeviceCapabilitiesItf_ * const * SLAudioIODeviceCapabilitiesItf; + + +typedef void (SLAPIENTRY *slAvailableAudioInputsChangedCallback) ( + SLAudioIODeviceCapabilitiesItf caller, + void *pContext, + SLuint32 deviceID, + SLuint32 numInputs, + SLboolean isNew +); + + +typedef void (SLAPIENTRY *slAvailableAudioOutputsChangedCallback) ( + SLAudioIODeviceCapabilitiesItf caller, + void *pContext, + SLuint32 deviceID, + SLuint32 numOutputs, + SLboolean isNew +); + +typedef void (SLAPIENTRY *slDefaultDeviceIDMapChangedCallback) ( + SLAudioIODeviceCapabilitiesItf caller, + void *pContext, + SLboolean isOutput, + SLuint32 numDevices +); + + +struct SLAudioIODeviceCapabilitiesItf_ { + SLresult (*GetAvailableAudioInputs)( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 *pNumInputs, + SLuint32 *pInputDeviceIDs + ); + SLresult (*QueryAudioInputCapabilities)( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLAudioInputDescriptor *pDescriptor + ); + SLresult (*RegisterAvailableAudioInputsChangedCallback) ( + SLAudioIODeviceCapabilitiesItf self, + slAvailableAudioInputsChangedCallback callback, + void *pContext + ); + SLresult (*GetAvailableAudioOutputs)( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 *pNumOutputs, + SLuint32 *pOutputDeviceIDs + ); + SLresult (*QueryAudioOutputCapabilities)( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLAudioOutputDescriptor *pDescriptor + ); + SLresult (*RegisterAvailableAudioOutputsChangedCallback) ( + SLAudioIODeviceCapabilitiesItf self, + slAvailableAudioOutputsChangedCallback callback, + void *pContext + ); + SLresult (*RegisterDefaultDeviceIDMapChangedCallback) ( + SLAudioIODeviceCapabilitiesItf self, + slDefaultDeviceIDMapChangedCallback callback, + void *pContext + ); + SLresult (*GetAssociatedAudioInputs) ( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLuint32 *pNumAudioInputs, + SLuint32 *pAudioInputDeviceIDs + ); + SLresult (*GetAssociatedAudioOutputs) ( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLuint32 *pNumAudioOutputs, + SLuint32 *pAudioOutputDeviceIDs + ); + SLresult (*GetDefaultAudioDevices) ( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 defaultDeviceID, + SLuint32 *pNumAudioDevices, + SLuint32 *pAudioDeviceIDs + ); + SLresult (*QuerySampleFormatsSupported)( + SLAudioIODeviceCapabilitiesItf self, + SLuint32 deviceId, + SLmilliHertz samplingRate, + SLint32 *pSampleFormats, + SLuint32 *pNumOfSampleFormats + ); +}; + + + +/*---------------------------------------------------------------------------*/ +/* Capabilities of the LED array IODevice */ +/*---------------------------------------------------------------------------*/ + +typedef struct SLLEDDescriptor_ { + SLuint8 ledCount; + SLuint8 primaryLED; + SLuint32 colorMask; +} SLLEDDescriptor; + + +/*---------------------------------------------------------------------------*/ +/* LED Array interface */ +/*---------------------------------------------------------------------------*/ + +typedef struct SLHSL_ { + SLmillidegree hue; + SLpermille saturation; + SLpermille lightness; +} SLHSL; + + +SL_API extern const SLInterfaceID SL_IID_LED; + +struct SLLEDArrayItf_; +typedef const struct SLLEDArrayItf_ * const * SLLEDArrayItf; + +struct SLLEDArrayItf_ { + SLresult (*ActivateLEDArray) ( + SLLEDArrayItf self, + SLuint32 lightMask + ); + SLresult (*IsLEDArrayActivated) ( + SLLEDArrayItf self, + SLuint32 *lightMask + ); + SLresult (*SetColor) ( + SLLEDArrayItf self, + SLuint8 index, + const SLHSL *color + ); + SLresult (*GetColor) ( + SLLEDArrayItf self, + SLuint8 index, + SLHSL *color + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Capabilities of the Vibra IODevice */ +/*---------------------------------------------------------------------------*/ + +typedef struct SLVibraDescriptor_ { + SLboolean supportsFrequency; + SLboolean supportsIntensity; + SLmilliHertz minFrequency; + SLmilliHertz maxFrequency; +} SLVibraDescriptor; + + + +/*---------------------------------------------------------------------------*/ +/* Vibra interface */ +/*---------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_VIBRA; + + +struct SLVibraItf_; +typedef const struct SLVibraItf_ * const * SLVibraItf; + +struct SLVibraItf_ { + SLresult (*Vibrate) ( + SLVibraItf self, + SLboolean vibrate + ); + SLresult (*IsVibrating) ( + SLVibraItf self, + SLboolean *pVibrating + ); + SLresult (*SetFrequency) ( + SLVibraItf self, + SLmilliHertz frequency + ); + SLresult (*GetFrequency) ( + SLVibraItf self, + SLmilliHertz *pFrequency + ); + SLresult (*SetIntensity) ( + SLVibraItf self, + SLpermille intensity + ); + SLresult (*GetIntensity) ( + SLVibraItf self, + SLpermille *pIntensity + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Meta data extraction related types and interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_CHARACTERENCODING_UNKNOWN ((SLuint32) 0x00000000) +#define SL_CHARACTERENCODING_BINARY ((SLuint32) 0x00000001) +#define SL_CHARACTERENCODING_ASCII ((SLuint32) 0x00000002) +#define SL_CHARACTERENCODING_BIG5 ((SLuint32) 0x00000003) +#define SL_CHARACTERENCODING_CODEPAGE1252 ((SLuint32) 0x00000004) +#define SL_CHARACTERENCODING_GB2312 ((SLuint32) 0x00000005) +#define SL_CHARACTERENCODING_HZGB2312 ((SLuint32) 0x00000006) +#define SL_CHARACTERENCODING_GB12345 ((SLuint32) 0x00000007) +#define SL_CHARACTERENCODING_GB18030 ((SLuint32) 0x00000008) +#define SL_CHARACTERENCODING_GBK ((SLuint32) 0x00000009) +#define SL_CHARACTERENCODING_IMAPUTF7 ((SLuint32) 0x0000000A) +#define SL_CHARACTERENCODING_ISO2022JP ((SLuint32) 0x0000000B) +#define SL_CHARACTERENCODING_ISO2022JP1 ((SLuint32) 0x0000000B) +#define SL_CHARACTERENCODING_ISO88591 ((SLuint32) 0x0000000C) +#define SL_CHARACTERENCODING_ISO885910 ((SLuint32) 0x0000000D) +#define SL_CHARACTERENCODING_ISO885913 ((SLuint32) 0x0000000E) +#define SL_CHARACTERENCODING_ISO885914 ((SLuint32) 0x0000000F) +#define SL_CHARACTERENCODING_ISO885915 ((SLuint32) 0x00000010) +#define SL_CHARACTERENCODING_ISO88592 ((SLuint32) 0x00000011) +#define SL_CHARACTERENCODING_ISO88593 ((SLuint32) 0x00000012) +#define SL_CHARACTERENCODING_ISO88594 ((SLuint32) 0x00000013) +#define SL_CHARACTERENCODING_ISO88595 ((SLuint32) 0x00000014) +#define SL_CHARACTERENCODING_ISO88596 ((SLuint32) 0x00000015) +#define SL_CHARACTERENCODING_ISO88597 ((SLuint32) 0x00000016) +#define SL_CHARACTERENCODING_ISO88598 ((SLuint32) 0x00000017) +#define SL_CHARACTERENCODING_ISO88599 ((SLuint32) 0x00000018) +#define SL_CHARACTERENCODING_ISOEUCJP ((SLuint32) 0x00000019) +#define SL_CHARACTERENCODING_SHIFTJIS ((SLuint32) 0x0000001A) +#define SL_CHARACTERENCODING_SMS7BIT ((SLuint32) 0x0000001B) +#define SL_CHARACTERENCODING_UTF7 ((SLuint32) 0x0000001C) +#define SL_CHARACTERENCODING_UTF8 ((SLuint32) 0x0000001D) +#define SL_CHARACTERENCODING_JAVACONFORMANTUTF8 ((SLuint32) 0x0000001E) +#define SL_CHARACTERENCODING_UTF16BE ((SLuint32) 0x0000001F) +#define SL_CHARACTERENCODING_UTF16LE ((SLuint32) 0x00000020) + + +#define SL_METADATA_FILTER_KEY ((SLuint8) 0x01) +#define SL_METADATA_FILTER_LANG ((SLuint8) 0x02) +#define SL_METADATA_FILTER_ENCODING ((SLuint8) 0x04) + + +typedef struct SLMetadataInfo_ { + SLuint32 size; + SLuint32 encoding; + SLchar langCountry[16]; + SLuint8 data[1]; +} SLMetadataInfo; + +SL_API extern const SLInterfaceID SL_IID_METADATAEXTRACTION; + +struct SLMetadataExtractionItf_; +typedef const struct SLMetadataExtractionItf_ * const * SLMetadataExtractionItf; + + +struct SLMetadataExtractionItf_ { + SLresult (*GetItemCount) ( + SLMetadataExtractionItf self, + SLuint32 *pItemCount + ); + SLresult (*GetKeySize) ( + SLMetadataExtractionItf self, + SLuint32 index, + SLuint32 *pKeySize + ); + SLresult (*GetKey) ( + SLMetadataExtractionItf self, + SLuint32 index, + SLuint32 keySize, + SLMetadataInfo *pKey + ); + SLresult (*GetValueSize) ( + SLMetadataExtractionItf self, + SLuint32 index, + SLuint32 *pValueSize + ); + SLresult (*GetValue) ( + SLMetadataExtractionItf self, + SLuint32 index, + SLuint32 valueSize, + SLMetadataInfo *pValue + ); + SLresult (*AddKeyFilter) ( + SLMetadataExtractionItf self, + SLuint32 keySize, + const void *pKey, + SLuint32 keyEncoding, + const SLchar *pValueLangCountry, + SLuint32 valueEncoding, + SLuint8 filterMask + ); + SLresult (*ClearKeyFilter) ( + SLMetadataExtractionItf self + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Meta data message related types and interface */ +/*---------------------------------------------------------------------------*/ + +SL_API extern const SLInterfaceID SL_IID_METADATAMESSAGE; + +struct SLMetadataMessageItf_; +typedef const struct SLMetadataMessageItf_ * const * SLMetadataMessageItf; + +typedef void (SLAPIENTRY *slMetadataCallback) ( + SLMetadataMessageItf caller, + void *pContext, + SLuint32 index +); + +struct SLMetadataMessageItf_ { + SLresult (*RegisterMetadataCallback) ( + SLMetadataMessageItf self, + slMetadataCallback callback, + void *pContext + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Meta data traversal related types and interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_METADATATRAVERSALMODE_ALL ((SLuint32) 0x00000001) +#define SL_METADATATRAVERSALMODE_NODE ((SLuint32) 0x00000002) + + +#define SL_NODETYPE_UNSPECIFIED ((SLuint32) 0x00000001) +#define SL_NODETYPE_AUDIO ((SLuint32) 0x00000002) +#define SL_NODETYPE_VIDEO ((SLuint32) 0x00000003) +#define SL_NODETYPE_IMAGE ((SLuint32) 0x00000004) + +#define SL_NODE_PARENT 0xFFFFFFFF + +SL_API extern const SLInterfaceID SL_IID_METADATATRAVERSAL; + +struct SLMetadataTraversalItf_; +typedef const struct SLMetadataTraversalItf_ * const * SLMetadataTraversalItf; + +struct SLMetadataTraversalItf_ { + SLresult (*SetMode) ( + SLMetadataTraversalItf self, + SLuint32 mode + ); + SLresult (*GetChildCount) ( + SLMetadataTraversalItf self, + SLuint32 *pCount + ); + SLresult (*GetChildMIMETypeSize) ( + SLMetadataTraversalItf self, + SLuint32 index, + SLuint32 *pSize + ); + SLresult (*GetChildInfo) ( + SLMetadataTraversalItf self, + SLuint32 index, + SLint32 *pNodeID, + SLuint32 *pType, + SLuint32 size, + SLchar *pMimeType + ); + SLresult (*SetActiveNode) ( + SLMetadataTraversalItf self, + SLuint32 index + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Dynamic Source types and interface */ +/*---------------------------------------------------------------------------*/ + +SL_API extern const SLInterfaceID SL_IID_DYNAMICSOURCE; + +struct SLDynamicSourceItf_; +typedef const struct SLDynamicSourceItf_ * const * SLDynamicSourceItf; + +struct SLDynamicSourceItf_ { + SLresult (*SetSource) ( + SLDynamicSourceItf self, + const SLDataSource *pDataSource + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Dynamic Source/Sink Change Interface */ +/*---------------------------------------------------------------------------*/ +SL_API extern const SLInterfaceID SL_IID_DYNAMICSOURCESINKCHANGE; + +struct SLDynamicSourceSinkChangeItf_; +typedef const struct SLDynamicSourceSinkChangeItf_ * const * SLDynamicSourceSinkChangeItf; + +typedef void (SLAPIENTRY *slSourceChangeCallback)( + SLDynamicSourceSinkChangeItf caller, + void *pContext, + SLuint32 resultCode, + const SLDataSource *pExistingDataSource, + const SLDataSource *pNewDataSource +); + +typedef void (SLAPIENTRY *slSinkChangeCallback)( + SLDynamicSourceSinkChangeItf caller, + void *pContext, + SLuint32 resultCode, + const SLDataSource *pExistingDataSink, + const SLDataSource *pNewDataSink +); + +struct SLDynamicSourceSinkChangeItf_ { + SLresult (*ChangeSource) ( + SLDynamicSourceSinkChangeItf self, + const SLDataSource * pExistingDataSource, + const SLDataSource * pNewDataSource, + SLboolean async + ); + SLresult (*ChangeSink) ( + SLDynamicSourceSinkChangeItf self, + const SLDataSink * pExistingDataSink, + const SLDataSink * pNewDataSink, + SLboolean async + ); + SLresult (*RegisterSourceChangeCallback) ( + SLDynamicSourceSinkChangeItf self, + slSourceChangeCallback callback, + void * pContext + ); + SLresult (*RegisterSinkChangeCallback) ( + SLDynamicSourceSinkChangeItf self, + slSinkChangeCallback callback, + void * pContext + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Output Mix interface */ +/*---------------------------------------------------------------------------*/ + +SL_API extern const SLInterfaceID SL_IID_OUTPUTMIX; + +struct SLOutputMixItf_; +typedef const struct SLOutputMixItf_ * const * SLOutputMixItf; + +typedef void (SLAPIENTRY *slMixDeviceChangeCallback) ( + SLOutputMixItf caller, + void *pContext +); + + +struct SLOutputMixItf_ { + SLresult (*GetDestinationOutputDeviceIDs) ( + SLOutputMixItf self, + SLint32 *pNumDevices, + SLuint32 *pDeviceIDs + ); + SLresult (*RegisterDeviceChangeCallback) ( + SLOutputMixItf self, + slMixDeviceChangeCallback callback, + void *pContext + ); + SLresult (*ReRoute)( + SLOutputMixItf self, + SLint32 numOutputDevices, + SLuint32 *pOutputDeviceIDs + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Playback interface */ +/*---------------------------------------------------------------------------*/ + +/** Playback states */ +#define SL_PLAYSTATE_STOPPED ((SLuint32) 0x00000001) +#define SL_PLAYSTATE_PAUSED ((SLuint32) 0x00000002) +#define SL_PLAYSTATE_PLAYING ((SLuint32) 0x00000003) + +/** Play events **/ +#define SL_PLAYEVENT_HEADATEND ((SLuint32) 0x00000001) +#define SL_PLAYEVENT_HEADATMARKER ((SLuint32) 0x00000002) +#define SL_PLAYEVENT_HEADATNEWPOS ((SLuint32) 0x00000004) +#define SL_PLAYEVENT_HEADMOVING ((SLuint32) 0x00000008) +#define SL_PLAYEVENT_HEADSTALLED ((SLuint32) 0x00000010) +#define SL_PLAYEVENT_DURATIONUPDATED ((SLuint32) 0x00000020) + +#define SL_TIME_UNKNOWN ((SLuint32) 0xFFFFFFFF) + + +SL_API extern const SLInterfaceID SL_IID_PLAY; + +/** Playback interface methods */ + +struct SLPlayItf_; +typedef const struct SLPlayItf_ * const * SLPlayItf; + +typedef void (SLAPIENTRY *slPlayCallback) ( + SLPlayItf caller, + void *pContext, + SLuint32 event +); + +struct SLPlayItf_ { + SLresult (*SetPlayState) ( + SLPlayItf self, + SLuint32 state + ); + SLresult (*GetPlayState) ( + SLPlayItf self, + SLuint32 *pState + ); + SLresult (*GetDuration) ( + SLPlayItf self, + SLmillisecond *pMsec + ); + SLresult (*GetPosition) ( + SLPlayItf self, + SLmillisecond *pMsec + ); + SLresult (*RegisterCallback) ( + SLPlayItf self, + slPlayCallback callback, + void *pContext + ); + SLresult (*SetCallbackEventsMask) ( + SLPlayItf self, + SLuint32 eventFlags + ); + SLresult (*GetCallbackEventsMask) ( + SLPlayItf self, + SLuint32 *pEventFlags + ); + SLresult (*SetMarkerPosition) ( + SLPlayItf self, + SLmillisecond mSec + ); + SLresult (*ClearMarkerPosition) ( + SLPlayItf self + ); + SLresult (*GetMarkerPosition) ( + SLPlayItf self, + SLmillisecond *pMsec + ); + SLresult (*SetPositionUpdatePeriod) ( + SLPlayItf self, + SLmillisecond mSec + ); + SLresult (*GetPositionUpdatePeriod) ( + SLPlayItf self, + SLmillisecond *pMsec + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Prefetch status interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_PREFETCHEVENT_STATUSCHANGE ((SLuint32) 0x00000001) +#define SL_PREFETCHEVENT_FILLLEVELCHANGE ((SLuint32) 0x00000002) +#define SL_PREFETCHEVENT_ERROR ((SLuint32) 0x00000003) +#define SL_PREFETCHEVENT_ERROR_UNRECOVERABLE ((SLuint32) 0x00000004) + + +#define SL_PREFETCHSTATUS_UNDERFLOW ((SLuint32) 0x00000001) +#define SL_PREFETCHSTATUS_SUFFICIENTDATA ((SLuint32) 0x00000002) +#define SL_PREFETCHSTATUS_OVERFLOW ((SLuint32) 0x00000003) + + +SL_API extern const SLInterfaceID SL_IID_PREFETCHSTATUS; + + +/** Prefetch status interface methods */ + +struct SLPrefetchStatusItf_; +typedef const struct SLPrefetchStatusItf_ * const * SLPrefetchStatusItf; + +typedef void (SLAPIENTRY *slPrefetchCallback) ( + SLPrefetchStatusItf caller, + void *pContext, + SLuint32 event +); + +struct SLPrefetchStatusItf_ { + SLresult (*GetPrefetchStatus) ( + SLPrefetchStatusItf self, + SLuint32 *pStatus + ); + SLresult (*GetFillLevel) ( + SLPrefetchStatusItf self, + SLpermille *pLevel + ); + SLresult (*RegisterCallback) ( + SLPrefetchStatusItf self, + slPrefetchCallback callback, + void *pContext + ); + SLresult (*SetCallbackEventsMask) ( + SLPrefetchStatusItf self, + SLuint32 eventFlags + ); + SLresult (*GetCallbackEventsMask) ( + SLPrefetchStatusItf self, + SLuint32 *pEventFlags + ); + SLresult (*SetFillUpdatePeriod) ( + SLPrefetchStatusItf self, + SLpermille period + ); + SLresult (*GetFillUpdatePeriod) ( + SLPrefetchStatusItf self, + SLpermille *pPeriod + ); + SLresult (*GetError) ( + SLPrefetchStatusItf self, + SLresult *pResult + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Playback Rate interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_RATEPROP_RESERVED1 ((SLuint32) 0x00000001) +#define SL_RATEPROP_RESERVED2 ((SLuint32) 0x00000002) +#define SL_RATEPROP_SILENTAUDIO ((SLuint32) 0x00000100) +#define SL_RATEPROP_STAGGEREDAUDIO ((SLuint32) 0x00000200) +#define SL_RATEPROP_NOPITCHCORAUDIO ((SLuint32) 0x00000400) +#define SL_RATEPROP_PITCHCORAUDIO ((SLuint32) 0x00000800) + + +SL_API extern const SLInterfaceID SL_IID_PLAYBACKRATE; + +struct SLPlaybackRateItf_; +typedef const struct SLPlaybackRateItf_ * const * SLPlaybackRateItf; + +struct SLPlaybackRateItf_ { + SLresult (*SetRate)( + SLPlaybackRateItf self, + SLpermille rate + ); + SLresult (*GetRate)( + SLPlaybackRateItf self, + SLpermille *pRate + ); + SLresult (*SetPropertyConstraints)( + SLPlaybackRateItf self, + SLuint32 constraints + ); + SLresult (*GetProperties)( + SLPlaybackRateItf self, + SLuint32 *pProperties + ); + SLresult (*GetCapabilitiesOfRate)( + SLPlaybackRateItf self, + SLpermille rate, + SLuint32 *pCapabilities + ); + SLresult (*GetRateRange) ( + SLPlaybackRateItf self, + SLuint8 index, + SLpermille *pMinRate, + SLpermille *pMaxRate, + SLpermille *pStepSize, + SLuint32 *pCapabilities + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Seek Interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_SEEKMODE_FAST ((SLuint32) 0x0001) +#define SL_SEEKMODE_ACCURATE ((SLuint32) 0x0002) + +SL_API extern const SLInterfaceID SL_IID_SEEK; + +struct SLSeekItf_; +typedef const struct SLSeekItf_ * const * SLSeekItf; + +struct SLSeekItf_ { + SLresult (*SetPosition)( + SLSeekItf self, + SLmillisecond pos, + SLuint32 seekMode + ); + SLresult (*SetLoop)( + SLSeekItf self, + SLboolean loopEnable, + SLmillisecond startPos, + SLmillisecond endPos + ); + SLresult (*GetLoop)( + SLSeekItf self, + SLboolean *pLoopEnabled, + SLmillisecond *pStartPos, + SLmillisecond *pEndPos + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Standard Recording Interface */ +/*---------------------------------------------------------------------------*/ + +/** Recording states */ +#define SL_RECORDSTATE_STOPPED ((SLuint32) 0x00000001) +#define SL_RECORDSTATE_PAUSED ((SLuint32) 0x00000002) +#define SL_RECORDSTATE_RECORDING ((SLuint32) 0x00000003) + + +/** Record event **/ +#define SL_RECORDEVENT_HEADATLIMIT ((SLuint32) 0x00000001) +#define SL_RECORDEVENT_HEADATMARKER ((SLuint32) 0x00000002) +#define SL_RECORDEVENT_HEADATNEWPOS ((SLuint32) 0x00000004) +#define SL_RECORDEVENT_HEADMOVING ((SLuint32) 0x00000008) +#define SL_RECORDEVENT_HEADSTALLED ((SLuint32) 0x00000010) +/* Note: SL_RECORDEVENT_BUFFER_INSUFFICIENT is deprecated, use SL_RECORDEVENT_BUFFER_FULL instead. */ +#define SL_RECORDEVENT_BUFFER_INSUFFICIENT ((SLuint32) 0x00000020) +#define SL_RECORDEVENT_BUFFER_FULL ((SLuint32) 0x00000020) +#define SL_RECORDEVENT_BUFFERQUEUE_STARVED ((SLuint32) 0x00000040) + + +SL_API extern const SLInterfaceID SL_IID_RECORD; + +struct SLRecordItf_; +typedef const struct SLRecordItf_ * const * SLRecordItf; + +typedef void (SLAPIENTRY *slRecordCallback) ( + SLRecordItf caller, + void *pContext, + SLuint32 event +); + +/** Recording interface methods */ +struct SLRecordItf_ { + SLresult (*SetRecordState) ( + SLRecordItf self, + SLuint32 state + ); + SLresult (*GetRecordState) ( + SLRecordItf self, + SLuint32 *pState + ); + SLresult (*SetDurationLimit) ( + SLRecordItf self, + SLmillisecond msec + ); + SLresult (*GetPosition) ( + SLRecordItf self, + SLmillisecond *pMsec + ); + SLresult (*RegisterCallback) ( + SLRecordItf self, + slRecordCallback callback, + void *pContext + ); + SLresult (*SetCallbackEventsMask) ( + SLRecordItf self, + SLuint32 eventFlags + ); + SLresult (*GetCallbackEventsMask) ( + SLRecordItf self, + SLuint32 *pEventFlags + ); + SLresult (*SetMarkerPosition) ( + SLRecordItf self, + SLmillisecond mSec + ); + SLresult (*ClearMarkerPosition) ( + SLRecordItf self + ); + SLresult (*GetMarkerPosition) ( + SLRecordItf self, + SLmillisecond *pMsec + ); + SLresult (*SetPositionUpdatePeriod) ( + SLRecordItf self, + SLmillisecond mSec + ); + SLresult (*GetPositionUpdatePeriod) ( + SLRecordItf self, + SLmillisecond *pMsec + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Equalizer interface */ +/*---------------------------------------------------------------------------*/ + +#define SL_EQUALIZER_UNDEFINED ((SLuint16) 0xFFFF) + +SL_API extern const SLInterfaceID SL_IID_EQUALIZER; + +struct SLEqualizerItf_; +typedef const struct SLEqualizerItf_ * const * SLEqualizerItf; + +struct SLEqualizerItf_ { + SLresult (*SetEnabled)( + SLEqualizerItf self, + SLboolean enabled + ); + SLresult (*IsEnabled)( + SLEqualizerItf self, + SLboolean *pEnabled + ); + SLresult (*GetNumberOfBands)( + SLEqualizerItf self, + SLuint16 *pAmount + ); + SLresult (*GetBandLevelRange)( + SLEqualizerItf self, + SLmillibel *pMin, + SLmillibel *pMax + ); + SLresult (*SetBandLevel)( + SLEqualizerItf self, + SLuint16 band, + SLmillibel level + ); + SLresult (*GetBandLevel)( + SLEqualizerItf self, + SLuint16 band, + SLmillibel *pLevel + ); + SLresult (*GetCenterFreq)( + SLEqualizerItf self, + SLuint16 band, + SLmilliHertz *pCenter + ); + SLresult (*GetBandFreqRange)( + SLEqualizerItf self, + SLuint16 band, + SLmilliHertz *pMin, + SLmilliHertz *pMax + ); + SLresult (*GetBand)( + SLEqualizerItf self, + SLmilliHertz frequency, + SLuint16 *pBand + ); + SLresult (*GetCurrentPreset)( + SLEqualizerItf self, + SLuint16 *pPreset + ); + SLresult (*UsePreset)( + SLEqualizerItf self, + SLuint16 index + ); + SLresult (*GetNumberOfPresets)( + SLEqualizerItf self, + SLuint16 *pNumPresets + ); + SLresult (*GetPresetName)( + SLEqualizerItf self, + SLuint16 index, + SLuint16 * pSize, + SLchar * pName + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Volume Interface */ +/* --------------------------------------------------------------------------*/ + +SL_API extern const SLInterfaceID SL_IID_VOLUME; + +struct SLVolumeItf_; +typedef const struct SLVolumeItf_ * const * SLVolumeItf; + +struct SLVolumeItf_ { + SLresult (*SetVolumeLevel) ( + SLVolumeItf self, + SLmillibel level + ); + SLresult (*GetVolumeLevel) ( + SLVolumeItf self, + SLmillibel *pLevel + ); + SLresult (*GetMaxVolumeLevel) ( + SLVolumeItf self, + SLmillibel *pMaxLevel + ); + SLresult (*SetMute) ( + SLVolumeItf self, + SLboolean mute + ); + SLresult (*GetMute) ( + SLVolumeItf self, + SLboolean *pMute + ); + SLresult (*EnableStereoPosition) ( + SLVolumeItf self, + SLboolean enable + ); + SLresult (*IsEnabledStereoPosition) ( + SLVolumeItf self, + SLboolean *pEnable + ); + SLresult (*SetStereoPosition) ( + SLVolumeItf self, + SLpermille stereoPosition + ); + SLresult (*GetStereoPosition) ( + SLVolumeItf self, + SLpermille *pStereoPosition + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Device Volume Interface */ +/* --------------------------------------------------------------------------*/ + +SL_API extern const SLInterfaceID SL_IID_DEVICEVOLUME; + +struct SLDeviceVolumeItf_; +typedef const struct SLDeviceVolumeItf_ * const * SLDeviceVolumeItf; + +struct SLDeviceVolumeItf_ { + SLresult (*GetVolumeScale) ( + SLDeviceVolumeItf self, + SLuint32 deviceID, + SLint32 *pMinValue, + SLint32 *pMaxValue, + SLboolean *pIsMillibelScale + ); + SLresult (*SetVolume) ( + SLDeviceVolumeItf self, + SLuint32 deviceID, + SLint32 volume + ); + SLresult (*GetVolume) ( + SLDeviceVolumeItf self, + SLuint32 deviceID, + SLint32 *pVolume + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Buffer Queue Interface */ +/*---------------------------------------------------------------------------*/ +/** Flags for buffer queue events */ +#define SL_BUFFERQUEUEEVENT_PROCESSED ((SLuint32) 0x00000001) +#define SL_BUFFERQUEUEEVENT_UNREALIZED ((SLuint32) 0x00000002) +#define SL_BUFFERQUEUEEVENT_CLEARED ((SLuint32) 0x00000004) +#define SL_BUFFERQUEUEEVENT_STOPPED ((SLuint32) 0x00000008) +#define SL_BUFFERQUEUEEVENT_ERROR ((SLuint32) 0x00000010) +#define SL_BUFFERQUEUEEVENT_CONTENT_END ((SLuint32) 0x00000020) + +SL_API extern const SLInterfaceID SL_IID_BUFFERQUEUE; + +struct SLBufferQueueItf_; +typedef const struct SLBufferQueueItf_ * const * SLBufferQueueItf; + +typedef void (SLAPIENTRY *slBufferQueueCallback) ( + SLBufferQueueItf caller, + SLuint32 eventFlags, + const void *pBuffer, + SLuint32 bufferSize, + SLuint32 dataUsed, + void *pContext +); + + +/** Buffer queue state **/ + +typedef struct SLBufferQueueState_ { + SLuint32 count; + SLuint32 index; +} SLBufferQueueState; + + +struct SLBufferQueueItf_ { + SLresult (*Enqueue) ( + SLBufferQueueItf self, + const void *pBuffer, + SLuint32 size, + SLboolean isLastBuffer + ); + SLresult (*Clear) ( + SLBufferQueueItf self + ); + SLresult (*GetState) ( + SLBufferQueueItf self, + SLBufferQueueState *pState + ); + SLresult (*RegisterCallback) ( + SLBufferQueueItf self, + slBufferQueueCallback callback, + void* pContext + ); + SLresult (*SetCallbackEventsMask) ( + SLBufferQueueItf self, + SLuint32 eventFlags + ); + SLresult (*GetCallbackEventsMask) ( + SLBufferQueueItf self, + SLuint32 *pEventFlags + ); + +}; + +/*---------------------------------------------------------------------------*/ +/* ConfigExtension */ +/*---------------------------------------------------------------------------*/ +SL_API extern const SLInterfaceID SL_IID_CONFIGEXTENSION; + +struct SLConfigExtensionsItf_; +typedef const struct SLConfigExtensionsItf_ + * const * SLConfigExtensionsItf; + +struct SLConfigExtensionsItf_ { + SLresult (*SetConfiguration) ( + SLConfigExtensionsItf self, + const SLchar * pConfigKey, + SLuint32 valueSize, + const void * pConfigValue + ); + SLresult (*GetConfiguration) ( + SLConfigExtensionsItf self, + const SLchar * pConfigKey, + SLuint32 * pValueSize, + void * pConfigValue + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* PresetReverb */ +/*---------------------------------------------------------------------------*/ + +#define SL_REVERBPRESET_NONE ((SLuint16) 0x0000) +#define SL_REVERBPRESET_SMALLROOM ((SLuint16) 0x0001) +#define SL_REVERBPRESET_MEDIUMROOM ((SLuint16) 0x0002) +#define SL_REVERBPRESET_LARGEROOM ((SLuint16) 0x0003) +#define SL_REVERBPRESET_MEDIUMHALL ((SLuint16) 0x0004) +#define SL_REVERBPRESET_LARGEHALL ((SLuint16) 0x0005) +#define SL_REVERBPRESET_PLATE ((SLuint16) 0x0006) + + +SL_API extern const SLInterfaceID SL_IID_PRESETREVERB; + +struct SLPresetReverbItf_; +typedef const struct SLPresetReverbItf_ * const * SLPresetReverbItf; + +struct SLPresetReverbItf_ { + SLresult (*SetPreset) ( + SLPresetReverbItf self, + SLuint16 preset + ); + SLresult (*GetPreset) ( + SLPresetReverbItf self, + SLuint16 *pPreset + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* EnvironmentalReverb */ +/*---------------------------------------------------------------------------*/ + +#define SL_I3DL2_ENVIRONMENT_PRESET_DEFAULT \ + { SL_MILLIBEL_MIN, 0, 1000, 500, SL_MILLIBEL_MIN, 20, SL_MILLIBEL_MIN, 40, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_GENERIC \ + { -1000, -100, 1490, 830, -2602, 7, 200, 11, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL \ + { -1000,-6000, 170, 100, -1204, 1, 207, 2, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_ROOM \ + { -1000, -454, 400, 830, -1646, 2, 53, 3, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_BATHROOM \ + { -1000,-1200, 1490, 540, -370, 7, 1030, 11, 1000, 600 } +#define SL_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM \ + { -1000,-6000, 500, 100, -1376, 3, -1104, 4, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_STONEROOM \ + { -1000, -300, 2310, 640, -711, 12, 83, 17, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM \ + { -1000, -476, 4320, 590, -789, 20, -289, 30, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL \ + { -1000, -500, 3920, 700, -1230, 20, -2, 29, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_CAVE \ + { -1000, 0, 2910, 1300, -602, 15, -302, 22, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_ARENA \ + { -1000, -698, 7240, 330, -1166, 20, 16, 30, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_HANGAR \ + { -1000,-1000, 10050, 230, -602, 20, 198, 30, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY \ + { -1000,-4000, 300, 100, -1831, 2, -1630, 30, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_HALLWAY \ + { -1000, -300, 1490, 590, -1219, 7, 441, 11, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR \ + { -1000, -237, 2700, 790, -1214, 13, 395, 20, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_ALLEY \ + { -1000, -270, 1490, 860, -1204, 7, -4, 11, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_FOREST \ + { -1000,-3300, 1490, 540, -2560, 162, -613, 88, 790,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_CITY \ + { -1000, -800, 1490, 670, -2273, 7, -2217, 11, 500,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS \ + { -1000,-2500, 1490, 210, -2780, 300, -2014, 100, 270,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_QUARRY \ + { -1000,-1000, 1490, 830, SL_MILLIBEL_MIN, 61, 500, 25, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_PLAIN \ + { -1000,-2000, 1490, 500, -2466, 179, -2514, 100, 210,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT \ + { -1000, 0, 1650, 1500, -1363, 8, -1153, 12, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE \ + { -1000,-1000, 2810, 140, 429, 14, 648, 21, 800, 600 } +#define SL_I3DL2_ENVIRONMENT_PRESET_UNDERWATER \ + { -1000,-4000, 1490, 100, -449, 7, 1700, 11, 1000,1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_SMALLROOM \ + { -1000,-600, 1100, 830, -400, 5, 500, 10, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM \ + { -1000,-600, 1300, 830, -1000, 20, -200, 20, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_LARGEROOM \ + { -1000,-600, 1500, 830, -1600, 5, -1000, 40, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL \ + { -1000,-600, 1800, 700, -1300, 15, -800, 30, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_LARGEHALL \ + { -1000,-600, 1800, 700, -2000, 30, -1400, 60, 1000, 1000 } +#define SL_I3DL2_ENVIRONMENT_PRESET_PLATE \ + { -1000,-200, 1300, 900, 0, 2, 0, 10, 1000, 750 } + + +typedef struct SLEnvironmentalReverbSettings_ { + SLmillibel roomLevel; + SLmillibel roomHFLevel; + SLmillisecond decayTime; + SLpermille decayHFRatio; + SLmillibel reflectionsLevel; + SLmillisecond reflectionsDelay; + SLmillibel reverbLevel; + SLmillisecond reverbDelay; + SLpermille diffusion; + SLpermille density; +} SLEnvironmentalReverbSettings; + + + + +SL_API extern const SLInterfaceID SL_IID_ENVIRONMENTALREVERB; + + +struct SLEnvironmentalReverbItf_; +typedef const struct SLEnvironmentalReverbItf_ * const * SLEnvironmentalReverbItf; + +struct SLEnvironmentalReverbItf_ { + SLresult (*SetRoomLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel room + ); + SLresult (*GetRoomLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel *pRoom + ); + SLresult (*SetRoomHFLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel roomHF + ); + SLresult (*GetRoomHFLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel *pRoomHF + ); + SLresult (*SetDecayTime) ( + SLEnvironmentalReverbItf self, + SLmillisecond decayTime + ); + SLresult (*GetDecayTime) ( + SLEnvironmentalReverbItf self, + SLmillisecond *pDecayTime + ); + SLresult (*SetDecayHFRatio) ( + SLEnvironmentalReverbItf self, + SLpermille decayHFRatio + ); + SLresult (*GetDecayHFRatio) ( + SLEnvironmentalReverbItf self, + SLpermille *pDecayHFRatio + ); + SLresult (*SetReflectionsLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel reflectionsLevel + ); + SLresult (*GetReflectionsLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel *pReflectionsLevel + ); + SLresult (*SetReflectionsDelay) ( + SLEnvironmentalReverbItf self, + SLmillisecond reflectionsDelay + ); + SLresult (*GetReflectionsDelay) ( + SLEnvironmentalReverbItf self, + SLmillisecond *pReflectionsDelay + ); + SLresult (*SetReverbLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel reverbLevel + ); + SLresult (*GetReverbLevel) ( + SLEnvironmentalReverbItf self, + SLmillibel *pReverbLevel + ); + SLresult (*SetReverbDelay) ( + SLEnvironmentalReverbItf self, + SLmillisecond reverbDelay + ); + SLresult (*GetReverbDelay) ( + SLEnvironmentalReverbItf self, + SLmillisecond *pReverbDelay + ); + SLresult (*SetDiffusion) ( + SLEnvironmentalReverbItf self, + SLpermille diffusion + ); + SLresult (*GetDiffusion) ( + SLEnvironmentalReverbItf self, + SLpermille *pDiffusion + ); + SLresult (*SetDensity) ( + SLEnvironmentalReverbItf self, + SLpermille density + ); + SLresult (*GetDensity) ( + SLEnvironmentalReverbItf self, + SLpermille *pDensity + ); + SLresult (*SetEnvironmentalReverbProperties) ( + SLEnvironmentalReverbItf self, + const SLEnvironmentalReverbSettings *pProperties + ); + SLresult (*GetEnvironmentalReverbProperties) ( + SLEnvironmentalReverbItf self, + SLEnvironmentalReverbSettings *pProperties + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Effects Send Interface */ +/*---------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_EFFECTSEND; + +struct SLEffectSendItf_; +typedef const struct SLEffectSendItf_ * const * SLEffectSendItf; + +struct SLEffectSendItf_ { + SLresult (*EnableEffectSend) ( + SLEffectSendItf self, + const void *pAuxEffect, + SLboolean enable, + SLmillibel initialLevel + ); + SLresult (*IsEnabled) ( + SLEffectSendItf self, + const void * pAuxEffect, + SLboolean *pEnable + ); + SLresult (*SetDirectLevel) ( + SLEffectSendItf self, + SLmillibel directLevel + ); + SLresult (*GetDirectLevel) ( + SLEffectSendItf self, + SLmillibel *pDirectLevel + ); + SLresult (*SetSendLevel) ( + SLEffectSendItf self, + const void *pAuxEffect, + SLmillibel sendLevel + ); + SLresult (*GetSendLevel)( + SLEffectSendItf self, + const void *pAuxEffect, + SLmillibel *pSendLevel + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* 3D Grouping Interface */ +/*---------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_3DGROUPING; + + +struct SL3DGroupingItf_ ; +typedef const struct SL3DGroupingItf_ * const * SL3DGroupingItf; + +struct SL3DGroupingItf_ { + SLresult (*Set3DGroup) ( + SL3DGroupingItf self, + SLObjectItf group + ); + SLresult (*Get3DGroup) ( + SL3DGroupingItf self, + SLObjectItf *pGroup + ); +}; + +/*---------------------------------------------------------------------------*/ +/* 3D Hint Interface */ +/*---------------------------------------------------------------------------*/ +#define SL_3DHINT_OFF ((SLuint16) 0x0000) +#define SL_3DHINT_QUALITY_LOWEST ((SLuint16) 0x0001) +#define SL_3DHINT_QUALITY_LOW ((SLuint16) 0x4000) +#define SL_3DHINT_QUALITY_MEDIUM ((SLuint16) 0x8000) +#define SL_3DHINT_QUALITY_HIGH ((SLuint16) 0xC000) +#define SL_3DHINT_QUALITY_HIGHEST ((SLuint16) 0xFFFF) + +SL_API extern const SLInterfaceID SL_IID_3DHINT; + +struct SL3DHintItf_; +typedef const struct SL3DHintItf_ * const * SL3DHintItf; + +struct SL3DHintItf_ { + SLresult (*SetRenderHint) ( + SL3DHintItf self, + SLuint16 qualityHint + ); + SLresult (*GetRenderHint) ( + SL3DHintItf self, + SLuint16 *pQualityHint + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* 3D Commit Interface */ +/*---------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_3DCOMMIT; + +struct SL3DCommitItf_; +typedef const struct SL3DCommitItf_* const * SL3DCommitItf; + +struct SL3DCommitItf_ { + SLresult (*Commit) ( + SL3DCommitItf self + ); + SLresult (*SetDeferred) ( + SL3DCommitItf self, + SLboolean deferred + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* 3D Location Interface */ +/*---------------------------------------------------------------------------*/ + +typedef struct SLVec3D_ { + SLint32 x; + SLint32 y; + SLint32 z; +} SLVec3D; + +SL_API extern const SLInterfaceID SL_IID_3DLOCATION; + +struct SL3DLocationItf_; +typedef const struct SL3DLocationItf_ * const * SL3DLocationItf; + +struct SL3DLocationItf_ { + SLresult (*SetLocationCartesian) ( + SL3DLocationItf self, + const SLVec3D *pLocation + ); + SLresult (*SetLocationSpherical) ( + SL3DLocationItf self, + SLmillidegree azimuth, + SLmillidegree elevation, + SLmillimeter distance + ); + SLresult (*Move) ( + SL3DLocationItf self, + const SLVec3D *pMovement + ); + SLresult (*GetLocationCartesian) ( + SL3DLocationItf self, + SLVec3D *pLocation + ); + SLresult (*SetOrientationVectors) ( + SL3DLocationItf self, + const SLVec3D *pFront, + const SLVec3D *pAbove + ); + SLresult (*SetOrientationAngles) ( + SL3DLocationItf self, + SLmillidegree heading, + SLmillidegree pitch, + SLmillidegree roll + ); + SLresult (*Rotate) ( + SL3DLocationItf self, + SLmillidegree theta, + const SLVec3D *pAxis + ); + SLresult (*GetOrientationVectors) ( + SL3DLocationItf self, + SLVec3D *pFront, + SLVec3D *pUp + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* 3D Doppler Interface */ +/*---------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_3DDOPPLER; + +struct SL3DDopplerItf_; +typedef const struct SL3DDopplerItf_ * const * SL3DDopplerItf; + +struct SL3DDopplerItf_ { + SLresult (*SetVelocityCartesian) ( + SL3DDopplerItf self, + const SLVec3D *pVelocity + ); + SLresult (*SetVelocitySpherical) ( + SL3DDopplerItf self, + SLmillidegree azimuth, + SLmillidegree elevation, + SLmillimeter speed + ); + SLresult (*GetVelocityCartesian) ( + SL3DDopplerItf self, + SLVec3D *pVelocity + ); + SLresult (*SetDopplerFactor) ( + SL3DDopplerItf self, + SLpermille dopplerFactor + ); + SLresult (*GetDopplerFactor) ( + SL3DDopplerItf self, + SLpermille *pDopplerFactor + ); +}; + +/*---------------------------------------------------------------------------*/ +/* 3D Source Interface and associated defines */ +/* --------------------------------------------------------------------------*/ + +#define SL_ROLLOFFMODEL_EXPONENTIAL ((SLuint32) 0x00000000) +#define SL_ROLLOFFMODEL_LINEAR ((SLuint32) 0x00000001) + + +SL_API extern const SLInterfaceID SL_IID_3DSOURCE; + +struct SL3DSourceItf_; +typedef const struct SL3DSourceItf_ * const * SL3DSourceItf; + +struct SL3DSourceItf_ { + SLresult (*SetHeadRelative) ( + SL3DSourceItf self, + SLboolean headRelative + ); + SLresult (*GetHeadRelative) ( + SL3DSourceItf self, + SLboolean *pHeadRelative + ); + SLresult (*SetRolloffDistances) ( + SL3DSourceItf self, + SLmillimeter minDistance, + SLmillimeter maxDistance + ); + SLresult (*GetRolloffDistances) ( + SL3DSourceItf self, + SLmillimeter *pMinDistance, + SLmillimeter *pMaxDistance + ); + SLresult (*SetRolloffMaxDistanceMute) ( + SL3DSourceItf self, + SLboolean mute + ); + SLresult (*GetRolloffMaxDistanceMute) ( + SL3DSourceItf self, + SLboolean *pMute + ); + SLresult (*SetRolloffFactor) ( + SL3DSourceItf self, + SLpermille rolloffFactor + ); + SLresult (*GetRolloffFactor) ( + SL3DSourceItf self, + SLpermille *pRolloffFactor + ); + SLresult (*SetRoomRolloffFactor) ( + SL3DSourceItf self, + SLpermille roomRolloffFactor + ); + SLresult (*GetRoomRolloffFactor) ( + SL3DSourceItf self, + SLpermille *pRoomRolloffFactor + ); + SLresult (*SetRolloffModel) ( + SL3DSourceItf self, + SLuint8 model + ); + SLresult (*GetRolloffModel) ( + SL3DSourceItf self, + SLuint8 *pModel + ); + SLresult (*SetCone) ( + SL3DSourceItf self, + SLmillidegree innerAngle, + SLmillidegree outerAngle, + SLmillibel outerLevel + ); + SLresult (*GetCone) ( + SL3DSourceItf self, + SLmillidegree *pInnerAngle, + SLmillidegree *pOuterAngle, + SLmillibel *pOuterLevel + ); +}; + +/*---------------------------------------------------------------------------*/ +/* 3D Macroscopic Interface */ +/* --------------------------------------------------------------------------*/ + +SL_API extern const SLInterfaceID SL_IID_3DMACROSCOPIC; + +struct SL3DMacroscopicItf_; +typedef const struct SL3DMacroscopicItf_ * const * SL3DMacroscopicItf; + +struct SL3DMacroscopicItf_ { + SLresult (*SetSize) ( + SL3DMacroscopicItf self, + SLmillimeter width, + SLmillimeter height, + SLmillimeter depth + ); + SLresult (*GetSize) ( + SL3DMacroscopicItf self, + SLmillimeter *pWidth, + SLmillimeter *pHeight, + SLmillimeter *pDepth + ); + SLresult (*SetOrientationAngles) ( + SL3DMacroscopicItf self, + SLmillidegree heading, + SLmillidegree pitch, + SLmillidegree roll + ); + SLresult (*SetOrientationVectors) ( + SL3DMacroscopicItf self, + const SLVec3D *pFront, + const SLVec3D *pAbove + ); + SLresult (*Rotate) ( + SL3DMacroscopicItf self, + SLmillidegree theta, + const SLVec3D *pAxis + ); + SLresult (*GetOrientationVectors) ( + SL3DMacroscopicItf self, + SLVec3D *pFront, + SLVec3D *pUp + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Mute Solo Interface */ +/* --------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_MUTESOLO; + +struct SLMuteSoloItf_; +typedef const struct SLMuteSoloItf_ * const * SLMuteSoloItf; + +struct SLMuteSoloItf_ { + SLresult (*SetChannelMute) ( + SLMuteSoloItf self, + SLuint8 chan, + SLboolean mute + ); + SLresult (*GetChannelMute) ( + SLMuteSoloItf self, + SLuint8 chan, + SLboolean *pMute + ); + SLresult (*SetChannelSolo) ( + SLMuteSoloItf self, + SLuint8 chan, + SLboolean solo + ); + SLresult (*GetChannelSolo) ( + SLMuteSoloItf self, + SLuint8 chan, + SLboolean *pSolo + ); + SLresult (*GetNumChannels) ( + SLMuteSoloItf self, + SLuint8 *pNumChannels + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Dynamic Interface Management Interface and associated types and macros */ +/* --------------------------------------------------------------------------*/ + +#define SL_DYNAMIC_ITF_EVENT_RUNTIME_ERROR ((SLuint32) 0x00000001) +#define SL_DYNAMIC_ITF_EVENT_ASYNC_TERMINATION ((SLuint32) 0x00000002) +#define SL_DYNAMIC_ITF_EVENT_RESOURCES_LOST ((SLuint32) 0x00000003) +#define SL_DYNAMIC_ITF_EVENT_RESOURCES_LOST_PERMANENTLY ((SLuint32) 0x00000004) +#define SL_DYNAMIC_ITF_EVENT_RESOURCES_AVAILABLE ((SLuint32) 0x00000005) + + + + +SL_API extern const SLInterfaceID SL_IID_DYNAMICINTERFACEMANAGEMENT; + +struct SLDynamicInterfaceManagementItf_; +typedef const struct SLDynamicInterfaceManagementItf_ * const * SLDynamicInterfaceManagementItf; + +typedef void (SLAPIENTRY *slDynamicInterfaceManagementCallback) ( + SLDynamicInterfaceManagementItf caller, + void * pContext, + SLuint32 event, + SLresult result, + const SLInterfaceID iid +); + + +struct SLDynamicInterfaceManagementItf_ { + SLresult (*AddInterface) ( + SLDynamicInterfaceManagementItf self, + const SLInterfaceID iid, + SLboolean async + ); + SLresult (*RemoveInterface) ( + SLDynamicInterfaceManagementItf self, + const SLInterfaceID iid + ); + SLresult (*ResumeInterface) ( + SLDynamicInterfaceManagementItf self, + const SLInterfaceID iid, + SLboolean async + ); + SLresult (*RegisterCallback) ( + SLDynamicInterfaceManagementItf self, + slDynamicInterfaceManagementCallback callback, + void * pContext + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Midi Message Interface and associated types */ +/* --------------------------------------------------------------------------*/ + +#define SL_MIDIMESSAGETYPE_NOTE_ON_OFF ((SLuint32) 0x00000001) +#define SL_MIDIMESSAGETYPE_POLY_PRESSURE ((SLuint32) 0x00000002) +#define SL_MIDIMESSAGETYPE_CONTROL_CHANGE ((SLuint32) 0x00000003) +#define SL_MIDIMESSAGETYPE_PROGRAM_CHANGE ((SLuint32) 0x00000004) +#define SL_MIDIMESSAGETYPE_CHANNEL_PRESSURE ((SLuint32) 0x00000005) +#define SL_MIDIMESSAGETYPE_PITCH_BEND ((SLuint32) 0x00000006) +#define SL_MIDIMESSAGETYPE_SYSTEM_MESSAGE ((SLuint32) 0x00000007) + + +SL_API extern const SLInterfaceID SL_IID_MIDIMESSAGE; + +struct SLMIDIMessageItf_; +typedef const struct SLMIDIMessageItf_ * const * SLMIDIMessageItf; + +typedef void (SLAPIENTRY *slMetaEventCallback) ( + SLMIDIMessageItf caller, + void *pContext, + SLuint8 type, + SLuint32 length, + const SLuint8 *pData, + SLuint32 tick, + SLuint16 track +); + +typedef void (SLAPIENTRY *slMIDIMessageCallback) ( + SLMIDIMessageItf caller, + void *pContext, + SLuint8 statusByte, + SLuint32 length, + const SLuint8 *pData, + SLuint32 tick, + SLuint16 track +); + +struct SLMIDIMessageItf_ { + SLresult (*SendMessage) ( + SLMIDIMessageItf self, + const SLuint8 *pData, + SLuint32 length + ); + SLresult (*RegisterMetaEventCallback) ( + SLMIDIMessageItf self, + slMetaEventCallback callback, + void *pContext + ); + SLresult (*RegisterMIDIMessageCallback) ( + SLMIDIMessageItf self, + slMIDIMessageCallback callback, + void *pContext + ); + SLresult (*AddMIDIMessageCallbackFilter) ( + SLMIDIMessageItf self, + SLuint32 messageType + ); + SLresult (*ClearMIDIMessageCallbackFilter) ( + SLMIDIMessageItf self + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Midi Mute Solo interface */ +/* --------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_MIDIMUTESOLO; + +struct SLMIDIMuteSoloItf_; +typedef const struct SLMIDIMuteSoloItf_ * const * SLMIDIMuteSoloItf; + +struct SLMIDIMuteSoloItf_ { + SLresult (*SetChannelMute) ( + SLMIDIMuteSoloItf self, + SLuint8 channel, + SLboolean mute + ); + SLresult (*GetChannelMute) ( + SLMIDIMuteSoloItf self, + SLuint8 channel, + SLboolean *pMute + ); + SLresult (*SetChannelSolo) ( + SLMIDIMuteSoloItf self, + SLuint8 channel, + SLboolean solo + ); + SLresult (*GetChannelSolo) ( + SLMIDIMuteSoloItf self, + SLuint8 channel, + SLboolean *pSolo + ); + SLresult (*GetTrackCount) ( + SLMIDIMuteSoloItf self, + SLuint16 *pCount + ); + SLresult (*SetTrackMute) ( + SLMIDIMuteSoloItf self, + SLuint16 track, + SLboolean mute + ); + SLresult (*GetTrackMute) ( + SLMIDIMuteSoloItf self, + SLuint16 track, + SLboolean *pMute + ); + SLresult (*SetTrackSolo) ( + SLMIDIMuteSoloItf self, + SLuint16 track, + SLboolean solo + ); + SLresult (*GetTrackSolo) ( + SLMIDIMuteSoloItf self, + SLuint16 track, + SLboolean *pSolo + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Midi Tempo interface */ +/* --------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_MIDITEMPO; + +struct SLMIDITempoItf_; +typedef const struct SLMIDITempoItf_ * const * SLMIDITempoItf; + +struct SLMIDITempoItf_ { + SLresult (*SetTicksPerQuarterNote) ( + SLMIDITempoItf self, + SLuint32 tpqn + ); + SLresult (*GetTicksPerQuarterNote) ( + SLMIDITempoItf self, + SLuint32 *pTpqn + ); + SLresult (*SetMicrosecondsPerQuarterNote) ( + SLMIDITempoItf self, + SLmicrosecond uspqn + ); + SLresult (*GetMicrosecondsPerQuarterNote) ( + SLMIDITempoItf self, + SLmicrosecond *uspqn + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Midi Time interface */ +/* --------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_MIDITIME; + +struct SLMIDITimeItf_; +typedef const struct SLMIDITimeItf_ * const * SLMIDITimeItf; + +struct SLMIDITimeItf_ { + SLresult (*GetDuration) ( + SLMIDITimeItf self, + SLuint32 *pDuration + ); + SLresult (*SetPosition) ( + SLMIDITimeItf self, + SLuint32 position + ); + SLresult (*GetPosition) ( + SLMIDITimeItf self, + SLuint32 *pPosition + ); + SLresult (*SetLoopPoints) ( + SLMIDITimeItf self, + SLuint32 startTick, + SLuint32 numTicks + ); + SLresult (*GetLoopPoints) ( + SLMIDITimeItf self, + SLuint32 *pStartTick, + SLuint32 *pNumTicks + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Audio Decoder Capabilities Interface */ +/* --------------------------------------------------------------------------*/ + +/*Audio Codec related defines*/ +#define SL_AUDIOSTREAMFORMAT_UNDEFINED ((SLuint32) 0x00000000) + +#define SL_RATECONTROLMODE_CONSTANTBITRATE ((SLuint32) 0x00000001) +#define SL_RATECONTROLMODE_VARIABLEBITRATE ((SLuint32) 0x00000002) + +#define SL_AUDIOCODEC_PCM ((SLuint32) 0x00000001) +#define SL_AUDIOCODEC_MP3 ((SLuint32) 0x00000002) +#define SL_AUDIOCODEC_AMR ((SLuint32) 0x00000003) +#define SL_AUDIOCODEC_AMRWB ((SLuint32) 0x00000004) +#define SL_AUDIOCODEC_AMRWBPLUS ((SLuint32) 0x00000005) +#define SL_AUDIOCODEC_AAC ((SLuint32) 0x00000006) +#define SL_AUDIOCODEC_WMA ((SLuint32) 0x00000007) +#define SL_AUDIOCODEC_REAL ((SLuint32) 0x00000008) +#define SL_AUDIOCODEC_VORBIS ((SLuint32) 0x00000009) + +#define SL_AUDIOPROFILE_PCM ((SLuint32) 0x00000001) + +#define SL_AUDIOPROFILE_MPEG1_L3 ((SLuint32) 0x00000001) +#define SL_AUDIOPROFILE_MPEG2_L3 ((SLuint32) 0x00000002) +#define SL_AUDIOPROFILE_MPEG25_L3 ((SLuint32) 0x00000003) + +#define SL_AUDIOCHANMODE_MP3_MONO ((SLuint32) 0x00000001) +#define SL_AUDIOCHANMODE_MP3_STEREO ((SLuint32) 0x00000002) +#define SL_AUDIOCHANMODE_MP3_JOINTSTEREO ((SLuint32) 0x00000003) +#define SL_AUDIOCHANMODE_MP3_DUAL ((SLuint32) 0x00000004) + +#define SL_AUDIOPROFILE_AMR ((SLuint32) 0x00000001) + +#define SL_AUDIOSTREAMFORMAT_CONFORMANCE ((SLuint32) 0x00000001) +#define SL_AUDIOSTREAMFORMAT_IF1 ((SLuint32) 0x00000002) +#define SL_AUDIOSTREAMFORMAT_IF2 ((SLuint32) 0x00000003) +#define SL_AUDIOSTREAMFORMAT_FSF ((SLuint32) 0x00000004) +#define SL_AUDIOSTREAMFORMAT_RTPPAYLOAD ((SLuint32) 0x00000005) +#define SL_AUDIOSTREAMFORMAT_ITU ((SLuint32) 0x00000006) + +#define SL_AUDIOPROFILE_AMRWB ((SLuint32) 0x00000001) + +#define SL_AUDIOPROFILE_AMRWBPLUS ((SLuint32) 0x00000001) + +#define SL_AUDIOPROFILE_AAC_AAC ((SLuint32) 0x00000001) + +#define SL_AUDIOMODE_AAC_MAIN ((SLuint32) 0x00000001) +#define SL_AUDIOMODE_AAC_LC ((SLuint32) 0x00000002) +#define SL_AUDIOMODE_AAC_SSR ((SLuint32) 0x00000003) +#define SL_AUDIOMODE_AAC_LTP ((SLuint32) 0x00000004) +#define SL_AUDIOMODE_AAC_HE ((SLuint32) 0x00000005) +#define SL_AUDIOMODE_AAC_SCALABLE ((SLuint32) 0x00000006) +#define SL_AUDIOMODE_AAC_ERLC ((SLuint32) 0x00000007) +#define SL_AUDIOMODE_AAC_LD ((SLuint32) 0x00000008) +#define SL_AUDIOMODE_AAC_HE_PS ((SLuint32) 0x00000009) +#define SL_AUDIOMODE_AAC_HE_MPS ((SLuint32) 0x0000000A) + +#define SL_AUDIOSTREAMFORMAT_MP2ADTS ((SLuint32) 0x00000001) +#define SL_AUDIOSTREAMFORMAT_MP4ADTS ((SLuint32) 0x00000002) +#define SL_AUDIOSTREAMFORMAT_MP4LOAS ((SLuint32) 0x00000003) +#define SL_AUDIOSTREAMFORMAT_MP4LATM ((SLuint32) 0x00000004) +#define SL_AUDIOSTREAMFORMAT_ADIF ((SLuint32) 0x00000005) +#define SL_AUDIOSTREAMFORMAT_MP4FF ((SLuint32) 0x00000006) +#define SL_AUDIOSTREAMFORMAT_RAW ((SLuint32) 0x00000007) + +#define SL_AUDIOPROFILE_WMA7 ((SLuint32) 0x00000001) +#define SL_AUDIOPROFILE_WMA8 ((SLuint32) 0x00000002) +#define SL_AUDIOPROFILE_WMA9 ((SLuint32) 0x00000003) +#define SL_AUDIOPROFILE_WMA10 ((SLuint32) 0x00000004) + +#define SL_AUDIOMODE_WMA_LEVEL1 ((SLuint32) 0x00000001) +#define SL_AUDIOMODE_WMA_LEVEL2 ((SLuint32) 0x00000002) +#define SL_AUDIOMODE_WMA_LEVEL3 ((SLuint32) 0x00000003) +#define SL_AUDIOMODE_WMA_LEVEL4 ((SLuint32) 0x00000004) +#define SL_AUDIOMODE_WMAPRO_LEVELM0 ((SLuint32) 0x00000005) +#define SL_AUDIOMODE_WMAPRO_LEVELM1 ((SLuint32) 0x00000006) +#define SL_AUDIOMODE_WMAPRO_LEVELM2 ((SLuint32) 0x00000007) +#define SL_AUDIOMODE_WMAPRO_LEVELM3 ((SLuint32) 0x00000008) + +#define SL_AUDIOPROFILE_REALAUDIO ((SLuint32) 0x00000001) + +#define SL_AUDIOMODE_REALAUDIO_G2 ((SLuint32) 0x00000001) +#define SL_AUDIOMODE_REALAUDIO_8 ((SLuint32) 0x00000002) +#define SL_AUDIOMODE_REALAUDIO_10 ((SLuint32) 0x00000003) +#define SL_AUDIOMODE_REALAUDIO_SURROUND ((SLuint32) 0x00000004) + +typedef struct SLAudioCodecDescriptor_ { + SLuint32 maxChannels; + SLuint32 minBitsPerSample; + SLuint32 maxBitsPerSample; + SLmilliHertz minSampleRate; + SLmilliHertz maxSampleRate; + SLboolean isFreqRangeContinuous; + SLmilliHertz *pSampleRatesSupported; + SLuint32 numSampleRatesSupported; + SLuint32 minBitRate; + SLuint32 maxBitRate; + SLboolean isBitrateRangeContinuous; + SLuint32 *pBitratesSupported; + SLuint32 numBitratesSupported; + SLuint32 profileSetting; + SLuint32 modeSetting; + SLuint32 streamFormat; +} SLAudioCodecDescriptor; + +SL_API extern const SLInterfaceID SL_IID_AUDIODECODERCAPABILITIES; + +struct SLAudioDecoderCapabilitiesItf_; +typedef const struct SLAudioDecoderCapabilitiesItf_ * const * SLAudioDecoderCapabilitiesItf; + +struct SLAudioDecoderCapabilitiesItf_ { + SLresult (*GetAudioDecoders) ( + SLAudioDecoderCapabilitiesItf self, + SLuint32 * pNumDecoders , + SLuint32 *pDecoderIds + ); + SLresult (*GetAudioDecoderCapabilities) ( + SLAudioDecoderCapabilitiesItf self, + SLuint32 decoderId, + SLuint32 *pIndex, + SLAudioCodecDescriptor *pDescriptor + ); +}; + + + + +/*---------------------------------------------------------------------------*/ +/* Audio Encoder Capabilities Interface */ +/* --------------------------------------------------------------------------*/ + +/* Structure used when setting audio encoding parameters */ + +typedef struct SLAudioEncoderSettings_ { + SLuint32 encoderId; + SLuint32 channelsIn; + SLuint32 channelsOut; + SLmilliHertz sampleRate; + SLuint32 bitRate; + SLuint32 bitsPerSample; + SLuint32 rateControl; + SLuint32 profileSetting; + SLuint32 levelSetting; + SLuint32 channelMode; + SLuint32 streamFormat; + SLuint32 encodeOptions; + SLuint32 blockAlignment; +} SLAudioEncoderSettings; + +SL_API extern const SLInterfaceID SL_IID_AUDIOENCODERCAPABILITIES; + +struct SLAudioEncoderCapabilitiesItf_; +typedef const struct SLAudioEncoderCapabilitiesItf_ * const * SLAudioEncoderCapabilitiesItf; + +struct SLAudioEncoderCapabilitiesItf_ { + SLresult (*GetAudioEncoders) ( + SLAudioEncoderCapabilitiesItf self, + SLuint32 *pNumEncoders , + SLuint32 *pEncoderIds + ); + SLresult (*GetAudioEncoderCapabilities) ( + SLAudioEncoderCapabilitiesItf self, + SLuint32 encoderId, + SLuint32 *pIndex, + SLAudioCodecDescriptor * pDescriptor + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Audio Encoder Interface */ +/* --------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_AUDIOENCODER; + +struct SLAudioEncoderItf_; +typedef const struct SLAudioEncoderItf_ * const * SLAudioEncoderItf; + +struct SLAudioEncoderItf_ { + SLresult (*SetEncoderSettings) ( + SLAudioEncoderItf self, + SLAudioEncoderSettings *pSettings + ); + SLresult (*GetEncoderSettings) ( + SLAudioEncoderItf self, + SLAudioEncoderSettings *pSettings + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Bass Boost Interface */ +/* --------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_BASSBOOST; + +struct SLBassBoostItf_; +typedef const struct SLBassBoostItf_ * const * SLBassBoostItf; + +struct SLBassBoostItf_ { + SLresult (*SetEnabled)( + SLBassBoostItf self, + SLboolean enabled + ); + SLresult (*IsEnabled)( + SLBassBoostItf self, + SLboolean *pEnabled + ); + SLresult (*SetStrength)( + SLBassBoostItf self, + SLpermille strength + ); + SLresult (*GetRoundedStrength)( + SLBassBoostItf self, + SLpermille *pStrength + ); + SLresult (*IsStrengthSupported)( + SLBassBoostItf self, + SLboolean *pSupported + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Pitch Interface */ +/* --------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_PITCH; + +struct SLPitchItf_; +typedef const struct SLPitchItf_ * const * SLPitchItf; + +struct SLPitchItf_ { + SLresult (*SetPitch) ( + SLPitchItf self, + SLpermille pitch + ); + SLresult (*GetPitch) ( + SLPitchItf self, + SLpermille *pPitch + ); + SLresult (*GetPitchCapabilities) ( + SLPitchItf self, + SLpermille *pMinPitch, + SLpermille *pMaxPitch + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Rate Pitch Interface */ +/* RatePitchItf is an interface for controlling the rate a sound is played */ +/* back. A change in rate will cause a change in pitch. */ +/* --------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_RATEPITCH; + +struct SLRatePitchItf_; +typedef const struct SLRatePitchItf_ * const * SLRatePitchItf; + +struct SLRatePitchItf_ { + SLresult (*SetRate) ( + SLRatePitchItf self, + SLpermille rate + ); + SLresult (*GetRate) ( + SLRatePitchItf self, + SLpermille *pRate + ); + SLresult (*GetRatePitchCapabilities) ( + SLRatePitchItf self, + SLpermille *pMinRate, + SLpermille *pMaxRate + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Virtualizer Interface */ +/* --------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_VIRTUALIZER; + +struct SLVirtualizerItf_; +typedef const struct SLVirtualizerItf_ * const * SLVirtualizerItf; + +struct SLVirtualizerItf_ { + SLresult (*SetEnabled)( + SLVirtualizerItf self, + SLboolean enabled + ); + SLresult (*IsEnabled)( + SLVirtualizerItf self, + SLboolean *pEnabled + ); + SLresult (*SetStrength)( + SLVirtualizerItf self, + SLpermille strength + ); + SLresult (*GetRoundedStrength)( + SLVirtualizerItf self, + SLpermille *pStrength + ); + SLresult (*IsStrengthSupported)( + SLVirtualizerItf self, + SLboolean *pSupported + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Visualization Interface */ +/* --------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_VISUALIZATION; + +struct SLVisualizationItf_; +typedef const struct SLVisualizationItf_ * const * SLVisualizationItf; + +typedef void (SLAPIENTRY *slVisualizationCallback) ( + void *pContext, + const SLuint8 waveform[], + const SLuint8 fft[], + SLmilliHertz samplerate +); + +struct SLVisualizationItf_{ + SLresult (*RegisterVisualizationCallback)( + SLVisualizationItf self, + slVisualizationCallback callback, + void *pContext, + SLmilliHertz rate + ); + SLresult (*GetMaxRate)( + SLVisualizationItf self, + SLmilliHertz* pRate + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Engine Interface */ +/* --------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_ENGINE; + +struct SLEngineItf_; +typedef const struct SLEngineItf_ * const * SLEngineItf; + + +struct SLEngineItf_ { + + SLresult (*CreateLEDDevice) ( + SLEngineItf self, + SLObjectItf * pDevice, + SLuint32 deviceID, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateVibraDevice) ( + SLEngineItf self, + SLObjectItf * pDevice, + SLuint32 deviceID, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateAudioPlayer) ( + SLEngineItf self, + SLObjectItf * pPlayer, + const SLDataSource *pAudioSrc, + const SLDataSink *pAudioSnk, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateAudioRecorder) ( + SLEngineItf self, + SLObjectItf * pRecorder, + const SLDataSource *pAudioSrc, + const SLDataSink *pAudioSnk, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateMidiPlayer) ( + SLEngineItf self, + SLObjectItf * pPlayer, + const SLDataSource *pMIDISrc, + const SLDataSource *pBankSrc, + const SLDataSink *pAudioOutput, + const SLDataSink *pVibra, + const SLDataSink *pLEDArray, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateListener) ( + SLEngineItf self, + SLObjectItf * pListener, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*Create3DGroup) ( + SLEngineItf self, + SLObjectItf * pGroup, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateOutputMix) ( + SLEngineItf self, + SLObjectItf * pMix, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateMetadataExtractor) ( + SLEngineItf self, + SLObjectItf * pMetadataExtractor, + const SLDataSource * pDataSource, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*CreateExtensionObject) ( + SLEngineItf self, + SLObjectItf * pObject, + void * pParameters, + SLuint32 objectID, + SLuint32 numInterfaces, + const SLInterfaceID * pInterfaceIds, + const SLboolean * pInterfaceRequired + ); + SLresult (*QueryNumSupportedInterfaces) ( + SLEngineItf self, + SLuint32 objectID, + SLuint32 * pNumSupportedInterfaces + ); + SLresult (*QuerySupportedInterfaces) ( + SLEngineItf self, + SLuint32 objectID, + SLuint32 index, + SLInterfaceID * pInterfaceId + ); + SLresult (*QueryNumSupportedExtensions) ( + SLEngineItf self, + SLuint32 * pNumExtensions + ); + SLresult (*QuerySupportedExtension) ( + SLEngineItf self, + SLuint32 index, + SLchar * pExtensionName, + SLuint16 * pNameLength + ); + SLresult (*IsExtensionSupported) ( + SLEngineItf self, + const SLchar * pExtensionName, + SLboolean * pSupported + ); +}; + + +/*---------------------------------------------------------------------------*/ +/* Engine Capabilities Interface */ +/* --------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_ENGINECAPABILITIES; + +struct SLEngineCapabilitiesItf_; +typedef const struct SLEngineCapabilitiesItf_ * const * SLEngineCapabilitiesItf; + +struct SLEngineCapabilitiesItf_ { + SLresult (*QuerySupportedProfiles) ( + SLEngineCapabilitiesItf self, + SLuint16 *pProfilesSupported + ); + SLresult (*QueryAvailableVoices) ( + SLEngineCapabilitiesItf self, + SLuint16 voiceType, + SLuint16 *pNumMaxVoices, + SLboolean *pIsAbsoluteMax, + SLuint16 *pNumFreeVoices + ); + SLresult (*QueryNumberOfMIDISynthesizers) ( + SLEngineCapabilitiesItf self, + SLuint16 *pNumMIDIsynthesizers + ); + SLresult (*QueryAPIVersion) ( + SLEngineCapabilitiesItf self, + SLuint16 *pMajor, + SLuint16 *pMinor, + SLuint16 *pStep + ); + SLresult (*QueryLEDCapabilities) ( + SLEngineCapabilitiesItf self, + SLuint32 *pIndex, + SLuint32 *pLEDDeviceID, + SLLEDDescriptor *pDescriptor + ); + SLresult (*QueryVibraCapabilities) ( + SLEngineCapabilitiesItf self, + SLuint32 *pIndex, + SLuint32 *pVibraDeviceID, + SLVibraDescriptor *pDescriptor + ); + SLresult (*IsThreadSafe) ( + SLEngineCapabilitiesItf self, + SLboolean *pIsThreadSafe + ); +}; + +/*---------------------------------------------------------------------------*/ +/* Thread Sync Interface */ +/* --------------------------------------------------------------------------*/ + + +SL_API extern const SLInterfaceID SL_IID_THREADSYNC; + +struct SLThreadSyncItf_; +typedef const struct SLThreadSyncItf_ * const * SLThreadSyncItf; + + +struct SLThreadSyncItf_ { + SLresult (*EnterCriticalSection) ( + SLThreadSyncItf self + ); + SLresult (*ExitCriticalSection) ( + SLThreadSyncItf self + ); +}; + + +/*****************************************************************************/ +/* SL engine constructor */ +/*****************************************************************************/ + +#define SL_ENGINEOPTION_THREADSAFE ((SLuint32) 0x00000001) +#define SL_ENGINEOPTION_LOSSOFCONTROL ((SLuint32) 0x00000002) +#define SL_ENGINEOPTION_MAJORVERSION ((SLuint32) 0x00000003) +#define SL_ENGINEOPTION_MINORVERSION ((SLuint32) 0x00000004) +#define SL_ENGINEOPTION_STEPVERSION ((SLuint32) 0x00000005) + + +typedef struct SLEngineOption_ { + SLuint32 feature; + SLuint32 data; +} SLEngineOption; + + +SL_API SLresult SLAPIENTRY slCreateEngine( + SLObjectItf *pEngine, + SLuint32 numOptions, + const SLEngineOption *pEngineOptions, + SLuint32 numInterfaces, + const SLInterfaceID *pInterfaceIds, + const SLboolean * pInterfaceRequired +); + +SL_API SLresult SLAPIENTRY slQueryNumSupportedEngineInterfaces( + SLuint32 * pNumSupportedInterfaces +); + +SL_API SLresult SLAPIENTRY slQuerySupportedEngineInterfaces( + SLuint32 index, + SLInterfaceID * pInterfaceId +); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENSL_ES_H_ */ diff --git a/third_party/openSLES/api/1.1/OpenSLES_Platform.h b/third_party/openSLES/api/1.1/OpenSLES_Platform.h new file mode 100644 index 0000000000000000000000000000000000000000..1a54e74da6a56722bee06d0169347acf8e405b8a --- /dev/null +++ b/third_party/openSLES/api/1.1/OpenSLES_Platform.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2007-2011 The Khronos Group Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and /or associated documentation files (the "Materials "), to + * deal in the Materials without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Materials, and to permit persons to whom the Materials are + * furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE 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 MATERIALS OR THE USE OR OTHER DEALINGS IN THE + * MATERIALS. + * + * OpenSLES_Platform.h - OpenSL ES version 1.1 + * + */ + +/****************************************************************************/ +/* NOTE: This file contains definitions for the base types and the */ +/* SLAPIENTRY macro. This file **WILL NEED TO BE EDITED** to provide */ +/* the correct definitions specific to the platform being used. */ +/****************************************************************************/ + +#ifndef _OPENSLES_PLATFORM_H_ +#define _OPENSLES_PLATFORM_H_ + +typedef char sl_char_t; +typedef unsigned char sl_uint8_t; +typedef signed char sl_int8_t; +typedef unsigned short sl_uint16_t; +typedef signed short sl_int16_t; +typedef unsigned long sl_uint32_t; +typedef signed long sl_int32_t; +typedef float sl_float32_t; +typedef double sl_float64_t; + +/****************************************************************************/ +/* NOTE: SL_BYTEORDER_NATIVEBIGENDIAN will cause SL_BYTEORDER_NATIVE to */ +/* mirror SL_BYTEORDER_BIGENDIAN, otherwise it will default to */ +/* SL_BYTEORDER_LITTLEENDIAN. */ +/****************************************************************************/ +//#define SL_BYTEORDER_NATIVEBIGENDIAN 1 + +/** SLAPIENTRY is a system-dependent API function prototype declaration macro. +* +* Example: +* #ifdef WIN32 +* # define SLAPIENTRY __stdcall +* #endif +*/ +#ifndef SLAPIENTRY +#define SLAPIENTRY /* override per-platform */ +#endif + +/** The SL_API is a platform-specific macro used +* to declare OPENSL ES function prototypes. It is modified to meet the +* requirements for a particular platform +* +* Example: +* #ifdef __SYMBIAN32__ +* # define SL_API __declspec(dllimport) +* #endif +*/ +#ifndef SL_API +#define SL_API /* override per-platform */ +#endif + +#endif /* _OPENSLES_PLATFORM_H_ */ diff --git a/third_party/openSLES/api/1.1/README.txt b/third_party/openSLES/api/1.1/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..cb1c1b9f43a18aa796ffeee773862a22da8df0fb --- /dev/null +++ b/third_party/openSLES/api/1.1/README.txt @@ -0,0 +1,5 @@ +When building applications using the OpenSL-ES API you should compile +and link the OpenSLES_IID.c file into your project. This file +contains unique interface IDs for all OpenSL-ES API interfaces. +These IDs have have been automatically generated. Application +developers should not edit these interface IDs. diff --git a/third_party/openSLES/openSLES.ndk.json b/third_party/openSLES/openSLES.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..89a966489c3ac88507e0d21aa3d39337806e2f88 --- /dev/null +++ b/third_party/openSLES/openSLES.ndk.json @@ -0,0 +1,50 @@ +[ + {"name":"SL_IID_NULL"}, + {"name":"SL_IID_OBJECT"}, + {"name":"SL_IID_AUDIOIODEVICECAPABILITIES"}, + {"name":"SL_IID_LED"}, + {"name":"SL_IID_VIBRA"}, + {"name":"SL_IID_METADATAEXTRACTION"}, + {"name":"SL_IID_METADATATRAVERSAL"}, + {"name":"SL_IID_DYNAMICSOURCE"}, + {"name":"SL_IID_OUTPUTMIX"}, + {"name":"SL_IID_PLAY"}, + {"name":"SL_IID_PREFETCHSTATUS"}, + {"name":"SL_IID_PLAYBACKRATE"}, + {"name":"SL_IID_SEEK"}, + {"name":"SL_IID_RECORD"}, + {"name":"SL_IID_EQUALIZER"}, + {"name":"SL_IID_VOLUME"}, + {"name":"SL_IID_DEVICEVOLUME"}, + {"name":"SL_IID_BUFFERQUEUE"}, + {"name":"SL_IID_OH_BUFFERQUEUE"}, + {"name":"SL_IID_PRESETREVERB"}, + {"name":"SL_IID_ENVIRONMENTALREVERB"}, + {"name":"SL_IID_EFFECTSEND"}, + {"name":"SL_IID_3DGROUPING"}, + {"name":"SL_IID_3DCOMMIT"}, + {"name":"SL_IID_3DLOCATION"}, + {"name":"SL_IID_3DDOPPLER"}, + {"name":"SL_IID_3DSOURCE"}, + {"name":"SL_IID_3DMACROSCOPIC"}, + {"name":"SL_IID_MUTESOLO"}, + {"name":"SL_IID_DYNAMICINTERFACEMANAGEMENT"}, + {"name":"SL_IID_MIDIMESSAGE"}, + {"name":"SL_IID_MIDIMUTESOLO"}, + {"name":"SL_IID_MIDITEMPO"}, + {"name":"SL_IID_MIDITIME"}, + {"name":"SL_IID_AUDIODECODERCAPABILITIES"}, + {"name":"SL_IID_AUDIOENCODERCAPABILITIES"}, + {"name":"SL_IID_AUDIOENCODER"}, + {"name":"SL_IID_BASSBOOST"}, + {"name":"SL_IID_PITCH"}, + {"name":"SL_IID_RATEPITCH"}, + {"name":"SL_IID_VIRTUALIZER"}, + {"name":"SL_IID_VISUALIZATION"}, + {"name":"SL_IID_ENGINE"}, + {"name":"SL_IID_ENGINECAPABILITIES"}, + {"name":"SL_IID_THREADSYNC"}, + {"name":"slCreateEngine"}, + {"name":"slQueryNumSupportedEngineInterfaces"}, + {"name":"slQuerySupportedEngineInterfaces"} +] diff --git a/third_party/zlib/BUILD.gn b/third_party/zlib/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..7396a6a12a7d3ef4f239309c0ccb673e09624c77 --- /dev/null +++ b/third_party/zlib/BUILD.gn @@ -0,0 +1,116 @@ +# Copyright (c) 2019-2022 Huawei Device Co., Ltd. All rights reserved. + +import("//build/ohos.gni") +import("//build/ohos/ndk/ndk.gni") + +config("zlib_config") { + cflags = [ + "-Wno-incompatible-pointer-types", + "-Werror", + "-Wno-strict-prototypes", + "-Wimplicit-function-declaration", + ] +} + +config("zlib_public_config") { + include_dirs = [ "." ] +} + +ohos_static_library("libz") { + sources = [ + "adler32.c", + "compress.c", + "contrib/minizip/ioapi.c", + "contrib/minizip/unzip.c", + "contrib/minizip/zip.c", + "crc32.c", + "crc32.h", + "deflate.c", + "deflate.h", + "gzclose.c", + "gzguts.h", + "gzlib.c", + "gzread.c", + "gzwrite.c", + "infback.c", + "inffast.c", + "inffast.h", + "inffixed.h", + "inflate.c", + "inflate.h", + "inftrees.c", + "inftrees.h", + "trees.c", + "trees.h", + "uncompr.c", + "zconf.h", + "zlib.h", + "zutil.c", + "zutil.h", + ] + configs = [ ":zlib_config" ] + public_configs = [ ":zlib_public_config" ] + + part_name = "zlib" + subsystem_name = "thirdparty" +} + +ohos_shared_library("shared_libz") { + sources = [ + "adler32.c", + "compress.c", + "contrib/minizip/ioapi.c", + "contrib/minizip/unzip.c", + "contrib/minizip/zip.c", + "crc32.c", + "crc32.h", + "deflate.c", + "deflate.h", + "gzclose.c", + "gzguts.h", + "gzlib.c", + "gzread.c", + "gzwrite.c", + "infback.c", + "inffast.c", + "inffast.h", + "inffixed.h", + "inflate.c", + "inflate.h", + "inftrees.c", + "inftrees.h", + "trees.c", + "trees.h", + "uncompr.c", + "zconf.h", + "zlib.h", + "zutil.c", + "zutil.h", + ] + configs = [ ":zlib_config" ] + public_configs = [ ":zlib_public_config" ] + + install_images = [ + "system", + "updater", + ] + + symlink_target_name = [ "libz.so" ] + + innerapi_tags = [ "platformsdk" ] + part_name = "zlib" + subsystem_name = "thirdparty" +} + +ohos_ndk_headers("zlib_header") { + sources = [ + "./zconf.h", + "./zlib.h", + ] +} + +ohos_ndk_library("libz_ndk") { + output_name = "z" + ndk_description_file = "./zlib.ndk.json" + output_extension = "so" +} diff --git a/third_party/zlib/LICENSE b/third_party/zlib/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..d145f262a0422dd1e91c6ed227441572bd9c5951 --- /dev/null +++ b/third_party/zlib/LICENSE @@ -0,0 +1,19 @@ +version 1.2.12, March 28th, 2022 + +Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. diff --git a/third_party/zlib/OAT.xml b/third_party/zlib/OAT.xml new file mode 100644 index 0000000000000000000000000000000000000000..1562ab9fceb09e041edd6ce9acef3a9ad3ca02e6 --- /dev/null +++ b/third_party/zlib/OAT.xml @@ -0,0 +1,96 @@ + + + + + + LICENSE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third_party/zlib/README b/third_party/zlib/README new file mode 100644 index 0000000000000000000000000000000000000000..cfd12df3eb1919fefdfc18844fca91ff3136b0bb --- /dev/null +++ b/third_party/zlib/README @@ -0,0 +1,118 @@ +ZLIB DATA COMPRESSION LIBRARY + +zlib 1.2.12 is a general purpose data compression library. All the code is +thread safe. The data format used by the zlib library is described by RFCs +(Request for Comments) 1950 to 1952 in the files +http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and +rfc1952 (gzip format). + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example +of the library is given in the file test/example.c which also tests that +the library is working correctly. Another example is given in the file +test/minigzip.c. The compression library itself is composed of all source +files in the root directory. + +To compile all files and run the test program, follow the instructions given at +the top of Makefile.in. In short "./configure; make test", and if that goes +well, "make install" should work for most flavors of Unix. For Windows, use +one of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use +make_vms.com. + +Questions about zlib should be sent to , or to Gilles Vollant + for the Windows DLL version. The zlib home page is +http://zlib.net/ . Before reporting a problem, please check this site to +verify that you have the latest version of zlib; otherwise get the latest +version and check whether the problem still exists or not. + +PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help. + +Mark Nelson wrote an article about zlib for the Jan. 1997 +issue of Dr. Dobb's Journal; a copy of the article is available at +http://marknelson.us/1997/01/01/zlib-engine/ . + +The changes made in version 1.2.12 are documented in the file ChangeLog. + +Unsupported third party contributions are provided in directory contrib/ . + +zlib is available in Java using the java.util.zip package, documented at +http://java.sun.com/developer/technicalArticles/Programming/compression/ . + +A Perl interface to zlib written by Paul Marquess is available +at CPAN (Comprehensive Perl Archive Network) sites, including +http://search.cpan.org/~pmqs/IO-Compress-Zlib/ . + +A Python interface to zlib written by A.M. Kuchling is +available in Python 1.5 and later versions, see +http://docs.python.org/library/zlib.html . + +zlib is built into tcl: http://wiki.tcl.tk/4610 . + +An experimental package to read and write files in .zip format, written on top +of zlib by Gilles Vollant , is available in the +contrib/minizip directory of zlib. + + +Notes for some targets: + +- For Windows DLL versions, please see win32/DLL_FAQ.txt + +- For 64-bit Irix, deflate.c must be compiled without any optimization. With + -O, one libpng test fails. The test works in 32 bit mode (with the -n32 + compiler flag). The compiler bug has been reported to SGI. + +- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works + when compiled with cc. + +- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is + necessary to get gzprintf working correctly. This is done by configure. + +- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with + other compilers. Use "make test" to check your compiler. + +- gzdopen is not supported on RISCOS or BEOS. + +- For PalmOs, see http://palmzlib.sourceforge.net/ + + +Acknowledgments: + + The deflate format used by zlib was defined by Phil Katz. The deflate and + zlib specifications were written by L. Peter Deutsch. Thanks to all the + people who reported problems and suggested various improvements in zlib; they + are too numerous to cite here. + +Copyright notice: + + (C) 1995-2022 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. We make all +contributions to and distributions of this project solely in our personal +capacity, and are not conveying any rights to any intellectual property of +any third parties. + +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. diff --git a/third_party/zlib/README.OpenSource b/third_party/zlib/README.OpenSource new file mode 100644 index 0000000000000000000000000000000000000000..a4e973c6cff0682674f8734faa930938b033815a --- /dev/null +++ b/third_party/zlib/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name" : "zlib", + "License" : "zlib/libpng License", + "License File" : "LICENSE", + "Version Number" : "v1.2.12", + "Owner" : "gongjunsong@huawei.com", + "Upstream URL" : "https://github.com/madler/zlib/archive/refs/tags/v1.2.12.tar.gz", + "Description" : "zlib 1.2.12 is a general purpose data compression library. All the code is thread safe. The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files" + } +] diff --git a/third_party/zlib/zconf.h b/third_party/zlib/zconf.h new file mode 100644 index 0000000000000000000000000000000000000000..5e1d68a004e9744cb35f9d5a2fe94fd4dbcb7f76 --- /dev/null +++ b/third_party/zlib/zconf.h @@ -0,0 +1,534 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols and init macros */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_bits z__tr_flush_bits +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define adler32_z z_adler32_z +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define crc32_z z_crc32_z +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateGetDictionary z_deflateGetDictionary +# define deflateInit z_deflateInit +# define deflateInit2 z_deflateInit2 +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePending z_deflatePending +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzfread z_gzfread +# define gzfwrite z_gzfwrite +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# ifdef _WIN32 +# define gzopen_w z_gzopen_w +# endif +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzvprintf z_gzvprintf +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit z_inflateBackInit +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCodesUsed z_inflateCodesUsed +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetDictionary z_inflateGetDictionary +# define inflateGetHeader z_inflateGetHeader +# define inflateInit z_inflateInit +# define inflateInit2 z_inflateInit2 +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateResetKeep z_inflateResetKeep +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflateValidate z_inflateValidate +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# define uncompress2 z_uncompress2 +# endif +# define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# endif +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +#ifdef Z_SOLO + typedef unsigned long z_size_t; +#else +# define z_longlong long long +# if defined(NO_SIZE_T) + typedef unsigned NO_SIZE_T z_size_t; +# elif defined(STDC) +# include + typedef size_t z_size_t; +# else + typedef unsigned long z_size_t; +# endif +# undef z_longlong +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus about 7 kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +#ifndef Z_ARG /* function prototypes for stdarg */ +# if defined(STDC) || defined(Z_HAVE_STDARG_H) +# define Z_ARG(args) args +# else +# define Z_ARG(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) +# include +# if (UINT_MAX == 0xffffffffUL) +# define Z_U4 unsigned +# elif (ULONG_MAX == 0xffffffffUL) +# define Z_U4 unsigned long +# elif (USHRT_MAX == 0xffffffffUL) +# define Z_U4 unsigned short +# endif +#endif + +#ifdef Z_U4 + typedef Z_U4 z_crc_t; +#else + typedef unsigned long z_crc_t; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + +#ifdef _WIN32 +# ifndef Z_SOLO +# include /* for wchar_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H) +# define Z_HAVE_UNISTD_H +#endif +#ifndef Z_SOLO +# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +# endif +#endif + +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 +# define Z_LFS64 +#endif + +#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) +# define Z_LARGE64 +#endif + +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) +# define Z_WANT64 +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if !defined(_WIN32) && defined(Z_LARGE64) +# define z_off64_t off64_t +#else +# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/third_party/zlib/zlib.h b/third_party/zlib/zlib.h new file mode 100644 index 0000000000000000000000000000000000000000..4a98e38bf34c82def9f9bf77ced2a618899f8d11 --- /dev/null +++ b/third_party/zlib/zlib.h @@ -0,0 +1,1935 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.12, March 11th, 2022 + + Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 + (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.2.12" +#define ZLIB_VERNUM 0x12c0 +#define ZLIB_VER_MAJOR 1 +#define ZLIB_VER_MINOR 2 +#define ZLIB_VER_REVISION 12 +#define ZLIB_VER_SUBREVISION 0 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed data. + This version of the library supports only one compression method (deflation) + but other algorithms will be added later and will have the same stream + interface. + + Compression can be done in a single step if the buffers are large enough, + or can be done by repeated calls of the compression function. In the latter + case, the application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip and raw deflate streams in + memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never crash + even in the case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + z_const Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total number of input bytes read so far */ + + Bytef *next_out; /* next output byte will go here */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total number of bytes output so far */ + + z_const char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text + for deflate, or the decoding state for inflate */ + uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has dropped + to zero. It must update next_out and avail_out when avail_out has dropped + to zero. The application must initialize zalloc, zfree and opaque before + calling the init function. All other fields are set by the compression + library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. In that case, zlib is thread-safe. When zalloc and zfree are + Z_NULL on entry to the initialization function, they are set to internal + routines that use the standard library functions malloc() and free(). + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this if + the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers + returned by zalloc for objects of exactly 65536 bytes *must* have their + offset normalized to zero. The default allocation function provided by this + library ensures this (see zutil.c). To reduce memory requirements and avoid + any allocation of 64K objects, at the expense of compression ratio, compile + the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or progress + reports. After compression, total_in holds the total size of the + uncompressed data and may be saved for use by the decompressor (particularly + if the decompressor wants to decompress everything in a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +#define Z_TREES 6 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field for deflate() */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is not + compatible with the zlib.h header file used by the application. This check + is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. If + zalloc and zfree are set to Z_NULL, deflateInit updates them to use default + allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at all + (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION + requests a default compromise between speed and compression (currently + equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if level is not a valid compression level, or + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). msg is set to null + if there is no error message. deflateInit does not perform any compression: + this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Generate more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary. Some output may be provided even if + flush is zero. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating avail_in or avail_out accordingly; avail_out should + never be zero before the call. The application can consume the compressed + output when it wants, for example when the output buffer is full (avail_out + == 0), or after each call of deflate(). If deflate returns Z_OK and with + zero avail_out, it must be called again after making room in the output + buffer because there might be more output pending. See deflatePending(), + which can be used if desired to determine whether or not there is more ouput + in that case. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumulate before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In + particular avail_in is zero after the call if enough output space has been + provided before the call.) Flushing may degrade compression for some + compression algorithms and so it should be used only when necessary. This + completes the current deflate block and follows it with an empty stored block + that is three bits plus filler bits to the next byte, followed by four bytes + (00 00 ff ff). + + If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the + output buffer, but the output is not aligned to a byte boundary. All of the + input data so far will be available to the decompressor, as for Z_SYNC_FLUSH. + This completes the current deflate block and follows it with an empty fixed + codes block that is 10 bits long. This assures that enough bytes are output + in order for the decompressor to finish the block before the empty fixed + codes block. + + If flush is set to Z_BLOCK, a deflate block is completed and emitted, as + for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to + seven bits of the current block are held to be written as the next byte after + the next deflate block is completed. In this case, the decompressor may not + be provided enough bits at this point in order to complete decompression of + the data provided so far to the compressor. It may need to wait for the next + block to be emitted. This is for advanced applications that need to control + the emission of deflate blocks. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six to avoid repeated flush markers due to + avail_out == 0 on return. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there was + enough output space. If deflate returns with Z_OK or Z_BUF_ERROR, this + function must be called again with Z_FINISH and more output space (updated + avail_out) but no more input data, until it returns with Z_STREAM_END or an + error. After deflate has returned Z_STREAM_END, the only possible operations + on the stream are deflateReset or deflateEnd. + + Z_FINISH can be used in the first deflate call after deflateInit if all the + compression is to be done in a single step. In order to complete in one + call, avail_out must be at least the value returned by deflateBound (see + below). Then deflate is guaranteed to return Z_STREAM_END. If not enough + output space is provided, deflate will not return Z_STREAM_END, and it must + be called again as described above. + + deflate() sets strm->adler to the Adler-32 checksum of all input read + so far (that is, total_in bytes). If a gzip stream is being generated, then + strm->adler will be the CRC-32 checksum of the input read so far. (See + deflateInit2 below.) + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). If in doubt, the data is + considered binary. This field is only for information purposes and does not + affect the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was Z_NULL or the state was inadvertently written over + by the application), or Z_BUF_ERROR if no progress is possible (for example + avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and + deflate() can be called again with more input and more output space to + continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, msg + may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. In the current version of inflate, the provided input is not + read or consumed. The allocation of a sliding window will be deferred to + the first call of inflate (if the decompression does not complete on the + first call). If zalloc and zfree are set to Z_NULL, inflateInit updates + them to use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit does not perform any decompression. + Actual decompression will be done by inflate(). So next_in, and avail_in, + next_out, and avail_out are unused and unchanged. The current + implementation of inflateInit() does not process any header information -- + that is deferred until inflate() is called. +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), then next_in and avail_in are updated + accordingly, and processing will resume at this point for the next call of + inflate(). + + - Generate more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there is + no more input data or no more space in the output buffer (see below about + the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating the next_* and avail_* values accordingly. If the + caller of inflate() does not provide both available input and available + output space, it is possible that there will be no progress made. The + application can consume the uncompressed output when it wants, for example + when the output buffer is full (avail_out == 0), or after each call of + inflate(). If inflate returns Z_OK and with zero avail_out, it must be + called again after making room in the output buffer because there might be + more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH, + Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() + stop if and when it gets to the next deflate block boundary. When decoding + the zlib or gzip format, this will cause inflate() to return immediately + after the header and before the first block. When doing a raw inflate, + inflate() will go ahead and process the first block, and will return when it + gets to the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + To assist in this, on return inflate() always sets strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 if + inflate() is currently decoding the last block in the deflate stream, plus + 128 if inflate() returned immediately after decoding an end-of-block code or + decoding the complete header up to just before the first byte of the deflate + stream. The end-of-block will not be indicated until all of the uncompressed + data from that block has been written to strm->next_out. The number of + unused bits may in general be greater than seven, except when bit 7 of + data_type is set, in which case the number of unused bits will be less than + eight. data_type is set as noted here every time inflate() returns for all + flush options, and so can be used to determine the amount of currently + consumed input in bits. + + The Z_TREES option behaves as Z_BLOCK does, but it also returns when the + end of each deflate block header is reached, before any actual data in that + block is decoded. This allows the caller to determine the length of the + deflate block header for later use in random access within a deflate block. + 256 is added to the value of strm->data_type when inflate() returns + immediately after reaching the end of the deflate block header. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step (a + single call of inflate), the parameter flush should be set to Z_FINISH. In + this case all pending input is processed and all pending output is flushed; + avail_out must be large enough to hold all of the uncompressed data for the + operation to complete. (The size of the uncompressed data may have been + saved by the compressor for this purpose.) The use of Z_FINISH is not + required to perform an inflation in one step. However it may be used to + inform inflate that a faster approach can be used for the single inflate() + call. Z_FINISH also informs inflate to not maintain a sliding window if the + stream completes, which reduces inflate's memory footprint. If the stream + does not complete, either because not all of the stream is provided or not + enough output space is provided, then a sliding window will be allocated and + inflate() can be called again to continue the operation as if Z_NO_FLUSH had + been used. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the effects of the flush parameter in this implementation are + on the return value of inflate() as noted below, when inflate() returns early + when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of + memory for a sliding window when Z_FINISH is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the Adler-32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the Adler-32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed Adler-32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() can decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically, if requested when + initializing with inflateInit2(). Any information contained in the gzip + header is not retained unless inflateGetHeader() is used. When processing + gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output + produced so far. The CRC-32 is checked against the gzip trailer, as is the + uncompressed length, modulo 2^32. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value, in which case strm->msg points to a string with a more specific + error), Z_STREAM_ERROR if the stream structure was inconsistent (for example + next_in or next_out was Z_NULL, or the state was inadvertently written over + by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR + if no progress was possible or if there was not enough room in the output + buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may + then call inflateSync() to look for a good compression block if a partial + recovery of the data is to be attempted. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state + was inconsistent. +*/ + + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields zalloc, zfree and opaque must be initialized before by the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + For the current implementation of deflate(), a windowBits value of 8 (a + window size of 256 bytes) is not supported. As a result, a request for 8 + will result in 9 (a 512-byte window). In that case, providing 8 to + inflateInit2() will result in an error when the zlib header with 9 is + checked against the initialization of inflate(). The remedy is to not use 8 + with deflateInit2() with this initialization, or at least in that case use 9 + with inflateInit2(). + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute a check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), no + header crc, and the operating system will be set to the appropriate value, + if the operating system was determined at compile time. If a gzip stream is + being written, strm->adler is a CRC-32 instead of an Adler-32. + + For raw deflate or gzip encoding, a request for a 256-byte window is + rejected as invalid, since only the zlib header provides a means of + transmitting the window size to the decompressor. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but is + slow and reduces compression ratio; memLevel=9 uses maximum memory for + optimal speed. The default value is 8. See zconf.h for total memory usage + as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as + fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The + strategy parameter only affects the compression ratio but not the + correctness of the compressed output even if it is not set appropriately. + Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler + decoder for special applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid + method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is + incompatible with the version assumed by the caller (ZLIB_VERSION). msg is + set to null if there is no error message. deflateInit2 does not perform any + compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. When using the zlib format, this + function must be called immediately after deflateInit, deflateInit2 or + deflateReset, and before any call of deflate. When doing raw deflate, this + function must be called either before any call of deflate, or immediately + after the completion of a deflate block, i.e. after all input has been + consumed and all output has been delivered when using any of the flush + options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The + compressor and decompressor must use exactly the same dictionary (see + inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size + provided in deflateInit or deflateInit2. Thus the strings most likely to be + useful should be put at the end of the dictionary, not at the front. In + addition, the current implementation of deflate will use at most the window + size minus 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the Adler-32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The Adler-32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + Adler-32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if not at a block boundary for raw deflate). deflateSetDictionary does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm, + Bytef *dictionary, + uInt *dictLength)); +/* + Returns the sliding dictionary being maintained by deflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If deflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similary, if dictLength is Z_NULL, then it is not set. + + deflateGetDictionary() may return a length less than the window size, even + when more than the window size in input has been provided. It may return up + to 258 bytes less in that case, due to how zlib's implementation of deflate + manages the sliding window and lookahead for matches, where matches can be + up to 258 bytes long. If the application needs the last window-size bytes of + input, then that would need to be saved by the application outside of zlib. + + deflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and can + consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, but + does not free and reallocate the internal compression state. The stream + will leave the compression level and any other attributes that may have been + set unchanged. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2(). This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different strategy. + If the compression approach (which is a function of the level) or the + strategy is changed, and if there have been any deflate() calls since the + state was initialized or reset, then the input available so far is + compressed with the old level and strategy using deflate(strm, Z_BLOCK). + There are three approaches for the compression levels 0, 1..3, and 4..9 + respectively. The new level and strategy will take effect at the next call + of deflate(). + + If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does + not have enough output space to complete, then the parameter change will not + take effect. In this case, deflateParams() can be called again with the + same parameters and more output space to try again. + + In order to assure a change in the parameters on the first try, the + deflate stream should be flushed using deflate() with Z_BLOCK or other flush + request until strm.avail_out is not zero, before calling deflateParams(). + Then no more input data should be provided before the deflateParams() call. + If this is done, the old level and strategy will be applied to the data + compressed before deflateParams(), and the new level and strategy will be + applied to the the data compressed after deflateParams(). + + deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream + state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if + there was not enough output space to complete the compression of the + available input data before a change in the strategy or approach. Note that + in the case of a Z_BUF_ERROR, the parameters are not changed. A return + value of Z_BUF_ERROR is not fatal, in which case deflateParams() can be + retried with more output space. +*/ + +ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain)); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + uLong sourceLen)); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() or + deflateInit2(), and after deflateSetHeader(), if used. This would be used + to allocate an output buffer for deflation in a single pass, and so would be + called before deflate(). If that first deflate() call is provided the + sourceLen input bytes, an output buffer allocated to the size returned by + deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed + to return Z_STREAM_END. Note that it is possible for the compressed size to + be larger than the value returned by deflateBound() if flush options other + than Z_FINISH or Z_NO_FLUSH are used. +*/ + +ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm, + unsigned *pending, + int *bits)); +/* + deflatePending() returns the number of bytes and bits of output that have + been generated, but not yet provided in the available output. The bytes not + provided would be due to the available output space having being consumed. + The number of bits of output not provided are between 0 and 7, where they + await more bits to join them in order to fill out a full byte. If pending + or bits are Z_NULL, then those values are not set. + + deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. + */ + +ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the bits + leftover from a previous deflate stream when appending to it. As such, this + function can only be used for raw deflate, and must be used before the first + deflate() call after a deflateInit2() or deflateReset(). bits must be less + than or equal to 16, and that many of the least significant bits of value + will be inserted in the output. + + deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough + room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, + gz_headerp head)); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to 255, with no extra, name, or comment + fields. The gzip header is returned to the default state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be zero to request that inflate use the window size in + the zlib header of the compressed stream. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an Adler-32 or a CRC-32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a + CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see + below), inflate() will *not* automatically decode concatenated gzip members. + inflate() will return Z_STREAM_END at the end of the gzip member. The state + would need to be reset to continue decoding a subsequent gzip member. This + *must* be done if there is more data after a gzip member, in order for the + decompression to be compliant with the gzip standard (RFC 1952). + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit2 does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit2() does not process any header information -- that is + deferred until inflate() is called. +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the Adler-32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called at any + time to set the dictionary. If the provided dictionary is smaller than the + window and there is already data in the window, then the provided dictionary + will amend what's there. The application must insure that the dictionary + that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect Adler-32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm, + Bytef *dictionary, + uInt *dictLength)); +/* + Returns the sliding dictionary being maintained by inflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If inflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similary, if dictLength is Z_NULL, then it is not set. + + inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a possible full flush point (see above + for the description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync searches for a 00 00 FF FF pattern in the compressed data. + All full flush points have this pattern, but not all occurrences of this + pattern are full flush points. + + inflateSync returns Z_OK if a possible full flush point has been found, + Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point + has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. + In the success case, the application may save the current current value of + total_in which indicates where valid compressed data was found. In the + error case, the application may repeatedly call inflateSync, providing more + input each time, until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate the internal decompression state. The + stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, + int windowBits)); +/* + This function is the same as inflateReset, but it also permits changing + the wrap and window size requests. The windowBits parameter is interpreted + the same as it is for inflateInit2. If the window size is changed, then the + memory allocated for the window is freed, and the window will be reallocated + by inflate() if needed. + + inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL), or if + the windowBits parameter is invalid. +*/ + +ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + If bits is negative, then the input stream bit buffer is emptied. Then + inflatePrime() can be called again to put bits in the buffer. This is used + to clear out bits leftover after feeding inflate a block description prior + to feeding inflate codes. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); +/* + This function returns two values, one in the lower 16 bits of the return + value, and the other in the remaining upper bits, obtained by shifting the + return value down 16 bits. If the upper value is -1 and the lower value is + zero, then inflate() is currently decoding information outside of a block. + If the upper value is -1 and the lower value is non-zero, then inflate is in + the middle of a stored block, with the lower value equaling the number of + bytes from the input remaining to copy. If the upper value is not -1, then + it is the number of bits back from the current bit position in the input of + the code (literal or length/distance pair) currently being processed. In + that case the lower value is the number of bytes already emitted for that + code. + + A code is being processed if inflate is waiting for more input to complete + decoding of the code, or if it has completed decoding but is waiting for + more output space to write the literal or match data. + + inflateMark() is used to mark locations in the input data for random + access, which may be at bit positions, and to note those cases where the + output of a code may span boundaries of random access blocks. The current + location in the input stream can be determined from avail_in and data_type + as noted in the description for the Z_BLOCK flush parameter for inflate. + + inflateMark returns the value noted above, or -65536 if the provided + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, + gz_headerp head)); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be + used to force inflate() to return immediately after header processing is + complete and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When any + of extra, name, or comment are not Z_NULL and the respective field is not + present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, + unsigned char FAR *window)); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the parameters are invalid, Z_MEM_ERROR if the internal state could not be + allocated, or Z_VERSION_ERROR if the version of the library does not match + the version of the header file. +*/ + +typedef unsigned (*in_func) OF((void FAR *, + z_const unsigned char FAR * FAR *)); +typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); + +ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is potentially more efficient than + inflate() for file i/o applications, in that it avoids copying between the + output and the sliding window by simply making the window itself the output + buffer. inflate() can be faster on modern CPUs when used with large + buffers. inflateBack() trusts the application to not change the output + buffer passed by the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free the + allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects only + the raw deflate stream to decompress. This is different from the default + behavior of inflate(), which expects a zlib header and trailer around the + deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero -- buf is ignored in that + case -- and inflateBack() will return a buffer error. inflateBack() will + call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. + out() should return zero on success, or non-zero on failure. If out() + returns non-zero, inflateBack() will return with an error. Neither in() nor + out() are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format error + in the deflate stream (in which case strm->msg is set to indicate the nature + of the error), or Z_STREAM_ERROR if the stream was not properly initialized. + In the case of Z_BUF_ERROR, an input or output error can be distinguished + using strm->next_in which will be Z_NULL only if in() returned an error. If + strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning + non-zero. (in() will always be called before out(), so strm->next_in is + assured to be defined if out() returns non-zero.) Note that inflateBack() + cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: ZLIB_DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + +#ifndef Z_SOLO + + /* utility functions */ + +/* + The following utility functions are implemented on top of the basic + stream-oriented functions. To simplify the interface, some default options + are assumed (compression level and memory usage, standard memory allocation + functions). The source code of these utility functions can be modified if + you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed data. compress() is equivalent to compress2() with a level + parameter of Z_DEFAULT_COMPRESSION. + + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed data. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before a + compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be large enough to hold the entire + uncompressed data. (The size of the uncompressed data must have been saved + previously by the compressor and transmitted to the decompressor by some + mechanism outside the scope of this compression library.) Upon exit, destLen + is the actual size of the uncompressed data. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In + the case where there is not enough room, uncompress() will fill the output + buffer with the uncompressed data up to that point. +*/ + +ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong *sourceLen)); +/* + Same as uncompress, except that sourceLen is a pointer, where the + length of the source is *sourceLen. On return, *sourceLen is the number of + source bytes consumed. +*/ + + /* gzip file access functions */ + +/* + This library supports reading and writing files in gzip (.gz) format with + an interface similar to that of stdio, using the functions that start with + "gz". The gzip format is different from the zlib format. gzip is a gzip + wrapper, documented in RFC 1952, wrapped around a deflate stream. +*/ + +typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ + +/* +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); + + Open the gzip (.gz) file at path for reading and decompressing, or + compressing and writing. The mode parameter is as in fopen ("rb" or "wb") + but can also include a compression level ("wb9") or a strategy: 'f' for + filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h", + 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression + as in "wb9F". (See the description of deflateInit2 for more information + about the strategy parameter.) 'T' will request transparent writing or + appending with no compression and not using the gzip format. + + "a" can be used instead of "w" to request that the gzip stream that will + be written be appended to the file. "+" will result in an error, since + reading and writing to the same gzip file is not supported. The addition of + "x" when writing will create the file exclusively, which fails if the file + already exists. On systems that support it, the addition of "e" when + reading or writing will set the flag to close the file on an execve() call. + + These functions, as well as gzip, will read and decode a sequence of gzip + streams in a file. The append function of gzopen() can be used to create + such a file. (Also see gzflush() for another way to do this.) When + appending, gzopen does not test whether the file begins with a gzip stream, + nor does it look for the end of the gzip streams to begin appending. gzopen + will simply append a gzip stream to the existing file. + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. When + reading, this will be detected automatically by looking for the magic two- + byte gzip header. + + gzopen returns NULL if the file could not be opened, if there was + insufficient memory to allocate the gzFile state, or if an invalid mode was + specified (an 'r', 'w', or 'a' was not provided, or '+' was provided). + errno can be checked to determine if the reason gzopen failed was that the + file could not be opened. +*/ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + Associate a gzFile with the file descriptor fd. File descriptors are + obtained from calls like open, dup, creat, pipe or fileno (if the file has + been previously opened with fopen). The mode parameter is as in gzopen. + + The next call of gzclose on the returned gzFile will also close the file + descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor + fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, + mode);. The duplicated descriptor should be saved to avoid a leak, since + gzdopen does not close fd if it fails. If you are using fileno() to get the + file descriptor from a FILE *, then you will have to use dup() to avoid + double-close()ing the file descriptor. Both gzclose() and fclose() will + close the associated file descriptor, so they need to have different file + descriptors. + + gzdopen returns NULL if there was insufficient memory to allocate the + gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not + provided, or '+' was provided), or if fd is -1. The file descriptor is not + used until the next gz* read, write, seek, or close operation, so gzdopen + will not detect if fd is invalid (unless fd is -1). +*/ + +ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); +/* + Set the internal buffer size used by this library's functions for file to + size. The default buffer size is 8192 bytes. This function must be called + after gzopen() or gzdopen(), and before any other calls that read or write + the file. The buffer memory allocation is always deferred to the first read + or write. Three times that size in buffer space is allocated. A larger + buffer size of, for example, 64K or 128K bytes will noticeably increase the + speed of decompression (reading). + + The new buffer size also affects the maximum length for gzprintf(). + + gzbuffer() returns 0 on success, or -1 on failure, such as being called + too late. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level and strategy for file. See the + description of deflateInit2 for the meaning of these parameters. Previously + provided data is flushed before applying the parameter changes. + + gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not + opened for writing, Z_ERRNO if there is an error writing the flushed data, + or Z_MEM_ERROR if there is a memory allocation error. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Read and decompress up to len uncompressed bytes from file into buf. If + the input file is not in gzip format, gzread copies the given number of + bytes into the buffer directly from the file. + + After reaching the end of a gzip stream in the input, gzread will continue + to read, looking for another gzip stream. Any number of gzip streams may be + concatenated in the input file, and will all be decompressed by gzread(). + If something other than a gzip stream is encountered after a gzip stream, + that remaining trailing garbage is ignored (and no error is returned). + + gzread can be used to read a gzip file that is being concurrently written. + Upon reaching the end of the input, gzread will return with the available + data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then + gzclearerr can be used to clear the end of file indicator in order to permit + gzread to be tried again. Z_OK indicates that a gzip stream was completed + on the last gzread. Z_BUF_ERROR indicates that the input file ended in the + middle of a gzip stream. Note that gzread does not return -1 in the event + of an incomplete gzip stream. This error is deferred until gzclose(), which + will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip + stream. Alternatively, gzerror can be used before gzclose to detect this + case. + + gzread returns the number of uncompressed bytes actually read, less than + len for end of file, or -1 for error. If len is too large to fit in an int, + then nothing is read, -1 is returned, and the error state is set to + Z_STREAM_ERROR. +*/ + +ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, + gzFile file)); +/* + Read and decompress up to nitems items of size size from file into buf, + otherwise operating as gzread() does. This duplicates the interface of + stdio's fread(), with size_t request and return types. If the library + defines size_t, then z_size_t is identical to size_t. If not, then z_size_t + is an unsigned integer type that can contain a pointer. + + gzfread() returns the number of full items read of size size, or zero if + the end of the file was reached and a full item could not be read, or if + there was an error. gzerror() must be consulted if zero is returned in + order to determine if there was an error. If the multiplication of size and + nitems overflows, i.e. the product does not fit in a z_size_t, then nothing + is read, zero is returned, and the error state is set to Z_STREAM_ERROR. + + In the event that the end of file is reached and only a partial item is + available at the end, i.e. the remaining uncompressed data length is not a + multiple of size, then the final partial item is nevetheless read into buf + and the end-of-file flag is set. The length of the partial item read is not + provided, but could be inferred from the result of gztell(). This behavior + is the same as the behavior of fread() implementations in common libraries, + but it prevents the direct use of gzfread() to read a concurrently written + file, reseting and retrying on end-of-file, when size is not 1. +*/ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len)); +/* + Compress and write the len uncompressed bytes at buf to file. gzwrite + returns the number of uncompressed bytes written or 0 in case of error. +*/ + +ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, + z_size_t nitems, gzFile file)); +/* + Compress and write nitems items of size size from buf to file, duplicating + the interface of stdio's fwrite(), with size_t request and return types. If + the library defines size_t, then z_size_t is identical to size_t. If not, + then z_size_t is an unsigned integer type that can contain a pointer. + + gzfwrite() returns the number of full items written of size size, or zero + if there was an error. If the multiplication of size and nitems overflows, + i.e. the product does not fit in a z_size_t, then nothing is written, zero + is returned, and the error state is set to Z_STREAM_ERROR. +*/ + +ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); +/* + Convert, format, compress, and write the arguments (...) to file under + control of the string format, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written, or a negative zlib error code in case + of error. The number of uncompressed bytes written is limited to 8191, or + one less than the buffer size given to gzbuffer(). The caller should assure + that this limit is not exceeded. If it is exceeded, then gzprintf() will + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf(), + because the secure snprintf() or vsnprintf() functions were not available. + This can be determined using zlibCompileFlags(). +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Compress and write the given null-terminated string s to file, excluding + the terminating null character. + + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Read and decompress bytes from file into buf, until len-1 characters are + read, or until a newline character is read and transferred to buf, or an + end-of-file condition is encountered. If any characters are read or if len + is one, the string is terminated with a null character. If no characters + are read due to an end-of-file or len is less than one, then the buffer is + left untouched. + + gzgets returns buf which is a null-terminated string, or it returns NULL + for end-of-file or in case of error. If there was an error, the contents at + buf are indeterminate. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Compress and write c, converted to an unsigned char, into file. gzputc + returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Read and decompress one byte from file. gzgetc returns this byte or -1 + in case of end of file or error. This is implemented as a macro for speed. + As such, it does not do all of the checking the other functions do. I.e. + it does not check to see if file is NULL, nor whether the structure file + points to has been clobbered or not. +*/ + +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +/* + Push c back onto the stream for file to be read as the first character on + the next read. At least one character of push-back is always allowed. + gzungetc() returns the character pushed, or -1 on failure. gzungetc() will + fail if c is -1, and may fail if a character has been pushed but not read + yet. If gzungetc is used immediately after gzopen or gzdopen, at least the + output buffer size of pushed characters is allowed. (See gzbuffer above.) + The pushed character will be discarded if the stream is repositioned with + gzseek() or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flush all pending output to file. The parameter flush is as in the + deflate() function. The return value is the zlib error number (see function + gzerror below). gzflush is only permitted when writing. + + If the flush parameter is Z_FINISH, the remaining data is written and the + gzip stream is completed in the output. If gzwrite() is called again, a new + gzip stream will be started in the output. gzread() is able to read such + concatenated gzip streams. + + gzflush should be called only when strictly necessary because it will + degrade compression if called too often. +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); + + Set the starting position to offset relative to whence for the next gzread + or gzwrite on file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewind file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET). +*/ + +/* +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); + + Return the starting position for the next gzread or gzwrite on file. + This position represents a number of bytes in the uncompressed data stream, + and is zero when starting, even if appending or reading a gzip stream from + the middle of a file using gzdopen(). + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); + + Return the current compressed (actual) read or write offset of file. This + offset includes the count of bytes that precede the gzip stream, for example + when appending or when using gzdopen() for reading. When reading, the + offset does not include as yet unused buffered input. This information can + be used for a progress indicator. On error, gzoffset() returns -1. +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Return true (1) if the end-of-file indicator for file has been set while + reading, false (0) otherwise. Note that the end-of-file indicator is set + only if the read tried to go past the end of the input, but came up short. + Therefore, just like feof(), gzeof() may return false even if there is no + more data to read, in the event that the last read request was for the exact + number of bytes remaining in the input file. This will happen if the input + file size is an exact multiple of the buffer size. + + If gzeof() returns true, then the read functions will return no more data, + unless the end-of-file indicator is reset by gzclearerr() and the input file + has grown since the previous end of file was detected. +*/ + +ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +/* + Return true (1) if file is being copied directly while reading, or false + (0) if file is a gzip stream being decompressed. + + If the input file is empty, gzdirect() will return true, since the input + does not contain a gzip stream. + + If gzdirect() is used immediately after gzopen() or gzdopen() it will + cause buffers to be allocated to allow reading the file to determine if it + is a gzip file. Therefore if gzbuffer() is used, it should be called before + gzdirect(). + + When writing, gzdirect() returns true (1) if transparent writing was + requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note: + gzdirect() is not needed when writing. Transparent writing must be + explicitly requested, so the application already knows the answer. When + linking statically, using gzdirect() will include all of the zlib code for + gzip file reading and decompression, which may not be desired.) +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flush all pending output for file, if necessary, close file and + deallocate the (de)compression state. Note that once file is closed, you + cannot call gzerror with file, since its structures have been deallocated. + gzclose must not be called more than once on the same file, just as free + must not be called more than once on the same allocation. + + gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a + file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the + last read ended in the middle of a gzip stream, or Z_OK on success. +*/ + +ZEXTERN int ZEXPORT gzclose_r OF((gzFile file)); +ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); +/* + Same as gzclose(), but gzclose_r() is only for use when reading, and + gzclose_w() is only for use when writing or appending. The advantage to + using these instead of gzclose() is that they avoid linking in zlib + compression or decompression code that is not used when only reading or only + writing respectively. If gzclose() is used, then both compression and + decompression code will be included the application when linking to a static + zlib library. +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Return the error message for the last error which occurred on file. + errnum is set to zlib error number. If an error occurred in the file system + and not in the compression library, errnum is set to Z_ERRNO and the + application may consult errno to get the exact error code. + + The application must not modify the returned string. Future calls to + this function may invalidate the previously returned string. If file is + closed, then the string previously returned by gzerror will no longer be + available. + + gzerror() should be used to distinguish errors from end-of-file for those + functions above that do not distinguish those cases in their return values. +*/ + +ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +/* + Clear the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + +#endif /* !Z_SOLO */ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the compression + library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. An Adler-32 value is in the range of a 32-bit + unsigned integer. If buf is Z_NULL, this function returns the required + initial value for the checksum. + + An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed + much faster. + + Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT adler32_z OF((uLong adler, const Bytef *buf, + z_size_t len)); +/* + Same as adler32(), but with a size_t length. +*/ + +/* +ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, + z_off_t len2)); + + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note + that the z_off_t type (like off_t) is a signed integer. If len2 is + negative, the result has no meaning or utility. +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer. + If buf is Z_NULL, this function returns the required initial value for the + crc. Pre- and post-conditioning (one's complement) is performed within this + function so it shouldn't be done by the application. + + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf, + z_size_t len)); +/* + Same as crc32(), but with a size_t length. +*/ + +/* +ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); + + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. +*/ + +/* +ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t len2)); + + Return the operator corresponding to length len2, to be used with + crc32_combine_op(). +*/ + +ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op)); +/* + Give the same result as crc32_combine(), using op in place of len2. op is + is generated from len2 by crc32_combine_gen(). This will be faster than + crc32_combine() if the generated op is used more than once. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size)); +#ifdef Z_PREFIX_SET +# define z_deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define z_inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#else +# define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#endif + +#ifndef Z_SOLO + +/* gzgetc() macro and its supporting function and exposed data structure. Note + * that the real internal state is much larger than the exposed structure. + * This abbreviated structure exposes just enough for the gzgetc() macro. The + * user should not mess with these exposed elements, since their names or + * behavior could change in the future, perhaps even capriciously. They can + * only be used by the gzgetc() macro. You have been warned. + */ +struct gzFile_s { + unsigned have; + unsigned char *next; + z_off64_t pos; +}; +ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ +#ifdef Z_PREFIX_SET +# undef z_gzgetc +# define z_gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#else +# define gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#endif + +/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or + * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if + * both are true, the application gets the *64 functions, and the regular + * functions are changed to 64 bits) -- in case these are set on systems + * without large file support, _LFS64_LARGEFILE must also be true + */ +#ifdef Z_LARGE64 + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); + ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); + ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off64_t)); +#endif + +#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) +# ifdef Z_PREFIX_SET +# define z_gzopen z_gzopen64 +# define z_gzseek z_gzseek64 +# define z_gztell z_gztell64 +# define z_gzoffset z_gzoffset64 +# define z_adler32_combine z_adler32_combine64 +# define z_crc32_combine z_crc32_combine64 +# define z_crc32_combine_gen z_crc32_combine_gen64 +# else +# define gzopen gzopen64 +# define gzseek gzseek64 +# define gztell gztell64 +# define gzoffset gzoffset64 +# define adler32_combine adler32_combine64 +# define crc32_combine crc32_combine64 +# define crc32_combine_gen crc32_combine_gen64 +# endif +# ifndef Z_LARGE64 + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); + ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t)); +# endif +#else + ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); + ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); + ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); + ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); +#endif + +#else /* Z_SOLO */ + + ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); + +#endif /* !Z_SOLO */ + +/* undocumented functions */ +ZEXTERN const char * ZEXPORT zError OF((int)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); +ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void)); +ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); +ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int)); +ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp)); +ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); +ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); +#if defined(_WIN32) && !defined(Z_SOLO) +ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, + const char *mode)); +#endif +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +ZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file, + const char *format, + va_list va)); +# endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/third_party/zlib/zlib.ndk.json b/third_party/zlib/zlib.ndk.json new file mode 100644 index 0000000000000000000000000000000000000000..498f3945f10383d16cfb168ce05cdef627c772c5 --- /dev/null +++ b/third_party/zlib/zlib.ndk.json @@ -0,0 +1,95 @@ +[ + { "name": "_dist_code" }, + { "name": "_length_code" }, + { "name": "_tr_align" }, + { "name": "_tr_flush_bits" }, + { "name": "_tr_flush_block" }, + { "name": "_tr_init" }, + { "name": "_tr_stored_block" }, + { "name": "_tr_tally" }, + { "name": "adler32" }, + { "name": "adler32_combine" }, + { "name": "adler32_combine64" }, + { "name": "adler32_z" }, + { "name": "compress" }, + { "name": "compress2" }, + { "name": "compressBound" }, + { "name": "crc32" }, + { "name": "crc32_combine" }, + { "name": "crc32_combine64" }, + { "name": "crc32_z" }, + { "name": "deflate" }, + { "name": "deflateBound" }, + { "name": "deflateCopy" }, + { "name": "deflateEnd" }, + { "name": "deflateGetDictionary" }, + { "name": "deflateInit2_" }, + { "name": "deflateInit_" }, + { "name": "deflateParams" }, + { "name": "deflatePending" }, + { "name": "deflatePrime" }, + { "name": "deflateReset" }, + { "name": "deflateResetKeep" }, + { "name": "deflateSetDictionary" }, + { "name": "deflateSetHeader" }, + { "name": "deflateTune" }, + { "name": "get_crc_table" }, + { "name": "gzbuffer" }, + { "name": "gzclearerr" }, + { "name": "gzclose" }, + { "name": "gzclose_r" }, + { "name": "gzclose_w" }, + { "name": "gzdirect" }, + { "name": "gzdopen" }, + { "name": "gzeof" }, + { "name": "gzerror" }, + { "name": "gzflush" }, + { "name": "gzfread" }, + { "name": "gzfwrite" }, + { "name": "gzgetc" }, + { "name": "gzgetc_" }, + { "name": "gzgets" }, + { "name": "gzoffset64" }, + { "name": "gzopen" }, + { "name": "gzopen64" }, + { "name": "gzopen_w" }, + { "name": "gzprintf" }, + { "name": "gzputc" }, + { "name": "gzputs" }, + { "name": "gzread" }, + { "name": "gzrewind" }, + { "name": "gzseek" }, + { "name": "gzseek64" }, + { "name": "gzsetparams" }, + { "name": "gztell" }, + { "name": "gztell64" }, + { "name": "gzungetc" }, + { "name": "gzvprintf" }, + { "name": "gzwrite" }, + { "name": "inflate" }, + { "name": "inflateBack" }, + { "name": "inflateBackEnd" }, + { "name": "inflateBackInit_" }, + { "name": "inflateCodesUsed" }, + { "name": "inflateCopy" }, + { "name": "inflateEnd" }, + { "name": "inflateGetDictionary" }, + { "name": "inflateGetHeader" }, + { "name": "inflateInit_" }, + { "name": "inflateInit2_" }, + { "name": "inflateMark" }, + { "name": "inflatePrime" }, + { "name": "inflateReset" }, + { "name": "inflateReset2" }, + { "name": "inflateResetKeep" }, + { "name": "inflateSetDictionary" }, + { "name": "inflateSync" }, + { "name": "inflateSyncPoint" }, + { "name": "inflateUndermine" }, + { "name": "inflateValidate" }, + { "name": "uncompress" }, + { "name": "uncompress2" }, + { "name": "zError" }, + { "name": "zlibCompileFlags" }, + { "name": "zlibVersion" } +]