[vlc-commits] macOS: Add initialization of breakpad crash reporter
Marvin Scholz
git at videolan.org
Fri Feb 17 21:18:23 CET 2017
vlc | branch: master | Marvin Scholz <epirat07 at gmail.com> | Tue Feb 14 23:50:29 2017 +0100| [9fe1c7c2ca01e433427edbd1a244cff745aa8c85] | committer: Marvin Scholz
macOS: Add initialization of breakpad crash reporter
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9fe1c7c2ca01e433427edbd1a244cff745aa8c85
---
bin/darwinvlc.m | 42 ++++++++++++++++++++++++++++++
modules/gui/macosx/Resources/Info.plist.in | 8 ++++++
2 files changed, 50 insertions(+)
diff --git a/bin/darwinvlc.m b/bin/darwinvlc.m
index 93314c8..981d7a9 100644
--- a/bin/darwinvlc.m
+++ b/bin/darwinvlc.m
@@ -35,6 +35,10 @@
#import <CoreFoundation/CoreFoundation.h>
#import <Cocoa/Cocoa.h>
+#ifdef HAVE_BREAKPAD
+#import <Breakpad/Breakpad.h>
+#endif
+
/**
* Handler called when VLC asks to terminate the program.
@@ -75,6 +79,36 @@ static void vlc_terminate(void *data)
});
}
+#ifdef HAVE_BREAKPAD
+BreakpadRef initBreakpad()
+{
+ BreakpadRef bp = nil;
+
+ /* Create caches directory in case it does not exist */
+ NSFileManager *fileManager = [NSFileManager defaultManager];
+ NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
+ NSString *bundleName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"];
+ NSString *cacheAppPath = [cachePath stringByAppendingPathComponent:bundleName];
+ if (![fileManager fileExistsAtPath:cacheAppPath]) {
+ [fileManager createDirectoryAtPath:cacheAppPath withIntermediateDirectories:NO attributes:nil error:nil];
+ }
+
+ /* Get Info.plist config */
+ NSMutableDictionary *breakpad_config = [[[NSBundle mainBundle] infoDictionary] mutableCopy];
+
+ /* Use in-process reporting */
+ [breakpad_config setObject:[NSNumber numberWithBool:YES]
+ forKey:@BREAKPAD_IN_PROCESS];
+
+ /* Set dump location */
+ [breakpad_config setObject:cacheAppPath
+ forKey:@BREAKPAD_DUMP_DIRECTORY];
+
+ bp = BreakpadCreate(breakpad_config);
+ return bp;
+}
+#endif
+
/*****************************************************************************
* main: parse command line, start interface and spawn threads.
*****************************************************************************/
@@ -259,6 +293,10 @@ int main(int i_argc, const char *ppsz_argv[])
* runloop is used. Otherwise, [NSApp run] needs to be called, which setups more stuff
* before actually starting the loop.
*/
+#ifdef HAVE_BREAKPAD
+ BreakpadRef breakpad;
+ breakpad = initBreakpad();
+#endif
@autoreleasepool {
if(NSApp == nil) {
CFRunLoopRun();
@@ -277,5 +315,9 @@ out:
libvlc_release(vlc);
+#ifdef HAVE_BREAKPAD
+ BreakpadRelease(breakpad);
+#endif
+
return ret;
}
diff --git a/modules/gui/macosx/Resources/Info.plist.in b/modules/gui/macosx/Resources/Info.plist.in
index 28e6738..31535d3 100644
--- a/modules/gui/macosx/Resources/Info.plist.in
+++ b/modules/gui/macosx/Resources/Info.plist.in
@@ -1477,6 +1477,14 @@
<string>@VERSION@</string>
<key>CFBundleSignature</key>
<string>VLC#</string>
+ <key>BreakpadProduct</key>
+ <string>VLC-macOS</string>
+ <key>BreakpadVendor</key>
+ <string>VideoLAN</string>
+ <key>BreakpadRequestComments</key>
+ <string>1</string>
+ <key>BreakpadURL</key>
+ <string>https://crashes.videolan.org/crashreports</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
More information about the vlc-commits
mailing list