mirror of https://github.com/macssh/macssh.git
don't use GUSI in getprefsd
This commit is contained in:
parent
61eba4600c
commit
826dd9c5b7
|
@ -48,6 +48,9 @@
|
||||||
|
|
||||||
#include <LowMem.h>
|
#include <LowMem.h>
|
||||||
|
|
||||||
|
#include <MoreFilesExtras.h>
|
||||||
|
#include <FullPath.h>
|
||||||
|
|
||||||
/*#include "ssh2.h"*/ /* lsh source code doesn't like cplusplus... */
|
/*#include "ssh2.h"*/ /* lsh source code doesn't like cplusplus... */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -117,6 +120,55 @@ void ssh2_sched()
|
||||||
|
|
||||||
char *getprefsd(char *name, char *buf, size_t size, short *vRefNum, long *dirID)
|
char *getprefsd(char *name, char *buf, size_t size, short *vRefNum, long *dirID)
|
||||||
{
|
{
|
||||||
|
OSErr err;
|
||||||
|
FSSpec fileSpec;
|
||||||
|
Boolean isFolder;
|
||||||
|
Boolean wasAlias;
|
||||||
|
Boolean isDirectory;
|
||||||
|
short fullPathLength;
|
||||||
|
short pathLength;
|
||||||
|
Handle fullPath;
|
||||||
|
|
||||||
|
*vRefNum = 0;
|
||||||
|
*dirID = 0;
|
||||||
|
err = FindFolder(kOnSystemDisk, kPreferencesFolderType, true, &fileSpec.vRefNum, &fileSpec.parID);
|
||||||
|
if (err) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
fileSpec.name[0] = strlen(name);
|
||||||
|
BlockMoveData(name, fileSpec.name + 1, fileSpec.name[0]);
|
||||||
|
err = ResolveAliasFile(&fileSpec, true, &isFolder, &wasAlias);
|
||||||
|
err = FSpGetDirectoryID(&fileSpec, dirID, &isDirectory);
|
||||||
|
if (err == fnfErr) {
|
||||||
|
err = FSpDirCreate(&fileSpec, smSystemScript, dirID);
|
||||||
|
if (err != noErr) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
isDirectory = true;
|
||||||
|
}
|
||||||
|
if (err != noErr || !isDirectory) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
err = FSpGetFullPath(&fileSpec, &fullPathLength, &fullPath);
|
||||||
|
if (err != noErr) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
pathLength = fullPathLength;
|
||||||
|
if ((*fullPath)[pathLength - 1] == ':' )
|
||||||
|
--pathLength;
|
||||||
|
if (pathLength > size - 2) {
|
||||||
|
// FIXME: better error message
|
||||||
|
DisposeHandle(fullPath);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
*vRefNum = fileSpec.vRefNum;
|
||||||
|
BlockMoveData(*fullPath, buf, pathLength);
|
||||||
|
buf[pathLength++] = ':';
|
||||||
|
buf[pathLength] = 0;
|
||||||
|
DisposeHandle(fullPath);
|
||||||
|
return buf;
|
||||||
|
|
||||||
|
/*
|
||||||
GUSIFileSpec prefs(kPreferencesFolderType, kOnSystemDisk);
|
GUSIFileSpec prefs(kPreferencesFolderType, kOnSystemDisk);
|
||||||
char * res;
|
char * res;
|
||||||
char * out = buf;
|
char * out = buf;
|
||||||
|
@ -127,7 +179,7 @@ char *getprefsd(char *name, char *buf, size_t size, short *vRefNum, long *dirID)
|
||||||
|
|
||||||
prefs.SetName(name);
|
prefs.SetName(name);
|
||||||
|
|
||||||
/* resolve path name in case it's an alias */
|
// resolve path name in case it's an alias
|
||||||
prefs.Resolve( true );
|
prefs.Resolve( true );
|
||||||
|
|
||||||
res = prefs.FullPath();
|
res = prefs.FullPath();
|
||||||
|
@ -152,6 +204,7 @@ char *getprefsd(char *name, char *buf, size_t size, short *vRefNum, long *dirID)
|
||||||
return static_cast<char *>(nil);
|
return static_cast<char *>(nil);
|
||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue