Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 2402 → Rev 2403

/branches/fs/uspace/fs/fs.c
66,68 → 66,69
static void fs_connection(ipc_callid_t iid, ipc_call_t *icall)
{
 
int result;
int result = 0;
ipcarg_t arg = 0;
 
ipc_answer_fast(iid, 0, 0, 0);
 
while (1)
{
prepare_message();
if (fs_call == IPC_M_PHONE_HUNGUP) {
ipc_answer_fast(callid, 0,0,0);
return;
}
switch (fs_call)
{
case IPC_M_PHONE_HUNGUP:
ipc_answer_fast(callid, 0,0,0);
return;
 
if (fs_call == FS_NEW_CONSUMER) {
if (!new_consument) {
ipc_answer_fast(callid, FS_ECONNECT, 0, 0);
}
else {
result = new_consument_map();
ipc_answer_fast(callid, result, 0, 0);
case FS_NEW_CONSUMER:
if (!new_consument) {
result = FS_ECONNECT;
}
else {
result = new_consument_map();
if (!result) {
new_consument = FALSE;
}
}
break;
 
if (!result) {
new_consument = FALSE;
case IPC_M_AS_AREA_SEND:
if (!new_consument)
result = FS_ECONNECT;
else {
result = 0;
arg = (uintptr_t)fp->buffer;
fp = &fproc[new_consument];
fp->connected = TRUE;
new_consument = FALSE;
}
}
continue;
}
break;
 
if (fs_call == IPC_M_AS_AREA_SEND) {
if (!new_consument)
ipc_answer_fast(callid, FS_ECONNECT, 0, 0);
else {
ipc_answer_fast(callid, 0, (uintptr_t)fp->buffer, 0);
fp = &fproc[new_consument];
fp->connected = TRUE;
new_consument = FALSE;
}
continue;
}
case FS_DROP_CONSUMER:
fproc->connected = FALSE;
fproc->buffer = NULL;
result = 0;
break;
 
if (fs_call == FS_DROP_CONSUMER) {
fproc->connected = FALSE;
fproc->buffer = NULL;
ipc_answer_fast(callid, 0, 0, 0);
continue;
default:
if (check_con < 0) {
result = err_code;
check_con = TRUE;
break;
}
if (FS_IN_RANGE(fs_call)) {
result = call_vector[fs_call-FS_BASE]();
}
else {
result = FS_EBADCALL;
}
break;
}
if (check_con < 0) {
ipc_answer_fast(callid, err_code, 0, 0);
check_con = TRUE;
continue;
}
 
if (FS_IN_RANGE(fs_call)) {
result = call_vector[fs_call-FS_BASE]();
}
else {
result = FS_EBADCALL;
}
 
ipc_answer_fast(callid, result, 0, 0);
ipc_answer_fast(callid, result, arg, 0);
arg = 0;
}
}
 
136,7 → 137,8
{
int shift, id_task;
 
 
callid = async_get_call(&m_input);
fs_call = IPC_GET_METHOD(m_input);