diff options
author | Andreas Schneider <mail@cynapses.org> | 2009-04-27 11:46:41 +0000 |
---|---|---|
committer | Andreas Schneider <mail@cynapses.org> | 2009-04-27 11:46:41 +0000 |
commit | f11630ab68b95fc64c0d3e7d1af9518ead22c853 (patch) | |
tree | 028f1337759fcfaeee14e07f1e0bb2d5aa43984a /libssh/sftpserver.c | |
parent | f32e307899f96bf67abcea7a9f70df51852d9eae (diff) | |
download | libssh-f11630ab68b95fc64c0d3e7d1af9518ead22c853.tar.gz libssh-f11630ab68b95fc64c0d3e7d1af9518ead22c853.tar.xz libssh-f11630ab68b95fc64c0d3e7d1af9518ead22c853.zip |
Improve sftp_reply_names_add.
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@625 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'libssh/sftpserver.c')
-rw-r--r-- | libssh/sftpserver.c | 49 |
1 files changed, 36 insertions, 13 deletions
diff --git a/libssh/sftpserver.c b/libssh/sftpserver.c index 08b214c3..4e1cebff 100644 --- a/libssh/sftpserver.c +++ b/libssh/sftpserver.c @@ -294,19 +294,42 @@ int sftp_reply_attr(SFTP_CLIENT_MESSAGE *msg, SFTP_ATTRIBUTES *attr) { return 0; } -int sftp_reply_names_add(SFTP_CLIENT_MESSAGE *msg, char *file, char *longname, - SFTP_ATTRIBUTES *attr){ - STRING *name=string_from_char(file); - if(!msg->attrbuf) - msg->attrbuf=buffer_new(); - buffer_add_ssh_string(msg->attrbuf,name); - free(name); - name=string_from_char(longname); - buffer_add_ssh_string(msg->attrbuf,name); - free(name); - buffer_add_attributes(msg->attrbuf,attr); - msg->attr_num++; - return 0; +int sftp_reply_names_add(SFTP_CLIENT_MESSAGE *msg, const char *file, + const char *longname, SFTP_ATTRIBUTES *attr) { + STRING *name; + + name = string_from_char(file); + if (name == NULL) { + return -1; + } + + if (msg->attrbuf == NULL) { + msg->attrbuf = buffer_new(); + if (msg->attrbuf == NULL) { + string_free(name); + return -1; + } + } + + if (buffer_add_ssh_string(msg->attrbuf, name) < 0) { + string_free(name); + return -1; + } + + string_free(name); + name = string_from_char(longname); + if (name == NULL) { + return -1; + } + if (buffer_add_ssh_string(msg->attrbuf,name) < 0 || + buffer_add_attributes(msg->attrbuf,attr) < 0) { + string_free(name); + return -1; + } + string_free(name); + msg->attr_num++; + + return 0; } int sftp_reply_names(SFTP_CLIENT_MESSAGE *msg){ |