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 <graham....@bigpond.com> 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 (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to