diff options
author | Volker Lendecke <vl@samba.org> | 2011-11-24 09:48:40 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2011-12-02 22:43:05 +0100 |
commit | de1cd125ade49ab62c0585740e6af66c384d419b (patch) | |
tree | c19ba8cdc314386680bd641d88535b6d4f34dd45 /librpc/ndr | |
parent | 46551d750dc58b32630fb6744364fe5a1052b87d (diff) | |
download | samba-de1cd125ade49ab62c0585740e6af66c384d419b.tar.gz samba-de1cd125ade49ab62c0585740e6af66c384d419b.tar.bz2 samba-de1cd125ade49ab62c0585740e6af66c384d419b.zip |
librpc: Add support for struct timespec
Diffstat (limited to 'librpc/ndr')
-rw-r--r-- | librpc/ndr/libndr.h | 10 | ||||
-rw-r--r-- | librpc/ndr/ndr_basic.c | 31 |
2 files changed, 41 insertions, 0 deletions
diff --git a/librpc/ndr/libndr.h b/librpc/ndr/libndr.h index 80b0ec9182..95e6573748 100644 --- a/librpc/ndr/libndr.h +++ b/librpc/ndr/libndr.h @@ -627,4 +627,14 @@ _PUBLIC_ enum ndr_err_code ndr_push_enum_uint1632(struct ndr_push *ndr, int ndr_ _PUBLIC_ void ndr_print_bool(struct ndr_print *ndr, const char *name, const bool b); +_PUBLIC_ enum ndr_err_code ndr_push_timespec(struct ndr_push *ndr, + int ndr_flags, + const struct timespec *t); +_PUBLIC_ enum ndr_err_code ndr_pull_timespec(struct ndr_pull *ndr, + int ndr_flags, + struct timespec *t); +_PUBLIC_ void ndr_print_timespec(struct ndr_print *ndr, const char *name, + const struct timespec *t); + + #endif /* __LIBNDR_H__ */ diff --git a/librpc/ndr/ndr_basic.c b/librpc/ndr/ndr_basic.c index ab234bf5ca..0e209f8eed 100644 --- a/librpc/ndr/ndr_basic.c +++ b/librpc/ndr/ndr_basic.c @@ -1338,3 +1338,34 @@ _PUBLIC_ NTSTATUS ndr_map_error2ntstatus(enum ndr_err_code ndr_err) /* we should map all error codes to different status codes */ return NT_STATUS_INVALID_PARAMETER; } + +_PUBLIC_ enum ndr_err_code ndr_push_timespec(struct ndr_push *ndr, + int ndr_flags, + const struct timespec *t) +{ + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags); + NDR_CHECK(ndr_push_hyper(ndr, ndr_flags, t->tv_sec)); + NDR_CHECK(ndr_push_uint32(ndr, ndr_flags, t->tv_nsec)); + return NDR_ERR_SUCCESS; +} + +_PUBLIC_ enum ndr_err_code ndr_pull_timespec(struct ndr_pull *ndr, + int ndr_flags, + struct timespec *t) +{ + uint64_t secs; + uint32_t nsecs; + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags); + NDR_CHECK(ndr_pull_hyper(ndr, ndr_flags, &secs)); + NDR_CHECK(ndr_pull_uint32(ndr, ndr_flags, &nsecs)); + t->tv_sec = secs; + t->tv_nsec = nsecs; + return NDR_ERR_SUCCESS; +} + +_PUBLIC_ void ndr_print_timespec(struct ndr_print *ndr, const char *name, + const struct timespec *t) +{ + ndr->print(ndr, "%-25s: %s.%ld", name, timestring(ndr, t->tv_sec), + (long)t->tv_nsec); +} |