1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-16 14:54:59 +00:00
serenity/Userland/Libraries/LibDl/dlfcn_integration.h
Lenny Maiorani 8f20c3334b Libraries: Use default constructors/destructors in LibDl
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#cother-other-default-operation-rules

"The compiler is more likely to get the default semantics right and
you cannot implement these functions better than the compiler."
2022-03-10 18:04:26 -08:00

40 lines
1 KiB
C

/*
* Copyright (c) 2021, Gunnar Beutner <gunnar@beutner.name>
* Copyright (c) 2022, the SerenityOS developers.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Result.h>
#include <AK/String.h>
struct DlErrorMessage {
DlErrorMessage(String&& other)
: text(move(other))
{
}
// The virtual destructor is required because we're passing this
// struct to the dynamic loader - whose operator delete differs
// from the one in libc.so
virtual ~DlErrorMessage() = default;
String text;
};
struct __Dl_info;
typedef struct __Dl_info Dl_info;
typedef Result<void, DlErrorMessage> (*DlCloseFunction)(void*);
typedef Result<void*, DlErrorMessage> (*DlOpenFunction)(const char*, int);
typedef Result<void*, DlErrorMessage> (*DlSymFunction)(void*, const char*);
typedef Result<void, DlErrorMessage> (*DlAddrFunction)(void*, Dl_info*);
extern "C" {
extern DlCloseFunction __dlclose;
extern DlOpenFunction __dlopen;
extern DlSymFunction __dlsym;
extern DlAddrFunction __dladdr;
}