func: static AVIOContext * wtvfile_open2(AVFormatContext *s, const uint8_t *buf, int buf_size, const uint8_t *filename, int filename_size)
  
  {
  
      const uint8_t *buf_end = buf + buf_size;
  
  
  
      while(buf + 48 <= buf_end) {
  
          int dir_length, name_size, first_sector, depth;
  
          uint64_t file_length;
  
          const uint8_t *name;
  
          if (ff_guidcmp(buf, dir_entry_guid)) {
  
              av_log(s, AV_LOG_ERROR, "unknown guid "FF_PRI_GUID", expected dir_entry_guid; "
  
                     "remaining directory entries ignored\n", FF_ARG_GUID(buf));
  
              break;
  
          }
  
          dir_length  = AV_RL16(buf + 16);
  
          file_length = AV_RL64(buf + 24);
  
          name_size   = 2 * AV_RL32(buf + 32);
  
          if (buf + 48 + name_size > buf_end) {
  
              av_log(s, AV_LOG_ERROR, "filename exceeds buffer size; remaining directory entries ignored\n");
  
              break;
  
          }
  
          first_sector = AV_RL32(buf + 40 + name_size);
  
          depth        = AV_RL32(buf + 44 + name_size);
  
  
  
          /* compare file name; test optional null terminator */
  
          name = buf + 40;
  
          if (name_size >= filename_size &&
  
              !memcmp(name, filename, filename_size) &&
  
              (name_size < filename_size + 2 || !AV_RN16(name + filename_size)))
  
              return wtvfile_open_sector(first_sector, file_length, depth, s);
  
  
  
          buf += dir_length;
  
      }
  
      return 0;
  
  }
  