rc_t nlt_copy_namelist( const KNamelist *src, const KNamelist ** dst ) { VNamelist *v_names; rc_t rc = VNamelistMake ( &v_names, 5 ); if ( rc == 0 ) { uint32_t count; rc = KNamelistCount( src, &count ); if ( rc == 0 ) { uint32_t idx; for ( idx = 0; idx < count && rc == 0; ++idx ) { const char *s; rc = KNamelistGet( src, idx, &s ); if ( rc == 0 && s != NULL ) rc = VNamelistAppend ( v_names, s ); } } if ( rc == 0 ) rc = VNamelistToConstNamelist ( v_names, dst ); VNamelistRelease( v_names ); } return rc; }
LIB_EXPORT rc_t CC XFSOwpListKeys ( const struct XFSOwp * self, const struct KNamelist ** Keys ) { rc_t RCt; struct VNamelist * List; RCt = 0; if ( self == NULL || Keys == NULL ) { return XFS_RC ( rcNull ); } * Keys = NULL; RCt = VNamelistMake ( & List, 16 /* ?? */ ); if ( RCt == 0 ) { BSTreeForEach ( ( BSTree * ) self, false, _ListKeysCallback, List ); RCt = VNamelistToConstNamelist ( List, Keys ); VNamelistRelease ( List ); } return RCt; } /* XFSOwpListKeys () */
rc_t nlt_remove_names_from_namelist( const KNamelist *source, const KNamelist **dest, const KNamelist *to_remove ) { rc_t rc = 0; uint32_t count; if ( source == NULL || dest == NULL || to_remove == NULL ) return RC( rcVDB, rcNoTarg, rcConstructing, rcParam, rcNull ); *dest = NULL; rc = KNamelistCount( source, &count ); if ( rc == 0 && count > 0 ) { VNamelist *cleaned; rc = VNamelistMake ( &cleaned, count ); if ( rc == 0 ) { uint32_t idx; for ( idx = 0; idx < count && rc == 0; ++idx ) { const char *s; rc = KNamelistGet( source, idx, &s ); if ( rc == 0 ) { if ( !nlt_is_name_in_namelist( to_remove, s ) ) rc = VNamelistAppend ( cleaned, s ); } rc = VNamelistToConstNamelist ( cleaned, dest ); } } } return rc; }
rc_t nlt_build_intersect( const KNamelist *nl1, const KNamelist *nl2, const KNamelist ** dst ) { VNamelist *v_names; rc_t rc = VNamelistMake ( &v_names, 5 ); if ( rc == 0 ) { /* loop through nl1: if a entry is found in nl2 -> add it to dst */ uint32_t count; rc = KNamelistCount( nl1, &count ); if ( rc == 0 ) { uint32_t idx; for ( idx = 0; idx < count && rc == 0; ++idx ) { const char *s; rc = KNamelistGet( nl1, idx, &s ); if ( rc == 0 && s != NULL ) { if ( nlt_is_name_in_namelist( nl2, s ) ) rc = VNamelistAppend ( v_names, s ); } } } if ( rc == 0 ) rc = VNamelistToConstNamelist ( v_names, dst ); VNamelistRelease( v_names ); } return rc; }
rc_t nlt_make_namelist_from_string( const KNamelist **list, const char * src ) { VNamelist *v_names; rc_t rc = VNamelistMake ( &v_names, 5 ); if ( rc == 0 ) { char * s = string_dup_measure ( src, NULL ); if ( s ) { uint32_t str_begin = 0; uint32_t str_end = 0; char c; do { c = s[ str_end ]; if ( c == ',' || c == 0 ) { if ( str_begin < str_end ) { char c_temp = c; s[ str_end ] = 0; rc = VNamelistAppend ( v_names, &(s[str_begin]) ); s[ str_end ] = c_temp; } str_begin = str_end + 1; } str_end++; } while ( c != 0 && rc == 0 ); free( s ); } if ( rc == 0 ) rc = VNamelistToConstNamelist ( v_names, list ); VNamelistRelease( v_names ); } return rc; }