mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-21 13:28:05 +01:00
renamed proplist functions with better names
This commit is contained in:
@@ -741,77 +741,77 @@ void WMEnqueueCoalesceNotification(WMNotificationQueue *queue,
|
|||||||
|
|
||||||
/* Property Lists handling */
|
/* Property Lists handling */
|
||||||
|
|
||||||
void WMPLSetCaseSensitive(Bool useCase);
|
void WMPLSetCaseSensitive(Bool caseSensitive);
|
||||||
|
|
||||||
WMPropList* WMPLCreateString(char *str);
|
WMPropList* WMCreatePLString(char *str);
|
||||||
|
|
||||||
WMPropList* WMPLCreateData(WMData *data);
|
WMPropList* WMCreatePLData(WMData *data);
|
||||||
|
|
||||||
WMPropList* WMPLCreateDataWithBytes(unsigned char *bytes, unsigned int length);
|
WMPropList* WMCreatePLDataWithBytes(unsigned char *bytes, unsigned int length);
|
||||||
|
|
||||||
WMPropList* WMPLCreateDataWithBytesNoCopy(unsigned char *bytes,
|
WMPropList* WMCreatePLDataWithBytesNoCopy(unsigned char *bytes,
|
||||||
unsigned int length,
|
unsigned int length,
|
||||||
WMFreeDataProc *destructor);
|
WMFreeDataProc *destructor);
|
||||||
|
|
||||||
WMPropList* WMPLCreateArray(WMPropList *elem, ...);
|
WMPropList* WMCreatePLArray(WMPropList *elem, ...);
|
||||||
|
|
||||||
WMPropList* WMPLCreateDictionary(WMPropList *key, WMPropList *value, ...);
|
WMPropList* WMCreatePLDictionary(WMPropList *key, WMPropList *value, ...);
|
||||||
|
|
||||||
void WMPLInsertInArray(WMPropList *plist, int index, WMPropList *item);
|
void WMInsertInPLArray(WMPropList *plist, int index, WMPropList *item);
|
||||||
|
|
||||||
void WMPLAddToArray(WMPropList *plist, WMPropList *item);
|
void WMAddToPLArray(WMPropList *plist, WMPropList *item);
|
||||||
|
|
||||||
void WMPLDeleteFromArray(WMPropList *plist, int index);
|
void WMDeleteFromPLArray(WMPropList *plist, int index);
|
||||||
|
|
||||||
void WMPLRemoveFromArray(WMPropList *plist, WMPropList *item);
|
void WMRemoveFromPLArray(WMPropList *plist, WMPropList *item);
|
||||||
|
|
||||||
void WMPLPutInDictionary(WMPropList *plist, WMPropList *key, WMPropList *value);
|
void WMPutInPLDictionary(WMPropList *plist, WMPropList *key, WMPropList *value);
|
||||||
|
|
||||||
void WMPLRemoveFromDictionary(WMPropList *plist, WMPropList *key);
|
void WMRemoveFromPLDictionary(WMPropList *plist, WMPropList *key);
|
||||||
|
|
||||||
WMPropList* WMPLMergeDictionaries(WMPropList *dest, WMPropList *source);
|
WMPropList* WMMergePLDictionaries(WMPropList *dest, WMPropList *source);
|
||||||
|
|
||||||
WMPropList* WMPLRetain(WMPropList *plist);
|
WMPropList* WMRetainPropList(WMPropList *plist);
|
||||||
|
|
||||||
void WMPLRelease(WMPropList *plist);
|
void WMReleasePropList(WMPropList *plist);
|
||||||
|
|
||||||
Bool WMPLIsString(WMPropList *plist);
|
Bool WMIsPLString(WMPropList *plist);
|
||||||
|
|
||||||
Bool WMPLIsData(WMPropList *plist);
|
Bool WMIsPLData(WMPropList *plist);
|
||||||
|
|
||||||
Bool WMPLIsArray(WMPropList *plist);
|
Bool WMIsPLArray(WMPropList *plist);
|
||||||
|
|
||||||
Bool WMPLIsDictionary(WMPropList *plist);
|
Bool WMIsPLDictionary(WMPropList *plist);
|
||||||
|
|
||||||
Bool WMPLIsEqualToPL(WMPropList *plist, WMPropList *other);
|
Bool WMIsPropListEqualTo(WMPropList *plist, WMPropList *other);
|
||||||
|
|
||||||
int WMPLGetItemCount(WMPropList *plist);
|
int WMGetPropListItemCount(WMPropList *plist);
|
||||||
|
|
||||||
char* WMPLGetString(WMPropList *plist);
|
char* WMGetFromPLString(WMPropList *plist);
|
||||||
|
|
||||||
WMData* WMPLGetData(WMPropList *plist);
|
WMData* WMGetFromPLData(WMPropList *plist);
|
||||||
|
|
||||||
const unsigned char* WMPLGetDataBytes(WMPropList *plist);
|
const unsigned char* WMGetPLDataBytes(WMPropList *plist);
|
||||||
|
|
||||||
int WMPLGetDataLength(WMPropList *plist);
|
int WMGetPLDataLength(WMPropList *plist);
|
||||||
|
|
||||||
WMPropList* WMPLGetFromArray(WMPropList *plist, int index);
|
WMPropList* WMGetFromPLArray(WMPropList *plist, int index);
|
||||||
|
|
||||||
WMPropList* WMPLGetFromDictionary(WMPropList *plist, WMPropList *key);
|
WMPropList* WMGetFromPLDictionary(WMPropList *plist, WMPropList *key);
|
||||||
|
|
||||||
WMPropList* WMPLGetDictionaryKeys(WMPropList *plist);
|
WMPropList* WMGetPLDictionaryKeys(WMPropList *plist);
|
||||||
|
|
||||||
char* WMPLGetDescription(WMPropList *plist, Bool indented);
|
WMPropList* WMShallowCopyPropList(WMPropList *plist);
|
||||||
|
|
||||||
Bool WMPLWriteToFile(WMPropList *plist, char *path, Bool atomically);
|
WMPropList* WMDeepCopyPropList(WMPropList *plist);
|
||||||
|
|
||||||
WMPropList* WMPLShallowCopy(WMPropList *plist);
|
char* WMGetPropListDescription(WMPropList *plist, Bool indented);
|
||||||
|
|
||||||
WMPropList* WMPLDuplicate(WMPropList *plist);
|
WMPropList* WMCreatePropListFromDescription(char *desc);
|
||||||
|
|
||||||
WMPropList* WMPLGetWithDescription(char *desc);
|
WMPropList* WMReadPropListFromFile(char *file);
|
||||||
|
|
||||||
WMPropList* WMPLReadFromFile(char *file);
|
Bool WMWritePropListToFile(WMPropList *plist, char *path, Bool atomically);
|
||||||
|
|
||||||
/*......................................................................*/
|
/*......................................................................*/
|
||||||
|
|
||||||
|
|||||||
499
WINGs/proplist.c
499
WINGs/proplist.c
@@ -67,7 +67,7 @@ typedef void (*releaseFunc)(const void*);
|
|||||||
|
|
||||||
static const WMHashTableCallbacks WMPropListHashCallbacks = {
|
static const WMHashTableCallbacks WMPropListHashCallbacks = {
|
||||||
(hashFunc)hashPropList,
|
(hashFunc)hashPropList,
|
||||||
(isEqualFunc)WMPLIsEqualToPL,
|
(isEqualFunc)WMIsPropListEqualTo,
|
||||||
(retainFunc)NULL,
|
(retainFunc)NULL,
|
||||||
(releaseFunc)NULL
|
(releaseFunc)NULL
|
||||||
};
|
};
|
||||||
@@ -579,7 +579,7 @@ getPLString(PLData *pldata)
|
|||||||
plist = NULL;
|
plist = NULL;
|
||||||
} else {
|
} else {
|
||||||
char *tmp = unescapestr(sBuf.str);
|
char *tmp = unescapestr(sBuf.str);
|
||||||
plist = WMPLCreateString(tmp);
|
plist = WMCreatePLString(tmp);
|
||||||
wfree(tmp);
|
wfree(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -631,7 +631,7 @@ getPLQString(PLData *pldata)
|
|||||||
plist = NULL;
|
plist = NULL;
|
||||||
} else {
|
} else {
|
||||||
char *tmp = unescapestr(sBuf.str);
|
char *tmp = unescapestr(sBuf.str);
|
||||||
plist = WMPLCreateString(tmp);
|
plist = WMCreatePLString(tmp);
|
||||||
wfree(tmp);
|
wfree(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -691,7 +691,7 @@ getPLData(PLData *pldata)
|
|||||||
if (len > 0)
|
if (len > 0)
|
||||||
WMAppendDataBytes(data, buf, len);
|
WMAppendDataBytes(data, buf, len);
|
||||||
|
|
||||||
plist = WMPLCreateData(data);
|
plist = WMCreatePLData(data);
|
||||||
WMReleaseData(data);
|
WMReleaseData(data);
|
||||||
|
|
||||||
return plist;
|
return plist;
|
||||||
@@ -706,7 +706,7 @@ getPLArray(PLData *pldata)
|
|||||||
int c;
|
int c;
|
||||||
WMPropList *array, *obj;
|
WMPropList *array, *obj;
|
||||||
|
|
||||||
array = WMPLCreateArray(NULL);
|
array = WMCreatePLArray(NULL);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
c = getNonSpaceChar(pldata);
|
c = getNonSpaceChar(pldata);
|
||||||
@@ -733,12 +733,12 @@ getPLArray(PLData *pldata)
|
|||||||
ok = 0;
|
ok = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
WMPLAddToArray(array, obj);
|
WMAddToPLArray(array, obj);
|
||||||
WMPLRelease(obj);
|
WMReleasePropList(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
WMPLRelease(array);
|
WMReleasePropList(array);
|
||||||
array = NULL;
|
array = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -753,7 +753,7 @@ getPLDictionary(PLData *pldata)
|
|||||||
int c;
|
int c;
|
||||||
WMPropList *dict, *key, *value;
|
WMPropList *dict, *key, *value;
|
||||||
|
|
||||||
dict = WMPLCreateDictionary(NULL, NULL);
|
dict = WMCreatePLDictionary(NULL, NULL);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
c = getNonSpaceChar(pldata);
|
c = getNonSpaceChar(pldata);
|
||||||
@@ -792,7 +792,7 @@ getPLDictionary(PLData *pldata)
|
|||||||
|
|
||||||
c = getNonSpaceChar(pldata);
|
c = getNonSpaceChar(pldata);
|
||||||
if (c != '=') {
|
if (c != '=') {
|
||||||
WMPLRelease(key);
|
WMReleasePropList(key);
|
||||||
COMPLAIN(pldata, _("missing = in PropList dictionary entry"));
|
COMPLAIN(pldata, _("missing = in PropList dictionary entry"));
|
||||||
ok = 0;
|
ok = 0;
|
||||||
break;
|
break;
|
||||||
@@ -802,7 +802,7 @@ getPLDictionary(PLData *pldata)
|
|||||||
value = getPropList(pldata);
|
value = getPropList(pldata);
|
||||||
if (!value) {
|
if (!value) {
|
||||||
COMPLAIN(pldata, _("error parsing PropList dictionary entry value"));
|
COMPLAIN(pldata, _("error parsing PropList dictionary entry value"));
|
||||||
WMPLRelease(key);
|
WMReleasePropList(key);
|
||||||
ok = 0;
|
ok = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -810,19 +810,19 @@ getPLDictionary(PLData *pldata)
|
|||||||
c = getNonSpaceChar(pldata);
|
c = getNonSpaceChar(pldata);
|
||||||
if (c != ';') {
|
if (c != ';') {
|
||||||
COMPLAIN(pldata, _("missing ; in PropList dictionary entry"));
|
COMPLAIN(pldata, _("missing ; in PropList dictionary entry"));
|
||||||
WMPLRelease(key);
|
WMReleasePropList(key);
|
||||||
WMPLRelease(value);
|
WMReleasePropList(value);
|
||||||
ok = 0;
|
ok = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
WMPLPutInDictionary(dict, key, value);
|
WMPutInPLDictionary(dict, key, value);
|
||||||
WMPLRelease(key);
|
WMReleasePropList(key);
|
||||||
WMPLRelease(value);
|
WMReleasePropList(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
WMPLRelease(dict);
|
WMReleasePropList(dict);
|
||||||
dict = NULL;
|
dict = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -887,14 +887,14 @@ getPropList(PLData *pldata)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
WMPLSetCaseSensitive(Bool useCase)
|
WMPLSetCaseSensitive(Bool caseSensitiveness)
|
||||||
{
|
{
|
||||||
caseSensitive = useCase;
|
caseSensitive = caseSensitiveness;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WMPropList*
|
WMPropList*
|
||||||
WMPLCreateString(char *str)
|
WMCreatePLString(char *str)
|
||||||
{
|
{
|
||||||
WMPropList *plist;
|
WMPropList *plist;
|
||||||
|
|
||||||
@@ -911,7 +911,7 @@ WMPLCreateString(char *str)
|
|||||||
|
|
||||||
|
|
||||||
WMPropList*
|
WMPropList*
|
||||||
WMPLCreateData(WMData *data)
|
WMCreatePLData(WMData *data)
|
||||||
{
|
{
|
||||||
WMPropList *plist;
|
WMPropList *plist;
|
||||||
|
|
||||||
@@ -928,7 +928,7 @@ WMPLCreateData(WMData *data)
|
|||||||
|
|
||||||
|
|
||||||
WMPropList*
|
WMPropList*
|
||||||
WMPLCreateDataWithBytes(unsigned char *bytes, unsigned int length)
|
WMCreatePLDataWithBytes(unsigned char *bytes, unsigned int length)
|
||||||
{
|
{
|
||||||
WMPropList *plist;
|
WMPropList *plist;
|
||||||
|
|
||||||
@@ -945,7 +945,7 @@ WMPLCreateDataWithBytes(unsigned char *bytes, unsigned int length)
|
|||||||
|
|
||||||
|
|
||||||
WMPropList*
|
WMPropList*
|
||||||
WMPLCreateDataWithBytesNoCopy(unsigned char *bytes, unsigned int length,
|
WMCreatePLDataWithBytesNoCopy(unsigned char *bytes, unsigned int length,
|
||||||
WMFreeDataProc *destructor)
|
WMFreeDataProc *destructor)
|
||||||
{
|
{
|
||||||
WMPropList *plist;
|
WMPropList *plist;
|
||||||
@@ -963,7 +963,7 @@ WMPLCreateDataWithBytesNoCopy(unsigned char *bytes, unsigned int length,
|
|||||||
|
|
||||||
|
|
||||||
WMPropList*
|
WMPropList*
|
||||||
WMPLCreateArray(WMPropList *elem, ...)
|
WMCreatePLArray(WMPropList *elem, ...)
|
||||||
{
|
{
|
||||||
WMPropList *plist, *nelem;
|
WMPropList *plist, *nelem;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
@@ -976,7 +976,7 @@ WMPLCreateArray(WMPropList *elem, ...)
|
|||||||
if (!elem)
|
if (!elem)
|
||||||
return plist;
|
return plist;
|
||||||
|
|
||||||
WMAddToArray(plist->d.array, WMPLRetain(elem));
|
WMAddToArray(plist->d.array, WMRetainPropList(elem));
|
||||||
|
|
||||||
va_start(ap, elem);
|
va_start(ap, elem);
|
||||||
|
|
||||||
@@ -986,13 +986,13 @@ WMPLCreateArray(WMPropList *elem, ...)
|
|||||||
va_end(ap);
|
va_end(ap);
|
||||||
return plist;
|
return plist;
|
||||||
}
|
}
|
||||||
WMAddToArray(plist->d.array, WMPLRetain(nelem));
|
WMAddToArray(plist->d.array, WMRetainPropList(nelem));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WMPropList*
|
WMPropList*
|
||||||
WMPLCreateDictionary(WMPropList *key, WMPropList *value, ...)
|
WMCreatePLDictionary(WMPropList *key, WMPropList *value, ...)
|
||||||
{
|
{
|
||||||
WMPropList *plist, *nkey, *nvalue, *k, *v;
|
WMPropList *plist, *nkey, *nvalue, *k, *v;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
@@ -1005,7 +1005,7 @@ WMPLCreateDictionary(WMPropList *key, WMPropList *value, ...)
|
|||||||
if (!key || !value)
|
if (!key || !value)
|
||||||
return plist;
|
return plist;
|
||||||
|
|
||||||
WMHashInsert(plist->d.dict, WMPLRetain(key), WMPLRetain(value));
|
WMHashInsert(plist->d.dict, WMRetainPropList(key), WMRetainPropList(value));
|
||||||
|
|
||||||
va_start(ap, value);
|
va_start(ap, value);
|
||||||
|
|
||||||
@@ -1022,16 +1022,17 @@ WMPLCreateDictionary(WMPropList *key, WMPropList *value, ...)
|
|||||||
}
|
}
|
||||||
if (WMHashGetItemAndKey(plist->d.dict, nkey, (void**)&v, (void**)&k)) {
|
if (WMHashGetItemAndKey(plist->d.dict, nkey, (void**)&v, (void**)&k)) {
|
||||||
WMHashRemove(plist->d.dict, k);
|
WMHashRemove(plist->d.dict, k);
|
||||||
WMPLRelease(k);
|
WMReleasePropList(k);
|
||||||
WMPLRelease(v);
|
WMReleasePropList(v);
|
||||||
}
|
}
|
||||||
WMHashInsert(plist->d.dict, WMPLRetain(nkey), WMPLRetain(nvalue));
|
WMHashInsert(plist->d.dict, WMRetainPropList(nkey),
|
||||||
|
WMRetainPropList(nvalue));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
WMPLInsertInArray(WMPropList *plist, int index, WMPropList *item)
|
WMInsertInPLArray(WMPropList *plist, int index, WMPropList *item)
|
||||||
{
|
{
|
||||||
wassertr(plist->type==WPLArray);
|
wassertr(plist->type==WPLArray);
|
||||||
|
|
||||||
@@ -1041,7 +1042,7 @@ WMPLInsertInArray(WMPropList *plist, int index, WMPropList *item)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
WMPLAddToArray(WMPropList *plist, WMPropList *item)
|
WMAddToPLArray(WMPropList *plist, WMPropList *item)
|
||||||
{
|
{
|
||||||
wassertr(plist->type==WPLArray);
|
wassertr(plist->type==WPLArray);
|
||||||
|
|
||||||
@@ -1051,7 +1052,7 @@ WMPLAddToArray(WMPropList *plist, WMPropList *item)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
WMPLDeleteFromArray(WMPropList *plist, int index)
|
WMDeleteFromPLArray(WMPropList *plist, int index)
|
||||||
{
|
{
|
||||||
WMPropList *item;
|
WMPropList *item;
|
||||||
|
|
||||||
@@ -1066,7 +1067,7 @@ WMPLDeleteFromArray(WMPropList *plist, int index)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
WMPLRemoveFromArray(WMPropList *plist, WMPropList *item)
|
WMRemoveFromPLArray(WMPropList *plist, WMPropList *item)
|
||||||
{
|
{
|
||||||
WMPropList *iPtr;
|
WMPropList *iPtr;
|
||||||
int i;
|
int i;
|
||||||
@@ -1075,7 +1076,7 @@ WMPLRemoveFromArray(WMPropList *plist, WMPropList *item)
|
|||||||
|
|
||||||
for (i=0; i<WMGetArrayItemCount(plist->d.array); i++) {
|
for (i=0; i<WMGetArrayItemCount(plist->d.array); i++) {
|
||||||
iPtr = WMGetFromArray(plist->d.array, i);
|
iPtr = WMGetFromArray(plist->d.array, i);
|
||||||
if (WMPLIsEqualToPL(item, iPtr)) {
|
if (WMIsPropListEqualTo(item, iPtr)) {
|
||||||
WMDeleteFromArray(plist->d.array, i);
|
WMDeleteFromArray(plist->d.array, i);
|
||||||
releasePropListByCount(iPtr, plist->retainCount);
|
releasePropListByCount(iPtr, plist->retainCount);
|
||||||
break;
|
break;
|
||||||
@@ -1085,11 +1086,11 @@ WMPLRemoveFromArray(WMPropList *plist, WMPropList *item)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
WMPLPutInDictionary(WMPropList *plist, WMPropList *key, WMPropList *value)
|
WMPutInPLDictionary(WMPropList *plist, WMPropList *key, WMPropList *value)
|
||||||
{
|
{
|
||||||
wassertr(plist->type==WPLDictionary);
|
wassertr(plist->type==WPLDictionary);
|
||||||
|
|
||||||
WMPLRemoveFromDictionary(plist, key);
|
WMRemoveFromPLDictionary(plist, key);
|
||||||
retainPropListByCount(key, plist->retainCount);
|
retainPropListByCount(key, plist->retainCount);
|
||||||
retainPropListByCount(value, plist->retainCount);
|
retainPropListByCount(value, plist->retainCount);
|
||||||
WMHashInsert(plist->d.dict, key, value);
|
WMHashInsert(plist->d.dict, key, value);
|
||||||
@@ -1097,7 +1098,7 @@ WMPLPutInDictionary(WMPropList *plist, WMPropList *key, WMPropList *value)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
WMPLRemoveFromDictionary(WMPropList *plist, WMPropList *key)
|
WMRemoveFromPLDictionary(WMPropList *plist, WMPropList *key)
|
||||||
{
|
{
|
||||||
WMPropList *k, *v;
|
WMPropList *k, *v;
|
||||||
|
|
||||||
@@ -1112,7 +1113,7 @@ WMPLRemoveFromDictionary(WMPropList *plist, WMPropList *key)
|
|||||||
|
|
||||||
|
|
||||||
WMPropList*
|
WMPropList*
|
||||||
WMPLMergeDictionaries(WMPropList *dest, WMPropList *source)
|
WMMergePLDictionaries(WMPropList *dest, WMPropList *source)
|
||||||
{
|
{
|
||||||
WMPropList *key, *value;
|
WMPropList *key, *value;
|
||||||
WMHashEnumerator e;
|
WMHashEnumerator e;
|
||||||
@@ -1121,7 +1122,7 @@ WMPLMergeDictionaries(WMPropList *dest, WMPropList *source)
|
|||||||
|
|
||||||
e = WMEnumerateHashTable(source->d.dict);
|
e = WMEnumerateHashTable(source->d.dict);
|
||||||
while (WMNextHashEnumeratorItemAndKey(&e, (void**)&value, (void**)&key)) {
|
while (WMNextHashEnumeratorItemAndKey(&e, (void**)&value, (void**)&key)) {
|
||||||
WMPLPutInDictionary(dest, key, value);
|
WMPutInPLDictionary(dest, key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return dest;
|
return dest;
|
||||||
@@ -1129,7 +1130,7 @@ WMPLMergeDictionaries(WMPropList *dest, WMPropList *source)
|
|||||||
|
|
||||||
|
|
||||||
WMPropList*
|
WMPropList*
|
||||||
WMPLRetain(WMPropList *plist)
|
WMRetainPropList(WMPropList *plist)
|
||||||
{
|
{
|
||||||
WMPropList *key, *value;
|
WMPropList *key, *value;
|
||||||
WMHashEnumerator e;
|
WMHashEnumerator e;
|
||||||
@@ -1143,14 +1144,14 @@ WMPLRetain(WMPropList *plist)
|
|||||||
break;
|
break;
|
||||||
case WPLArray:
|
case WPLArray:
|
||||||
for (i=0; i<WMGetArrayItemCount(plist->d.array); i++) {
|
for (i=0; i<WMGetArrayItemCount(plist->d.array); i++) {
|
||||||
WMPLRetain(WMGetFromArray(plist->d.array, i));
|
WMRetainPropList(WMGetFromArray(plist->d.array, i));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WPLDictionary:
|
case WPLDictionary:
|
||||||
e = WMEnumerateHashTable(plist->d.dict);
|
e = WMEnumerateHashTable(plist->d.dict);
|
||||||
while (WMNextHashEnumeratorItemAndKey(&e, (void**)&value, (void**)&key)) {
|
while (WMNextHashEnumeratorItemAndKey(&e, (void**)&value, (void**)&key)) {
|
||||||
WMPLRetain(key);
|
WMRetainPropList(key);
|
||||||
WMPLRetain(value);
|
WMRetainPropList(value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -1164,7 +1165,7 @@ WMPLRetain(WMPropList *plist)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
WMPLRelease(WMPropList *plist)
|
WMReleasePropList(WMPropList *plist)
|
||||||
{
|
{
|
||||||
WMPropList *key, *value;
|
WMPropList *key, *value;
|
||||||
WMHashEnumerator e;
|
WMHashEnumerator e;
|
||||||
@@ -1187,7 +1188,7 @@ WMPLRelease(WMPropList *plist)
|
|||||||
break;
|
break;
|
||||||
case WPLArray:
|
case WPLArray:
|
||||||
for (i=0; i<WMGetArrayItemCount(plist->d.array); i++) {
|
for (i=0; i<WMGetArrayItemCount(plist->d.array); i++) {
|
||||||
WMPLRelease(WMGetFromArray(plist->d.array, i));
|
WMReleasePropList(WMGetFromArray(plist->d.array, i));
|
||||||
}
|
}
|
||||||
if (plist->retainCount < 1) {
|
if (plist->retainCount < 1) {
|
||||||
WMFreeArray(plist->d.array);
|
WMFreeArray(plist->d.array);
|
||||||
@@ -1197,8 +1198,8 @@ WMPLRelease(WMPropList *plist)
|
|||||||
case WPLDictionary:
|
case WPLDictionary:
|
||||||
e = WMEnumerateHashTable(plist->d.dict);
|
e = WMEnumerateHashTable(plist->d.dict);
|
||||||
while (WMNextHashEnumeratorItemAndKey(&e, (void**)&value, (void**)&key)) {
|
while (WMNextHashEnumeratorItemAndKey(&e, (void**)&value, (void**)&key)) {
|
||||||
WMPLRelease(key);
|
WMReleasePropList(key);
|
||||||
WMPLRelease(value);
|
WMReleasePropList(value);
|
||||||
}
|
}
|
||||||
if (plist->retainCount < 1) {
|
if (plist->retainCount < 1) {
|
||||||
WMFreeHashTable(plist->d.dict);
|
WMFreeHashTable(plist->d.dict);
|
||||||
@@ -1214,35 +1215,35 @@ WMPLRelease(WMPropList *plist)
|
|||||||
|
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
WMPLIsString(WMPropList *plist)
|
WMIsPLString(WMPropList *plist)
|
||||||
{
|
{
|
||||||
return (plist->type == WPLString);
|
return (plist->type == WPLString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
WMPLIsData(WMPropList *plist)
|
WMIsPLData(WMPropList *plist)
|
||||||
{
|
{
|
||||||
return (plist->type == WPLData);
|
return (plist->type == WPLData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
WMPLIsArray(WMPropList *plist)
|
WMIsPLArray(WMPropList *plist)
|
||||||
{
|
{
|
||||||
return (plist->type == WPLArray);
|
return (plist->type == WPLArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
WMPLIsDictionary(WMPropList *plist)
|
WMIsPLDictionary(WMPropList *plist)
|
||||||
{
|
{
|
||||||
return (plist->type == WPLDictionary);
|
return (plist->type == WPLDictionary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
WMPLIsEqualToPL(WMPropList *plist, WMPropList *other)
|
WMIsPropListEqualTo(WMPropList *plist, WMPropList *other)
|
||||||
{
|
{
|
||||||
WMPropList *key1, *item1, *item2;
|
WMPropList *key1, *item1, *item2;
|
||||||
WMHashEnumerator enumerator;
|
WMHashEnumerator enumerator;
|
||||||
@@ -1267,7 +1268,7 @@ WMPLIsEqualToPL(WMPropList *plist, WMPropList *other)
|
|||||||
for (i=0; i<n; i++) {
|
for (i=0; i<n; i++) {
|
||||||
item1 = WMGetFromArray(plist->d.array, i);
|
item1 = WMGetFromArray(plist->d.array, i);
|
||||||
item2 = WMGetFromArray(other->d.array, i);
|
item2 = WMGetFromArray(other->d.array, i);
|
||||||
if (!WMPLIsEqualToPL(item1, item2))
|
if (!WMIsPropListEqualTo(item1, item2))
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
return True;
|
return True;
|
||||||
@@ -1278,7 +1279,7 @@ WMPLIsEqualToPL(WMPropList *plist, WMPropList *other)
|
|||||||
while (WMNextHashEnumeratorItemAndKey(&enumerator, (void**)&item1,
|
while (WMNextHashEnumeratorItemAndKey(&enumerator, (void**)&item1,
|
||||||
(void**)&key1)) {
|
(void**)&key1)) {
|
||||||
item2 = WMHashGet(other->d.dict, key1);
|
item2 = WMHashGet(other->d.dict, key1);
|
||||||
if (!item2 || !item1 || !WMPLIsEqualToPL(item1, item2))
|
if (!item2 || !item1 || !WMIsPropListEqualTo(item1, item2))
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
return True;
|
return True;
|
||||||
@@ -1293,7 +1294,7 @@ WMPLIsEqualToPL(WMPropList *plist, WMPropList *other)
|
|||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
WMPLGetItemCount(WMPropList *plist)
|
WMGetPropListItemCount(WMPropList *plist)
|
||||||
{
|
{
|
||||||
switch(plist->type) {
|
switch(plist->type) {
|
||||||
case WPLString:
|
case WPLString:
|
||||||
@@ -1314,7 +1315,7 @@ WMPLGetItemCount(WMPropList *plist)
|
|||||||
|
|
||||||
|
|
||||||
char*
|
char*
|
||||||
WMPLGetString(WMPropList *plist)
|
WMGetFromPLString(WMPropList *plist)
|
||||||
{
|
{
|
||||||
wassertrv(plist->type==WPLString, NULL);
|
wassertrv(plist->type==WPLString, NULL);
|
||||||
|
|
||||||
@@ -1323,7 +1324,7 @@ WMPLGetString(WMPropList *plist)
|
|||||||
|
|
||||||
|
|
||||||
WMData*
|
WMData*
|
||||||
WMPLGetData(WMPropList *plist)
|
WMGetFromPLData(WMPropList *plist)
|
||||||
{
|
{
|
||||||
wassertrv(plist->type==WPLData, NULL);
|
wassertrv(plist->type==WPLData, NULL);
|
||||||
|
|
||||||
@@ -1332,7 +1333,7 @@ WMPLGetData(WMPropList *plist)
|
|||||||
|
|
||||||
|
|
||||||
const unsigned char*
|
const unsigned char*
|
||||||
WMPLGetDataBytes(WMPropList *plist)
|
WMGetPLDataBytes(WMPropList *plist)
|
||||||
{
|
{
|
||||||
wassertrv(plist->type==WPLData, NULL);
|
wassertrv(plist->type==WPLData, NULL);
|
||||||
|
|
||||||
@@ -1341,7 +1342,7 @@ WMPLGetDataBytes(WMPropList *plist)
|
|||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
WMPLGetDataLength(WMPropList *plist)
|
WMGetPLDataLength(WMPropList *plist)
|
||||||
{
|
{
|
||||||
wassertrv(plist->type==WPLData, 0);
|
wassertrv(plist->type==WPLData, 0);
|
||||||
|
|
||||||
@@ -1350,7 +1351,7 @@ WMPLGetDataLength(WMPropList *plist)
|
|||||||
|
|
||||||
|
|
||||||
WMPropList*
|
WMPropList*
|
||||||
WMPLGetFromArray(WMPropList *plist, int index)
|
WMGetFromPLArray(WMPropList *plist, int index)
|
||||||
{
|
{
|
||||||
wassertrv(plist->type==WPLArray, NULL);
|
wassertrv(plist->type==WPLArray, NULL);
|
||||||
|
|
||||||
@@ -1359,7 +1360,7 @@ WMPLGetFromArray(WMPropList *plist, int index)
|
|||||||
|
|
||||||
|
|
||||||
WMPropList*
|
WMPropList*
|
||||||
WMPLGetFromDictionary(WMPropList *plist, WMPropList *key)
|
WMGetFromPLDictionary(WMPropList *plist, WMPropList *key)
|
||||||
{
|
{
|
||||||
wassertrv(plist->type==WPLDictionary, NULL);
|
wassertrv(plist->type==WPLDictionary, NULL);
|
||||||
|
|
||||||
@@ -1368,7 +1369,7 @@ WMPLGetFromDictionary(WMPropList *plist, WMPropList *key)
|
|||||||
|
|
||||||
|
|
||||||
WMPropList*
|
WMPropList*
|
||||||
WMPLGetDictionaryKeys(WMPropList *plist)
|
WMGetPLDictionaryKeys(WMPropList *plist)
|
||||||
{
|
{
|
||||||
WMPropList *array, *key;
|
WMPropList *array, *key;
|
||||||
WMHashEnumerator enumerator;
|
WMHashEnumerator enumerator;
|
||||||
@@ -1382,25 +1383,207 @@ WMPLGetDictionaryKeys(WMPropList *plist)
|
|||||||
|
|
||||||
enumerator = WMEnumerateHashTable(plist->d.dict);
|
enumerator = WMEnumerateHashTable(plist->d.dict);
|
||||||
while ((key = WMNextHashEnumeratorKey(&enumerator))) {
|
while ((key = WMNextHashEnumeratorKey(&enumerator))) {
|
||||||
WMAddToArray(array->d.array, WMPLRetain(key));
|
WMAddToArray(array->d.array, WMRetainPropList(key));
|
||||||
}
|
}
|
||||||
|
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WMPropList*
|
||||||
|
WMShallowCopyPropList(WMPropList *plist)
|
||||||
|
{
|
||||||
|
WMPropList *ret = NULL;
|
||||||
|
WMPropList *key, *item;
|
||||||
|
WMHashEnumerator e;
|
||||||
|
WMData *data;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
switch(plist->type) {
|
||||||
|
case WPLString:
|
||||||
|
ret = WMCreatePLString(plist->d.string);
|
||||||
|
break;
|
||||||
|
case WPLData:
|
||||||
|
data = WMCreateDataWithData(plist->d.data);
|
||||||
|
ret = WMCreatePLData(data);
|
||||||
|
WMReleaseData(data);
|
||||||
|
break;
|
||||||
|
case WPLArray:
|
||||||
|
ret = (WMPropList*)wmalloc(sizeof(W_PropList));
|
||||||
|
ret->type = WPLArray;
|
||||||
|
ret->d.array = WMCreateArrayWithArray(plist->d.array);
|
||||||
|
ret->retainCount = 1;
|
||||||
|
|
||||||
|
for(i=0; i<WMGetArrayItemCount(ret->d.array); i++)
|
||||||
|
WMRetainPropList(WMGetFromArray(ret->d.array, i));
|
||||||
|
|
||||||
|
break;
|
||||||
|
case WPLDictionary:
|
||||||
|
ret = WMCreatePLDictionary(NULL, NULL);
|
||||||
|
e = WMEnumerateHashTable(plist->d.dict);
|
||||||
|
while (WMNextHashEnumeratorItemAndKey(&e, (void**)&item, (void**)&key)) {
|
||||||
|
WMPutInPLDictionary(ret, key, item);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
wwarning(_("Used proplist functions on non-WMPropLists objects"));
|
||||||
|
wassertrv(False, NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WMPropList*
|
||||||
|
WMDeepCopyPropList(WMPropList *plist)
|
||||||
|
{
|
||||||
|
WMPropList *ret = NULL;
|
||||||
|
WMPropList *key, *item;
|
||||||
|
WMHashEnumerator e;
|
||||||
|
WMData *data;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
switch(plist->type) {
|
||||||
|
case WPLString:
|
||||||
|
ret = WMCreatePLString(plist->d.string);
|
||||||
|
break;
|
||||||
|
case WPLData:
|
||||||
|
data = WMCreateDataWithData(plist->d.data);
|
||||||
|
ret = WMCreatePLData(data);
|
||||||
|
WMReleaseData(data);
|
||||||
|
break;
|
||||||
|
case WPLArray:
|
||||||
|
ret = WMCreatePLArray(NULL);
|
||||||
|
for(i=0; i<WMGetArrayItemCount(plist->d.array); i++) {
|
||||||
|
item = WMDeepCopyPropList(WMGetFromArray(plist->d.array, i));
|
||||||
|
WMAddToArray(ret->d.array, item);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WPLDictionary:
|
||||||
|
ret = WMCreatePLDictionary(NULL, NULL);
|
||||||
|
e = WMEnumerateHashTable(plist->d.dict);
|
||||||
|
/* While we copy an existing dictionary there is no way that we can
|
||||||
|
* have duplicate keys, so we don't need to first remove a key/value
|
||||||
|
* pair before inserting the new key/value.
|
||||||
|
*/
|
||||||
|
while (WMNextHashEnumeratorItemAndKey(&e, (void**)&item, (void**)&key)) {
|
||||||
|
WMHashInsert(ret->d.dict, WMDeepCopyPropList(key),
|
||||||
|
WMDeepCopyPropList(item));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
wwarning(_("Used proplist functions on non-WMPropLists objects"));
|
||||||
|
wassertrv(False, NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
char*
|
char*
|
||||||
WMPLGetDescription(WMPropList *plist, Bool indented)
|
WMGetPropListDescription(WMPropList *plist, Bool indented)
|
||||||
{
|
{
|
||||||
return (indented ? indentedDescription(plist, 0) : description(plist));
|
return (indented ? indentedDescription(plist, 0) : description(plist));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WMPropList*
|
||||||
|
WMCreatePropListFromDescription(char *desc)
|
||||||
|
{
|
||||||
|
WMPropList *plist = NULL;
|
||||||
|
PLData *pldata;
|
||||||
|
|
||||||
|
pldata = (PLData*) wmalloc(sizeof(PLData));
|
||||||
|
memset(pldata, 0, sizeof(PLData));
|
||||||
|
pldata->ptr = desc;
|
||||||
|
pldata->lineNumber = 1;
|
||||||
|
|
||||||
|
plist = getPropList(pldata);
|
||||||
|
|
||||||
|
if (getNonSpaceChar(pldata)!=0 && plist) {
|
||||||
|
COMPLAIN(pldata, _("extra data after end of property list"));
|
||||||
|
/*
|
||||||
|
* We can't just ignore garbage after the end of the description
|
||||||
|
* (especially if the description was read from a file), because
|
||||||
|
* the "garbage" can be the real data and the real garbage is in
|
||||||
|
* fact in the beginning of the file (which is now inside plist)
|
||||||
|
*/
|
||||||
|
WMReleasePropList(plist);
|
||||||
|
plist = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
wfree(pldata);
|
||||||
|
|
||||||
|
return plist;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WMPropList*
|
||||||
|
WMReadPropListFromFile(char *file)
|
||||||
|
{
|
||||||
|
WMPropList *plist = NULL;
|
||||||
|
PLData *pldata;
|
||||||
|
FILE *f;
|
||||||
|
struct stat stbuf;
|
||||||
|
size_t length;
|
||||||
|
|
||||||
|
f = fopen(file, "r");
|
||||||
|
if (!f) {
|
||||||
|
wsyserror(_("could not open domain file %s for reading"), file);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stat(file, &stbuf)==0) {
|
||||||
|
length = (size_t) stbuf.st_size;
|
||||||
|
} else {
|
||||||
|
wsyserror(_("could not get size for domain file %s"), file);
|
||||||
|
fclose(f);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
pldata = (PLData*) wmalloc(sizeof(PLData));
|
||||||
|
memset(pldata, 0, sizeof(PLData));
|
||||||
|
pldata->ptr = (char*) wmalloc(length+1);
|
||||||
|
pldata->filename = file;
|
||||||
|
pldata->lineNumber = 1;
|
||||||
|
|
||||||
|
if (fread(pldata->ptr, length, 1, f) != 1) {
|
||||||
|
wsyserror(_("error reading from file %s"), file);
|
||||||
|
plist = NULL;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
pldata->ptr[length] = 0;
|
||||||
|
|
||||||
|
plist = getPropList(pldata);
|
||||||
|
|
||||||
|
if (getNonSpaceChar(pldata)!=0 && plist) {
|
||||||
|
COMPLAIN(pldata, _("extra data after end of property list"));
|
||||||
|
/*
|
||||||
|
* We can't just ignore garbage after the end of the description
|
||||||
|
* (especially if the description was read from a file), because
|
||||||
|
* the "garbage" can be the real data and the real garbage is in
|
||||||
|
* fact in the beginning of the file (which is now inside plist)
|
||||||
|
*/
|
||||||
|
WMReleasePropList(plist);
|
||||||
|
plist = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
wfree(pldata->ptr);
|
||||||
|
wfree(pldata);
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
return plist;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* TODO: review this function's code */
|
/* TODO: review this function's code */
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
WMPLWriteToFile(WMPropList *plist, char *path, Bool atomically)
|
WMWritePropListToFile(WMPropList *plist, char *path, Bool atomically)
|
||||||
{
|
{
|
||||||
char *thePath=NULL;
|
char *thePath=NULL;
|
||||||
char *desc;
|
char *desc;
|
||||||
@@ -1482,185 +1665,3 @@ failure:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WMPropList*
|
|
||||||
WMPLShallowCopy(WMPropList *plist)
|
|
||||||
{
|
|
||||||
WMPropList *ret = NULL;
|
|
||||||
WMPropList *key, *item;
|
|
||||||
WMHashEnumerator e;
|
|
||||||
WMData *data;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
switch(plist->type) {
|
|
||||||
case WPLString:
|
|
||||||
ret = WMPLCreateString(plist->d.string);
|
|
||||||
break;
|
|
||||||
case WPLData:
|
|
||||||
data = WMCreateDataWithData(plist->d.data);
|
|
||||||
ret = WMPLCreateData(data);
|
|
||||||
WMReleaseData(data);
|
|
||||||
break;
|
|
||||||
case WPLArray:
|
|
||||||
ret = (WMPropList*)wmalloc(sizeof(W_PropList));
|
|
||||||
ret->type = WPLArray;
|
|
||||||
ret->d.array = WMCreateArrayWithArray(plist->d.array);
|
|
||||||
ret->retainCount = 1;
|
|
||||||
|
|
||||||
for(i=0; i<WMGetArrayItemCount(ret->d.array); i++)
|
|
||||||
WMPLRetain(WMGetFromArray(ret->d.array, i));
|
|
||||||
|
|
||||||
break;
|
|
||||||
case WPLDictionary:
|
|
||||||
ret = WMPLCreateDictionary(NULL, NULL);
|
|
||||||
e = WMEnumerateHashTable(plist->d.dict);
|
|
||||||
while (WMNextHashEnumeratorItemAndKey(&e, (void**)&item, (void**)&key)) {
|
|
||||||
WMPLPutInDictionary(ret, key, item);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
wwarning(_("Used proplist functions on non-WMPropLists objects"));
|
|
||||||
wassertrv(False, NULL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WMPropList*
|
|
||||||
WMPLDuplicate(WMPropList *plist)
|
|
||||||
{
|
|
||||||
WMPropList *ret = NULL;
|
|
||||||
WMPropList *key, *item;
|
|
||||||
WMHashEnumerator e;
|
|
||||||
WMData *data;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
switch(plist->type) {
|
|
||||||
case WPLString:
|
|
||||||
ret = WMPLCreateString(plist->d.string);
|
|
||||||
break;
|
|
||||||
case WPLData:
|
|
||||||
data = WMCreateDataWithData(plist->d.data);
|
|
||||||
ret = WMPLCreateData(data);
|
|
||||||
WMReleaseData(data);
|
|
||||||
break;
|
|
||||||
case WPLArray:
|
|
||||||
ret = WMPLCreateArray(NULL);
|
|
||||||
for(i=0; i<WMGetArrayItemCount(plist->d.array); i++) {
|
|
||||||
item = WMPLDuplicate(WMGetFromArray(plist->d.array, i));
|
|
||||||
WMAddToArray(ret->d.array, item);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case WPLDictionary:
|
|
||||||
ret = WMPLCreateDictionary(NULL, NULL);
|
|
||||||
e = WMEnumerateHashTable(plist->d.dict);
|
|
||||||
/* While we copy an existing dictionary there is no way that we can
|
|
||||||
* have duplicate keys, so we don't need to first remove a key/value
|
|
||||||
* pair before inserting the new key/value.
|
|
||||||
*/
|
|
||||||
while (WMNextHashEnumeratorItemAndKey(&e, (void**)&item, (void**)&key)) {
|
|
||||||
WMHashInsert(ret->d.dict, WMPLDuplicate(key), WMPLDuplicate(item));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
wwarning(_("Used proplist functions on non-WMPropLists objects"));
|
|
||||||
wassertrv(False, NULL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WMPropList*
|
|
||||||
WMPLGetWithDescription(char *desc)
|
|
||||||
{
|
|
||||||
WMPropList *plist = NULL;
|
|
||||||
PLData *pldata;
|
|
||||||
|
|
||||||
pldata = (PLData*) wmalloc(sizeof(PLData));
|
|
||||||
memset(pldata, 0, sizeof(PLData));
|
|
||||||
pldata->ptr = desc;
|
|
||||||
pldata->lineNumber = 1;
|
|
||||||
|
|
||||||
plist = getPropList(pldata);
|
|
||||||
|
|
||||||
if (getNonSpaceChar(pldata)!=0 && plist) {
|
|
||||||
COMPLAIN(pldata, _("extra data after end of property list"));
|
|
||||||
/*
|
|
||||||
* We can't just ignore garbage after the end of the description
|
|
||||||
* (especially if the description was read from a file), because
|
|
||||||
* the "garbage" can be the real data and the real garbage is in
|
|
||||||
* fact in the beginning of the file (which is now inside plist)
|
|
||||||
*/
|
|
||||||
WMPLRelease(plist);
|
|
||||||
plist = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
wfree(pldata);
|
|
||||||
|
|
||||||
return plist;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WMPropList*
|
|
||||||
WMPLReadFromFile(char *file)
|
|
||||||
{
|
|
||||||
WMPropList *plist = NULL;
|
|
||||||
PLData *pldata;
|
|
||||||
FILE *f;
|
|
||||||
struct stat stbuf;
|
|
||||||
size_t length;
|
|
||||||
|
|
||||||
f = fopen(file, "r");
|
|
||||||
if (!f) {
|
|
||||||
wsyserror(_("could not open domain file %s for reading"), file);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stat(file, &stbuf)==0) {
|
|
||||||
length = (size_t) stbuf.st_size;
|
|
||||||
} else {
|
|
||||||
wsyserror(_("could not get size for domain file %s"), file);
|
|
||||||
fclose(f);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
pldata = (PLData*) wmalloc(sizeof(PLData));
|
|
||||||
memset(pldata, 0, sizeof(PLData));
|
|
||||||
pldata->ptr = (char*) wmalloc(length+1);
|
|
||||||
pldata->filename = file;
|
|
||||||
pldata->lineNumber = 1;
|
|
||||||
|
|
||||||
if (fread(pldata->ptr, length, 1, f) != 1) {
|
|
||||||
wsyserror(_("error reading from file %s"), file);
|
|
||||||
plist = NULL;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
pldata->ptr[length] = 0;
|
|
||||||
|
|
||||||
plist = getPropList(pldata);
|
|
||||||
|
|
||||||
if (getNonSpaceChar(pldata)!=0 && plist) {
|
|
||||||
COMPLAIN(pldata, _("extra data after end of property list"));
|
|
||||||
/*
|
|
||||||
* We can't just ignore garbage after the end of the description
|
|
||||||
* (especially if the description was read from a file), because
|
|
||||||
* the "garbage" can be the real data and the real garbage is in
|
|
||||||
* fact in the beginning of the file (which is now inside plist)
|
|
||||||
*/
|
|
||||||
WMPLRelease(plist);
|
|
||||||
plist = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
wfree(pldata->ptr);
|
|
||||||
wfree(pldata);
|
|
||||||
fclose(f);
|
|
||||||
|
|
||||||
return plist;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1232,7 +1232,7 @@ readMenuPipe(WScreen *scr, char **file_name)
|
|||||||
char params[MAXLINE];
|
char params[MAXLINE];
|
||||||
char shortcut[MAXLINE];
|
char shortcut[MAXLINE];
|
||||||
char *line;
|
char *line;
|
||||||
char * filename;
|
char *filename;
|
||||||
char flat_file[MAXLINE];
|
char flat_file[MAXLINE];
|
||||||
int i;
|
int i;
|
||||||
#ifdef USECPP
|
#ifdef USECPP
|
||||||
@@ -1242,7 +1242,7 @@ readMenuPipe(WScreen *scr, char **file_name)
|
|||||||
|
|
||||||
flat_file[0] = '\0';
|
flat_file[0] = '\0';
|
||||||
|
|
||||||
for(i = 0 ; file_name[i] != NULL ; i++) {
|
for(i=0; file_name[i]!=NULL; i++) {
|
||||||
strcat(flat_file, file_name[i]);
|
strcat(flat_file, file_name[i]);
|
||||||
strcat(flat_file, " ");
|
strcat(flat_file, " ");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user