From 475b9b67875e82ba9cb3267053773a24e3a8125a Mon Sep 17 00:00:00 2001 From: David Gow Date: Tue, 22 Oct 2013 15:06:27 +0800 Subject: [PATCH 1/2] Add SDL_filesystem.h for SDL 2.0.1 --- src/SDL2.cs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/SDL2.cs b/src/SDL2.cs index 8b4bf9f..b770500 100644 --- a/src/SDL2.cs +++ b/src/SDL2.cs @@ -5311,5 +5311,52 @@ namespace SDL2 ); #endregion + + #region SDL_filesystem.h + + /// + /// Get the path where the application resides. + /// + /// Get the "base path". This is the directory where the application was run + /// from, which is probably the installation directory, and may or may not + /// be the process's current working directory. + /// + /// This returns an absolute path in UTF-8 encoding, and is garunteed to + /// end with a path separator ('\\' on Windows, '/' most other places). + /// + /// string of base dir in UTF-8 encoding + /// The underlying C string is owned by the application, + /// and can be NULL on some platforms. + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)] + public static extern string SDL_GetBasePath(); + + /// + /// Get the user-and-app-specific path where files can be written. + /// + /// Get the "pref dir". This is meant to be where users can write personal + /// files (preferences and save games, etc) that are specific to your + /// application. This directory is unique per user, per application. + /// + /// This function will decide the appropriate location in the native filesystem¸ + /// create the directory if necessary, and return a string of the absolute + /// path to the directory in UTF-8 encoding. + /// + /// The name of your organization. + /// The name of your application. + /// UTF-8 string of user dir in platform-dependent notation. NULL + /// if there's a problem (creating directory failed, etc). + /// The underlying C string is owned by the application, + /// and can be NULL on some platforms. .NET provides some similar functions. + [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] + [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)] + public static extern string SDL_GetPrefPath( + [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))] + string org, + [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))] + string app + ); + + #endregion } } From 85dd4bbb6dbee185448c0addf69104d5d5aa116a Mon Sep 17 00:00:00 2001 From: David Gow Date: Wed, 23 Oct 2013 10:16:27 +0800 Subject: [PATCH 2/2] Extend filesystem docs, remove LeaveAllocated --- src/SDL2.cs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/SDL2.cs b/src/SDL2.cs index b770500..af69df2 100644 --- a/src/SDL2.cs +++ b/src/SDL2.cs @@ -5326,9 +5326,14 @@ namespace SDL2 /// /// string of base dir in UTF-8 encoding /// The underlying C string is owned by the application, - /// and can be NULL on some platforms. + /// and can be NULL on some platforms. + /// + /// This function is not necessarily fast, so you should only + /// call it once and save the string if you need it. + /// + /// This function is only available in SDL 2.0.1 and later. [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)] + [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))] public static extern string SDL_GetBasePath(); /// @@ -5347,9 +5352,14 @@ namespace SDL2 /// UTF-8 string of user dir in platform-dependent notation. NULL /// if there's a problem (creating directory failed, etc). /// The underlying C string is owned by the application, - /// and can be NULL on some platforms. .NET provides some similar functions. + /// and can be NULL on some platforms. .NET provides some similar functions. + /// + /// This function is not necessarily fast, so you should only + /// call it once and save the string if you need it. + /// + /// This function is only available in SDL 2.0.1 and later. [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)] - [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler), MarshalCookie = LPUtf8StrMarshaler.LeaveAllocated)] + [return : MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))] public static extern string SDL_GetPrefPath( [In()] [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(LPUtf8StrMarshaler))] string org,