|
From: <cre...@us...> - 2006-06-26 18:41:18
|
Revision: 1422 Author: creecode Date: 2006-06-26 11:41:12 -0700 (Mon, 26 Jun 2006) ViewCVS: http://svn.sourceforge.net/frontierkernel/?rev=1422&view=rev Log Message: ----------- FSRef-ized Modified Paths: -------------- Frontier/branches/FSRef_Migration/Common/source/file.c Modified: Frontier/branches/FSRef_Migration/Common/source/file.c =================================================================== --- Frontier/branches/FSRef_Migration/Common/source/file.c 2006-06-26 18:21:12 UTC (rev 1421) +++ Frontier/branches/FSRef_Migration/Common/source/file.c 2006-06-26 18:41:12 UTC (rev 1422) @@ -29,11 +29,9 @@ #include "standard.h" #ifdef MACVERSION - #if TARGET_API_MAC_CARBON - #include "MoreFilesX.h" - #else - #include "MoreFilesExtras.h" - #endif + + #include "MoreFilesX.h" + #endif #include "filealias.h" @@ -63,31 +61,46 @@ -boolean equalfilespecs (const tyfilespec *fs1, const tyfilespec *fs2) { +boolean equalfilespecs (const ptrfilespec fs1, const ptrfilespec fs2) { - /* - 5.0a25 dmb: until we set the volumeID to zero for all Win fsspecs, - we must not compare them here - */ + // + // 2006-06-18 creedon: for Mac, FSRef-ized + // + // 5.0a25 dmb: until we set the volumeID to zero for all Win fsspecs, we must not compare them here + // #ifdef MACVERSION - if ((*fs1).vRefNum != (*fs2).vRefNum) - return (false); + + if ( FSCompareFSRefs ( &( *fs1 ).fsref, &( *fs2 ).fsref ) != noErr ) + return ( false ); + + // seems like the checking could be improved for paths, what if one is NULL and the other is not? + + if ( ( ( *fs1 ).path != NULL ) && ( ( *fs2 ).path != NULL ) ) + if ( CFStringCompare ( ( *fs1 ).path, ( *fs2 ).path, 0 ) != kCFCompareEqualTo ) + return ( false ); + + bigstring bs1, bs2; - if ((*fs1).parID != (*fs2).parID) - return (false); + getfsfile ( fs1, bs1 ); + getfsfile ( fs2, bs2 ); - return (equalstrings ((ptrstring) fsname (fs1), (ptrstring) fsname (fs2))); + return ( equalstrings ( bs1, bs2 ) ); + #endif + #ifdef WIN95VERSION - //if ((*fs1).volumeID != (*fs2).volumeID) + + // if ((*fs1).volumeID != (*fs2).volumeID) // return (false); return (lstrcmp(fsname (fs1), fsname (fs2)) == 0); -#endif - } /*equalfilespecs*/ + + #endif + } // equalfilespecs + boolean filesetposition (hdlfilenum fnum, long position) { /* @@ -461,31 +474,44 @@ #endif //MACVERSION -boolean flushvolumechanges (const tyfilespec *fs, hdlfilenum fnum) { -#ifdef MACVERSION -# pragma unused(fnum) +boolean flushvolumechanges (const ptrfilespec fs, hdlfilenum fnum) { - /* - 4.1b7 dmb: was -- FlushVol (nil, (*fs).vRefNum); + #ifdef MACVERSION - now use PB call to do asynch flush - */ + # pragma unused(fnum) + + /* + 4.1b7 dmb: was -- FlushVol (nil, (*fs).vRefNum); + + now use PB call to do asynch flush + */ + + ParamBlockRec *pb; + + pb = (ParamBlockRec *) NewPtrClear (sizeof (ParamBlockRec)); + + FSCatalogInfo catalogInfo; + OSStatus status; - ParamBlockRec *pb; + // clearbytes ( &catalogInfo, longsizeof ( catalogInfo ) ); + + status = FSGetCatalogInfo ( &( *fs ).fsref, kFSCatInfoVolume, &catalogInfo, NULL, NULL, NULL ); + + (*pb).volumeParam.ioVRefNum = catalogInfo.volume; + + (*pb).volumeParam.ioCompletion = iocompletionUPP; + + PBFlushVolAsync (pb); + + #endif + + #ifdef WIN95VERSION - pb = (ParamBlockRec *) NewPtrClear (sizeof (ParamBlockRec)); + if (fnum != NULL) + FlushFileBuffers (fnum); + + #endif - (*pb).volumeParam.ioVRefNum = (*fs).vRefNum; - - (*pb).volumeParam.ioCompletion = iocompletionUPP; - - PBFlushVolAsync (pb); -#endif - -#ifdef WIN95VERSION - if (fnum != NULL) - FlushFileBuffers (fnum); -#endif return (true); } /*flushvolumechanges*/ @@ -508,287 +534,265 @@ } /*fileshutdown*/ -static boolean filecreateandopen (const tyfilespec *fs, OSType creator, OSType filetype, hdlfilenum *fnum) { -#ifdef MACVERSION - OSStatus err = noErr; -// char s[256]; - - setfserrorparam (fs); +static boolean filecreateandopen ( ptrfilespec fs, OSType creator, OSType filetype, hdlfilenum *fnum) { + + // + // 2006-06-26 creedon: for Mac, FSRef-ized + // - if (oserror (FSpCreate (fs, creator, filetype, smSystemScript))) /*failed to open the file for writing*/ - return (false); - - if (oserror (FSpOpenDF (fs, fsRdWrPerm, fnum))) { + #ifdef MACVERSION - FSClose (*fnum); + HFSUniStr255 name; + OSErr err; - deletefile (fs); + setfserrorparam ( fs ); - return (false); /*failed to open the file for writing*/ - } - - #if TARGET_API_MAC_CARBON - { - FSRef myRef; - err = FSpMakeFSRef (fs,&myRef); - if (!err) - FSSetNameLocked(&myRef); - } - #endif + CFStringRefToHFSUniStr255 ( ( *fs ).path, &name ); - return (true); -#endif + err = FSCreateFileUnicode ( &( *fs ).fsref, name.length, name.unicode, kFSCatInfoNone, NULL, &( *fs ).fsref, NULL ); + + if ( oserror ( err ) ) + return (false); + + ( *fs ).path = NULL; // clear out path + + HFSUniStr255 dataforkname; + + err = FSGetDataForkName ( &dataforkname ); + + if ( oserror ( err ) ) + return ( false ); + + err = FSOpenFork ( &( *fs ).fsref, dataforkname.length, dataforkname.unicode, fsRdWrPerm, fnum ); -#ifdef WIN95VERSION - HANDLE fref; - - fref = (Handle) CreateFile (stringbaseaddress (fsname (fs)), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, - NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - *fnum = 0; - - if (fref == INVALID_HANDLE_VALUE) { + if ( oserror ( err ) ) { + + FSClose (*fnum); + + deletefile (fs); + + return (false); // failed to open the file for writing + } - winfileerror (fs); + FSSetNameLocked ( &( *fs ).fsref ); + + return (true); + + #endif - return (false); - } - - *fnum = (hdlfilenum) fref; - return (true); -#endif - } /*filecreateandopen*/ - - -boolean fileopenorcreate (const tyfilespec *fs, OSType creator, OSType filetype, hdlfilenum *fnum) { -#ifdef MACVERSION - /* - open or create a file indicated by fs. return with fnum set to the Mac - filesystem's file number for the file. + #ifdef WIN95VERSION - if we open a file, we takes what we get in the creator and filetype department. - however, if we create a file it's of the indicated filetype and creator. - */ - - if (FSpOpenDF (fs, fsRdWrPerm, fnum) == noErr) { - /*file exists and is open*/ - #if TARGET_API_MAC_CARBON - FSRef myRef; - if (FSpMakeFSRef (fs,&myRef)) - FSSetNameLocked(&myRef); - #else - FSpSetNameLocked(&fs); - #endif - return (true); - } - return (filecreateandopen (fs, creator, filetype, fnum)); -#endif + HANDLE fref; -#ifdef WIN95VERSION - HANDLE fref; - DWORD dAccess; - char fn[300]; + fref = (Handle) CreateFile (stringbaseaddress (fsname (fs)), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, + NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + *fnum = 0; - dAccess = GENERIC_READ | GENERIC_WRITE; + if (fref == INVALID_HANDLE_VALUE) { + + winfileerror (fs); - copystring (fsname (fs), fn); - - nullterminate (fn); + return (false); + } - fref = (Handle) CreateFile (stringbaseaddress(fn), dAccess, FILE_SHARE_READ, - NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - *fnum = 0; - - if (fref == INVALID_HANDLE_VALUE) { + *fnum = (hdlfilenum) fref; - winfileerror (fs); + return (true); + + #endif + + } // filecreateandopen - return (false); - } - *fnum = (hdlfilenum) fref; - return (true); -#endif - } /*fileopenorcreate*/ +boolean opennewfile ( ptrfilespec fs, OSType creator, OSType filetype, hdlfilenum *fnum ) { - -boolean opennewfile (const tyfilespec *fs, OSType creator, OSType filetype, hdlfilenum *fnum) { + // + // 2006-06-22 creedon: for Mac, FSRef-ized + // boolean flfolder; + tyfilespec fst; - if (fileexists (fs, &flfolder)) { /*file exists, delete it*/ + ( void ) extendfilespec ( fs, &fst ); + + if ( fileexists ( &fst, &flfolder ) ) { // file exists, delete it + //WriteToConsole("We're deleting a file that already exists. No idea why."); - if (!deletefile (fs)) - return (false); + + if ( ! deletefile ( &fst ) ) + return ( false ); } - return (filecreateandopen (fs, creator, filetype, fnum)); - } /*opennewfile*/ + return ( filecreateandopen ( fs, creator, filetype, fnum ) ); + } // opennewfile -boolean openfile (const tyfilespec *fs, hdlfilenum *fnum, boolean flreadonly) { +boolean openfile ( const ptrfilespec fs, hdlfilenum *fnum, boolean flreadonly ) { -#ifdef MACVERSION - /* - 5/23/91 dmb: make sure we clear fnum on error; if file is already open, - FSOpen will set fnum to the existing channel - - 4.1b4 dmb: added flreadonly paramater - */ - - OSErr errcode; - OSErr err = noErr; - short perm; - - setfserrorparam (fs); /*in case error message takes a filename parameter*/ - - if (flreadonly) - perm = fsRdPerm; - else - perm = fsRdWrPerm; + // + // 2006-06-26 creedon: for Mac, FSRef-ized + // + // 4.1b4 dmb: on Mac added flreadonly paramater + // + // 1991-05-23 dmb: on Mac make sure we clear fnum on error; if file is already open, + // FSOpen will set fnum to the existing channel + // + + #ifdef MACVERSION + + OSErr err; + short perm; + + setfserrorparam ( fs ); // in case error message takes a filename parameter + + if (flreadonly) + perm = fsRdPerm; + else + perm = fsRdWrPerm; - errcode = FSpOpenDF (fs, perm, fnum); - - if (oserror (errcode)) { + HFSUniStr255 dataforkname; - *fnum = 0; + err = FSGetDataForkName ( &dataforkname ); - return (false); - } - #if TARGET_API_MAC_CARBON - { - FSRef myRef; - err = FSpMakeFSRef (fs,&myRef); - if (!err) - err = FSSetNameLocked(&myRef); - } - #else - err = FSpSetNameLocked(fs); + if ( oserror ( err ) ) + return ( false ); + + err = FSOpenFork ( &( *fs ).fsref, dataforkname.length, dataforkname.unicode, perm, fnum ); + + if ( oserror ( err ) ) { + + *fnum = 0; + + return (false); + } + + FSSetNameLocked ( &( *fs ).fsref ); + + return (true); + #endif + + #ifdef WIN95VERSION - if (err!=noErr){ - //sprintf(s,"error locking file name: %d",err); - //WriteToConsole(s); - } - - return (true); -#endif + HANDLE fref; + DWORD dAccess; + char fn[300]; -#ifdef WIN95VERSION - HANDLE fref; - DWORD dAccess; - char fn[300]; + if (flreadonly) + dAccess = GENERIC_READ; + else + dAccess = GENERIC_READ | GENERIC_WRITE; - if (flreadonly) - dAccess = GENERIC_READ; - else - dAccess = GENERIC_READ | GENERIC_WRITE; + copystring (fsname (fs), fn); - copystring (fsname (fs), fn); + nullterminate (fn); - nullterminate (fn); + fref = (Handle) CreateFile (stringbaseaddress(fn), dAccess, FILE_SHARE_READ, + NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + *fnum = 0; - fref = (Handle) CreateFile (stringbaseaddress(fn), dAccess, FILE_SHARE_READ, - NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - *fnum = 0; + if (fref == INVALID_HANDLE_VALUE) { + + winfileerror (fs); - if (fref == INVALID_HANDLE_VALUE) { + return (false); + } + + *fnum = (hdlfilenum) fref; + return (true); - winfileerror (fs); - - return (false); - } - - *fnum = (hdlfilenum) fref; - return (true); -#endif - } /*openfile*/ + #endif -/******* + } /* openfile */ -From MoreFilesExtras. -I'm going to use this to yank the fsspec back out from a refnum, -so that I can clear the finder name lock from the file prior to closing it. -*******/ - - boolean closefile (hdlfilenum fnum) { -#ifdef MACVERSION - OSStatus err = noErr; -// char s[256]; + + // + // 2006-06-22 creedon: for Mac FSRef-ized + // + // 1990-08-20 dmb: on Mac check for 0. + // + // From MoreFilesExtras. I'm going to use this to yank the fsspec back out from a refnum, so that I can clear the finder + // name lock from the file prior to closing it. + // - /* - dmb 8/20/90: check for 0. - */ + #ifdef MACVERSION - if (fnum != 0) { - #if TARGET_API_MAC_CARBON - FSRef myRef; - err = FileRefNumGetFSRef (fnum, &myRef); - if (err == noErr) { - FSClearNameLocked (&myRef); + OSStatus err = noErr; + + if ( fnum != 0 ) { + + FSRef fsr; + + err = FileRefNumGetFSRef ( fnum, &fsr ); + + if ( err == noErr ) { + FSClearNameLocked ( &fsr ); } - #else - FSSpec fs; - err = FSpGetFileLocation (fnum,&fs); - if (err==noErr) { - FSpClearNameLocked (&fs); - } - #endif else { //sprintf(s,"Error is %d",err); //WriteToConsole(s); } - - return (!oserror (FSClose (fnum))); - } + + err = FSCloseFork ( fnum ); + + return ( ! oserror ( err ) ); + + } + + return ( true ); + + #endif + + #ifdef WIN95VERSION - return (true); -#endif - -#ifdef WIN95VERSION - if (fnum != 0) { - - if (!CloseHandle (fnum)) { + if (fnum != 0) { - winerror (); + if (!CloseHandle (fnum)) { + + winerror (); - return (false); + return (false); + } } - } + + return (true); + #endif - return (true); -#endif - } /*closefile*/ + } // closefile -boolean deletefile (const tyfilespec *fs) { +boolean deletefile ( const ptrfilespec fs ) { - /* - 2.1b2 dmb: new filespec-based version - - 5.0.1 dmb: always setsferror param - */ + // + // 2006-06-26 creedon: for Mac, FSRef-ized + // + // 5.0.1 dmb: always setfserror param + // + // 2.1b2 dmb: on Mac new filespec-based version + // #ifdef MACVERSION - setfserrorparam (fs); /*in case error message takes a filename parameter*/ - #if TARGET_API_MAC_CARBON - { - FSRef myRef; - if (FSpMakeFSRef (fs,&myRef)) - FSClearNameLocked(&myRef); - } - #else - FSpClearNameLocked(fs); - #endif - return (!oserror (FSpDelete (fs))); + + OSErr err; + + setfserrorparam ( fs ); // in case error message takes a filename parameter + + FSClearNameLocked ( &( *fs ).fsref ); + + err = FSDeleteObject ( &( *fs ).fsref ); + + return ( ! oserror ( err ) ); + #endif #ifdef WIN95VERSION + char fn[300]; boolean fldeletefolder; - setfserrorparam (fs); /*in case error message takes a filename parameter*/ + setfserrorparam (fs); // in case error message takes a filename parameter copystring (fsname (fs), fn); @@ -815,102 +819,232 @@ return (false); #endif - } /*deletefile*/ + } // deletefile + -boolean fileexists (const tyfilespec *fs, boolean *flfolder) { -#ifdef MACVERSION - /* - we figure if we can get info on it, it must exist. +boolean fileexists ( const ptrfilespec fs, boolean *flfolder ) { + + // + // we figure if we can get info on it, it must exist. + // + // can't call filegetinfo because it has an error message if the file isn't found. + // + // 2006-06-19 creedon: Mac OS X bundles/packages are not considered folders + // + // for Mac, FSRef-ized + // + // 5.0.2b15 rab: on Mac return false to non-existent volume specs. + // + // 2.1b2 dmb: on Mac filespec implementation + // + // 7/1/91 dmb: on Mac special case empty string so we don't try to get info about the default volume and return true. + // - can't call filegetinfo because it has an error message if the file - isn't found. + #ifdef MACVERSION - 7/1/91 dmb: special case empty string so we don't try to get info about - the default volume and return true. + FSCatalogInfo catalogInfo; - 2.1b2 dmb: filespec implementation + *flfolder = false; + + if ( ( *fs ).path != NULL ) + return ( false ); + + if ( FSGetCatalogInfo ( &( *fs ).fsref, kFSCatInfoNodeFlags, &catalogInfo, NULL, NULL, NULL ) != noErr ) + return ( false ); + + *flfolder = ( ( catalogInfo.nodeFlags & kFSNodeIsDirectoryMask ) != 0 ); + + /* Mac OS X bundles/packages are not considered folders */ { - 5.0.2b15 rab: return false to non-existent volume specs. - */ + boolean flisapplication, flisbundle; + + LSIsApplication ( &( *fs ).fsref, &flisapplication, &flisbundle ); + + if ( flisapplication || flisbundle ) + *flfolder = false; + } + + return (true); + + #endif - CInfoPBRec pb; + #ifdef WIN95VERSION - *flfolder = false; + HANDLE ff; + WIN32_FIND_DATA ffd; + char fn[300]; + + *flfolder = false; + + copystring (fsname (fs), fn); + + /*if ends with \ get rid of it... and handle the root*/ + + cleanendoffilename (fn); + + nullterminate (fn); + + if (stringlength(fn) == 2) { + if (isalpha(fn[1]) && fn[2] == ':') { + *flfolder = true; + return (fileisvolume(fs)); + } + } + + ff = FindFirstFile (stringbaseaddress(fn), &ffd); + + if (ff == INVALID_HANDLE_VALUE) + return (false); + + *flfolder = ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY?true:false; + + FindClose (ff); + + return (true); + + #endif - if (isemptystring (fsname (fs))) - return (false); + } // fileexists + + +#ifdef MACVERSION + + static OSErr FSRefGetName ( const FSRef *fsRef, CFStringRef *name ) { - clearbytes (&pb, sizeof (pb)); + // + // the caller must dispose of the CFString + // - pb.hFileInfo.ioNamePtr = (StringPtr) fsname (fs); - - pb.hFileInfo.ioVRefNum = (*fs).vRefNum; - - pb.hFileInfo.ioDirID = (*fs).parID; - - if (PBGetCatInfoSync (&pb) != noErr) - return (false); - - *flfolder = foldertest (&pb); - - return (true); -#endif -#ifdef WIN95VERSION - HANDLE ff; - WIN32_FIND_DATA ffd; - char fn[300]; + HFSUniStr255 hname; + OSErr err = FSGetCatalogInfo ( fsRef, kFSCatInfoNone, NULL, &hname, NULL, NULL ); - *flfolder = false; + *name = CFStringCreateWithCharacters ( kCFAllocatorDefault, hname.unicode, hname.length ); - copystring (fsname (fs), fn); + // CFRelease ( name ); - /*if ends with \ get ride of it... and handle the root*/ + return ( err ); + + } // FSRefGetName - cleanendoffilename (fn); - nullterminate (fn); + boolean CFStringToStr255 ( CFStringRef input, StringPtr output ) { + + output [ 0 ] = CFStringGetBytes ( input, CFRangeMake ( 0, ( ( CFStringGetLength ( input ) >= 255 ) ? + 255 : CFStringGetLength ( input ) ) ), kTextEncodingMacRoman, '^', false, + &( output [1] ), 255, NULL ); + + // MIN ( CFStringGetLength ( input ), 255 ) + + if ( output [ 0 ] == 0 ) + return ( false ); + + return ( true ); + + } // CFStringToStr255 - if (stringlength(fn) == 2) { - if (isalpha(fn[1]) && fn[2] == ':') { - *flfolder = true; - return (fileisvolume(fs)); - } - } - ff = FindFirstFile (stringbaseaddress(fn), &ffd); + boolean HFSUniStr255ToStr255 ( ConstHFSUniStr255Param input, StringPtr output ) { + + CFStringRef csr; + + csr = CFStringCreateWithCharacters ( kCFAllocatorDefault, input -> unicode, input -> length ); + + CFStringToStr255 ( csr, output ); - if (ff == INVALID_HANDLE_VALUE) - return (false); + CFRelease ( csr ); + + return ( true ); - *flfolder = ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY?true:false; + } // HFSUniStr255ToStr255 - FindClose (ff); - return (true); -#endif - } /*fileexists*/ + boolean FSRefGetNameStr255 ( const FSRef *fsRef, Str255 bsname ) { -boolean filegetfilename (const tyfilespec *pfs, bigstring name) { + CFStringRef csr; + OSErr err = FSRefGetName ( fsRef, &csr ); + + if ( err != noErr ) + return ( false ); + + if ( csr == NULL ) + return ( false ); -#ifdef MACVERSION - /* - filespecs for volumes have their strings set to the empty string. - */ + if ( ! CFStringGetPascalString ( csr, bsname, 256, kCFStringEncodingMacRoman ) ) + return ( false ); + + CFRelease ( csr ); + + return ( true ); + + } // FSRefGetNameStr255 - copystring (fsname (pfs), name); - if (stringlength (name) > 0) - return (true); + boolean bigstringToHFSUniStr255 ( const bigstring bs, HFSUniStr255 *output ) { + + CFStringRef temp = CFStringCreateWithPascalString (kCFAllocatorDefault, bs, kCFStringEncodingMacRoman ); - return (filegetvolumename ((*pfs).vRefNum, name)); -#endif + output -> length = CFStringGetLength(temp); + + CFStringGetCharacters(temp, CFRangeMake(0, output -> length), output -> unicode); + + CFRelease ( temp ); -#ifdef WIN95VERSION - lastword ((ptrstring) fsname (pfs), '\\', name); + /* + HFSUniStr255 name; + unsigned long len; + OSStatus status; + // TextEncoding encoding = ; + TextToUnicodeInfo info; + + if ( CreateTextToUnicodeInfoByEncoding ( CreateTextEncoding ( kTextEncodingMacRoman, + kTextEncodingDefaultVariant, kTextEncodingDefaultFormat ), &info ) != noErr ) + return ( false ); + + status = ConvertFromPStringToUnicode ( info, bs, sizeof ( name.unicode ), ( name -> length ), name.unicode ); + + DisposeTextToUnicodeInfo ( &info ); - return (true); -#endif - } /*filegetfilename*/ + if ( status != noErr ) + return ( false ); + */ + + return ( true ); + + } // bigstringToHFSUniStr255 + + boolean CFStringRefToHFSUniStr255 ( CFStringRef input, HFSUniStr255 *output ) { + + output -> length = CFStringGetBytes ( input, CFRangeMake ( 0, ( ( CFStringGetLength ( input ) >= 255 ) ? + CFStringGetLength ( input ) : 255 ) ), + kCFStringEncodingUnicode, 0, false, ( UInt8 * ) ( output -> unicode ), 255, + NULL ); + + if ( output -> length == 0 ) + return ( false ); + + return ( true ); + + } // CFStringRefToHFSUniStr255 + + + /* bigstring fsname ( const ptrfilespec fs ) { + + bigstring bsname; + + CFStringRef cname; + + FSRefGetName ( ( *fs ).ref, &cname ); + + CFStringToStr255 ( cname, &bsname ); + + CFRelease ( cname ); + + return ( bsname ); + + } */ + + #endif + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |