// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SANDBOX_MAC_XPC_STUBS_HEADER_FRAGMENT_
#define SANDBOX_MAC_XPC_STUBS_HEADER_FRAGMENT_

#include <bsm/libbsm.h>
#include <stddef.h>
#include <stdint.h>

#include "sandbox/sandbox_export.h"

// Declare or include public types.
#if !defined(MAC_OS_X_VERSION_10_7) || \
    MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7

extern "C" {
typedef void* xpc_object_t;
}  // extern "C"

#else

#include <xpc/xpc.h>

#endif

// Declare private types.
extern "C" {
typedef struct _xpc_pipe_s* xpc_pipe_t;
}  // extern "C"

#if defined(MAC_OS_X_VERSION_10_7) && \
    MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7
// Redeclare methods that only exist on 10.7+ to suppress
// -Wpartial-availability warnings.
extern "C" {
XPC_EXPORT XPC_NONNULL1 XPC_NONNULL2 void
xpc_dictionary_set_int64(xpc_object_t xdict, const char* key, int64_t value);

XPC_EXPORT XPC_NONNULL1 void xpc_release(xpc_object_t object);

XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL_ALL
bool xpc_dictionary_get_bool(xpc_object_t xdict, const char* key);

XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL_ALL int64_t
xpc_dictionary_get_int64(xpc_object_t xdict, const char* key);

XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL_ALL
const char* xpc_dictionary_get_string(xpc_object_t xdict, const char* key);

XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL_ALL uint64_t
xpc_dictionary_get_uint64(xpc_object_t xdict, const char* key);

XPC_EXPORT XPC_NONNULL1 XPC_NONNULL2 void
xpc_dictionary_set_uint64(xpc_object_t xdict, const char* key, uint64_t value);

XPC_EXPORT XPC_NONNULL1 XPC_NONNULL2
void xpc_dictionary_set_string(xpc_object_t xdict, const char* key,
                               const char* string);

XPC_EXPORT XPC_MALLOC XPC_RETURNS_RETAINED XPC_WARN_RESULT xpc_object_t
xpc_dictionary_create(const char* const* keys,
                      const xpc_object_t* values,
                      size_t count);
XPC_EXPORT XPC_MALLOC XPC_RETURNS_RETAINED XPC_WARN_RESULT XPC_NONNULL_ALL
    xpc_object_t
    xpc_dictionary_create_reply(xpc_object_t original);

XPC_EXPORT XPC_WARN_RESULT XPC_NONNULL1 XPC_NONNULL2
xpc_object_t xpc_dictionary_get_value(xpc_object_t xdict, const char* key);

XPC_EXPORT XPC_MALLOC XPC_WARN_RESULT XPC_NONNULL1
char* xpc_copy_description(xpc_object_t object);
}  // extern "C"
#endif

#endif  // SANDBOX_MAC_XPC_STUBS_HEADER_FRAGMENT_
