Example #1
0
void xt_print(struct xt_node *node)
{
	char *str = xt_to_string_i(node);

	fprintf(stderr, "%s", str);
	g_free(str);
}
Example #2
0
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;
}