This is NameCache.m in view mode; [Download] [Up]
//============================================================================= // // Copyright (C) 1995-1997 by Paul S. McCarthy and Eric Sunshine. // Written by Paul S. McCarthy and Eric Sunshine. // All Rights Reserved. // // This notice may not be removed from this source code. // // This object is included in the MiscKit by permission from the authors // and its use is governed by the MiscKit license, found in the file // "License.rtf" in the MiscKit distribution. Please refer to that file // for a list of all applicable permissions and restrictions. // //============================================================================= //----------------------------------------------------------------------------- // NameCache.m // // Data structure and routines for caching user names and group names. // //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // $Id: NameCache.m,v 1.1 97/01/12 15:19:44 sunshine Exp $ // $Log: NameCache.m,v $ // Revision 1.1 97/01/12 15:19:44 sunshine // v28: Name cache. // //----------------------------------------------------------------------------- #import "NameCache.h" #import <grp.h> #import <pwd.h> #import <stdio.h> #import <mach/mach_init.h> // vm_page_size #import <objc/HashTable.h> static NXZone* theZone = 0; //----------------------------------------------------------------------------- // store_string //----------------------------------------------------------------------------- static char const* store_string( char const* s ) { char* t = 0; if (s != 0) t = NXCopyStringBufferFromZone( s, theZone ); return t; } //----------------------------------------------------------------------------- // str_int //----------------------------------------------------------------------------- static char const* str_int( int x ) { static char buff[ 32 ]; sprintf( buff, "%d", x ); return buff; } //============================================================================= // NAME CACHE //============================================================================= @implementation NameCache //----------------------------------------------------------------------------- // + initialize //----------------------------------------------------------------------------- + (id)initialize { if (theZone == 0) theZone = NXCreateZone( vm_page_size, vm_page_size, NO ); return self; } //----------------------------------------------------------------------------- // - init //----------------------------------------------------------------------------- - (id)init { [super init]; table = [[HashTable alloc] initKeyDesc:"i" valueDesc:"*"]; return self; } //----------------------------------------------------------------------------- // - resolve: //----------------------------------------------------------------------------- - (char const*)resolve:(int)x { [self subclassResponsibility:_cmd]; return 0; } //----------------------------------------------------------------------------- // - store: //----------------------------------------------------------------------------- - (char const*)store:(int)ident { char const* name = store_string( [self resolve:ident] ); [table insertKey:(void const*)ident value:(void*)name]; return name; } //----------------------------------------------------------------------------- // - lookup: //----------------------------------------------------------------------------- - (char const*)lookup:(int)ident { char const* name = 0; if ([table isKey:(void const*)ident]) name = [table valueForKey:(void const*)ident]; else name = [self store:ident]; return name; } @end //============================================================================= // OWNER CACHE //============================================================================= @implementation OwnerCache //----------------------------------------------------------------------------- // - resolve: //----------------------------------------------------------------------------- - (char const*)resolve:(int)uid { char const* s = 0; struct passwd const* const pw = getpwuid( uid ); if (pw != 0) s = pw->pw_name; else s = str_int( uid ); return s; } //----------------------------------------------------------------------------- // + commonInstance //----------------------------------------------------------------------------- + (id)commonInstance { static id obj = 0; if (obj == 0) obj = [[self allocFromZone:theZone] init]; return obj; } @end //============================================================================= // GROUP CACHE //============================================================================= @implementation GroupCache //----------------------------------------------------------------------------- // - resolve: //----------------------------------------------------------------------------- - (char const*)resolve:(int)gid { char const* s = 0; struct group const* const gr = getgrgid( gid ); if (gr != 0) s = gr->gr_name; else s = str_int( gid ); return s; } //----------------------------------------------------------------------------- // + commonInstance //----------------------------------------------------------------------------- + (id)commonInstance { static id obj = 0; if (obj == 0) obj = [[self allocFromZone:theZone] init]; return obj; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.