Add libssh2_session_last_error()
Этот коммит содержится в:
родитель
4ab2f2ab73
Коммит
620a685af2
1
README
1
README
@ -28,6 +28,7 @@ Version 0.2
|
||||
|
||||
Added libssh2_session_abstract() for retreiving &session->abstract
|
||||
|
||||
Added libssh2_session_last_error() for retreiving error codes/messages
|
||||
|
||||
Version 0.1
|
||||
-----------
|
||||
|
@ -43,7 +43,7 @@
|
||||
#include <sys/stat.h>
|
||||
|
||||
#define LIBSSH2_VERSION "0.1"
|
||||
#define LIBSSH2_APINO 200412091526
|
||||
#define LIBSSH2_APINO 200412161442
|
||||
|
||||
/* Part of every banner, user specified or not */
|
||||
#define LIBSSH2_SSH_BANNER "SSH-2.0-libssh2_" LIBSSH2_VERSION
|
||||
@ -234,6 +234,8 @@ LIBSSH2_API void libssh2_session_methods(LIBSSH2_SESSION *session, char **kex,
|
||||
char **comp_cs, char **comp_sc,
|
||||
char **lang_cs, char **lang_sc);
|
||||
|
||||
LIBSSH2_API int libssh2_session_last_error(LIBSSH2_SESSION *session, char **errmsg, int *errmsg_len, int want_buf);
|
||||
|
||||
/* Userauth API */
|
||||
LIBSSH2_API char *libssh2_userauth_list(LIBSSH2_SESSION *session, char *username, int username_len);
|
||||
LIBSSH2_API int libssh2_userauth_authenticated(LIBSSH2_SESSION *session);
|
||||
|
@ -493,3 +493,58 @@ LIBSSH2_API void **libssh2_session_abstract(LIBSSH2_SESSION *session)
|
||||
return &session->abstract;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ libssh2_session_last_error
|
||||
* Returns error code and populates an error string into errmsg
|
||||
* If want_buf is non-zero then the string placed into errmsg must be freed by the calling program
|
||||
* Otherwise it is assumed to be owned by libssh2
|
||||
*/
|
||||
LIBSSH2_API int libssh2_session_last_error(LIBSSH2_SESSION *session, char **errmsg, int *errmsg_len, int want_buf)
|
||||
{
|
||||
/* No error to report */
|
||||
if (!session->err_code) {
|
||||
if (errmsg) {
|
||||
if (want_buf) {
|
||||
*errmsg = LIBSSH2_ALLOC(session, 1);
|
||||
if (*errmsg) {
|
||||
**errmsg = 0;
|
||||
}
|
||||
} else {
|
||||
*errmsg = "";
|
||||
}
|
||||
}
|
||||
if (errmsg_len) {
|
||||
*errmsg_len = 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (errmsg) {
|
||||
char *serrmsg = session->err_msg ? session->err_msg : "";
|
||||
int ownbuf = session->err_msg ? session->err_should_free : 0;
|
||||
|
||||
if (want_buf) {
|
||||
if (ownbuf) {
|
||||
/* Just give the calling program the buffer */
|
||||
*errmsg = serrmsg;
|
||||
session->err_should_free = 0;
|
||||
} else {
|
||||
/* Make a copy so the calling program can own it */
|
||||
*errmsg = LIBSSH2_ALLOC(session, session->err_msglen + 1);
|
||||
if (*errmsg) {
|
||||
memcpy(*errmsg, session->err_msg, session->err_msglen);
|
||||
(*errmsg)[session->err_msglen] = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
*errmsg = serrmsg;
|
||||
}
|
||||
}
|
||||
|
||||
if (errmsg_len) {
|
||||
*errmsg_len = session->err_msglen;
|
||||
}
|
||||
|
||||
return session->err_code;
|
||||
}
|
||||
/* }}} */
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user