Changeset 845
- Timestamp:
- 08/09/08 10:44:55 (3 years ago)
- Location:
- Whitix/trunk/user/sdk
- Files:
-
- 4 modified
-
include/registry.h (modified) (2 diffs)
-
python/console/main.c (modified) (1 diff)
-
python/registry/main.c (modified) (2 diffs)
-
registry/registry.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
Whitix/trunk/user/sdk/include/registry.h
r841 r845 3 3 4 4 #define REG_NAME_LENGTH 1024 5 6 #define REG_KEY_TYPE_STR 0 7 #define REG_KEY_TYPE_INT 1 5 8 6 9 struct Registry … … 15 18 }; 16 19 20 struct RegKeySetIter 21 { 22 struct RegKeySet* keySet; 23 int bufSize; 24 char* buf; 25 int next, size, index; 26 }; 27 28 int RegRegistryOpen(char* name, struct Registry* registry); 29 int RegKeySetOpen(struct Registry* registry, char* name, unsigned long accessRights, struct RegKeySet* keySet); 30 int RegKeyReadString(struct RegKeySet* keySet, char* name, char** data, unsigned long* length); 31 int RegKeyReadInt(struct RegKeySet* keySet, char* name, int* ret); 32 int RegKeySetReadKey(struct RegKeySet* keySet, char* name, int* type, char* data, unsigned long* length); 33 17 34 #endif -
Whitix/trunk/user/sdk/python/console/main.c
r691 r845 262 262 return; 263 263 264 PyModule_AddIntConstant(m, "ColorBlue", CONS_COLOR_BLUE); 265 264 266 ReadLineInit(); 265 267 } -
Whitix/trunk/user/sdk/python/registry/main.c
r843 r845 79 79 80 80 if (RegKeySetOpen(&self->registry, name, accessRights, &keySet)) 81 { 82 Py_INCREF(Py_None); 83 return Py_None; 84 } 81 return PyErr_Format(PyExc_KeyError, "Could not find key %s", name); 85 82 86 83 regKeySet=PyObject_GC_New(WRegKeySet, &wRegKeySet_Type); … … 197 194 (PyObject *)&wRegKeySetIter_Type) < 0) 198 195 return; 196 197 PyModule_AddIntConstant(m, "EntryKey", 0); 198 PyModule_AddIntConstant(m, "EntryKeySet", 1); 199 199 } -
Whitix/trunk/user/sdk/registry/registry.c
r840 r845 9 9 #define REG_PACKET_OPEN_KEYSET 1 10 10 #define REG_PACKET_READ_KEY 2 11 #define REG_PACKET_ENUM_KEYSET 3 12 #define REG_PACKET_GET_ENT_TYPE 4 13 14 /* Used for locating an entry. */ 15 struct RegReadKeyPacket 16 { 17 int type; 18 int length; 19 unsigned long handleId; 20 char name[REG_NAME_LENGTH]; 21 }; 11 22 12 23 int RegRegistryOpen(char* name, struct Registry* registry) … … 26 37 27 38 NetSocketConnect(sockFd, &addr, sizeof(struct SocketAddr)); 28 39 29 40 registry->sockFd=sockFd; 30 41 31 42 return 0; 32 43 } … … 68 79 NetSocketReceive(registry->sockFd, &handleId, 4, 0); 69 80 81 if (handleId == -1) 82 return -1; 83 70 84 keySet->handleId=handleId; 71 85 keySet->registry=registry; … … 79 93 } 80 94 95 int RegKeyReadInt(struct RegKeySet* keySet, char* name, int* ret) 96 { 97 int type, length=sizeof(int); 98 99 if (RegKeySetReadKey(keySet, name, &type, ret, &length) < 0) 100 return -1; 101 102 if (type != REG_KEY_TYPE_INT) 103 return -1; 104 105 return 0; 106 } 107 108 int RegKeyReadString(struct RegKeySet* keySet, char* name, char** data, unsigned long* length) 109 { 110 int type; 111 unsigned long rLength=2048; 112 113 /* TODO: Check return to see if buf needs to be expanded? */ 114 115 if (!*data) 116 *data=malloc(2048); 117 118 if (length) 119 rLength=*length; 120 121 if (RegKeySetReadKey(keySet, name, &type, *data, &rLength) < 0) 122 return -1; 123 124 if (type != REG_KEY_TYPE_STR) 125 return -1; 126 127 if (length) 128 *length=rLength; 129 130 return 0; 131 } 132 81 133 /* TODO: Expand format to multiple keys. */ 82 134 … … 88 140 if (!keySet || !name) 89 141 return -1; 90 91 struct RegReadKeyPacket92 {93 int type;94 int length;95 unsigned long handleId;96 char name[REG_NAME_LENGTH];97 };98 142 99 143 struct RegReadKeyReply … … 120 164 121 165 NetSocketReceive(sockFd, &reply, sizeof(struct RegReadKeyReply), 0); 122 123 // printf("error = %d, length = %u, type = %d\n", reply.error, reply.length, reply.type);124 166 125 167 if (data) … … 134 176 *length=NetSocketReceive(sockFd, data, *length, 0); 135 177 136 return 0; 137 } 178 if (type) 179 *type=reply.type; 180 181 return 0; 182 } 183 184 int RegKeySetIterInit(struct RegKeySet* keySet, struct RegKeySetIter* iter) 185 { 186 iter->keySet=keySet; 187 iter->bufSize=4096; 188 iter->buf=(char*)malloc(4096); 189 iter->next=0; 190 iter->index=0; 191 iter->size=0; 192 193 return 0; 194 } 195 196 char* RegKeySetIterNext(struct RegKeySetIter* iter) 197 { 198 struct RegEnumSetPacket 199 { 200 int type; 201 int length; 202 unsigned long handleId; 203 unsigned long index; 204 unsigned long size; 205 }; 206 207 char* ret; 208 int bytes; 209 int sockFd; 210 211 sockFd=iter->keySet->registry->sockFd; 212 213 if (!iter) 214 return NULL; 215 216 if (iter->size <= iter->next) 217 iter->size=iter->next=0; 218 219 if (iter->size == 0) 220 { 221 /* Get the next batch of directory entries. */ 222 struct RegEnumSetPacket packet; 223 packet.type=REG_PACKET_ENUM_KEYSET; 224 packet.length=sizeof(struct RegEnumSetPacket); 225 packet.handleId=iter->keySet->handleId; 226 packet.index=iter->index; 227 packet.size=iter->bufSize; 228 229 bytes=NetSocketSend(sockFd, &packet, packet.length, 0); 230 231 if (bytes <= 0) 232 return NULL; 233 234 bytes=NetSocketReceive(sockFd, iter->buf, iter->bufSize, 0); 235 iter->size=bytes; 236 237 if (bytes <= 0) 238 return NULL; 239 240 printf("Got %d bytes\n", bytes); 241 } 242 243 ret=iter->buf+iter->next; 244 iter->next+=strlen(ret)+1; 245 iter->index++; 246 247 return ret; 248 } 249 250 int RegKeySetIterClose(struct RegKeySetIter* iter) 251 { 252 if (!iter) 253 return -1; 254 255 free(iter->buf); 256 257 return 0; 258 } 259 260 int RegEntryGetType(struct RegKeySet* keySet, char* name, int* ret) 261 { 262 struct RegReadKeyPacket packet; 263 int sockFd, err; 264 265 sockFd=keySet->registry->sockFd; 266 267 packet.type=REG_PACKET_GET_ENT_TYPE; 268 packet.length=sizeof(struct RegReadKeyPacket); 269 packet.handleId=keySet->handleId; 270 strncpy(packet.name, name, REG_NAME_LENGTH); 271 272 err=NetSocketSend(sockFd, &packet, sizeof(struct RegReadKeyPacket), 0); 273 274 if (err < 0) 275 return err; 276 277 NetSocketReceive(sockFd, ret, 4, 0); 278 279 return 0; 280 }
