Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/rarfilesource.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOctaneSnail <os@v12pwr.com>2009-01-24 14:15:32 +0300
committerOctaneSnail <os@v12pwr.com>2009-01-24 14:15:32 +0300
commit4daf3a326cc0d3e967bff9b05059240be5b53452 (patch)
tree6d77c93b23319fdefd08ec5a5e563790693fc000
parent82523dd29772d9b9a332c04833b94f1cab655307 (diff)
Reformat source code.
-rw-r--r--Mediatype.cpp244
-rw-r--r--Mediatype.h36
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