void xt_print(struct xt_node *node) { char *str = xt_to_string_i(node); fprintf(stderr, "%s", str); g_free(str); }
static storage_status_t xml_save( irc_t *irc, int overwrite ) { storage_status_t ret = STORAGE_OK; char path[512], *path2 = NULL, *xml = NULL; struct xt_node *tree = NULL; size_t len; int fd; path2 = g_strdup( irc->user->nick ); nick_lc( NULL, path2 ); g_snprintf( path, sizeof( path ) - 20, "%s%s%s", global.conf->configdir, path2, ".xml" ); g_free( path2 ); if( !overwrite && g_access( path, F_OK ) == 0 ) return STORAGE_ALREADY_EXISTS; strcat( path, ".XXXXXX" ); if( ( fd = mkstemp( path ) ) < 0 ) { irc_rootmsg( irc, "Error while opening configuration file." ); return STORAGE_OTHER_ERROR; } tree = xml_generate( irc ); xml = xt_to_string_i( tree ); len = strlen( xml ); if( write( fd, xml, len ) != len || fsync( fd ) != 0 || /* #559 */ close( fd ) != 0 ) goto error; path2 = g_strndup( path, strlen( path ) - 7 ); if( rename( path, path2 ) != 0 ) { g_free( path2 ); goto error; } g_free( path2 ); goto finish; error: irc_rootmsg( irc, "Write error. Disk full?" ); ret = STORAGE_OTHER_ERROR; finish: close( fd ); unlink( path ); g_free( xml ); xt_free_node( tree ); return ret; }