code: private static EConv open0(byte[] source, byte[] destination, int ecflags) {
          // final Encoding senc = EncodingDB.getEncodings().get(source).getEncoding();
          // final Encoding denc = EncodingDB.getEncodings().get(destination).getEncoding();
  
          final int numTrans;
          final Entry[] entries;
          if (source.length == 0 && destination.length == 0) {
              numTrans = 0;
              entries = null;
          } else {
              final ObjPtr<Entry[]> lentries = new ObjPtr<Entry[]>();
              numTrans = searchPath(source, destination, new SearchPathCallback() {
                  int additional = 0;
  
                  public void call(byte[] source, byte[] destination, int depth) {
                      if (lentries.p == null) lentries.p = new Entry[depth + 1 + additional];
                      lentries.p[depth] = getEntry(source, destination);
  
                  }
              });
              entries = lentries.p;
              if (numTrans < 0) {
                  return null;
              }
          }
  
          EConv ec = openByTranscoderEntries(numTrans, entries);
          if (ec == null) return null;
  
          ec.flags = ecflags;
          ec.source = source;
          ec.destination = destination;
          return ec;
      }
docs: /* rb_econv_open0