Changeset 9a487cc in mainline
- Timestamp:
- 2012-06-18T09:55:40Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 06d85e5
- Parents:
- 49c94a3 (diff), 75b9c3d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- uspace
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/devctl/devctl.c
r49c94a3 r9a487cc 44 44 #define MAX_NAME_LENGTH 1024 45 45 46 char name[MAX_NAME_LENGTH]; 47 char drv_name[MAX_NAME_LENGTH]; 48 46 49 static int fun_subtree_print(devman_handle_t funh, int lvl) 47 50 { 48 char name[MAX_NAME_LENGTH];49 51 devman_handle_t devh; 50 52 devman_handle_t *cfuns; … … 57 59 58 60 rc = devman_fun_get_name(funh, name, MAX_NAME_LENGTH); 59 if (rc != EOK) { 60 str_cpy(name, MAX_NAME_LENGTH, "unknown"); 61 return ENOMEM; 62 } 61 if (rc != EOK) 62 return ELIMIT; 63 63 64 64 if (name[0] == '\0') 65 65 str_cpy(name, MAX_NAME_LENGTH, "/"); 66 66 67 printf("%s (%" PRIun ")\n", name, funh); 67 rc = devman_fun_get_driver_name(funh, drv_name, MAX_NAME_LENGTH); 68 if (rc != EOK && rc != EINVAL) 69 return ELIMIT; 70 71 if (rc == EINVAL) 72 printf("%s\n", name); 73 else 74 printf("%s : %s\n", name, drv_name); 68 75 69 76 rc = devman_fun_get_child(funh, &devh); -
uspace/app/loc/loc.c
r49c94a3 r9a487cc 48 48 size_t svc_cnt; 49 49 char *svc_name; 50 char *server_name; 50 51 int rc; 51 52 size_t j; 52 53 53 printf("%s (%" PRIun "):\n", cat_name, cat_id);54 printf("%s:\n", cat_name); 54 55 55 56 rc = loc_category_get_svcs(cat_id, &svc_ids, &svc_cnt); … … 67 68 continue; 68 69 } 69 printf("\t%s (%" PRIun ")\n", svc_name, svc_ids[j]); 70 71 rc = loc_service_get_server_name(svc_ids[j], &server_name); 72 if (rc != EOK && rc != EINVAL) { 73 free(svc_name); 74 printf(NAME ": Unknown service name (SID %" 75 PRIun ").\n", svc_ids[j]); 76 continue; 77 } 78 79 if (rc == EOK) 80 printf("\t%s : %s\n", svc_name, server_name); 81 else 82 printf("\t%s\n", svc_name); 83 70 84 free(svc_name); 85 free(server_name); 71 86 } 72 87 -
uspace/lib/c/generic/async.c
r49c94a3 r9a487cc 1388 1388 1389 1389 futex_down(&async_futex); 1390 if (msg->done) 1390 if (msg->done) { 1391 1391 amsg_destroy(msg); 1392 else 1392 } else { 1393 msg->dataptr = NULL; 1393 1394 msg->forget = true; 1395 } 1394 1396 futex_up(&async_futex); 1395 1397 } -
uspace/lib/c/generic/devman.c
r49c94a3 r9a487cc 430 430 async_wait_for(req, &retval); 431 431 432 if (retval != EOK) 433 return retval; 432 if (retval != EOK) { 433 return retval; 434 } 434 435 435 436 act_size = IPC_GET_ARG2(dreply); … … 449 450 { 450 451 return devman_get_str_internal(DEVMAN_FUN_GET_NAME, handle, buf, 452 buf_size); 453 } 454 455 int devman_fun_get_driver_name(devman_handle_t handle, char *buf, size_t buf_size) 456 { 457 return devman_get_str_internal(DEVMAN_FUN_GET_DRIVER_NAME, handle, buf, 451 458 buf_size); 452 459 } -
uspace/lib/c/generic/loc.c
r49c94a3 r9a487cc 450 450 } 451 451 452 /** Get service server name. 453 * 454 * Provided ID of a service, return the name of its server. 455 * 456 * @param svc_id Service ID 457 * @param name Place to store pointer to new string. Caller should 458 * free it using free(). 459 * @return EOK on success or negative error code 460 */ 461 int loc_service_get_server_name(service_id_t svc_id, char **name) 462 { 463 return loc_get_name_internal(LOC_SERVICE_GET_SERVER_NAME, svc_id, name); 464 } 465 452 466 int loc_namespace_get_id(const char *name, service_id_t *handle, 453 467 unsigned int flags) -
uspace/lib/c/include/devman.h
r49c94a3 r9a487cc 64 64 size_t *); 65 65 extern int devman_fun_get_name(devman_handle_t, char *, size_t); 66 extern int devman_fun_get_driver_name(devman_handle_t, char *, size_t); 66 67 extern int devman_fun_get_path(devman_handle_t, char *, size_t); 67 68 extern int devman_fun_online(devman_handle_t); -
uspace/lib/c/include/ipc/devman.h
r49c94a3 r9a487cc 157 157 DEVMAN_FUN_GET_CHILD, 158 158 DEVMAN_FUN_GET_NAME, 159 DEVMAN_FUN_GET_DRIVER_NAME, 159 160 DEVMAN_FUN_ONLINE, 160 161 DEVMAN_FUN_OFFLINE, -
uspace/lib/c/include/ipc/loc.h
r49c94a3 r9a487cc 56 56 LOC_SERVICE_GET_ID, 57 57 LOC_SERVICE_GET_NAME, 58 LOC_SERVICE_GET_SERVER_NAME, 58 59 LOC_NAMESPACE_GET_ID, 59 60 LOC_CALLBACK_CREATE, -
uspace/lib/c/include/loc.h
r49c94a3 r9a487cc 56 56 unsigned int); 57 57 extern int loc_service_get_name(service_id_t, char **); 58 extern int loc_service_get_server_name(service_id_t, char **); 58 59 extern int loc_namespace_get_id(const char *, service_id_t *, 59 60 unsigned int); -
uspace/srv/devman/main.c
r49c94a3 r9a487cc 855 855 } 856 856 857 /** Get function driver name. */ 858 static void devman_fun_get_driver_name(ipc_callid_t iid, ipc_call_t *icall) 859 { 860 devman_handle_t handle = IPC_GET_ARG1(*icall); 861 862 fun_node_t *fun = find_fun_node(&device_tree, handle); 863 if (fun == NULL) { 864 async_answer_0(iid, ENOMEM); 865 return; 866 } 867 868 ipc_callid_t data_callid; 869 size_t data_len; 870 if (!async_data_read_receive(&data_callid, &data_len)) { 871 async_answer_0(iid, EINVAL); 872 fun_del_ref(fun); 873 return; 874 } 875 876 void *buffer = malloc(data_len); 877 if (buffer == NULL) { 878 async_answer_0(data_callid, ENOMEM); 879 async_answer_0(iid, ENOMEM); 880 fun_del_ref(fun); 881 return; 882 } 883 884 fibril_rwlock_read_lock(&device_tree.rwlock); 885 886 /* Check function state */ 887 if (fun->state == FUN_REMOVED) { 888 fibril_rwlock_read_unlock(&device_tree.rwlock); 889 free(buffer); 890 891 async_answer_0(data_callid, ENOENT); 892 async_answer_0(iid, ENOENT); 893 fun_del_ref(fun); 894 return; 895 } 896 897 /* Check whether function has a driver */ 898 if (fun->child == NULL || fun->child->drv == NULL) { 899 fibril_rwlock_read_unlock(&device_tree.rwlock); 900 free(buffer); 901 902 async_answer_0(data_callid, EINVAL); 903 async_answer_0(iid, EINVAL); 904 fun_del_ref(fun); 905 return; 906 } 907 908 size_t sent_length = str_size(fun->child->drv->name); 909 if (sent_length > data_len) { 910 sent_length = data_len; 911 } 912 913 async_data_read_finalize(data_callid, fun->child->drv->name, 914 sent_length); 915 async_answer_0(iid, EOK); 916 917 fibril_rwlock_read_unlock(&device_tree.rwlock); 918 fun_del_ref(fun); 919 free(buffer); 920 } 857 921 858 922 /** Get device path. */ … … 1082 1146 case DEVMAN_FUN_GET_NAME: 1083 1147 devman_fun_get_name(callid, &call); 1148 break; 1149 case DEVMAN_FUN_GET_DRIVER_NAME: 1150 devman_fun_get_driver_name(callid, &call); 1084 1151 break; 1085 1152 case DEVMAN_FUN_GET_PATH: -
uspace/srv/locsrv/locsrv.c
r49c94a3 r9a487cc 656 656 } 657 657 658 static void loc_service_get_server_name(ipc_callid_t iid, ipc_call_t *icall) 659 { 660 ipc_callid_t callid; 661 size_t size; 662 size_t act_size; 663 loc_service_t *svc; 664 665 if (!async_data_read_receive(&callid, &size)) { 666 async_answer_0(callid, EREFUSED); 667 async_answer_0(iid, EREFUSED); 668 return; 669 } 670 671 fibril_mutex_lock(&services_list_mutex); 672 673 svc = loc_service_find_id(IPC_GET_ARG1(*icall)); 674 if (svc == NULL) { 675 fibril_mutex_unlock(&services_list_mutex); 676 async_answer_0(callid, ENOENT); 677 async_answer_0(iid, ENOENT); 678 return; 679 } 680 681 if (svc->server == NULL) { 682 fibril_mutex_unlock(&services_list_mutex); 683 async_answer_0(callid, EINVAL); 684 async_answer_0(iid, EINVAL); 685 return; 686 } 687 688 act_size = str_size(svc->server->name); 689 if (act_size > size) { 690 fibril_mutex_unlock(&services_list_mutex); 691 async_answer_0(callid, EOVERFLOW); 692 async_answer_0(iid, EOVERFLOW); 693 return; 694 } 695 696 sysarg_t retval = async_data_read_finalize(callid, svc->server->name, 697 min(size, act_size)); 698 699 fibril_mutex_unlock(&services_list_mutex); 700 701 async_answer_0(iid, retval); 702 } 703 658 704 /** Connect client to the service. 659 705 * … … 1404 1450 case LOC_SERVICE_GET_NAME: 1405 1451 loc_service_get_name(callid, &call); 1452 break; 1453 case LOC_SERVICE_GET_SERVER_NAME: 1454 loc_service_get_server_name(callid, &call); 1406 1455 break; 1407 1456 case LOC_NAMESPACE_GET_ID:
Note:
See TracChangeset
for help on using the changeset viewer.