| 1135 | } // namespace |
| 1136 | |
| 1137 | SC::Result SC::NamedPipeName::build(StringSpan logicalName, StringPath& outName, NamedPipeNameOptions options) |
| 1138 | { |
| 1139 | SC_TRY(validateNamedPipeLogicalName(logicalName)); |
| 1140 | |
| 1141 | StringPath nativeName; |
| 1142 | #if SC_PLATFORM_WINDOWS |
| 1143 | (void)options; |
| 1144 | SC_TRY_MSG(nativeName.assign("\\\\.\\pipe\\"), "NamedPipeName::build failed to initialize windows prefix"); |
| 1145 | SC_TRY_MSG(nativeName.append(logicalName), "NamedPipeName::build failed to append logicalName"); |
| 1146 | #else |
| 1147 | SC_TRY_MSG(options.posixDirectory.getEncoding() != StringEncoding::Utf16, |
| 1148 | "NamedPipeName::build posixDirectory only ASCII/UTF8"); |
| 1149 | SC_TRY_MSG(not options.posixDirectory.isEmpty(), "NamedPipeName::build posixDirectory cannot be empty"); |
| 1150 | const char* posixDirectoryBytes = options.posixDirectory.bytesWithoutTerminator(); |
| 1151 | SC_TRY_MSG(posixDirectoryBytes[0] == '/', "NamedPipeName::build posixDirectory must be absolute"); |
| 1152 | |
| 1153 | SC_TRY_MSG(nativeName.assign(options.posixDirectory), "NamedPipeName::build failed to copy posixDirectory"); |
| 1154 | if (posixDirectoryBytes[options.posixDirectory.sizeInBytes() - 1] != '/') |
| 1155 | { |
| 1156 | SC_TRY_MSG(nativeName.append("/"), "NamedPipeName::build failed to append separator"); |
| 1157 | } |
| 1158 | SC_TRY_MSG(nativeName.append(logicalName), "NamedPipeName::build failed to append logicalName"); |
| 1159 | #endif |
| 1160 | outName = move(nativeName); |
| 1161 | return Result(true); |
| 1162 | } |
| 1163 | |
| 1164 | //------------------------------------------------------------------------------------------------------- |
| 1165 | // NamedPipe |
nothing calls this directly
no test coverage detected