NTAPI
RtlUpperString(
_Inout_ PSTRING DestinationString,
- _In_ const PSTRING SourceString);
+ _In_ const STRING *SourceString);
_IRQL_requires_max_(PASSIVE_LEVEL)
_When_(AllocateDestinationString, _Must_inspect_result_)
LONG
NTAPI
RtlCompareString(
- _In_ const PSTRING String1,
- _In_ const PSTRING String2,
+ _In_ const STRING *String1,
+ _In_ const STRING *String2,
_In_ BOOLEAN CaseInSensitive);
NTSYSAPI
NTAPI
RtlCopyString(
_Out_ PSTRING DestinationString,
- _In_opt_ const PSTRING SourceString);
+ _In_opt_ const STRING *SourceString);
_IRQL_requires_max_(PASSIVE_LEVEL)
_Must_inspect_result_
BOOLEAN
NTAPI
RtlEqualString(
- _In_ const PSTRING String1,
- _In_ const PSTRING String2,
+ _In_ const STRING *String1,
+ _In_ const STRING *String2,
_In_ BOOLEAN CaseInSensitive);
_IRQL_requires_max_(PASSIVE_LEVEL)
PUNICODE_STRING DestinationString,
_In_z_ PCWSTR SourceString);
+_IRQL_requires_max_(PASSIVE_LEVEL)
+_Must_inspect_result_
+NTSYSAPI
+BOOLEAN
+NTAPI
+RtlPrefixString(
+ _In_ const STRING *String1,
+ _In_ const STRING *String2,
+ _In_ BOOLEAN CaseInsensitive);
+
_IRQL_requires_max_(APC_LEVEL)
NTSYSAPI
NTSTATUS
DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
#define RTL_SOFT_VERIFYMSG(msg, exp) \
- (VOID)((!(exp)) ? \
+ ((!(exp)) ? \
DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
-#define ASSERT(exp) ((void)RTL_VERIFY(exp))
-#define ASSERTMSG(msg, exp) ((void)RTL_VERIFYMSG(msg, exp))
+/* The ASSERTs must be cast to void to avoid warnings about unused results.
+ * We also cannot invoke the VERIFY versions because the indirection messes
+ * with stringify. */
+#define ASSERT(exp) \
+ ((VOID)((!(exp)) ? \
+ RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE))
-#define RTL_SOFT_ASSERT(exp) ((void)RTL_SOFT_VERIFY(exp))
-#define RTL_SOFT_ASSERTMSG(msg, exp) ((void)RTL_SOFT_VERIFYMSG(msg, exp))
+#define ASSERTMSG(msg, exp) \
+ ((VOID)((!(exp)) ? \
+ RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ), FALSE : TRUE))
+
+#define RTL_SOFT_ASSERT(exp) \
+ ((VOID)((!(exp)) ? \
+ DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE))
+
+#define RTL_SOFT_ASSERTMSG(msg, exp) \
+ ((VOID)((!(exp)) ? \
+ DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE))
#if defined(_MSC_VER)
# define __assert_annotationA(msg) __annotation(L"Debug", L"AssertFail", L ## msg)
# define __assert_annotationW(msg) __annotation(L"Debug", L"AssertFail", msg)
#else
# define __assert_annotationA(msg) \
- DbgPrint("Assertion %s(%d): %s", __FILE__, __LINE__, msg)
+ DbgPrint("Assertion failed at %s(%d): %s\n", __FILE__, __LINE__, msg)
# define __assert_annotationW(msg) \
- DbgPrint("Assertion %s(%d): %S", __FILE__, __LINE__, msg)
+ DbgPrint("Assertion failed at %s(%d): %S\n", __FILE__, __LINE__, msg)
#endif
#define NT_VERIFY(exp) \
(__assert_annotationW(msg), \
DbgRaiseAssertionFailure(), FALSE) : TRUE)
-#define NT_ASSERT(exp) ((void)NT_VERIFY(exp))
-#define NT_ASSERTMSG(msg, exp) ((void)NT_VERIFYMSG(msg, exp))
-#define NT_ASSERTMSGW(msg, exp) ((void)NT_VERIFYMSGW(msg, exp))
+/* Can't reuse verify, see above */
+#define NT_ASSERT(exp) \
+ ((VOID)((!(exp)) ? \
+ (__assert_annotationA(#exp), \
+ DbgRaiseAssertionFailure(), FALSE) : TRUE))
+
+#define NT_ASSERTMSG(msg, exp) \
+ ((VOID)((!(exp)) ? \
+ (__assert_annotationA(msg), \
+ DbgRaiseAssertionFailure(), FALSE) : TRUE))
+
+#define NT_ASSERTMSGW(msg, exp) \
+ ((VOID)((!(exp)) ? \
+ (__assert_annotationW(msg), \
+ DbgRaiseAssertionFailure(), FALSE) : TRUE))
#else /* !DBG */