diff options
-rw-r--r-- | librpc/ndr/libndr.h | 1 | ||||
-rw-r--r-- | librpc/ndr/ndr_basic.c | 25 |
2 files changed, 26 insertions, 0 deletions
diff --git a/librpc/ndr/libndr.h b/librpc/ndr/libndr.h index 162c109781..36adae91c0 100644 --- a/librpc/ndr/libndr.h +++ b/librpc/ndr/libndr.h @@ -407,6 +407,7 @@ struct sockaddr_storage; Map an NT error code from a NDR error code. *********************************************************************/ NTSTATUS ndr_map_error2ntstatus(enum ndr_err_code ndr_err); +int ndr_map_error2errno(enum ndr_err_code ndr_err); const char *ndr_map_error2string(enum ndr_err_code ndr_err); #define ndr_errstr ndr_map_error2string diff --git a/librpc/ndr/ndr_basic.c b/librpc/ndr/ndr_basic.c index 7b164385d4..7a4e22ad70 100644 --- a/librpc/ndr/ndr_basic.c +++ b/librpc/ndr/ndr_basic.c @@ -1339,6 +1339,31 @@ _PUBLIC_ NTSTATUS ndr_map_error2ntstatus(enum ndr_err_code ndr_err) return NT_STATUS_INVALID_PARAMETER; } +_PUBLIC_ int ndr_map_error2errno(enum ndr_err_code ndr_err) +{ + switch (ndr_err) { + case NDR_ERR_SUCCESS: + return 0; + case NDR_ERR_BUFSIZE: + return ENOSPC; + case NDR_ERR_TOKEN: + return EINVAL; + case NDR_ERR_ALLOC: + return ENOMEM; + case NDR_ERR_ARRAY_SIZE: + return EMSGSIZE; + case NDR_ERR_INVALID_POINTER: + return EINVAL; + case NDR_ERR_UNREAD_BYTES: + return EOVERFLOW; + default: + break; + } + + /* we should map all error codes to different status codes */ + return EINVAL; +} + _PUBLIC_ enum ndr_err_code ndr_push_timespec(struct ndr_push *ndr, int ndr_flags, const struct timespec *t) |