%% options
copyright owner = Dirk Krause
copyright year = 2015-xxxx
license = bsd
%% header
/** @file
Access Windows registry, use
dkChar names.
CRT on Windows: Optional.
*/
#ifndef DK4CONF_H_INCLUDED
#include "dk4conf.h"
#endif
#ifndef DK4TYPES_H_INCLUDED
#include "dk4types.h"
#endif
#ifndef DK4ERROR_H_INCLUDED
#include "dk4error.h"
#endif
#ifndef DK4WREGK_H_INCLUDED
#include "dk4wregk.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
/** Open a registry key.
@param pk Parent key identifier.
@param keyname Name of registry key to open.
@param wr Flag: Open for write access too.
@param erp Error report, may be NULL.
@return Pointer to key handle structure on success, NULL on error.
Error codes:
- DK4_E_NOT_SUPPORTED
if the function is run on a non-Windows system,
- DK4_E_INVALID_ARGUMENTS
if pk or keyname is invalid,
- DK4_E_NOT_FOUND
if opening or creating the registry key failed,
- DK4_E_MEMORY_ALLOCATION_FAILED
if memory allocation for the key handle structure failed.
*/
void *
dk4wreg_open_key(int pk, const dkChar *keyname, int wr, dk4_er_t *erp);
/** Set a string value.
@param kptr Key handle structure.
@param name Entry name.
@param val Entry value.
@param expand Flag: Use REG_EXPAND_SZ (1) or REG_SZ (0).
@param erp Error report, may be NULL.
@return 1 on success, 0 on error.
Error codes:
- DK4_E_NOT_SUPPORTED
when called on non-Windows systems,
- DK4_E_INVALID_ARGUMENTS
if kptr or val is NULL,
- DK4_E_MATH_OVERFLOW
if the name is too long,
- DK4_E_SYSTEM
if RegSetValueExA() failed.
*/
int
dk4wreg_set_string(
void *kptr, const dkChar *name, const dkChar *val, int expand, dk4_er_t *erp
);
/** Get string value.
@param kptr Key handle structure.
@param name Entry name.
@param bptr Buffer for result string.
@param sz Result buffer length.
@param expand Pointer to expand flag output variable.
This variable is set to 1 if the string found
is of type REG_EXPAND_SZ. The variable is left
unchanged for REG_SZ.
@param erp Error report, may be NULL.
@return 1 on success, 0 on error.
Error codes:
- DK4_E_NOT_SUPPORTED
when called on non-Windows systems,
- DK4_E_INVALID_ARGUMENTS
if kptr, name, or bptr is NULL or sz is 0,
- DK4_E_NOT_FOUND
if the entry is not found or has 0 length,
- DK4_E_SYNTAX
if the entry is not a string type.
*/
int
dk4wreg_get_string(
void *kptr,
const dkChar *name,
dkChar *bptr,
size_t sz,
int *expand,
dk4_er_t *erp
);
/** Set DWORD registry entry.
@param kptr Key handle structure.
@param name Entry name.
@param val Value.
@param erp Error report, may be NULL.
@return 1 on success, 0 on error.
Error codes:
- DK4_E_NOT_SUPPORTED
when called on a non-Windows system,
- DK4_E_INVALID_ARGUMENTS
if kptr is NULL,
- DK4_E_SYSTEM
if RegSetValueExA() failed.
*/
int
dk4wreg_set_dword(
void *kptr, const dkChar *name, dk4_dword_t val, dk4_er_t *erp
);
/** Retrieve DWORD value from registry.
@param kptr Key handle structure.
@param name Entry name.
@param vptr Pointer to result variable.
@param erp Error report, may be NULL.
@return 1 on success, 0 on error.
*/
int
dk4wreg_get_dword(
void *kptr,
const dkChar *name,
dk4_dword_t *vptr,
dk4_er_t *erp
);
/** Get string value.
@param kptr Key handle structure.
@param name Entry name.
@param dptr Buffer for result string.
@param dsz Result buffer length, number of dkChar.
@param b1 First buffer, used for result from RegQueryValue().
Should have same size as dptr.
@param b1sz Size of b1, number of dkChar.
@param b2 Second buffer, used for result from ExpandEnvironmentStrings.
Should be 2 characters larger than dptr.
@param b2sz Size of b2, number of dkChar.
@param erp Error report, may be NULL.
@return 1 on success, 0 on error.
Error codes:
- DK4_E_NOT_SUPPORTED
when called on non-Windows systems,
- DK4_E_INVALID_ARGUMENTS
if kptr, name, dptr, b1 or b2 is NULL or
dsz, b1sz or b2sz is 0 or out of range,
- DK4_E_BUFFER_TOO_SMALL
if one of the buffers is too small,
- DK4_E_NOT_FOUND
if the entry is not found or has 0 length,
- DK4_E_SYNTAX
if the entry is not a string type.
*/
int
dk4wreg_get_expanded_string(
void *kptr,
const dkChar *name,
dkChar *dptr,
size_t dsz,
dkChar *b1,
size_t b1sz,
dkChar *b2,
size_t b2sz,
dk4_er_t *erp
);
#ifdef __cplusplus
}
#endif
%% module
#include "dk4conf.h"
#include "dk4types.h"
#if DK4_CHAR_SIZE > 1
#include "dk4wregw.h"
#else
#include "dk4wreg8.h"
#endif
#include "dk4wregd.h"
$!trace-include
void *
dk4wreg_open_key(int pk, const dkChar *keyname, int wr, dk4_er_t *erp)
{
#if DK4_CHAR_SIZE > 1
return (dk4wreg_open_key_wc(pk, keyname, wr, erp));
#else
return (dk4wreg_open_key_c8(pk, keyname, wr, erp));
#endif
}
int
dk4wreg_set_string(
void *kptr, const dkChar *name, const dkChar *val, int expand, dk4_er_t *erp
)
{
#if DK4_CHAR_SIZE > 1
return (dk4wreg_set_string_wc(kptr, name, val, expand, erp));
#else
return (dk4wreg_set_string_c8(kptr, name, val, expand, erp));
#endif
}
int
dk4wreg_get_string(
void *kptr,
const dkChar *name,
dkChar *bptr,
size_t sz,
int *expand,
dk4_er_t *erp
)
{
#if DK4_CHAR_SIZE > 1
return (dk4wreg_get_string_wc(kptr, name, bptr, sz, expand, erp));
#else
return (dk4wreg_get_string_c8(kptr, name, bptr, sz, expand, erp));
#endif
}
int
dk4wreg_set_dword(
void *kptr, const dkChar *name, dk4_dword_t val, dk4_er_t *erp
)
{
#if DK4_CHAR_SIZE > 1
return (dk4wreg_set_dword_wc(kptr, name, val, erp));
#else
return (dk4wreg_set_dword_c8(kptr, name, val, erp));
#endif
}
int
dk4wreg_get_dword(
void *kptr,
const dkChar *name,
dk4_dword_t *vptr,
dk4_er_t *erp
)
{
#if DK4_CHAR_SIZE > 1
return (dk4wreg_get_dword_wc(kptr, name, vptr, erp));
#else
return (dk4wreg_get_dword_c8(kptr, name, vptr, erp));
#endif
}
int
dk4wreg_get_expanded_string(
void *kptr,
const dkChar *name,
dkChar *dptr,
size_t dsz,
dkChar *b1,
size_t b1sz,
dkChar *b2,
size_t b2sz,
dk4_er_t *erp
)
{
#if DK4_CHAR_SIZE > 1
return (
dk4wreg_get_expanded_string_wc(
kptr, name, dptr, dsz, b1, b1sz, b2, b2sz, erp
)
);
#else
return (
dk4wreg_get_expanded_string_c8(
kptr, name, dptr, dsz, b1, b1sz, b2, b2sz, erp
)
);
#endif
}