1
1
git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@628 7dcaeef0-15fb-0310-b436-a5af3365683c
Этот коммит содержится в:
Andreas Schneider 2009-04-27 11:59:14 +00:00
родитель bf312c50a9
Коммит 315e5aca84

Просмотреть файл

@ -412,32 +412,45 @@ int sftp_reply_data(SFTP_CLIENT_MESSAGE *msg, const void *data, int len) {
return 0;
}
/* this function will return you a new handle to give the client.
/*
* This function will return you a new handle to give the client.
* the function accepts an info that can be retrieved later with
* the handle. Care is given that a corrupted handle won't give a
* valid info (or worse). */
STRING *sftp_handle_alloc(SFTP_SESSION *sftp, void *info){
int i;
u32 val;
STRING *ret;
* valid info (or worse).
*/
STRING *sftp_handle_alloc(SFTP_SESSION *sftp, void *info) {
STRING *ret;
u32 val;
int i;
if (sftp->handles == NULL) {
sftp->handles = malloc(sizeof(void *) * SFTP_HANDLES);
if (sftp->handles == NULL) {
sftp->handles = malloc(sizeof(void *) * SFTP_HANDLES);
if (sftp->handles == NULL) {
return NULL;
}
memset(sftp->handles,0,sizeof(void *)*SFTP_HANDLES);
return NULL;
}
for(i=0; i<SFTP_HANDLES;++i)
if(!sftp->handles[i])
break;
if(i==SFTP_HANDLES)
return NULL; // no handle available
val=i;
ret=string_new(4);
memcpy(ret->string,&val,sizeof(u32));
sftp->handles[i]=info;
return ret;
memset(sftp->handles, 0, sizeof(void *) * SFTP_HANDLES);
}
for (i = 0; i < SFTP_HANDLES; i++) {
if (sftp->handles[i] == NULL) {
break;
}
}
if (i == SFTP_HANDLES) {
return NULL; /* no handle available */
}
val = i;
ret = string_new(4);
if (ret == NULL) {
return NULL;
}
memcpy(ret->string, &val, sizeof(u32));
sftp->handles[i] = info;
return ret;
}
void *sftp_handle(SFTP_SESSION *sftp, STRING *handle){