This file is indexed.

/usr/share/octave/site/m/vlfeat/toolbox/misc/vl_override.m is in octave-vlfeat 0.9.17+dfsg0-6build1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
function config = vl_override(config,update,varargin)
% VL_OVERRIDE  Override structure subset
%   CONFIG = VL_OVERRIDE(CONFIG, UPDATE) copies recursively the fileds
%   of the structure UPDATE to the corresponding fields of the
%   struture CONFIG.
%
%   Usually CONFIG is interpreted as a list of paramters with their
%   default values and UPDATE as a list of new paramete values.
%
%   VL_OVERRIDE(..., 'Warn') prints a warning message whenever: (i)
%   UPDATE has a field not found in CONFIG, or (ii) non-leaf values of
%   CONFIG are overwritten.
%
%   VL_OVERRIDE(..., 'Skip') skips fields of UPDATE that are not found
%   in CONFIG instead of copying them.
%
%   VL_OVERRIDE(..., 'CaseI') matches field names in a
%   case-insensitive manner.
%
%   Remark::
%     Fields are copied at the deepest possible level. For instance,
%     if CONFIG has fields A.B.C1=1 and A.B.C2=2, and if UPDATE is the
%     structure A.B.C1=3, then VL_OVERRIDE() returns a strucuture with
%     fields A.B.C1=3, A.B.C2=2. By contrast, if UPDATE is the
%     structure A.B=4, then the field A.B is copied, and VL_OVERRIDE()
%     returns the structure A.B=4 (specifying 'Warn' would warn about
%     the fact that the substructure B.C1, B.C2 is being deleted).
%
%   Remark::
%     Two fields are matched if they correspond exactly. Specifically,
%     two fileds A(IA).(FA) and B(IA).FB of two struct arrays A and B
%     match if, and only if, (i) A and B have the same dimensions,
%     (ii) IA == IB, and (iii) FA == FB.
%
%   See also: VL_ARGPARSE(), VL_HELP().

% Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson.
% All rights reserved.
%
% This file is part of the VLFeat library and is made available under
% the terms of the BSD license (see the COPYING file).

warn  = false ;
skip  = false ;
err   = false ;
casei = false ;

if length(varargin) == 1 & ~ischar(varargin{1})
  % legacy
  warn = 1 ;
end

if ~warn & length(varargin) > 0
  for i=1:length(varargin)
    switch lower(varargin{i})
      case 'warn'
        warn = true ;
      case 'skip'
        skip = true ;
      case 'err'
        err = true ;
      case 'argparse'
        argparse = true ;
      case 'casei'
        casei = true ;
      otherwise
        error(sprintf('Unknown option ''%s''.',varargin{i})) ;
    end
  end
end

% if CONFIG is not a struct array just copy UPDATE verbatim
if ~isstruct(config)
  config = update ;
  return ;
end

% if CONFIG is a struct array but UPDATE is not, no match can be
% established and we simply copy UPDATE verbatim
if ~isstruct(update)
  config = update ;
  return ;
end

% if CONFIG and UPDATE are both struct arrays, but have different
% dimensions then nom atch can be established and we simply copy
% UPDATE verbatim
if numel(update) ~= numel(config)
  config = update ;
  return ;
end

% if CONFIG and UPDATE are both struct arrays of the same
% dimension, we override recursively each field

for idx=1:numel(update)
  fields = fieldnames(update) ;

  for i = 1:length(fields)
    updateFieldName = fields{i} ;
    if casei
      configFieldName = findFieldI(config, updateFieldName) ;
    else
      configFieldName = findField(config, updateFieldName) ;
    end

    if ~isempty(configFieldName)
      config(idx).(configFieldName) = ...
          vl_override(config(idx).(configFieldName), ...
                      update(idx).(updateFieldName)) ;
    else
      if warn
        warning(sprintf('copied field ''%s'' which is in UPDATE but not in CONFIG', ...
                        updateFieldName)) ;
      end
      if err
        error(sprintf('The field ''%s'' is in UPDATE but not in CONFIG', ...
                      updateFieldName)) ;
      end
      if skip
        if warn
          warning(sprintf('skipping field ''%s'' which is in UPDATE but not in CONFIG', ...
                          updateFieldName)) ;
        end
        continue ;
      end
      config(idx).(updateFieldName) = update(idx).(updateFieldName) ;
    end
  end
end

% --------------------------------------------------------------------
function field = findFieldI(S, matchField)
% --------------------------------------------------------------------
field =  ''  ;
fieldNames = fieldnames(S) ;
for fi=1:length(fieldNames)
  if strcmpi(fieldNames{fi}, matchField)
    field = fieldNames{fi} ;
  end
end

% --------------------------------------------------------------------
function field = findField(S, matchField)
% --------------------------------------------------------------------

field =  '' ;
fieldNames = fieldnames(S) ;
for fi=1:length(fieldNames)
  if strcmp(fieldNames{fi}, matchField)
    field = fieldNames{fi} ;
  end
end