162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * collate.h - Defines for NTFS kernel collation handling.  Part of the
462306a36Sopenharmony_ci *	       Linux-NTFS project.
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (c) 2004 Anton Altaparmakov
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#ifndef _LINUX_NTFS_COLLATE_H
1062306a36Sopenharmony_ci#define _LINUX_NTFS_COLLATE_H
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include "types.h"
1362306a36Sopenharmony_ci#include "volume.h"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cistatic inline bool ntfs_is_collation_rule_supported(COLLATION_RULE cr) {
1662306a36Sopenharmony_ci	int i;
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci	/*
1962306a36Sopenharmony_ci	 * FIXME:  At the moment we only support COLLATION_BINARY and
2062306a36Sopenharmony_ci	 * COLLATION_NTOFS_ULONG, so we return false for everything else for
2162306a36Sopenharmony_ci	 * now.
2262306a36Sopenharmony_ci	 */
2362306a36Sopenharmony_ci	if (unlikely(cr != COLLATION_BINARY && cr != COLLATION_NTOFS_ULONG))
2462306a36Sopenharmony_ci		return false;
2562306a36Sopenharmony_ci	i = le32_to_cpu(cr);
2662306a36Sopenharmony_ci	if (likely(((i >= 0) && (i <= 0x02)) ||
2762306a36Sopenharmony_ci			((i >= 0x10) && (i <= 0x13))))
2862306a36Sopenharmony_ci		return true;
2962306a36Sopenharmony_ci	return false;
3062306a36Sopenharmony_ci}
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ciextern int ntfs_collate(ntfs_volume *vol, COLLATION_RULE cr,
3362306a36Sopenharmony_ci		const void *data1, const int data1_len,
3462306a36Sopenharmony_ci		const void *data2, const int data2_len);
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci#endif /* _LINUX_NTFS_COLLATE_H */
37