diff options
author | OctaneSnail <os@v12pwr.com> | 2009-01-24 14:15:32 +0300 |
---|---|---|
committer | OctaneSnail <os@v12pwr.com> | 2009-01-24 14:15:32 +0300 |
commit | 4daf3a326cc0d3e967bff9b05059240be5b53452 (patch) | |
tree | 6d77c93b23319fdefd08ec5a5e563790693fc000 | |
parent | 82523dd29772d9b9a332c04833b94f1cab655307 (diff) |
Reformat source code.
-rw-r--r-- | Mediatype.cpp | 244 | ||||
-rw-r--r-- | Mediatype.h | 36 |
2 files changed, 167 insertions, 113 deletions
diff --git a/Mediatype.cpp b/Mediatype.cpp index 23f89f1..45790b6 100644 --- a/Mediatype.cpp +++ b/Mediatype.cpp @@ -36,32 +36,39 @@ /* getNextToken extracts the current token from the string and and sets the starting point of the next token */ -static void getNextToken(wchar_t **strTok,wchar_t **nextTokenStart) +static void getNextToken (wchar_t **strTok, wchar_t **nextTokenStart) { - while(**strTok==TEXT(' ')) (*strTok)++; - for(int i=0;i<lstrlen(*strTok);i++) { - if((*strTok)[i]==TEXT(',')) { - (*strTok)[i]=TEXT('\0'); - *nextTokenStart=*strTok+i+1; + while (**strTok == TEXT(' ')) + (*strTok) ++; + + for (int i = 0; i < lstrlen (*strTok); i ++) + { + if ((*strTok) [i] == TEXT(',')) + { + (*strTok) [i] = TEXT('\0'); + *nextTokenStart = *strTok + i + 1; return; } } - *nextTokenStart=NULL; + *nextTokenStart = NULL; } /* parseCheckBytes splits valueData and places the parsed values in the checkBytes array (allocated here) */ -static int parseCheckBytes(wchar_t *valueData,CheckByteDetails **checkBytes) +static int parseCheckBytes (wchar_t *valueData, CheckByteDetails **checkBytes) { - int tokenCount=0,byteDetailsCount=0, value; - wchar_t *token,*nextTokenStart; - for(int i=0;i<lstrlen(valueData);i++) - if(valueData[i]==TEXT(',')) - tokenCount++; - if((++tokenCount)%4) + int tokenCount = 0, byteDetailsCount = 0, value; + wchar_t *token, *nextTokenStart; + + for (int i = 0; i < lstrlen (valueData); i ++) + if (valueData [i] == TEXT(',')) + tokenCount ++; + + if ((++ tokenCount) % 4) return 0; - byteDetailsCount = tokenCount/4; - *checkBytes = new CheckByteDetails[byteDetailsCount]; + + byteDetailsCount = tokenCount / 4; + *checkBytes = new CheckByteDetails [byteDetailsCount]; if (!*checkBytes) { @@ -69,41 +76,48 @@ static int parseCheckBytes(wchar_t *valueData,CheckByteDetails **checkBytes) return -1; } - nextTokenStart=valueData; - for(int i=0;i<byteDetailsCount;i++) { - token=nextTokenStart; - getNextToken(&token,&nextTokenStart); - swscanf_s(token,TEXT(" %lld"),&(*checkBytes)[i].offset); // offset in file - token=nextTokenStart; - getNextToken(&token,&nextTokenStart); - swscanf_s(token,TEXT(" %u"),&(*checkBytes)[i].byteCount); // byte count of mask and value - (*checkBytes)[i].mask = new BYTE[(*checkBytes)[i].byteCount]; - (*checkBytes)[i].value = new BYTE[(*checkBytes)[i].byteCount]; - if (!(*checkBytes)[i].mask || !(*checkBytes)[i].value) + nextTokenStart = valueData; + + for (int i = 0; i < byteDetailsCount; i ++) + { + token = nextTokenStart; + getNextToken (&token, &nextTokenStart); + swscanf_s (token, TEXT(" %lld"), &(*checkBytes) [i].offset); // offset in file + token = nextTokenStart; + getNextToken (&token, &nextTokenStart); + swscanf_s (token, TEXT(" %u"), &(*checkBytes) [i].byteCount); // byte count of mask and value + (*checkBytes) [i].mask = new BYTE [(*checkBytes) [i].byteCount]; + (*checkBytes) [i].value = new BYTE [(*checkBytes) [i].byteCount]; + + if (!(*checkBytes) [i].mask || !(*checkBytes) [i].value) { ErrorMsg (0, L"Out of memory."); return -1; } + //TODO: if the next token is smaller than byteCount and not empty we could pad with zeroes - token=nextTokenStart; - getNextToken(&token,&nextTokenStart); - if(*token==TEXT('\0')) // no mask means all ones - for(unsigned int j=0;j<(*checkBytes)[i].byteCount;j++) - (*checkBytes)[i].mask[j]=0xFF; - else // otherwise parse mask + token = nextTokenStart; + getNextToken (&token, &nextTokenStart); + + if (*token == TEXT('\0')) // no mask means all ones + for (unsigned int j = 0; j < (*checkBytes) [i].byteCount; j ++) + (*checkBytes) [i].mask [j] = 0xFF; + else // otherwise parse mask { - for(unsigned int j=0;j<(*checkBytes)[i].byteCount && j*2 < lstrlen(token);j++) + for (unsigned int j = 0; j < (*checkBytes) [i].byteCount && j * 2 < lstrlen (token); j ++) { - swscanf_s(token+j*2,TEXT(" %2x"),&value); - (*checkBytes)[i].mask[j] = value; + swscanf_s (token + j * 2, TEXT(" %2x"), &value); + (*checkBytes) [i].mask [j] = value; } } - token=nextTokenStart; - getNextToken(&token,&nextTokenStart); - for(unsigned int j=0;j<(*checkBytes)[i].byteCount && j*2 < lstrlen(token);j++) + + token = nextTokenStart; + getNextToken (&token, &nextTokenStart); + + for (unsigned int j = 0; j < (*checkBytes) [i].byteCount && j * 2 < lstrlen (token); j ++) { - swscanf_s(token+j*2,TEXT(" %2x"),&value); // parse value - (*checkBytes)[i].value[j] = value; + swscanf_s (token + j * 2, TEXT(" %2x"), &value); // parse value + (*checkBytes) [i].value [j] = value; } } return byteDetailsCount; @@ -112,42 +126,47 @@ static int parseCheckBytes(wchar_t *valueData,CheckByteDetails **checkBytes) /* parses the HKEY_CLASSES_ROOT\Media Type registry key and fills the mediaTypeList with all valid byte marks and their corresponding major/subtypes */ -int getMediaTypeList(List<MediaType> *mediaTypeList) +int getMediaTypeList (List<MediaType> *mediaTypeList) { - //these values come from http://msdn.microsoft.com/en-us/library/ms724872(VS.85).aspx +//these values come from http://msdn.microsoft.com/en-us/library/ms724872(VS.85).aspx #define MAX_VALUE_SIZE 16384 #define MAX_KEYNAME_SIZE 256 - wchar_t keyName[MAX_KEYNAME_SIZE]; - wchar_t subKeyName[MAX_KEYNAME_SIZE]; - wchar_t valueName[MAX_VALUE_SIZE]; - LONG ret,retSub,retVal; - HKEY mTypeKey,majorTypeKey,subTypeKey; - DWORD valueType,valueSize,valueNameSize; + wchar_t keyName [MAX_KEYNAME_SIZE]; + wchar_t subKeyName [MAX_KEYNAME_SIZE]; + wchar_t valueName [MAX_VALUE_SIZE]; + LONG ret, retSub, retVal; + + HKEY mTypeKey, majorTypeKey, subTypeKey; + DWORD valueType, valueSize, valueNameSize; wchar_t *valueData; - int mediaTypeCount=0; + int mediaTypeCount = 0; MediaType *newType; CheckByteGroup *newGroup; - ret = RegOpenKey(HKEY_CLASSES_ROOT,TEXT("Media Type"),&mTypeKey); - if(ret!=ERROR_SUCCESS) + ret = RegOpenKey (HKEY_CLASSES_ROOT, TEXT("Media Type"), &mTypeKey); + if (ret != ERROR_SUCCESS) return -1; - for(int i=0;ret!=ERROR_NO_MORE_ITEMS;i++) { - ret = RegEnumKey(mTypeKey,i,keyName,MAX_KEYNAME_SIZE); - if(ret!=ERROR_SUCCESS || !lstrcmp(keyName,TEXT("Extensions"))) // we don't want the Extensions subkey + for (int i = 0; ret != ERROR_NO_MORE_ITEMS; i ++) + { + ret = RegEnumKey (mTypeKey, i, keyName, MAX_KEYNAME_SIZE); + + if (ret != ERROR_SUCCESS || !lstrcmp (keyName, TEXT("Extensions"))) // we don't want the Extensions subkey continue; - retSub = RegOpenKey(mTypeKey,keyName,&majorTypeKey); - if(retSub!=ERROR_SUCCESS) + retSub = RegOpenKey (mTypeKey, keyName, &majorTypeKey); + + if (retSub != ERROR_SUCCESS) continue; - for(int j=0;retSub!=ERROR_NO_MORE_ITEMS;j++) { - retSub = RegEnumKey(majorTypeKey,j,subKeyName,MAX_KEYNAME_SIZE); - if(retSub!=ERROR_SUCCESS) + for (int j = 0; retSub != ERROR_NO_MORE_ITEMS; j ++) + { + retSub = RegEnumKey (majorTypeKey, j, subKeyName, MAX_KEYNAME_SIZE); + if (retSub != ERROR_SUCCESS) continue; - retVal = RegOpenKey(majorTypeKey,subKeyName,&subTypeKey); + retVal = RegOpenKey (majorTypeKey, subKeyName, &subTypeKey); newType = new MediaType; if (!newType) @@ -155,69 +174,79 @@ int getMediaTypeList(List<MediaType> *mediaTypeList) ErrorMsg (0, L"Out of memory."); return -1; } - CLSIDFromString(keyName,&newType->majorType); - CLSIDFromString(subKeyName,&newType->subType); - for(int k=0;retVal!=ERROR_NO_MORE_ITEMS;k++) { + CLSIDFromString (keyName, &newType->majorType); + CLSIDFromString (subKeyName, &newType->subType); + + for (int k = 0; retVal != ERROR_NO_MORE_ITEMS; k ++) + { valueNameSize = MAX_VALUE_SIZE; - retVal = RegEnumValue(subTypeKey,k,valueName,&valueNameSize,NULL,&valueType,NULL,&valueSize); - if(retVal != ERROR_SUCCESS || valueType != REG_SZ || !lstrcmp(valueName,TEXT("Source Filter"))) // we don't need the source filter value + retVal = RegEnumValue (subTypeKey, k, valueName, &valueNameSize, NULL, &valueType, NULL, &valueSize); + + if (retVal != ERROR_SUCCESS || valueType != REG_SZ || !lstrcmp (valueName, TEXT("Source Filter"))) // we don't need the source filter value continue; - valueData = (wchar_t *)new BYTE[valueSize]; + valueData = (wchar_t *) new BYTE [valueSize]; + valueNameSize = MAX_VALUE_SIZE; - retVal = RegEnumValue(subTypeKey,k,valueName,&valueNameSize,NULL,&valueType,(LPBYTE)valueData,&valueSize); - if(retVal != ERROR_SUCCESS) + retVal = RegEnumValue (subTypeKey, k, valueName, &valueNameSize, NULL, &valueType, + (LPBYTE) valueData, &valueSize); + + if (retVal != ERROR_SUCCESS) { delete [] valueData; continue; } - newGroup = new CheckByteGroup; // each value is one group + newGroup = new CheckByteGroup; // each value is one group + if (!newGroup) { delete [] valueData; ErrorMsg (0, L"Out of memory."); return -1; } - newGroup->checkByteCount = parseCheckBytes(valueData,&newGroup->checkBytes); - if(newGroup->checkByteCount==-1) + newGroup->checkByteCount = parseCheckBytes (valueData, &newGroup->checkBytes); + + if (newGroup->checkByteCount == -1) { delete [] valueData; delete newGroup; - return -1; // this means out of memory + + return -1; // this means out of memory } - if(!newGroup->checkByteCount) + if (!newGroup->checkByteCount) { // if we get here there was a parse error or an invalid value in the registry delete newGroup; } else { - newType->checkByteGroups.InsertLast(newGroup); - newType->checkByteGroupCount++; + newType->checkByteGroups.InsertLast (newGroup); + newType->checkByteGroupCount ++; } delete [] valueData; } - if(!newType->checkByteGroupCount) + + if (!newType->checkByteGroupCount) { // if we get here we were unable to parse any of the values in the current subkey delete newType; } else { - mediaTypeList->InsertLast(newType); - mediaTypeCount++; + mediaTypeList->InsertLast (newType); + mediaTypeCount ++; } } } return mediaTypeCount; } -int checkFileForMediaType(File *file,List<MediaType> *mediaTypeList,MediaType **foundMediaType) +int checkFileForMediaType (File *file, List<MediaType> *mediaTypeList, MediaType **foundMediaType) { MediaType *mt; CheckByteGroup *cbg; @@ -227,53 +256,72 @@ int checkFileForMediaType(File *file,List<MediaType> *mediaTypeList,MediaType ** LONGLONG actOffset; BYTE *necessaryBytes; - mt = mediaTypeList->First(); - while(mt!=NULL) { // loop over all filetypes - cbg = mt->checkByteGroups.First(); - while(cbg!=NULL) { // loop over all groups of checkbytes + mt = mediaTypeList->First (); + + while (mt != NULL) + { // loop over all filetypes + cbg = mt->checkByteGroups.First (); + + while (cbg != NULL) + { // loop over all groups of checkbytes matches = true; - for(unsigned int i=0;i<cbg->checkByteCount;i++) { // we need to match all fields in one group - if(cbg->checkBytes[i].offset<0) - actOffset = file->size + cbg->checkBytes[i].offset; + + for (unsigned int i = 0; i < cbg->checkByteCount; i ++) + { // we need to match all fields in one group + if (cbg->checkBytes [i].offset < 0) + actOffset = file->size + cbg->checkBytes [i].offset; else - actOffset = cbg->checkBytes[i].offset; - if(actOffset>file->size || actOffset < 0) { + actOffset = cbg->checkBytes [i].offset; + + if (actOffset > file->size || actOffset < 0) + { matches = false; break; } - necessaryBytes = new BYTE[cbg->checkBytes[i].byteCount]; + + necessaryBytes = new BYTE [cbg->checkBytes [i].byteCount]; + if (!necessaryBytes) { ErrorMsg (0, L"Out of memory."); return 0; } + // read the necessary amount of bytes to compare to value (after masking) - ret = file->SyncRead(actOffset,cbg->checkBytes[i].byteCount,necessaryBytes,&lBytesRead); - if(ret != S_OK) { + ret = file->SyncRead (actOffset, cbg->checkBytes [i].byteCount, necessaryBytes, &lBytesRead); + + if (ret != S_OK) + { matches = false; delete [] necessaryBytes; break; } + // mask and compare all bytes in this entry - for(unsigned int j=0;j<cbg->checkBytes[i].byteCount;j++) { - if((necessaryBytes[j] & cbg->checkBytes[i].mask[j]) != cbg->checkBytes[i].value[j]) { + for (unsigned int j = 0; j < cbg->checkBytes [i].byteCount; j ++) + { + if ((necessaryBytes [j] & cbg->checkBytes [i].mask [j]) != cbg->checkBytes [i].value [j]) + { matches = false; break; } } delete [] necessaryBytes; - if(!matches) + + if (!matches) break; } - if(matches) // one group is enought to match the filetype + + if (matches) // one group is enought to match the filetype { *foundMediaType = mt; return 1; } - cbg = mt->checkByteGroups.Next(cbg); + cbg = mt->checkByteGroups.Next (cbg); } - mt = mediaTypeList->Next(mt); + mt = mediaTypeList->Next (mt); } + *foundMediaType = NULL; return 1; } diff --git a/Mediatype.h b/Mediatype.h index b814cdb..e1ed800 100644 --- a/Mediatype.h +++ b/Mediatype.h @@ -19,14 +19,16 @@ #include "List.h" -class CheckByteDetails { +class CheckByteDetails +{ public: - CheckByteDetails():offset(0),byteCount(0),mask(NULL),value(NULL) {} - ~CheckByteDetails() + CheckByteDetails () : offset (0), byteCount (0), mask (NULL), value (NULL) { } + + ~CheckByteDetails () { - if(mask) + if (mask) delete [] mask; - if(value) + if (value) delete [] value; } @@ -36,12 +38,14 @@ public: BYTE *value; }; -class CheckByteGroup : public Node<CheckByteGroup> { +class CheckByteGroup : public Node<CheckByteGroup> +{ public: - CheckByteGroup(): checkBytes(NULL),checkByteCount(0) {} - ~CheckByteGroup() + CheckByteGroup () : checkBytes (NULL), checkByteCount (0) { } + + ~CheckByteGroup () { - if(checkBytes) + if (checkBytes) delete [] checkBytes; } @@ -49,12 +53,14 @@ public: unsigned int checkByteCount; }; -class MediaType: public Node<MediaType> { +class MediaType : public Node<MediaType> +{ public: - MediaType(): majorType(GUID_NULL),subType(GUID_NULL),checkByteGroupCount(0) {} - ~MediaType() + MediaType () : majorType (GUID_NULL), subType (GUID_NULL), checkByteGroupCount (0) { } + + ~MediaType () { - checkByteGroups.Clear(); + checkByteGroups.Clear (); } GUID majorType; @@ -63,7 +69,7 @@ public: unsigned int checkByteGroupCount; }; -int getMediaTypeList(List<MediaType> *mediaTypeList); -int checkFileForMediaType(File *file,List<MediaType> *mediaTypeList,MediaType **foundMediaType); +int getMediaTypeList (List<MediaType> *mediaTypeList); +int checkFileForMediaType (File *file, List<MediaType> *mediaTypeList, MediaType **foundMediaType); #endif // MEDIATYPE_H |