• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: API for fetching the computer name in cocoa
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: API for fetching the computer name in cocoa


  • Subject: Re: API for fetching the computer name in cocoa
  • From: "Gerriet M. Denkmann" <email@hidden>
  • Date: Fri, 12 Jun 2009 09:28:22 +0200


On 12 Jun 2009, at 08:58, Graham Cox wrote:


On 12/06/2009, at 4:24 PM, Gerriet M. Denkmann wrote:


On 11 Jun 2009, at 18:55, Graham Cox <email@hidden> wrote:

On 12/06/2009, at 2:08 AM, Arun wrote:

Hi All,

Is there any API in cocoa which can be used to fetch computer name
which is
getting displayed in Finder?

I'm not sure if there's a better way, but you can use the Gestalt function with the gestaltUserVisibleMachineName selector.

I tried:
SInt32 response = 0xdeadbeef;
OSErr resul1 = Gestalt( gestaltUserVisibleMachineName, &response );
if ( resul1 != noErr ) .... // error handling
NSLog(@"%s response = %ld = %#lx", __FUNCTION__, response, response);
and got no error and:
response = 1224224 = 0x12ae20


Where is my mistake?

[...]
But if you want to press on, the response is a StringPtr, which is a pointer to a pascal string. You'll need to convert that to an NSString, first by converting to a C string (generally easy to do - just append a /0 and take the pointer to the 1st character), then an NSString using a suitable encoding.

Thanks a lot.
Somehow the documentation forgot to mention the fact that the response is a StringPtr (or did I just not see it?).


Anyway here is my final code:

   		SInt32 response = 0xdeadbeef;
		OSErr resul1 = Gestalt( gestaltUserVisibleMachineName, &response );
	 	if ( resul1 != noErr )	//	error
		{
			.... error handling ....
		};

StringPtr c = (void *)response;
NSUInteger cle = *c;
char *cu = malloc( cle + 1);
memcpy( cu, c + 1, cle);
cu[cle] = '\0';
NSLog(@"%s gestaltUserVisibleMachineName → \"%s\" (%lu chars)", __FUNCTION__, cu, cle);
free(cu);

NSString *a = (NSString *)CSCopyMachineName();
NSLog(@"%s CSCopyMachineName → \"%@\"", __FUNCTION__, a);
[ a release ];

CFStringEncoding nameEncoding = 0xbeefdead;
NSString *b = (NSString *)SCDynamicStoreCopyComputerName( NULL, &nameEncoding );
if ( nameEncoding == kCFStringEncodingMacRoman )
{
// the encoding associated with the computer or host name.
// MacRoman does NOT contain SUPERSCRIPT TWO
NSLog(@"%s SCDynamicStoreCopyComputerName → \"%@\" nameEncoding = MacRoman", __FUNCTION__, b);
}
else
{
NSLog(@"%s SCDynamicStoreCopyComputerName → \"%@\" nameEncoding %u", __FUNCTION__,
b, nameEncoding);
};
[ b release ];


and the result is:

... gestaltUserVisibleMachineName → "MacBook4,1" (10 chars)
... CSCopyMachineName → "Quitte²"
... SCDynamicStoreCopyComputerName → "Quitte²" nameEncoding = MacRoman


I have no idea how my machine name (containing a SUPERSCRIPT TWO) could ever be encoded in or associated with MacRoman, but I don't really care.


Kind regards,

Gerriet.

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


References: 
 >Re: API for fetching the computer name in cocoa (From: "Gerriet M. Denkmann" <email@hidden>)
 >Re: API for fetching the computer name in cocoa (From: Graham Cox <email@hidden>)

  • Prev by Date: Re: Passing References During Initialization / Nib Loading
  • Next by Date: Re: [NSTask] -launch return
  • Previous by thread: Re: API for fetching the computer name in cocoa
  • Next by thread: Re: API for fetching the computer name in cocoa
  • Index(es):
    • Date
    • Thread