libzypp  17.31.31
metadatahelper.cc
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
9 #include "metadatahelper.h"
10 
11 #include <zypp-core/base/IOTools.h>
12 #include <memory>
13 
14 namespace zypp::media {
15 
16  MetaDataType looks_like_meta_data(const std::vector<char> &data)
17  {
18  if ( data.empty() )
19  return MetaDataType::None;
20 
21  const char *p = data.data();
22  while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')
23  p++;
24 
25  // If we have a zsync file, it has to start with zsync:
26  if ( !strncasecmp( p, "zsync:", 6 ) ) {
27  return MetaDataType::Zsync;
28  }
29 
30  if (!strncasecmp(p, "<?xml", 5))
31  {
32  while (*p && *p != '>')
33  p++;
34  if (*p == '>')
35  p++;
36  while (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')
37  p++;
38  }
39  bool ret = !strncasecmp( p, "<metalink", 9 ) ? true : false;
40  if ( ret )
42 
43  return MetaDataType::None;
44  }
45 
47  {
48  std::unique_ptr<FILE, int(*)(FILE *)> fd( fopen( file.c_str(), "r" ), &fclose );
49  return looks_like_meta_file( fd.get() );
50  }
51 
53  {
54  if ( !file )
55  return MetaDataType::None;
57  }
58 
59 }
const char * c_str() const
String representation.
Definition: Pathname.h:110
MetaDataType looks_like_meta_file(const Pathname &file)
std::vector< char > peek_data_fd(FILE *fd, off_t offset, size_t count)
Definition: IOTools.cc:171
MetaDataType looks_like_meta_data(const std::vector< char > &data)
constexpr auto minMetalinkProbeSize