include/linux/sunrpc/xdrgen/_builtins.h

Source file repositories/reference/linux-study-clean/include/linux/sunrpc/xdrgen/_builtins.h

File Facts

System
Linux kernel
Corpus path
include/linux/sunrpc/xdrgen/_builtins.h
Extension
.h
Size
6112 bytes
Lines
300
Domain
Core OS
Bucket
Core Kernel Interface
Inferred role
Core OS: implementation source
Status
source implementation candidate

Why This File Exists

Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.

Dependency Surface

Detected Declarations

Annotated Snippet

#ifndef _SUNRPC_XDRGEN__BUILTINS_H_
#define _SUNRPC_XDRGEN__BUILTINS_H_

#include <linux/sunrpc/xdr.h>

static inline bool
xdrgen_decode_void(struct xdr_stream *xdr)
{
	return true;
}

static inline bool
xdrgen_encode_void(struct xdr_stream *xdr)
{
	return true;
}

static inline bool
xdrgen_decode_bool(struct xdr_stream *xdr, bool *ptr)
{
	__be32 *p = xdr_inline_decode(xdr, XDR_UNIT);

	if (unlikely(!p))
		return false;
	*ptr = (*p != xdr_zero);
	return true;
}

static inline bool
xdrgen_encode_bool(struct xdr_stream *xdr, bool val)
{
	__be32 *p = xdr_reserve_space(xdr, XDR_UNIT);

	if (unlikely(!p))
		return false;
	*p = val ? xdr_one : xdr_zero;
	return true;
}

/*
 * De facto (non-standard but commonly implemented) signed short type:
 *  - Wire sends sign-extended 32-bit value (e.g., 0xFFFFFFFF)
 *  - be32_to_cpup() returns u32 (0xFFFFFFFF)
 *  - Explicit (s16) cast truncates to 16 bits (0xFFFF = -1)
 */
static inline bool
xdrgen_decode_short(struct xdr_stream *xdr, s16 *ptr)
{
	__be32 *p = xdr_inline_decode(xdr, XDR_UNIT);

	if (unlikely(!p))
		return false;
	*ptr = (s16)be32_to_cpup(p);
	return true;
}

/*
 * De facto (non-standard but commonly implemented) signed short type:
 *  - C integer promotion sign-extends s16 val to int before passing to
 *    cpu_to_be32()
 *  - This is well-defined: -1 as s16 -1 as int 0xFFFFFFFF on wire
 */
static inline bool
xdrgen_encode_short(struct xdr_stream *xdr, s16 val)
{
	__be32 *p = xdr_reserve_space(xdr, XDR_UNIT);

	if (unlikely(!p))
		return false;
	*p = cpu_to_be32(val);
	return true;
}

/*
 * De facto (non-standard but commonly implemented) unsigned short type:
 * 16-bit integer zero-extended to fill one XDR_UNIT.
 */
static inline bool
xdrgen_decode_unsigned_short(struct xdr_stream *xdr, u16 *ptr)
{
	__be32 *p = xdr_inline_decode(xdr, XDR_UNIT);

	if (unlikely(!p))
		return false;
	*ptr = (u16)be32_to_cpup(p);
	return true;
}

static inline bool
xdrgen_encode_unsigned_short(struct xdr_stream *xdr, u16 val)

Annotation

Implementation Notes