-
Notifications
You must be signed in to change notification settings - Fork 67
/
parameters.m
112 lines (83 loc) · 3.55 KB
/
parameters.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#import <Foundation/Foundation.h>
#include "pharovm/pharo.h"
#include "pharovm/parameters/parameters.h"
#include "pharovm/debug.h"
#include "pharovm/pathUtilities.h"
#include <sys/stat.h>
static bool
fileExists(char *filename) {
struct stat buffer;
return (stat (filename, &buffer) == 0);
}
EXPORT(void) fillParametersFromPList(VMParameters* parameters){
char fileNameBuffer[FILENAME_MAX + 1];
char mainBundlePath[FILENAME_MAX + 1];
CFBundleRef mainBundle;
CFNumberRef logLevelRef;
int32_t logLevelValue;
CFStringRef imageFileName;
CFBooleanRef headlessRef;
CFBooleanRef workerRef;
CFNumberRef maxFramesToLogRef;
CFNumberRef maxOldSpaceSizeRef;
CFNumberRef edenSizeRef;
CFNumberRef codeSizeRef;
mainBundle = CFBundleGetMainBundle();
CFStringGetCString((CFStringRef)[[NSBundle mainBundle] bundlePath], mainBundlePath, FILENAME_MAX + 1, kCFStringEncodingUTF8);
logLevelRef = CFBundleGetValueForInfoDictionaryKey(mainBundle, CFSTR("PharoLogLevel"));
if(logLevelRef != NULL){
CFNumberGetValue(logLevelRef, kCFNumberSInt32Type, &logLevelValue);
logLevel(logLevelValue);
}
imageFileName = CFBundleGetValueForInfoDictionaryKey(mainBundle, CFSTR("PharoImageFile"));
if(imageFileName != NULL){
CFStringGetCString(imageFileName, fileNameBuffer, FILENAME_MAX + 1, kCFStringEncodingUTF8);
parameters->imageFileName = strdup(fileNameBuffer);
parameters->isDefaultImage = false;
parameters->isInteractiveSession = true;
parameters->defaultImageFound = true;
//Check if the path passed exists, if not exists try with a location inside the main bundle.
if(fileExists(parameters->imageFileName)){
parameters->defaultImageFound = true;
}else{
snprintf(fileNameBuffer, FILENAME_MAX + 1, "%s/Contents/Resources/%s", mainBundlePath, parameters->imageFileName);
if(fileExists(fileNameBuffer)){
free(parameters->imageFileName);
parameters->imageFileName = strdup(fileNameBuffer);
parameters->defaultImageFound = true;
}else{
snprintf(fileNameBuffer, FILENAME_MAX + 1, "%s/Contents/MacOS/Resources/%s", mainBundlePath, parameters->imageFileName);
if(fileExists(fileNameBuffer)){
free(parameters->imageFileName);
parameters->imageFileName = strdup(fileNameBuffer);
parameters->defaultImageFound = true;
}
}
}
logDebug("Using Image File from PList: %s", parameters->imageFileName);
}
headlessRef = CFBundleGetValueForInfoDictionaryKey(mainBundle, CFSTR("PharoHeadless"));
if(headlessRef != NULL){
parameters->isInteractiveSession = !CFBooleanGetValue(headlessRef);
}
workerRef = CFBundleGetValueForInfoDictionaryKey(mainBundle, CFSTR("PharoWorker"));
if(workerRef != NULL){
parameters->isWorker = !CFBooleanGetValue(workerRef);
}
maxFramesToLogRef = CFBundleGetValueForInfoDictionaryKey(mainBundle, CFSTR("PharoMaxFramesToLog"));
if(maxFramesToLogRef != NULL){
CFNumberGetValue(maxFramesToLogRef, kCFNumberSInt32Type, ¶meters->maxStackFramesToPrint);
}
maxOldSpaceSizeRef = CFBundleGetValueForInfoDictionaryKey(mainBundle, CFSTR("PharoMaxOldSpaceSize"));
if(maxOldSpaceSizeRef != NULL){
CFNumberGetValue(maxOldSpaceSizeRef, kCFNumberSInt64Type, ¶meters->maxOldSpaceSize);
}
edenSizeRef = CFBundleGetValueForInfoDictionaryKey(mainBundle, CFSTR("PharoEdenSize"));
if(edenSizeRef != NULL){
CFNumberGetValue(edenSizeRef, kCFNumberSInt64Type, ¶meters->edenSize);
}
codeSizeRef = CFBundleGetValueForInfoDictionaryKey(mainBundle, CFSTR("PharoCodeSize"));
if(codeSizeRef != NULL){
CFNumberGetValue(codeSizeRef, kCFNumberSInt64Type, ¶meters->maxCodeSize);
}
}