本文整理汇总了C++中HFREE_NULL函数的典型用法代码示例。如果您正苦于以下问题:C++ HFREE_NULL函数的具体用法?C++ HFREE_NULL怎么用?C++ HFREE_NULL使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了HFREE_NULL函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: xnode_free
/**
* Free an XML node.
*
* This is the user-visible routine that can succeed only if the node is
* not part of a tree structure.
*/
void
xnode_free(xnode_t *xn)
{
etree_t t;
xnode_check(xn);
etree_init_root(&t, xn, TRUE, offsetof(xnode_t, node));
g_assert(etree_is_standalone(&t, xn));
switch (xn->type) {
case XNODE_T_COMMENT:
HFREE_NULL(xn->u.c.text);
break;
case XNODE_T_TEXT:
HFREE_NULL(xn->u.t.text);
break;
case XNODE_T_PI:
atom_str_free_null(&xn->u.pi.name);
HFREE_NULL(xn->u.pi.target);
break;
case XNODE_T_ELEMENT:
atom_str_free_null(&xn->u.e.name);
atom_str_free_null(&xn->u.e.ns_uri);
nv_table_free_null(&xn->u.e.ns);
xattr_table_free_null(&xn->u.e.attrs);
break;
case XNODE_T_MAX:
g_assert_not_reached();
}
xn->magic = 0;
WFREE(xn);
}
示例2: statusbar_gui_shutdown
void
statusbar_gui_shutdown(void)
{
statusbar_gui_free_timeout_list();
HFREE_NULL(statbar_botstr_new);
HFREE_NULL(statbar_botstr);
}
示例3: tls_global_init
G_GNUC_COLD void
tls_global_init(void)
{
static const struct {
const char * const name;
const int major;
const int minor;
} f = {
"tls", 1, 0
};
char *cert_file, *key_file;
#if !defined(REMAP_ZALLOC) && !defined(TRACK_MALLOC) && !defined(TRACK_ZALLOC)
gnutls_global_set_mem_functions(halloc, halloc, NULL, hrealloc, hfree);
#endif
if (gnutls_global_init()) {
g_error("gnutls_global_init() failed");
}
#ifdef USE_TLS_CUSTOM_IO
gnutls_global_set_log_level(9);
gnutls_global_set_log_function(tls_log_function);
#endif /* USE_TLS_CUSTOM_IO */
get_dh_params();
gnutls_certificate_allocate_credentials(&cert_cred);
key_file = make_pathname(settings_config_dir(), "key.pem");
cert_file = make_pathname(settings_config_dir(), "cert.pem");
if (file_exists(key_file) && file_exists(cert_file)) {
int ret;
ret = gnutls_certificate_set_x509_key_file(cert_cred,
cert_file, key_file, GNUTLS_X509_FMT_PEM);
if (ret < 0) {
g_warning("gnutls_certificate_set_x509_key_file() failed: %s",
gnutls_strerror(ret));
} else {
gnutls_certificate_set_dh_params(cert_cred, get_dh_params());
}
}
HFREE_NULL(key_file);
HFREE_NULL(cert_file);
header_features_add(FEATURES_CONNECTIONS, f.name, f.major, f.minor);
header_features_add(FEATURES_G2_CONNECTIONS, f.name, f.major, f.minor);
header_features_add(FEATURES_DOWNLOADS, f.name, f.major, f.minor);
header_features_add(FEATURES_UPLOADS, f.name, f.major, f.minor);
}
示例4: magnet_append_item
static inline void
magnet_append_item(str_t *s, bool escape_value,
const char *key, const char *value)
{
g_return_if_fail(s);
g_return_if_fail(key);
g_return_if_fail(value);
if (0 == str_len(s)) {
str_cat(s, "magnet:?");
} else {
str_putc(s, '&');
}
str_cat(s, key);
str_putc(s, '=');
if (escape_value) {
char *escaped;
escaped = url_escape_query(value);
str_cat(s, escaped);
if (escaped != value) {
HFREE_NULL(escaped);
}
} else {
str_cat(s, value);
}
}
示例5: magnet_parse_location
static struct magnet_source *
magnet_parse_location(const char *uri, const char **error_str)
{
struct magnet_source *ms;
const char *p, *host, *host_end;
host_addr_t addr;
uint16 port;
clear_error_str(&error_str);
g_return_val_if_fail(uri, NULL);
p = uri;
p = magnet_parse_host_port(uri, &addr, &port, &host, &host_end, error_str);
if (NULL == p)
return NULL;
ms = magnet_parse_path(p, error_str);
if (NULL == ms)
return NULL;
if (host) {
char *h = h_strndup(host, host_end - host);
ms->hostname = atom_str_get(h);
HFREE_NULL(h);
}
ms->addr = addr;
ms->port = port;
return ms;
}
示例6: st_fill_qhv
/**
* Fill non-NULL query hash vector for query routing.
*
* This needs to be called when st_search() is not called when processing
* a query, otherwise the qhery hash vector won't be properly initialized
* and the query would be improperly dropped by qrt_build_query_target(),
* hence never routed.
*/
void
st_fill_qhv(const char *search_term, query_hashvec_t *qhv)
{
char *search;
word_vec_t *wovec;
guint wocnt;
guint i;
if (NULL == qhv)
return;
search = UNICODE_CANONIZE(search_term);
wocnt = word_vec_make(search, &wovec);
for (i = 0; i < wocnt; i++) {
if (wovec[i].len >= QRP_MIN_WORD_LENGTH)
qhvec_add(qhv, wovec[i].word, QUERY_H_WORD);
}
if (search != search_term)
HFREE_NULL(search);
if (wocnt > 0)
word_vec_free(wovec, wocnt);
}
示例7: st_destroy
/**
* Destroy a search table.
*/
static void
st_destroy(search_table_t *table)
{
int i;
search_table_check(table);
if (table->bins) {
for (i = 0; i < table->nbins; i++) {
struct st_bin *bin = table->bins[i];
if (bin) {
bin_destroy(bin);
WFREE(bin);
}
}
HFREE_NULL(table->bins);
}
if (table->all_entries.vals) {
for (i = 0; i < table->all_entries.nvals; i++) {
destroy_entry(table->all_entries.vals[i]);
table->all_entries.vals[i] = NULL;
}
bin_destroy(&table->all_entries);
}
}
示例8: bin_destroy
/**
* Destroy a bin.
*
* @note Do NOT destroy the st_entry's, since they may be shared.
*/
static void
bin_destroy(struct st_bin *bin)
{
HFREE_NULL(bin->vals);
bin->nslots = 0;
bin->nvals = 0;
}
示例9: dbstore_move
/**
* Move SDBM files from "src" to "dst".
*
* @param src the old directory where SDBM files where
* @param dst the new directory where SDBM files should be put
* @param base the base name of SDBM files
*/
void
dbstore_move(const char *src, const char *dst, const char *base)
{
char *old_path;
char *new_path;
old_path = make_pathname(src, base);
new_path = make_pathname(dst, base);
dbstore_move_file(old_path, new_path, DBM_DIRFEXT);
dbstore_move_file(old_path, new_path, DBM_PAGFEXT);
dbstore_move_file(old_path, new_path, DBM_DATFEXT);
HFREE_NULL(old_path);
HFREE_NULL(new_path);
}
示例10: dbstore_move_file
static void
dbstore_move_file(const char *old_path, const char *new_path, const char *ext)
{
char *old_file = h_strconcat(old_path, ext, (void *) 0);
char *new_file = h_strconcat(new_path, ext, (void *) 0);
if (file_exists(old_file)) {
if (-1 == rename(old_file, new_file)) {
g_warning("could not rename \"%s\" as \"%s\": %m",
old_file, new_file);
}
}
HFREE_NULL(old_file);
HFREE_NULL(new_file);
}
示例11: dbstore_close
/**
* Close DM map, keeping the SDBM file around.
*
* If the map was held in memory, it is serialized to disk.
*/
void
dbstore_close(dbmw_t *dw, const char *dir, const char *base)
{
bool ok;
char *path;
if (NULL == dw)
return;
path = make_pathname(dir, base);
if (dbstore_debug > 1)
g_debug("DBSTORE persisting DBMW \"%s\" as %s", dbmw_name(dw), path);
ok = dbmw_store(dw, path, TRUE);
HFREE_NULL(path);
if (dbstore_debug > 0) {
size_t count = dbmw_count(dw);
g_debug("DBSTORE %ssucessfully persisted DBMW \"%s\" (%u key%s)",
ok ? "" : "un", dbmw_name(dw),
(unsigned) count, 1 == count ? "" : "s");
}
dbmw_destroy(dw, TRUE);
}
示例12: statusbar_gui_clear_timeouts
/**
* Check whether statusbar items have expired and remove them from the
* statusbar.
*/
static void
statusbar_gui_clear_timeouts(time_t now)
{
GSList *sl, *to_remove = NULL;
for (sl = sl_statusbar_timeouts; sl; sl = g_slist_next(sl)) {
struct statusbar_timeout *t = sl->data;
const time_delta_t timeout = t->timeout;
if (delta_time(now, t->stamp) > timeout)
to_remove = g_slist_prepend(to_remove, t);
}
for (sl = to_remove; sl; sl = g_slist_next(sl)) {
statusbar_gui_free_timeout(sl->data);
}
g_slist_free(to_remove);
/*
* When there are no more timeouts left, and there's a pending
* new statusbar string to display, pop the old one and add the new.
* --RAM, 27/06/2002
*/
if (sl_statusbar_timeouts == NULL && statbar_botstr_new) {
gtk_statusbar_pop(statusbar_get(), scid_bottom);
HFREE_NULL(statbar_botstr);
statbar_botstr = statbar_botstr_new;
statbar_botstr_new = NULL;
statusbar_gui_push(SB_MESSAGE, scid_bottom, 0, "%s", statbar_botstr);
}
}
示例13: gip_retrieve
/**
* Loads the geo-ip.txt into memory.
*
* Choosing the first file we find among the several places we look at,
* typically:
*
* -# ~/.gtk-gnutella/geo-ip.txt
* -# /usr/share/gtk-gnutella/geo-ip.txt
* -# /home/src/gtk-gnutella/geo-ip.txt
*
* The selected file will then be monitored and a reloading will occur
* shortly after a modification.
*/
static void
gip_retrieve(unsigned n)
{
FILE *f;
int idx;
char *filename;
file_path_t fp[4];
unsigned length;
length = settings_file_path_load(fp, gip_source[n].file, SFP_DFLT);
g_assert(length <= N_ITEMS(fp));
f = file_config_open_read_norename_chosen(
gip_source[n].what, fp, length, &idx);
if (NULL == f)
return;
filename = make_pathname(fp[idx].dir, fp[idx].name);
watcher_register(filename, gip_changed, uint_to_pointer(n));
HFREE_NULL(filename);
gip_load(f, n);
fclose(f);
}
示例14: add_persistent_cache_entry
/**
* Add an entry to the persistent cache.
*/
static void
add_persistent_cache_entry(const char *filename, filesize_t size,
time_t mtime, const struct sha1 *sha1, const struct tth *tth)
{
char *pathname;
FILE *f;
pathname = make_pathname(settings_config_dir(), "sha1_cache");
f = file_fopen(pathname, "a");
if (f) {
filestat_t sb;
/*
* If we're adding the very first entry (file empty), then emit header.
*/
if (fstat(fileno(f), &sb)) {
g_warning("%s(): could not stat \"%s\": %m", G_STRFUNC, pathname);
} else {
if (0 == sb.st_size) {
fputs(sha1_persistent_cache_file_header, f);
}
cache_entry_print(f, filename, sha1, tth, size, mtime);
}
fclose(f);
} else {
g_warning("%s(): could not open \"%s\": %m", G_STRFUNC, pathname);
}
HFREE_NULL(pathname);
}
示例15: tth_cache_lookup
/**
* @return The number of leaves or zero if unknown.
*/
size_t
tth_cache_lookup(const struct tth *tth, filesize_t filesize)
{
size_t expected, leave_count = 0;
g_return_val_if_fail(tth, 0);
expected = tt_good_node_count(filesize);
if (expected > 1) {
filestat_t sb;
char *pathname;
pathname = tth_cache_pathname(tth);
if (stat(pathname, &sb)) {
leave_count = 0;
if (ENOENT != errno) {
g_warning("%s(%s): stat(\"%s\") failed: %m",
G_STRFUNC, tth_base32(tth), pathname);
}
} else {
leave_count = tth_cache_leave_count(tth, &sb);
}
HFREE_NULL(pathname);
} else {
leave_count = 1;
}
return expected != leave_count ? 0 : leave_count;
}