Changeset cce8a83 in mainline for uspace/srv/loc


Ignore:
Timestamp:
2011-08-16T17:31:34Z (14 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
45058baa
Parents:
6d605e6
Message:

loc_service_get_name() to translate service ID to name.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/loc/loc.c

    r6d605e6 rcce8a83  
    4444#include <bool.h>
    4545#include <fibril_synch.h>
     46#include <macros.h>
    4647#include <stdlib.h>
    4748#include <str.h>
     
    532533}
    533534
     535static void loc_service_get_name(ipc_callid_t iid, ipc_call_t *icall)
     536{
     537        ipc_callid_t callid;
     538        size_t size;
     539        size_t act_size;
     540        loc_service_t *svc;
     541       
     542        if (!async_data_read_receive(&callid, &size)) {
     543                async_answer_0(callid, EREFUSED);
     544                async_answer_0(iid, EREFUSED);
     545                return;
     546        }
     547       
     548        fibril_mutex_lock(&services_list_mutex);
     549       
     550        svc = loc_service_find_id(IPC_GET_ARG1(*icall));
     551        if (svc == NULL) {
     552                fibril_mutex_unlock(&services_list_mutex);
     553                async_answer_0(callid, ENOENT);
     554                async_answer_0(iid, ENOENT);
     555                return;
     556        }
     557       
     558        act_size = str_size(svc->name);
     559        if (act_size > size) {
     560                fibril_mutex_unlock(&services_list_mutex);
     561                async_answer_0(callid, EOVERFLOW);
     562                async_answer_0(iid, EOVERFLOW);
     563                return;
     564        }
     565       
     566        sysarg_t retval = async_data_read_finalize(callid, svc->name,
     567            min(size, act_size));
     568       
     569        fibril_mutex_unlock(&services_list_mutex);
     570       
     571        async_answer_0(iid, retval);
     572}
     573
     574
    534575/** Connect client to the service.
    535576 *
     
    11971238                        loc_service_get_id(callid, &call);
    11981239                        break;
     1240                case LOC_SERVICE_GET_NAME:
     1241                        loc_service_get_name(callid, &call);
     1242                        break;
    11991243                case LOC_NAMESPACE_GET_ID:
    12001244                        loc_namespace_get_id(callid, &call);
Note: See TracChangeset for help on using the changeset viewer.