bool SVNLineDiff::Diff(svn_diff_t **diff, LPCTSTR line1, apr_size_t len1, LPCTSTR line2, apr_size_t len2, bool bWordDiff) { if (m_subpool) svn_pool_clear(m_subpool); else m_subpool = svn_pool_create(m_pool); if (m_subpool == NULL) return false; m_bWordDiff = bWordDiff; m_line1 = line1; m_line2 = line2; m_line1length = len1 ? len1 : _tcslen(m_line1); m_line2length = len2 ? len2 : _tcslen(m_line2); m_line1pos = 0; m_line2pos = 0; m_line1tokens.clear(); m_line2tokens.clear(); svn_error_t * err = svn_diff_diff(diff, this, &SVNLineDiff_vtable, m_subpool); if (err) { svn_error_clear(err); svn_pool_clear(m_subpool); return false; } return true; }
svn_error_t *diff_playlist_tracks(svn_diff_t **diff, sp_playlist *playlist, sp_track **tracks, int num_tracks, apr_pool_t *pool) { sp_playlist_add_ref(playlist); struct track_tokens_t sources[2]; fill_track_tokens_from_playlist(&sources[0], playlist); fill_track_tokens_from_tracks(&sources[1], tracks, num_tracks); // Run through SVN diff apr_pool_t *local_pool = svn_pool_create(pool); svn_error_t *result = svn_diff_diff(diff, &sources, &diff_playlist_search_vtable, local_pool); svn_pool_destroy(local_pool); sp_playlist_release(playlist); return result; }