Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Misc / ConfigPathUtility.cs / 1 / ConfigPathUtility.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Configuration { #if CONFIGPATHUTILITY_SYSTEMWEB using Debug=System.Web.Util.Debug; #endif internal static class ConfigPathUtility { private const char SeparatorChar = '/'; // // A configPath is valid if // * It does not start or end with a '/' // * It is not null or empty, except in the case of the root configuration record // * It does not contain '\' // * It does not contain a path component equal to "." or ".." // // The checks for '\', ".", and ".." are not strictly necessary, but their presence // could lead to problems for configuration hosts. // static internal bool IsValid(string configPath) { if (String.IsNullOrEmpty(configPath)) { return false; } int start = -1; for (int examine = 0; examine <= configPath.Length; examine++) { char ch; if (examine < configPath.Length) { ch = configPath[examine]; } else { ch = SeparatorChar; } // backslash disallowed if (ch == '\\') { return false; } if (ch == SeparatorChar) { // double slash disallowed // note this check also purposefully catches starting and ending slash if (examine == start + 1) { return false; } // "." disallowed if (examine == start + 2 && configPath[start + 1] == '.') { return false; } // ".." disallowed if (examine == start + 3 && configPath[start + 1] == '.' && configPath[start + 2] == '.') { return false; } start = examine; } } return true; } #if !CONFIGPATHUTILITY_SYSTEMWEB static internal string Combine(string parentConfigPath, string childConfigPath) { Debug.Assert(String.IsNullOrEmpty(parentConfigPath) || IsValid(parentConfigPath), "String.IsNullOrEmpty(parentConfigPath) || IsValid(parentConfigPath)"); Debug.Assert(String.IsNullOrEmpty(childConfigPath) || IsValid(childConfigPath), "String.IsNullOrEmpty(childConfigPath) || IsValid(childConfigPath)"); if (String.IsNullOrEmpty(parentConfigPath)) { return childConfigPath; } if (String.IsNullOrEmpty(childConfigPath)) { return parentConfigPath; } return parentConfigPath + "/" + childConfigPath; } static internal string[] GetParts(string configPath) { Debug.Assert(IsValid(configPath), "IsValid(configPath)"); string[] parts = configPath.Split(SeparatorChar); return parts; } // // Return the last part of a config path, e.g. // GetName("MACHINE/WEBROOT/Default Web Site/app") == "app" // static internal string GetName(string configPath) { Debug.Assert(String.IsNullOrEmpty(configPath) || IsValid(configPath), "String.IsNullOrEmpty(configPath) || IsValid(configPath)"); if (String.IsNullOrEmpty(configPath)) { return configPath; } int index = configPath.LastIndexOf('/'); if (index == -1) { return configPath; } Debug.Assert(index != configPath.Length - 1); return configPath.Substring(index + 1); } #endif // Avoid unused code warning in System.Configuration by including functions in assembly-specific #defines #if CONFIGPATHUTILITY_SYSTEMWEB static internal string GetParent(string configPath) { Debug.Assert(String.IsNullOrEmpty(configPath) || IsValid(configPath), "String.IsNullOrEmpty(configPath) || IsValid(configPath)"); if (String.IsNullOrEmpty(configPath)) { return null; } string parentConfigPath; int lastSlash = configPath.LastIndexOf(SeparatorChar); if (lastSlash == -1) { parentConfigPath = null; } else { parentConfigPath = configPath.Substring(0, lastSlash); } return parentConfigPath; } #endif } }
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- NameTable.cs
- PerspectiveCamera.cs
- CaseStatementSlot.cs
- DataStreamFromComStream.cs
- XmlSerializerVersionAttribute.cs
- XmlImplementation.cs
- UnmanagedMemoryStreamWrapper.cs
- IDReferencePropertyAttribute.cs
- Brush.cs
- XamlWrappingReader.cs
- TemplateBuilder.cs
- EventLogReader.cs
- SqlWebEventProvider.cs
- XslAstAnalyzer.cs
- OleDbEnumerator.cs
- DocumentOutline.cs
- ConfigurationSettings.cs
- SqlFacetAttribute.cs
- SoundPlayer.cs
- FontDifferentiator.cs
- DataGridPagerStyle.cs
- StreamInfo.cs
- CommandBindingCollection.cs
- EventLogPropertySelector.cs
- InternalTypeHelper.cs
- DataGridViewRowHeaderCell.cs
- IndentedTextWriter.cs
- FixUp.cs
- AnonymousIdentificationSection.cs
- CellParagraph.cs
- DataTableClearEvent.cs
- FunctionDescription.cs
- ArraySegment.cs
- CoreSwitches.cs
- SafeNativeMethods.cs
- RegexCharClass.cs
- XPathMultyIterator.cs
- StreamMarshaler.cs
- FileLogRecordStream.cs
- XNodeNavigator.cs
- Timer.cs
- SqlXml.cs
- ReachUIElementCollectionSerializer.cs
- Emitter.cs
- UiaCoreProviderApi.cs
- StylusPointPropertyInfo.cs
- DesignerWidgets.cs
- SizeChangedEventArgs.cs
- ReferenceSchema.cs
- GridLengthConverter.cs
- CLSCompliantAttribute.cs
- ComponentResourceKey.cs
- _NTAuthentication.cs
- webproxy.cs
- HttpModuleCollection.cs
- KeyProperty.cs
- DuplicateContext.cs
- DataGridViewCellStyleChangedEventArgs.cs
- SafeCryptContextHandle.cs
- EventKeyword.cs
- DynamicActivityXamlReader.cs
- EventTrigger.cs
- HttpFileCollectionWrapper.cs
- StylusPointPropertyId.cs
- InvalidPropValue.cs
- ThousandthOfEmRealDoubles.cs
- InvokeCompletedEventArgs.cs
- Predicate.cs
- QilXmlReader.cs
- SubordinateTransaction.cs
- ForwardPositionQuery.cs
- PartialClassGenerationTaskInternal.cs
- ButtonBaseAutomationPeer.cs
- ExtenderHelpers.cs
- EmptyEnumerable.cs
- _NestedMultipleAsyncResult.cs
- CompensationToken.cs
- DateTimeHelper.cs
- FormViewRow.cs
- ColumnPropertiesGroup.cs
- JournalEntryStack.cs
- MatrixTransform.cs
- FileRecordSequence.cs
- OpCellTreeNode.cs
- SecureStringHasher.cs
- MaterialGroup.cs
- WebServiceMethodData.cs
- ParameterToken.cs
- OdbcConnectionHandle.cs
- NameTable.cs
- DbProviderFactories.cs
- HijriCalendar.cs
- _KerberosClient.cs
- ContentDisposition.cs
- TemplateBamlRecordReader.cs
- SchemaTableColumn.cs
- OdbcHandle.cs
- HttpModuleAction.cs
- HealthMonitoringSectionHelper.cs
- SocketElement.cs