@@ -1796,7 +1796,6 @@ int kvtree_write_to_gather(const char* prefix, kvtree* data, int ranks)
1796
1796
1797
1797
return rc ;
1798
1798
}
1799
- ///@}
1800
1799
1801
1800
/*
1802
1801
* Given a prefix passed to a kvtree_write_gather() (like "/tmp/rank2file",
@@ -1827,15 +1826,15 @@ int kvtree_read_scatter_single(const char* prefix, kvtree* data)
1827
1826
kvtree * final_tree = kvtree_new ();
1828
1827
int rc = kvtree_read_file (prefix , final_tree );
1829
1828
if (rc != KVTREE_SUCCESS ) {
1830
- kvtree_free (& final_tree );
1829
+ kvtree_delete (& final_tree );
1831
1830
kvtree_err ("Couldn't read in high level kvtree file %s\n" , prefix );
1832
1831
return rc ;
1833
1832
}
1834
1833
1835
1834
unsigned long expected_ranks ;
1836
1835
rc = kvtree_util_get_unsigned_long (final_tree , "RANKS" , & expected_ranks );
1837
1836
if (rc != KVTREE_SUCCESS ) {
1838
- kvtree_free (& final_tree );
1837
+ kvtree_delete (& final_tree );
1839
1838
kvtree_err ("Couldn't get RANKS for %s\n" , prefix );
1840
1839
return rc ;
1841
1840
}
@@ -1845,37 +1844,32 @@ int kvtree_read_scatter_single(const char* prefix, kvtree* data)
1845
1844
final_tree = kvtree_new ();
1846
1845
1847
1846
/* Look at all the subfiles with our prefix and read in the file lists */
1848
- char * prefix_dir ;
1849
- char * prefix_dir_copy = NULL ;
1850
- char * prefix_file ;
1851
- char * prefix_file_copy = NULL ;
1852
- prefix_dir_copy = strdup (prefix );
1853
- prefix_dir = dirname (prefix_dir_copy );
1854
- prefix_file_copy = strdup (prefix );
1855
- prefix_file = basename (prefix_file_copy );
1847
+ char * prefix_dir_copy = strdup (prefix );
1848
+ char * prefix_dir = dirname (prefix_dir_copy );
1849
+ char * prefix_file_copy = strdup (prefix );
1850
+ char * prefix_file = basename (prefix_file_copy );
1856
1851
1857
1852
/* Create our regex to match our prefix files */
1858
1853
char pattern [PATH_MAX ];
1859
1854
snprintf (pattern , sizeof (pattern ), "^%s\\.0\\.[0-9]+$" , prefix_file );
1860
1855
pattern [sizeof (pattern ) - 1 ] = '\0' ;
1856
+
1861
1857
regex_t regex ;
1862
1858
rc = regcomp (& regex , pattern , REG_EXTENDED );
1863
1859
if (rc ) {
1864
1860
rc = KVTREE_FAILURE ;
1865
1861
goto end ;
1866
1862
}
1867
1863
1868
- DIR * d ;
1869
- struct dirent * dir ;
1870
- d = opendir (prefix_dir );
1864
+ DIR * d = opendir (prefix_dir );
1871
1865
if (!d ) {
1872
1866
rc = KVTREE_FAILURE ;
1873
1867
goto end ;
1874
1868
}
1875
1869
1876
- char tmp [PATH_MAX ];
1877
- unsigned long actual_ranks = 0 ;
1878
1870
/* For each file/dir in our prefix dir */
1871
+ unsigned long actual_ranks = 0 ;
1872
+ struct dirent * dir ;
1879
1873
while ((dir = readdir (d )) != NULL ) {
1880
1874
/*
1881
1875
* Search for any file starting with "prefix_file."
@@ -1887,23 +1881,21 @@ int kvtree_read_scatter_single(const char* prefix, kvtree* data)
1887
1881
/* subfile matches */
1888
1882
1889
1883
/* Construct the full path to the subfile kvtree */
1884
+ char tmp [PATH_MAX ];
1890
1885
memset (tmp , 0 , sizeof (tmp ));
1891
1886
snprintf (tmp , sizeof (tmp ), "%s/%s" , prefix_dir , dir -> d_name );
1892
1887
tmp [sizeof (tmp ) - 1 ] = '\0' ;
1893
1888
1894
1889
/* Read in the subfile */
1895
- kvtree * subfile_tree = NULL ;
1896
- kvtree * subfile_rank_tree = NULL ;
1897
- subfile_rank_tree = NULL ;
1898
- subfile_tree = kvtree_new ();
1890
+ kvtree * subfile_tree = kvtree_new ();
1899
1891
rc = kvtree_read_file (tmp , subfile_tree );
1900
1892
if (rc == KVTREE_SUCCESS ) {
1901
1893
/* Sanity: each subfile we want will have LEVEL=0 */
1902
1894
unsigned long level ;
1903
1895
rc = kvtree_util_get_unsigned_long (subfile_tree , "LEVEL" , & level );
1904
1896
if (rc == KVTREE_SUCCESS && level == 0 ) {
1905
1897
/* Break off and remove the "RANK" subtree from the rank2file tree */
1906
- subfile_rank_tree = kvtree_extract (subfile_tree , "RANK" );
1898
+ kvtree * subfile_rank_tree = kvtree_extract (subfile_tree , "RANK" );
1907
1899
if (subfile_rank_tree ) {
1908
1900
if (kvtree_merge (final_tree , subfile_rank_tree ) == KVTREE_SUCCESS ) {
1909
1901
actual_ranks += kvtree_size (subfile_rank_tree );
@@ -1928,6 +1920,7 @@ int kvtree_read_scatter_single(const char* prefix, kvtree* data)
1928
1920
1929
1921
return KVTREE_SUCCESS ;
1930
1922
}
1923
+ ///@}
1931
1924
1932
1925
/* ================================================= */
1933
1926
/** @name Print hash and elements to stdout for debugging */
0 commit comments