/*
* Copyright (c) 2017-2021 Free Software Foundation, Inc.
*
* This file is part of Wget.
*
* Wget is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Wget is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Wget. If not, see .
*
*
* Dynamic loading abstraction for object files
*
*/
#ifndef SRC_WGET_DL_H
#define SRC_WGET_DL_H
#include
// Error handling for dynamic loader
typedef struct
{
const char *msg;
} dl_error_t;
// Initializes the error object for catching errors
static inline void dl_error_init(dl_error_t *e)
{
e->msg = NULL;
}
// Checks if the error is set
static inline int dl_error_is_set(dl_error_t *e)
{
return e->msg ? 1 : 0;
}
// Gets the error message if error is set, else NULL
// Error string is owned by the error object and will be freed when error is
// unset.
static inline const char *dl_error_get_msg(dl_error_t *e)
{
return e->msg;
}
// Set an error message. Call with msg=NULL to clear error.
void dl_error_set(dl_error_t *e, const char *msg);
// Set an error message with printf format.
void dl_error_set_printf
(dl_error_t *e, const char *format, ...) WGET_GCC_PRINTF_FORMAT(2, 3);
// Returns 1 if dynamic loader will work on the current platform, 0 otherwise
int dl_supported(void);
// The dynamically loaded object file handle
typedef struct dl_file_st dl_file_t;
/* Opens an object file. If the operation fails NULL is returned
* and error is set.
*/
dl_file_t *dl_file_open(const char *filename, dl_error_t *e);
/* Looks up a symbol in the loaded object file.
* On success it returns a pointer to the symbol,
* else it returns NULL and sets an error.
*/
void *dl_file_lookup(dl_file_t *dm, const char *symbol, dl_error_t *e);
// Unloads the loaded object file
void dl_file_close(dl_file_t *dm);
/* Builds a module name given a path to the object file.
* Returns NULL if path does not match the pattern for object files and
* strict is set to 1.
* Free the returned string with wget_free().
*/
char *dl_get_name_from_path(const char *path, int strict);
/* Searches for an object file with a given name in the given list of
* directories. If found it returns the filename, else returns NULL.
* Free the returned string with wget_free().
*/
char *dl_search(const char *name, const wget_vector *dirs);
/* Creates a list of loadable object files in a given list of directories.
*/
void dl_list(const wget_vector *dirs, wget_vector *names_out);
#endif /* SRC_WGET_DL_H */