MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / xs_storage_domain_read

Function xs_storage_domain_read

modules/io/storage/mac/storage-mac.c:66–149  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

64}
65
66void xs_storage_domain_read(xsMachine *the)
67{
68 xsStorage storage = xsmcGetHostDataValidate(xsThis, xs_storage_domain_destructor);
69 CFStringRef domain = CFStringCreateWithCString(NULL, storage->domain, kCFStringEncodingUTF8);
70 CFStringRef key = CFStringCreateWithCString(NULL, xsmcToString(xsArg(0)), kCFStringEncodingUTF8);
71 CFTypeRef value = (CFTypeRef)CFPreferencesCopyValue(key, domain, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost);
72 if (value) {
73 CFTypeID type = CFGetTypeID(value);
74 if (type == CFNumberGetTypeID()) {
75 switch (storage->format) {
76 case kIOFormatInt8: {
77 int8_t number = 0;
78 CFNumberGetValue(value, kCFNumberSInt8Type, &number);
79 xsResult = xsInteger(number);
80 } break;
81 case kIOFormatInt16: {
82 int16_t number = 0;
83 CFNumberGetValue(value, kCFNumberSInt16Type, &number);
84 xsResult = xsInteger(number);
85 } break;
86 case kIOFormatInt32: {
87 int32_t number = 0;
88 CFNumberGetValue(value, kCFNumberSInt32Type, &number);
89 xsResult = xsInteger(number);
90 } break;
91 case kIOFormatInt64: {
92 int64_t number = 0;
93 CFNumberGetValue(value, kCFNumberSInt64Type, &number);
94 fxFromBigInt64(the, &xsResult, number);
95 } break;
96 case kIOFormatUint8: {
97 uint8_t number = 0;
98 CFNumberGetValue(value, kCFNumberSInt8Type, &number);
99 xsResult = xsInteger(number);
100 } break;
101 case kIOFormatUint16: {
102 uint16_t number = 0;
103 CFNumberGetValue(value, kCFNumberSInt16Type, &number);
104 xsResult = xsInteger(number);
105 } break;
106 case kIOFormatUint32: {
107 uint32_t number = 0;
108 CFNumberGetValue(value, kCFNumberSInt32Type, &number);
109 xsResult = xsUnsigned(number);
110 } break;
111 case kIOFormatUint64: {
112 uint64_t number = 0;
113 CFNumberGetValue(value, kCFNumberSInt64Type, &number);
114 fxFromBigUint64(the, &xsResult, number);
115 } break;
116 }
117 }
118 else if (type == CFStringGetTypeID()) {
119 if (kIOFormatString != storage->format)
120 xsTypeError("mismatch");
121 CFRange range = CFRangeMake(0, CFStringGetLength(value));
122 CFIndex length;
123 CFStringGetBytes(value, range, kCFStringEncodingUTF8, 0, false, NULL, 0, &length);

Callers

nothing calls this directly

Calls 2

fxFromBigInt64Function · 0.85
fxFromBigUint64Function · 0.85

Tested by

no test coverage detected