kodi
EmuFileWrapper.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "threads/CriticalSection.h"
12 
13 #include <stdio.h>
14 
15 #if defined(TARGET_POSIX) && !defined(TARGET_DARWIN) && !defined(TARGET_FREEBSD) && !defined(TARGET_ANDROID) && !defined(__UCLIBC__)
16 #define _file _fileno
17 #elif defined(__UCLIBC__)
18 #define _file __filedes
19 #endif
20 
21 #define MAX_EMULATED_FILES 50
22 #define FILE_WRAPPER_OFFSET 0x00000200
23 
24 namespace XFILE
25 {
26  class CFile;
27 }
28 
29 typedef struct stEmuFileObject
30 {
31  XFILE::CFile* file_xbmc;
32  CCriticalSection *file_lock;
33  int mode;
34  //Stick this last to avoid 3-7 bytes of padding
35  bool used;
36  int fd;
38 
40 {
41 public:
43  ~CEmuFileWrapper();
44 
48  void CleanUp();
49 
50  EmuFileObject* RegisterFileObject(XFILE::CFile* pFile);
51  void UnRegisterFileObjectByDescriptor(int fd);
52  void UnRegisterFileObjectByStream(FILE* stream);
53  void LockFileObjectByDescriptor(int fd);
54  bool TryLockFileObjectByDescriptor(int fd);
55  void UnlockFileObjectByDescriptor(int fd);
56  EmuFileObject* GetFileObjectByDescriptor(int fd);
57  EmuFileObject* GetFileObjectByStream(FILE* stream);
58  XFILE::CFile* GetFileXbmcByDescriptor(int fd);
59  XFILE::CFile* GetFileXbmcByStream(FILE* stream);
60  static int GetDescriptorByStream(FILE* stream);
61  FILE* GetStreamByDescriptor(int fd);
62  static constexpr bool DescriptorIsEmulatedFile(int fd)
63  {
64  return fd >= FILE_WRAPPER_OFFSET && fd < FILE_WRAPPER_OFFSET + MAX_EMULATED_FILES;
65  }
66  static bool StreamIsEmulatedFile(FILE* stream);
67 private:
68  EmuFileObject m_files[MAX_EMULATED_FILES];
69  CCriticalSection m_criticalSection;
70 };
71 
72 extern CEmuFileWrapper g_emuFileWrapper;
73 
Definition: Scraper.h:41
Definition: EmuFileWrapper.h:29
Definition: File.h:37
Definition: SimpleFS.h:27
Definition: EmuFileWrapper.h:39