]> code.delx.au - gnu-emacs/commitdiff
(Fx_server_version): Use gestaltSystemVersionMajor,
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Thu, 5 Jan 2006 08:14:33 +0000 (08:14 +0000)
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Thu, 5 Jan 2006 08:14:33 +0000 (08:14 +0000)
gestaltSystemVersionMinor, and gestaltSystemVersionBugFix on Mac
OS X 10.4 and later.

src/macfns.c

index 4ede8b7971b8a35a509689ac5fe64b849d55c159..110b697ce5eac4f5c9095ad951acaf9f5370a91e 100644 (file)
@@ -2880,24 +2880,37 @@ If omitted or nil, that stands for the selected frame's display.  */)
      (display)
      Lisp_Object display;
 {
-  int mac_major_version;
-  SInt32 response;
+  UInt32 response, major, minor, bugfix;
   OSErr err;
 
   BLOCK_INPUT;
   err = Gestalt (gestaltSystemVersion, &response);
+  if (err == noErr)
+    if (response >= 0x00001040)
+      {
+       err = Gestalt ('sys1', &major); /* gestaltSystemVersionMajor */
+       if (err == noErr)
+         err = Gestalt ('sys2', &minor); /* gestaltSystemVersionMinor */
+       if (err == noErr)
+         err = Gestalt ('sys3', &bugfix); /* gestaltSystemVersionBugFix */
+      }
+    else
+      {
+       bugfix = response & 0xf;
+       response >>= 4;
+       minor = response & 0xf;
+       response >>= 4;
+       /* convert BCD to int */
+       major = response - (response >> 4) * 6;
+      }
   UNBLOCK_INPUT;
 
   if (err != noErr)
     error ("Cannot get Mac OS version");
 
-  mac_major_version = (response >> 8) & 0xff;
-  /* convert BCD to int */
-  mac_major_version -= (mac_major_version >> 4) * 6;
-
-  return Fcons (make_number (mac_major_version),
-               Fcons (make_number ((response >> 4) & 0xf),
-                      Fcons (make_number (response & 0xf),
+  return Fcons (make_number (major),
+               Fcons (make_number (minor),
+                      Fcons (make_number (bugfix),
                              Qnil)));
 }