vlc | branch: master | Marvin Scholz <epira...@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>

_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to