int playlist_MLDump( playlist_t *p_playlist ) { char *psz_datadir; psz_datadir = config_GetUserDir( VLC_DATA_DIR ); if( !psz_datadir ) /* XXX: This should never happen */ { msg_Err( p_playlist, "no data directory, cannot save media library") ; return VLC_EGENERIC; } char psz_dirname[ strlen( psz_datadir ) + sizeof( DIR_SEP "ml.xspf")]; strcpy( psz_dirname, psz_datadir ); free( psz_datadir ); if( config_CreateDir( (vlc_object_t *)p_playlist, psz_dirname ) ) { return VLC_EGENERIC; } strcat( psz_dirname, DIR_SEP "ml.xspf" ); stats_TimerStart( p_playlist, "ML Dump", STATS_TIMER_ML_DUMP ); playlist_Export( p_playlist, psz_dirname, p_playlist->p_media_library, "export-xspf" ); stats_TimerStop( p_playlist, STATS_TIMER_ML_DUMP ); return VLC_SUCCESS; }
/***************************************************************************** * config_CreateDir: Create configuration directory if it doesn't exist. *****************************************************************************/ int config_CreateDir( vlc_object_t *p_this, const char *psz_dirname ) { if( !psz_dirname || !*psz_dirname ) return -1; if( vlc_mkdir( psz_dirname, 0700 ) == 0 ) return 0; switch( errno ) { case EEXIST: return 0; case ENOENT: { /* Let's try to create the parent directory */ char psz_parent[strlen( psz_dirname ) + 1], *psz_end; strcpy( psz_parent, psz_dirname ); psz_end = strrchr( psz_parent, DIR_SEP_CHAR ); if( psz_end && psz_end != psz_parent ) { *psz_end = '\0'; if( config_CreateDir( p_this, psz_parent ) == 0 ) { if( !vlc_mkdir( psz_dirname, 0700 ) ) return 0; } } } } msg_Warn( p_this, "could not create %s: %m", psz_dirname ); return -1; }
static int config_PrepareDir (vlc_object_t *obj) { char *psz_configdir = config_GetUserDir (VLC_CONFIG_DIR); if (psz_configdir == NULL) return -1; int ret = config_CreateDir (obj, psz_configdir); free (psz_configdir); return ret; }
int playlist_MLDump( playlist_t *p_playlist ) { char *psz_temp; psz_temp = config_GetUserDir( VLC_DATA_DIR ); if( !psz_temp ) /* XXX: This should never happen */ { msg_Err( p_playlist, "no data directory, cannot save media library") ; return VLC_EGENERIC; } char psz_dirname[ strlen( psz_temp ) + sizeof( DIR_SEP "ml.xspf")]; strcpy( psz_dirname, psz_temp ); free( psz_temp ); if( config_CreateDir( (vlc_object_t *)p_playlist, psz_dirname ) ) { return VLC_EGENERIC; } strcat( psz_dirname, DIR_SEP "ml.xspf" ); if ( asprintf( &psz_temp, "%s.tmp%"PRIu32, psz_dirname, (uint32_t)getpid() ) < 1 ) return VLC_EGENERIC; int i_ret = playlist_Export( p_playlist, psz_temp, p_playlist->p_media_library, "export-xspf" ); if ( i_ret != VLC_SUCCESS ) { vlc_unlink( psz_temp ); free( psz_temp ); return i_ret; } i_ret = vlc_rename( psz_temp, psz_dirname ); free( psz_temp ); if( i_ret == -1 ) { msg_Err( p_playlist, "could not rename %s.tmp: %s", psz_dirname, vlc_strerror_c(errno) ); return VLC_EGENERIC; } return VLC_SUCCESS; }