static bool CheckNameNum(const UString &name, const wchar_t *reservedName) { int len = MyStringLen(reservedName); if (name.Length() <= len) return true; if (name.Left(len).CompareNoCase(reservedName) != 0) return true; wchar_t c = name[len]; if (c < L'0' || c > L'9') return true; return CheckTail(name, len + 1); }
VOID FreeMem(VOID **ppv, MemType mt) { assert(*ppv != NULL); #if DBG { MEMTAB *pmt; MEMHEADER *pmh; pmh = GetHeader(*ppv); if (mt == MT_DIRDB || mt == MT_FILEDB || mt == MT_INCLUDEDB || mt == MT_SOURCEDB) { SigCheck(assert(((DIRREC *) (*ppv))->Sig == 0)); } if (mt >= MT_MAX) { mt = MT_UNKNOWN; } pmt = &MemTab[MT_TOTALS]; pmt->cAlloc--; pmt->cbAlloc -= pmh->cbRequest; pmt = &MemTab[mt]; pmt->cAlloc--; pmt->cbAlloc -= pmh->cbRequest; if (DEBUG_4 && DEBUG_1) { BuildError( "FreeMem(%d, mt=%s) <- %lx\n", pmh->cbRequest, pmt->pszType, *ppv); } assert(CheckTail((char *) *ppv + pmh->cbRequest)); FillTailFree((char *) *ppv + pmh->cbRequest); assert(mt == pmh->mt); pmh->pmhNext->pmhPrev = pmh->pmhPrev; pmh->pmhPrev->pmhNext = pmh->pmhNext; pmh->pmhNext = pmh->pmhPrev = NULL; pmh->mt = MT_INVALID; *ppv = pmh; } #endif free(*ppv); *ppv = NULL; }
static bool IsSupportedName(const UString &name) { for (int i = 0; i < sizeof(g_ReservedNames) / sizeof(g_ReservedNames[0]); i++) { const wchar_t *reservedName = g_ReservedNames[i]; int len = MyStringLen(reservedName); if (name.Length() < len) continue; if (name.Left(len).CompareNoCase(reservedName) != 0) continue; if (!CheckTail(name, len)) return false; } if (!CheckNameNum(name, L"COM")) return false; return CheckNameNum(name, L"LPT"); }