void CVolume::NormalizeLabel(CString& strLabel) { if (!ValidateLabel(strLabel)) return; strLabel.MakeUpper(); if (strLabel.GetLength() == 2) strLabel += _T("\\"); else if (strLabel.GetLength() == 1) strLabel += _T(":\\"); }
BOOL CVolume::SetVolume(const CString& strLabel) { if (ValidateLabel(strLabel)) { m_strLabel = strLabel; NormalizeLabel(m_strLabel); return TRUE; } else { m_strLabel.Empty(); return FALSE; } }
/* Returns true if the parsing covered the whole input. */ bool ParseFirstPart() { char *entryOrExternStart; if (NULL == part) return true; /* check for comment, assuming that a commented line must starts with a comment char */ if (strchr(part, COMMENT_CHAR) == part) return true; /* check for label */ if (ValidateLabel(part, LABEL_END_CHAR, true, true, labelName) > ZERO && labelName != NULL) { isLabel = true; return false; } else if (strstr(part, DATA_DEFINITION) != NULL) { /* data array without a label */ ParseDataArray(); return true; } else if (strstr(part, STRING_DEFINITION) != NULL) { /* string definition without a label */ ParseStringDefinition(); return true; } /* TODO: deal with .entry and .extern - NO LABEL ALLOWED PRIOR ! ! ! */ else if ((entryOrExternStart = strstr(part, EXTERN_DEFINITION)) != NULL) { if (!AddEntryOrExtern(false, entryOrExternStart)) return false; return true; } else if ((entryOrExternStart = strstr(part, ENTRY_DEFINITION)) != NULL) { if (!AddEntryOrExtern(true, entryOrExternStart)) return false; return true; } else if (!TranslateInstruction()) { char *lastError = GetLastError(); SYNTAX_ASSERT(strcmp(lastError, EMPTY_STRING) == ZERO, lastError); SetLastError(EMPTY_STRING); return false; } return true; }
bool AddEntryOrExtern(bool entry, char *start) { char *actual; size_t size; start += strlen(entry ? ENTRY_DEFINITION : EXTERN_DEFINITION) + 1; if ((actual = strpbrk(start, ABC)) == NULL) { SYNTAX_ASSERT(false, entry ? ENTRY_EXPECTING_LABEL : EXTERN_EXPECTING_LABEL); return false; } label = alloc(sizeof(label_type)); if ((size = ValidateLabel(actual, LINE_TERMINATION_CHAR, true, false, label->Name)) == ZERO) return false; if (NULL != strtok(actual + strlen(label->Name), IGNORED_DELIMITERS)) { SYNTAX_ASSERT(false, entry ? ENTRY_NOT_EXPECTING_MORE : EXTERN_NOT_EXPECTING_MORE); return false; } if (entry) { ASSERT(entryCount < MAX_ENTRIES, ENTRY_EXCEEDED_MAX); entries[entryCount] = label; entryCount++; } else { ASSERT(externCount < MAX_EXTERNS, EXTERN_EXCEEDED_MAX); externs[externCount] = label; externCount++; } return true; }