Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ PrivateParseMinimal()

unsafe ParsingError System.Uri.PrivateParseMinimal ( )
inlineprivate

Definition at line 1354 of file Uri.cs.

1355 {
1356 int num = (int)(_flags & Flags.IndexMask);
1357 int num2 = _string.Length;
1358 string newHost = null;
1359 _flags &= ~(Flags.IndexMask | Flags.UserDrivenParsing);
1360 fixed (char* ptr = (((_flags & Flags.HostUnicodeNormalized) == Flags.Zero) ? OriginalString : _string))
1361 {
1362 if (num2 > num && UriHelper.IsLWS(ptr[num2 - 1]))
1363 {
1364 num2--;
1365 while (num2 != num && UriHelper.IsLWS(ptr[--num2]))
1366 {
1367 }
1368 num2++;
1369 }
1370 if (_syntax.IsAllSet(UriSyntaxFlags.AllowEmptyHost | UriSyntaxFlags.AllowDOSPath) && NotAny(Flags.ImplicitFile) && num + 1 < num2)
1371 {
1372 int i;
1373 for (i = num; i < num2; i++)
1374 {
1375 char c;
1376 if ((c = ptr[i]) != '\\' && c != '/')
1377 {
1378 break;
1379 }
1380 }
1381 if (_syntax.InFact(UriSyntaxFlags.FileLikeUri) || i - num <= 3)
1382 {
1383 if (i - num >= 2)
1384 {
1385 _flags |= Flags.AuthorityFound;
1386 }
1387 char c;
1388 if (i + 1 < num2 && ((c = ptr[i + 1]) == ':' || c == '|') && UriHelper.IsAsciiLetter(ptr[i]))
1389 {
1390 if (i + 2 >= num2 || ((c = ptr[i + 2]) != '\\' && c != '/'))
1391 {
1392 if (_syntax.InFact(UriSyntaxFlags.FileLikeUri))
1393 {
1394 return ParsingError.MustRootedPath;
1395 }
1396 }
1397 else
1398 {
1399 _flags |= Flags.DosPath;
1400 if (_syntax.InFact(UriSyntaxFlags.MustHaveAuthority))
1401 {
1402 _flags |= Flags.AuthorityFound;
1403 }
1404 num = ((i == num || i - num == 2) ? i : (i - 1));
1405 }
1406 }
1407 else if (_syntax.InFact(UriSyntaxFlags.FileLikeUri) && i - num >= 2 && i - num != 3 && i < num2 && ptr[i] != '?' && ptr[i] != '#')
1408 {
1409 _flags |= Flags.UncPath;
1410 num = i;
1411 }
1412 }
1413 }
1414 if ((_flags & (Flags.DosPath | Flags.UncPath | Flags.UnixPath)) == Flags.Zero)
1415 {
1416 if (num + 2 <= num2)
1417 {
1418 char c2 = ptr[num];
1419 char c3 = ptr[num + 1];
1420 if (_syntax.InFact(UriSyntaxFlags.MustHaveAuthority))
1421 {
1422 if ((c2 != '/' && c2 != '\\') || (c3 != '/' && c3 != '\\'))
1423 {
1424 return ParsingError.BadAuthority;
1425 }
1426 _flags |= Flags.AuthorityFound;
1427 num += 2;
1428 }
1429 else if (_syntax.InFact(UriSyntaxFlags.OptionalAuthority) && (InFact(Flags.AuthorityFound) || (c2 == '/' && c3 == '/')))
1430 {
1431 _flags |= Flags.AuthorityFound;
1432 num += 2;
1433 }
1434 else if (_syntax.NotAny(UriSyntaxFlags.MailToLikeUri))
1435 {
1436 if ((_flags & (Flags.HasUnicode | Flags.HostUnicodeNormalized)) == Flags.HasUnicode)
1437 {
1438 _string = _string.Substring(0, num);
1439 }
1440 _flags |= (Flags)((ulong)num | 0x70000uL);
1441 return ParsingError.None;
1442 }
1443 }
1444 else
1445 {
1446 if (_syntax.InFact(UriSyntaxFlags.MustHaveAuthority))
1447 {
1448 return ParsingError.BadAuthority;
1449 }
1450 if (_syntax.NotAny(UriSyntaxFlags.MailToLikeUri))
1451 {
1452 if ((_flags & (Flags.HasUnicode | Flags.HostUnicodeNormalized)) == Flags.HasUnicode)
1453 {
1454 _string = _string.Substring(0, num);
1455 }
1456 _flags |= (Flags)((ulong)num | 0x70000uL);
1457 return ParsingError.None;
1458 }
1459 }
1460 }
1461 if (InFact(Flags.DosPath))
1462 {
1463 _flags |= (Flags)(((_flags & Flags.AuthorityFound) != Flags.Zero) ? 327680 : 458752);
1464 _flags |= (Flags)num;
1465 return ParsingError.None;
1466 }
1469 if (err != 0)
1470 {
1471 return err;
1472 }
1473 if (num < num2)
1474 {
1475 char c4 = ptr[num];
1476 if (c4 == '\\' && NotAny(Flags.ImplicitFile) && _syntax.NotAny(UriSyntaxFlags.AllowDOSPath))
1477 {
1478 return ParsingError.BadAuthorityTerminator;
1479 }
1480 }
1481 _flags |= (Flags)num;
1482 }
1483 if (IriParsing && newHost != null)
1484 {
1485 _string = newHost;
1486 }
1487 return ParsingError.None;
1488 }
bool IsAllSet(UriSyntaxFlags flags)
Definition UriParser.cs:226
bool NotAny(UriSyntaxFlags flags)
Definition UriParser.cs:216
bool InFact(UriSyntaxFlags flags)
Definition UriParser.cs:221
UriParser _syntax
Definition Uri.cs:193
bool IriParsing
Definition Uri.cs:215
Flags _flags
Definition Uri.cs:195
string OriginalString
Definition Uri.cs:516
bool NotAny(Flags flags)
Definition Uri.cs:606
bool InFact(Flags flags)
Definition Uri.cs:611
unsafe int CheckAuthorityHelper(char *pString, int idx, int length, ref ParsingError err, ref Flags flags, UriParser syntax, ref string newHost)
Definition Uri.cs:2698
string _string
Definition Uri.cs:189

References System.Uri._flags, System.Uri._string, System.Uri._syntax, System.Uri.CheckAuthorityHelper(), System.Runtime.Serialization.Dictionary, System.Uri.InFact(), System.UriParser.InFact(), System.Uri.IriParsing, System.UriParser.IsAllSet(), System.UriHelper.IsAsciiLetter(), System.UriHelper.IsLWS(), System.Uri.NotAny(), System.UriParser.NotAny(), and System.Uri.OriginalString.

Referenced by System.Uri.InitializeUri(), and System.Uri.ParseMinimal().