|
From: <cre...@us...> - 2006-10-17 19:17:19
|
Revision: 1568
http://svn.sourceforge.net/frontierkernel/?rev=1568&view=rev
Author: creecode
Date: 2006-10-17 12:17:10 -0700 (Tue, 17 Oct 2006)
Log Message:
-----------
fixed a problem with volume related functions ( freeSpaceOnVolume, etc. ) failing intermittently
fixed a problem when working with paths like "Volume:Folder (tm):file.txt". The last element in the path was working OK ( file.txt ) if it contained high ascii characters. High ascii characters in the path before the last element weren't working
fixed problems with file.(file/folder)sOnVolume returning incorrect number
Modified Paths:
--------------
Frontier/branches/FSRef_Migration/Common/source/fileops.c
Frontier/branches/FSRef_Migration/Common/source/filepath.c
Frontier/branches/FSRef_Migration/Common/source/langsystypes.c
Modified: Frontier/branches/FSRef_Migration/Common/source/fileops.c
===================================================================
--- Frontier/branches/FSRef_Migration/Common/source/fileops.c 2006-10-17 18:04:48 UTC (rev 1567)
+++ Frontier/branches/FSRef_Migration/Common/source/fileops.c 2006-10-17 19:17:10 UTC (rev 1568)
@@ -369,17 +369,17 @@
#ifdef MACVERSION // 1/29/97 dmb: adopt applet toolkit version
- static boolean getinfofromvolpb (const FSVolumeInfoParamPtr pb, tyfileinfo *info) {
+ static boolean getinfofromvolpb ( const FSVolumeInfoParamPtr pb, tyfileinfo *info ) {
//
- // 2006-06-25 creedon: FSRef-ized
+ // 2006-10-17 creedon: FSRef-ized
//
// 1993-09-21 dmb: for a volume, dirid should be fsRtParID, not fsRtDirID.
//
short drivenum;
- clearbytes (info, sizeof (tyfileinfo));
+ clearbytes ( info, sizeof ( tyfileinfo ) );
( *info ).vnum = (*pb).ioVRefNum;
@@ -434,11 +434,11 @@
} // getinfofromvolpb
- boolean filegetvolumeinfo (short vnum, tyfileinfo *info) {
+ boolean filegetvolumeinfo ( short vnum, tyfileinfo *info ) {
//
- // dmb 9/21/93: take vnum as parameter, not volname. otherwise, we can't distinguish between two vols w/the
- // same name.
+ // 1993-09-21 dmb: take vnum as parameter, not volname. otherwise, we can't distinguish between two vols w/the
+ // same name.
//
// 1993-09-07 DW: determine if it's a network volume
//
@@ -734,7 +734,7 @@
getfsvolume ( fs, &vnum );
- if ( !filegetvolumeinfo ( vnum, info ) )
+ if ( ! filegetvolumeinfo ( vnum, info ) )
return ( false );
return ( true );
@@ -2354,21 +2354,22 @@
} /*getvolumeblocksize*/
-boolean filesonvolume (const ptrfilespec fs, long *ctfiles) {
+boolean filesonvolume ( const ptrfilespec fs, long *ctfiles ) {
- /*
- 6/x/91 mao
- */
+ //
+ // 6/x/91 mao
+ //
tyvolinfo volinfo;
- if (!filegetfsvolumeinfo (fs, &volinfo))
- return (false);
+ if ( ! filegetfsvolumeinfo ( fs, &volinfo ) )
+ return ( false );
*ctfiles = volinfo.ctfiles;
- return (true);
- } /*filesonvolume*/
+ return ( true );
+
+ } // filesonvolume
boolean foldersonvolume (const ptrfilespec fs, long *ctfolders) {
@@ -2859,7 +2860,7 @@
// this combination of information plugs nicely into a lot of the file
// manager routines.
//
- // 2006-06-25 creedon: for Mac, FSRef-ized
+ // 2006-10-16 creedon: for Mac, FSRef-ized
//
// 5.0.2 rab: initialize ix to zero
//
@@ -2870,11 +2871,12 @@
#ifdef MACVERSION
+ OSStatus status;
+ bigstring bs, bsvolname;
short ix = 1;
- bigstring bsvolname;
- bigstring bs;
- OSStatus errstatus;
+ clearbytes ( fs, sizeof ( *fs ) );
+
copystring (bspath, bs); // work on a copy
if (isemptystring (bs))
@@ -2898,10 +2900,19 @@
insertstring ( BIGSTRING ( "\x09" "/Volumes/" ), bsvolname );
- convertpstring ( bsvolname );
+ /* convert from Mac Roman to UTF-8 */ {
- errstatus = FSPathMakeRef ( bsvolname, &( *fs ).fsref, NULL );
+ CFStringRef csr = CFStringCreateWithPascalString ( kCFAllocatorDefault, bsvolname,
+ kCFStringEncodingMacRoman );
+ CFStringGetCString ( csr, ( char * ) bsvolname, sizeof ( bsvolname ), kCFStringEncodingUTF8 );
+
+ CFRelease ( csr );
+
+ }
+
+ status = FSPathMakeRef ( bsvolname, &( *fs ).fsref, NULL );
+
#endif
#ifdef WIN95VERSION
Modified: Frontier/branches/FSRef_Migration/Common/source/filepath.c
===================================================================
--- Frontier/branches/FSRef_Migration/Common/source/filepath.c 2006-10-17 18:04:48 UTC (rev 1567)
+++ Frontier/branches/FSRef_Migration/Common/source/filepath.c 2006-10-17 19:17:10 UTC (rev 1568)
@@ -39,6 +39,7 @@
#include "MoreFilesX.h" // 2006-05-31 creedon
#include <CoreFoundation/CFString.h> // 2006-08-10 creedon
+ #include <sys/param.h> // 2006-10-16 creedon
#endif // MACVERSION
@@ -269,7 +270,7 @@
boolean pathtofilespec ( bigstring bspath, ptrfilespec fs ) {
//
- // 2006-09-05 creedon: for Mac, FSRef-ized
+ // 2006-10-16 creedon: for Mac, FSRef-ized
//
// 5.0d8 dmb: clear fs first thing
//
@@ -295,11 +296,11 @@
#ifdef MACVERSION
- bigstring bs, bspathtmp;
FSRef fsr;
HFSUniStr255 name;
OSErr err;
OSStatus status;
+ bigstring bs, bspathtmp;
short ix = 1, ixslashpos = 0, slashpos [ 255 ];
copystring ( bspath, bspathtmp );
@@ -327,8 +328,17 @@
setstringcharacter ( bs, slashpos [ --ixslashpos ] - 1, ':' );
}
- convertpstring ( bs ); // bs is now a c string
+ /* convert from Mac Roman to UTF-8 */ {
+ CFStringRef csr = CFStringCreateWithPascalString ( kCFAllocatorDefault, bs,
+ kCFStringEncodingMacRoman );
+
+ CFStringGetCString ( csr, ( char * ) bs, sizeof ( bs ), kCFStringEncodingUTF8 );
+
+ CFRelease ( csr );
+
+ }
+
status = FSPathMakeRef ( bs, &fsr, NULL );
if ( status == noErr ) {
@@ -361,8 +371,17 @@
setstringcharacter ( bsfolder, slashpos [ --ixslashpos ] - 1, ':' );
}
- convertpstring ( bsfolder ); // bsfolder is now a c string
+ /* convert from Mac Roman to UTF-8 */ {
+ CFStringRef csr = CFStringCreateWithPascalString ( kCFAllocatorDefault, bsfolder,
+ kCFStringEncodingMacRoman );
+
+ CFStringGetCString ( csr, ( char * ) bsfolder, sizeof ( bsfolder ), kCFStringEncodingUTF8 );
+
+ CFRelease ( csr );
+
+ }
+
status = FSPathMakeRef ( bsfolder, &fsr, NULL );
if ( status == noErr ) {
@@ -426,8 +445,17 @@
setstringcharacter ( bs, slashpos [ --ixslashpos ] - 1, ':' );
}
- convertpstring ( bs ); // bs is now a c string
+ /* convert from Mac Roman to UTF-8 */ {
+ CFStringRef csr = CFStringCreateWithPascalString ( kCFAllocatorDefault, bsfolder,
+ kCFStringEncodingMacRoman );
+
+ CFStringGetCString ( csr, ( char * ) bsfolder, sizeof ( bsfolder ), kCFStringEncodingUTF8 );
+
+ CFRelease ( csr );
+
+ }
+
status = FSPathMakeRef ( bs, &fsr, NULL );
if ( status == noErr ) {
@@ -464,8 +492,17 @@
setstringcharacter ( bsfolder, slashpos [ --ixslashpos ] - 1, ':' );
}
- convertpstring ( bsfolder ); // bsfolder is now a c string
+ /* convert from Mac Roman to UTF-8 */ {
+ CFStringRef csr = CFStringCreateWithPascalString ( kCFAllocatorDefault, bsfolder,
+ kCFStringEncodingMacRoman );
+
+ CFStringGetCString ( csr, ( char * ) bsfolder, sizeof ( bsfolder ), kCFStringEncodingUTF8 );
+
+ CFRelease ( csr );
+
+ }
+
status = FSPathMakeRef ( bsfolder, &fsr, NULL );
if ( status == noErr ) {
Modified: Frontier/branches/FSRef_Migration/Common/source/langsystypes.c
===================================================================
--- Frontier/branches/FSRef_Migration/Common/source/langsystypes.c 2006-10-17 18:04:48 UTC (rev 1567)
+++ Frontier/branches/FSRef_Migration/Common/source/langsystypes.c 2006-10-17 19:17:10 UTC (rev 1568)
@@ -872,13 +872,13 @@
} /*coercetoalias*/
-boolean filespecaddvalue (tyvaluerecord *v1, tyvaluerecord *v2, tyvaluerecord *vreturned) {
+boolean filespecaddvalue ( tyvaluerecord *v1, tyvaluerecord *v2, tyvaluerecord *vreturned ) {
//
// add v2 to the filespec v1 by using it as a partial path. if anything but a valid
// fspec results, return a string value that is simple concatenation
//
- // 2006-06-24 creedon: for Mac, FSRef-ized
+ // 2006-10-16 creedon: for Mac, FSRef-ized
//
// 2.1b6 dmb: if resulting specifier exists, but doesn't agree with bsadd as far as
// whether or not it's a folder, return a string.
@@ -888,23 +888,23 @@
#ifdef MACVERSION
- tyfilespec fs;
+ OSStatus status;
bigstring bs, bsadd, bsv1path;
boolean flfolder; // unused
- OSStatus status;
+ tyfilespec fs;
- fs = **(*v1).data.filespecvalue;
+ fs = **( *v1 ).data.filespecvalue;
( void ) extendfilespec ( &fs, &fs );
filespectopath ( &fs, bs );
- copystring ( bs, bsv1path);
+ copystring ( bs, bsv1path );
- if (!coercetostring (v2))
- return (false);
+ if ( ! coercetostring ( v2 ) )
+ return ( false );
- pullstringvalue (v2, bsadd);
+ pullstringvalue ( v2, bsadd );
/*
if (fileexists (&fs, &flfolder)) {
@@ -929,8 +929,16 @@
stringreplaceall ( ':', '/', bs );
- convertpstring ( bs );
-
+ /* convert from Mac Roman to UTF-8 */ {
+
+ CFStringRef csr = CFStringCreateWithPascalString ( kCFAllocatorDefault, bs, kCFStringEncodingMacRoman );
+
+ CFStringGetCString ( csr, ( char * ) bs, sizeof ( bs ), kCFStringEncodingUTF8 );
+
+ CFRelease ( csr );
+
+ }
+
status = FSPathMakeRef ( bs, &fs.fsref, &flfolder );
if ( status == noErr ) {
@@ -983,57 +991,64 @@
// 2006-06-24 creedon: FSRef-ized
//
-#ifdef MACVERSION
- tyfilespec fs;
- bigstring bssub;
- boolean fl;
- Str63 bsname;
- OSErr err;
-
- if (!coercetostring (v2))
- return (false);
-
- fs = **(*v1).data.filespecvalue;
-
- pullstringvalue (v2, bssub);
-
- fl = !stringfindchar (':', bssub);
-
- if (fl) {
- bigstring bs;
+ #ifdef MACVERSION
+
+ tyfilespec fs;
+ bigstring bssub;
+ boolean fl;
+ Str63 bsname;
+ OSStatus status;
- getfsfile ( &fs, bs );
+ if (!coercetostring (v2))
+ return (false);
- subtractstrings ( bs, bssub, bsname);
+ fs = **(*v1).data.filespecvalue;
- err = FSPathMakeRef ( bsname, &fs.fsref, NULL );
+ pullstringvalue (v2, bssub);
- fl = (err == noErr) || (err == fnfErr);
- }
+ fl = !stringfindchar (':', bssub);
+
+ if (fl) {
+ bigstring bs;
+
+ getfsfile ( &fs, bs );
+
+ subtractstrings ( bs, bssub, bsname);
+
+ status = FSPathMakeRef ( bsname, &fs.fsref, NULL );
+
+ fl = ( status == noErr ) || ( status == fnfErr );
+
+ }
+
+ if (!fl) { // couldn't extend filespec
+
+ if (!coercetostring (v1))
+ return (false);
+
+ return (subtractvalue (*v1, *v2, vreturned));
+
+ }
+
+ return (setfilespecvalue (&fs, vreturned));
+
+ #endif
+
+ #ifdef WIN95VERSION
- if (!fl) { /*couldn't extend filespec*/
-
+ if (!coercetostring (v2))
+ return (false);
+
if (!coercetostring (v1))
return (false);
return (subtractvalue (*v1, *v2, vreturned));
- }
+
+ #endif
- return (setfilespecvalue (&fs, vreturned));
-#endif
+ } // filespecsubtractvalue
-#ifdef WIN95VERSION
- if (!coercetostring (v2))
- return (false);
-
- if (!coercetostring (v1))
- return (false);
-
- return (subtractvalue (*v1, *v2, vreturned));
-#endif
- } /*filespecsubtractvalue*/
-
boolean langpackfileval (const tyvaluerecord *vfile, Handle *hpacked) {
//
@@ -3426,4 +3441,3 @@
#endif
-
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|