Skip to content
Snippets Groups Projects
  1. Dec 27, 2018
  2. Dec 02, 2018
    • Lioncash's avatar
      filesystem: De-globalize registered_cache_union · db4523f1
      Lioncash authored
      We can just return a new instance of this when it's requested. This only
      ever holds pointers to the existing registed caches, so it's not a large
      object. Plus, this also gets rid of the need to keep around a separate
      member function just to properly clear out the union.
      
      Gets rid of one of five globals in the filesystem code.
      db4523f1
  3. Dec 01, 2018
    • Lioncash's avatar
      service/fsp_srv: Implement CleanDirectoryRecursively · a7d9fe99
      Lioncash authored
      This is the same behavior-wise as DeleteDirectoryRecursively, with the
      only difference being that it doesn't delete the top level directory in
      the hierarchy, so given:
      
      root_dir/
        - some_dir/
          - File.txt
        - OtherFile.txt
      
      The end result is just:
      
      root_dir/
      a7d9fe99
  4. Nov 19, 2018
  5. Nov 16, 2018
  6. Nov 02, 2018
  7. Oct 29, 2018
  8. Oct 16, 2018
    • Lioncash's avatar
      file_sys/registered_cache: Use unique_ptr and regular pointers instead of... · 39ae73b3
      Lioncash authored
      file_sys/registered_cache: Use unique_ptr and regular pointers instead of shared_ptrs where applicable
      
      The data retrieved in these cases are ultimately chiefly owned by either
      the RegisteredCache instance itself, or the filesystem factories. Both
      these should live throughout the use of their contained data. If they
      don't, it should be considered an interface/design issue, and using
      shared_ptr instances here would mask that, as the data would always be
      prolonged after the main owner's lifetime ended.
      
      This makes the lifetime of the data explicit and makes it harder to
      accidentally create cyclic references. It also makes the interface
      slightly more flexible than the previous API, as a shared_ptr can be
      created from a unique_ptr, but not the other way around, so this allows
      for that use-case if it ever becomes necessary in some form.
      39ae73b3
  9. Oct 13, 2018
    • Lioncash's avatar
      filesystem: Make CreateFactories() and InstallInterface() take a VfsFilesystem... · 0149162d
      Lioncash authored
      filesystem: Make CreateFactories() and InstallInterface() take a VfsFilesystem instance by reference
      
      Neither of these functions alter the ownership of the provided pointer,
      so we can simply make the parameters a reference rather than a direct
      shared pointer alias. This way we also disallow passing incorrect memory values like
      nullptr.
      0149162d
  10. Oct 05, 2018
  11. Sep 21, 2018
  12. Sep 19, 2018
  13. Sep 11, 2018
    • Lioncash's avatar
      hle/service: Default constructors and destructors in the cpp file where applicable · 6ac955a0
      Lioncash authored
      When a destructor isn't defaulted into a cpp file, it can cause the use
      of forward declarations to seemingly fail to compile for non-obvious
      reasons. It also allows inlining of the construction/destruction logic
      all over the place where a constructor or destructor is invoked, which
      can lead to code bloat. This isn't so much a worry here, given the
      services won't be created and destroyed frequently.
      
      The cause of the above mentioned non-obvious errors can be demonstrated
      as follows:
      
      ------- Demonstrative example, if you know how the described error happens, skip forwards -------
      
      Assume we have the following in the header, which we'll call "thing.h":
      
      \#include <memory>
      
      // Forward declaration. For example purposes, assume the definition
      // of Object is in some header named "object.h"
      class Object;
      
      class Thing {
      public:
          // assume no constructors or destructors are specified here,
          // or the constructors/destructors are defined as:
          //
          // Thing() = default;
          // ~Thing() = default;
          //
      
          // ... Some interface member functions would be defined here
      
      private:
          std::shared_ptr<Object> obj;
      };
      
      If this header is included in a cpp file, (which we'll call "main.cpp"),
      this will result in a compilation error, because even though no
      destructor is specified, the destructor will still need to be generated by
      the compiler because std::shared_ptr's destructor is *not* trivial (in
      other words, it does something other than nothing), as std::shared_ptr's
      destructor needs to do two things:
      
      1. Decrement the shared reference count of the object being pointed to,
         and if the reference count decrements to zero,
      
      2. Free the Object instance's memory (aka deallocate the memory it's
         pointing to).
      
      And so the compiler generates the code for the destructor doing this inside main.cpp.
      
      Now, keep in mind, the Object forward declaration is not a complete type. All it
      does is tell the compiler "a type named Object exists" and allows us to
      use the name in certain situations to avoid a header dependency. So the
      compiler needs to generate destruction code for Object, but the compiler
      doesn't know *how* to destruct it. A forward declaration doesn't tell
      the compiler anything about Object's constructor or destructor. So, the
      compiler will issue an error in this case because it's undefined
      behavior to try and deallocate (or construct) an incomplete type and
      std::shared_ptr and std::unique_ptr make sure this isn't the case
      internally.
      
      Now, if we had defaulted the destructor in "thing.cpp", where we also
      include "object.h", this would never be an issue, as the destructor
      would only have its code generated in one place, and it would be in a
      place where the full class definition of Object would be visible to the
      compiler.
      
      ---------------------- End example ----------------------------
      
      Given these service classes are more than certainly going to change in
      the future, this defaults the constructors and destructors into the
      relevant cpp files to make the construction and destruction of all of
      the services consistent and unlikely to run into cases where forward
      declarations are indirectly causing compilation errors. It also has the
      plus of avoiding the need to rebuild several services if destruction
      logic changes, since it would only be necessary to recompile the single
      cpp file.
      6ac955a0
  14. Sep 04, 2018
  15. Sep 02, 2018
  16. Aug 24, 2018
  17. Aug 23, 2018
  18. Aug 21, 2018
  19. Aug 19, 2018
  20. Aug 12, 2018
  21. Aug 09, 2018
  22. Aug 01, 2018
  23. Jul 24, 2018
    • Zach Hilman's avatar
      VFS Regression and Accuracy Fixes (#776) · 59cb2584
      Zach Hilman authored
      * Regression and Mode Fixes
      
      * Review Fixes
      
      * string_view correction
      
      * Add operator& for FileSys::Mode
      
      * Return std::string from SanitizePath
      
      * Farming Simulator Fix
      
      * Use != With mode operator&
      59cb2584
  24. Jul 22, 2018
  25. Jul 21, 2018
    • Lioncash's avatar
      file_util: Use an enum class for GetUserPath() · d66b43da
      Lioncash authored
      Instead of using an unsigned int as a parameter and expecting a user to
      always pass in the correct values, we can just convert the enum into an
      enum class and use that type as the parameter type instead, which makes
      the interface more type safe.
      
      We also get rid of the bookkeeping "NUM_" element in the enum by just
      using an unordered map. This function is generally low-frequency in
      terms of calls (and I'd hope so, considering otherwise would mean we're
      slamming the disk with IO all the time) so I'd consider this acceptable
      in this case.
      d66b43da
  26. Jul 19, 2018
  27. Jul 18, 2018
  28. Jul 17, 2018
  29. Jul 08, 2018
  30. Jul 06, 2018
    • Zach Hilman's avatar
      Virtual Filesystem (#597) · 77c684c1
      Zach Hilman authored
      * Add VfsFile and VfsDirectory classes
      
      * Finish abstract Vfs classes
      
      * Implement RealVfsFile (computer fs backend)
      
      * Finish RealVfsFile and RealVfsDirectory
      
      * Finished OffsetVfsFile
      
      * More changes
      
      * Fix import paths
      
      * Major refactor
      
      * Remove double const
      
      * Use experimental/filesystem or filesystem depending on compiler
      
      * Port partition_filesystem
      
      * More changes
      
      * More Overhaul
      
      * FSP_SRV fixes
      
      * Fixes and testing
      
      * Try to get filesystem to compile
      
      * Filesystem on linux
      
      * Remove std::filesystem and document/test
      
      * Compile fixes
      
      * Missing include
      
      * Bug fixes
      
      * Fixes
      
      * Rename v_file and v_dir
      
      * clang-format fix
      
      * Rename NGLOG_* to LOG_*
      
      * Most review changes
      
      * Fix TODO
      
      * Guess 'main' to be Directory by filename
      77c684c1
  31. Jul 03, 2018
Loading