summaryrefslogtreecommitdiffstats
path: root/lib/libc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/sys/Symbol.map1
-rw-r--r--lib/libc/xdr/Symbol.map6
-rw-r--r--lib/libc/xdr/xdr.c92
3 files changed, 99 insertions, 0 deletions
diff --git a/lib/libc/sys/Symbol.map b/lib/libc/sys/Symbol.map
index 5217ab0..02ed73b 100644
--- a/lib/libc/sys/Symbol.map
+++ b/lib/libc/sys/Symbol.map
@@ -982,4 +982,5 @@ FBSDprivate_1.0 {
__sys_writev;
__error_unthreaded;
nlm_syscall;
+ gssd_syscall;
};
diff --git a/lib/libc/xdr/Symbol.map b/lib/libc/xdr/Symbol.map
index 4cceeb7..0739b7b 100644
--- a/lib/libc/xdr/Symbol.map
+++ b/lib/libc/xdr/Symbol.map
@@ -45,3 +45,9 @@ FBSD_1.0 {
/* xdr_sizeof; */ /* Why is xdr_sizeof.c not included in Makefileinc? */
xdrstdio_create;
};
+
+FBSD_1.1 {
+ xdr_uint16_t;
+ xdr_uint32_t;
+ xdr_uint64_t;
+};
diff --git a/lib/libc/xdr/xdr.c b/lib/libc/xdr/xdr.c
index c1e5eec..337cdc0 100644
--- a/lib/libc/xdr/xdr.c
+++ b/lib/libc/xdr/xdr.c
@@ -263,6 +263,36 @@ xdr_u_int32_t(xdrs, u_int32_p)
return (FALSE);
}
+/*
+ * XDR unsigned 32-bit integers
+ * same as xdr_int32_t - open coded to save a proc call!
+ */
+bool_t
+xdr_uint32_t(xdrs, u_int32_p)
+ XDR *xdrs;
+ uint32_t *u_int32_p;
+{
+ u_long l;
+
+ switch (xdrs->x_op) {
+
+ case XDR_ENCODE:
+ l = (u_long) *u_int32_p;
+ return (XDR_PUTLONG(xdrs, (long *)&l));
+
+ case XDR_DECODE:
+ if (!XDR_GETLONG(xdrs, (long *)&l)) {
+ return (FALSE);
+ }
+ *u_int32_p = (u_int32_t) l;
+ return (TRUE);
+
+ case XDR_FREE:
+ return (TRUE);
+ }
+ /* NOTREACHED */
+ return (FALSE);
+}
/*
* XDR short integers
@@ -385,6 +415,36 @@ xdr_u_int16_t(xdrs, u_int16_p)
return (FALSE);
}
+/*
+ * XDR unsigned 16-bit integers
+ */
+bool_t
+xdr_uint16_t(xdrs, u_int16_p)
+ XDR *xdrs;
+ uint16_t *u_int16_p;
+{
+ u_long l;
+
+ switch (xdrs->x_op) {
+
+ case XDR_ENCODE:
+ l = (u_long) *u_int16_p;
+ return (XDR_PUTLONG(xdrs, (long *)&l));
+
+ case XDR_DECODE:
+ if (!XDR_GETLONG(xdrs, (long *)&l)) {
+ return (FALSE);
+ }
+ *u_int16_p = (u_int16_t) l;
+ return (TRUE);
+
+ case XDR_FREE:
+ return (TRUE);
+ }
+ /* NOTREACHED */
+ return (FALSE);
+}
+
/*
* XDR a char
@@ -806,6 +866,38 @@ xdr_u_int64_t(xdrs, ullp)
return (FALSE);
}
+/*
+ * XDR unsigned 64-bit integers
+ */
+bool_t
+xdr_uint64_t(xdrs, ullp)
+ XDR *xdrs;
+ uint64_t *ullp;
+{
+ u_long ul[2];
+
+ switch (xdrs->x_op) {
+ case XDR_ENCODE:
+ ul[0] = (u_long)(*ullp >> 32) & 0xffffffff;
+ ul[1] = (u_long)(*ullp) & 0xffffffff;
+ if (XDR_PUTLONG(xdrs, (long *)&ul[0]) == FALSE)
+ return (FALSE);
+ return (XDR_PUTLONG(xdrs, (long *)&ul[1]));
+ case XDR_DECODE:
+ if (XDR_GETLONG(xdrs, (long *)&ul[0]) == FALSE)
+ return (FALSE);
+ if (XDR_GETLONG(xdrs, (long *)&ul[1]) == FALSE)
+ return (FALSE);
+ *ullp = (u_int64_t)
+ (((u_int64_t)ul[0] << 32) | ((u_int64_t)ul[1]));
+ return (TRUE);
+ case XDR_FREE:
+ return (TRUE);
+ }
+ /* NOTREACHED */
+ return (FALSE);
+}
+
/*
* XDR hypers
OpenPOWER on IntegriCloud