shithub: puzzles

Download patch

ref: ba9e0d586ec8d2662d7ff6065797c6ef327623a7
parent: eda5a867872e718b62ea52373ec9f44aa0c3bda2
author: Simon Tatham <anakin@pobox.com>
date: Fri Sep 18 08:20:32 EDT 2015

Fix OS X build failure due to a deprecated method.

Apple upgraded me to Xcode 7 yesterday, and now [NSString cString]
gives a deprecation warning, which -Werror turns into a full-on build
failure. Explicitly specify an encoding.

(I mention in a comment that there's an alternative piece of API that
I possibly ought to be using instead, but until I make a concrete
decision about where my backwards compatibility threshold is, I'll
leave it as it is for the moment.)

--- a/osx.m
+++ b/osx.m
@@ -761,7 +761,24 @@
     [op setAllowsMultipleSelection:NO];
 
     if ([op runModalForTypes:nil] == NSOKButton) {
-	const char *name = [[[op filenames] objectAtIndex:0] cString];
+        /*
+         * This used to be
+         *
+         *    [[[op filenames] objectAtIndex:0] cString]
+         *
+         * but the plain cString method became deprecated and Xcode 7
+         * started complaining about it. Since OS X 10.9 we can
+         * apparently use the more modern API
+         *
+         *    [[[op URLs] objectAtIndex:0] fileSystemRepresentation]
+         *
+         * but the alternative below still compiles with Xcode 7 and
+         * is a bit more backwards compatible, so I'll try it for the
+         * moment.
+         */
+	const char *name = [[[op filenames] objectAtIndex:0]
+                               cStringUsingEncoding:
+                                   [NSString defaultCStringEncoding]];
 	char *err;
 
         FILE *fp = fopen(name, "r");