/* Otherwise (i.e., if this slash character is not the one standing for the root directory), then the slash character, and the pathname component preceding it, are removed by decrementing Position further. In this case, the slash character preceding the removed pathname component will reside at the new end of the parser's output buffer. */
STATIC VOID ParserRewindDotDot(IN CHAR8 *Buffer, IN OUT UINTN *Position, OUT BOOLEAN *RootEscape)
/* Otherwise (i.e., if this slash character is not the one standing for the root directory), then the slash character, and the pathname component preceding it, are removed by decrementing Position further. In this case, the slash character preceding the removed pathname component will reside at the new end of the parser's output buffer. */
STATIC VOID ParserRewindDotDot(IN CHAR8 *Buffer, IN OUT UINTN *Position, OUT BOOLEAN *RootEscape)
{
  ASSERT (*Position >= 3);
  ASSERT (Buffer[*Position - 1] == '.');
  ASSERT (Buffer[*Position - 2] == '.');
  ASSERT (Buffer[*Position - 3] == '/');
  (*Position) -= 2;
  if (*Position == 1) {
    *RootEscape = TRUE;
    return;
  }
  (*Position)--;
  do {
    ASSERT (*Position > 0);
    (*Position)--;
  } while (Buffer[*Position] != '/');
  (*Position)++;
}