• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10.1/Libnotify-133.1.1/

Lines Matching refs:ns

61 	notify_state_t *ns;
63 ns = (notify_state_t *)calloc(1, sizeof(notify_state_t));
64 if (ns == NULL) return NULL;
66 ns->flags = flags;
67 ns->sock = -1;
69 if (ns->flags & NOTIFY_STATE_USE_LOCKS)
71 ns->lock = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
72 if (ns->lock == NULL)
74 free(ns);
78 pthread_mutex_init(ns->lock, NULL);
81 ns->name_table = _nc_table_new(table_size);
82 ns->name_id_table = _nc_table_new(table_size);
83 ns->client_table = _nc_table_new(table_size);
84 ns->port_table = _nc_table_new(table_size);
85 ns->proc_table = _nc_table_new(table_size);
87 if ((ns->name_table == NULL) || (ns->name_id_table == NULL) || (ns->client_table == NULL) || (ns->port_table == NULL) || (ns->proc_table == NULL))
89 free(ns->lock);
90 _nc_table_free(ns->name_table);
91 _nc_table_free(ns->name_id_table);
92 _nc_table_free(ns->client_table);
93 _nc_table_free(ns->port_table);
94 _nc_table_free(ns->proc_table);
95 free(ns);
99 return ns;
103 _notify_lib_notify_state_free(notify_state_t *ns)
105 if (ns == NULL) return;
107 _nc_table_free(ns->name_table);
108 _nc_table_free(ns->name_id_table);
109 _nc_table_free(ns->client_table);
110 _nc_table_free(ns->port_table);
111 _nc_table_free(ns->proc_table);
113 if (ns->lock != NULL)
115 pthread_mutex_destroy(ns->lock);
116 free(ns->lock);
119 if (ns->sock != -1)
121 shutdown(ns->sock, 2);
122 close(ns->sock);
125 if (ns->controlled_name != NULL) free(ns->controlled_name);
129 _internal_client_new(notify_state_t *ns, pid_t pid, int token)
134 if (ns == NULL) return NULL;
137 c = _nc_table_find_64(ns->client_table, cid);
143 ns->stat_client_alloc++;
149 _nc_table_insert_64(ns->client_table, cid, c);
155 _internal_client_release(notify_state_t *ns, client_t *c)
159 if (ns == NULL) return;
163 _nc_table_delete_64(ns->client_table, cid);
193 ns->stat_client_free++;
197 _internal_new_name(notify_state_t *ns, const char *name)
202 if (ns == NULL) return NULL;
210 ns->stat_name_alloc++;
222 _nc_table_insert_no_copy(ns->name_table, n->name, n);
223 _nc_table_insert_64(ns->name_id_table, n->name_id, n);
229 _internal_insert_controlled_name(notify_state_t *ns, name_info_t *n)
233 if (ns == NULL) return;
236 if (ns->controlled_name == NULL) ns->controlled_name_count = 0;
238 for (i = 0; i < ns->controlled_name_count; i++)
240 if (ns->controlled_name[i] == n) return;
243 ns->controlled_name = (name_info_t **)reallocf(ns->controlled_name, (ns->controlled_name_count + 1) * sizeof(name_info_t *));
251 for (i = 0; i < ns->controlled_name_count; i++)
253 if (strcmp(n->name, ns->controlled_name[i]->name) > 0) break;
256 for (j = ns->controlled_name_count; j > i; j--)
258 ns->controlled_name[j] = ns->controlled_name[j-1];
261 ns->controlled_name[i] = n;
262 ns->controlled_name_count++;
266 _internal_remove_controlled_name(notify_state_t *ns, name_info_t *n)
270 for (i = 0; i < ns->controlled_name_count; i++)
272 if (ns->controlled_name[i] == n)
274 for (j = i + 1; j < ns->controlled_name_count; j++)
276 ns->controlled_name[j-1] = ns->controlled_name[j];
279 ns->controlled_name_count--;
280 if (ns->controlled_name_count == 0)
282 free(ns->controlled_name);
283 ns->controlled_name = NULL;
287 ns->controlled_name = (name_info_t **)reallocf(ns->controlled_name, ns->controlled_name_count * sizeof(name_info_t *));
296 _internal_check_access(notify_state_t *ns, const char *name, uid_t uid, gid_t gid, int req)
302 if (ns == NULL) return NOTIFY_STATUS_FAILED;
321 if (ns->controlled_name == NULL) ns->controlled_name_count = 0;
322 for (i = 0; i < ns->controlled_name_count; i++)
324 p = ns->controlled_name[i];
344 _notify_lib_check_controlled_access(notify_state_t *ns, char *name, uid_t uid, gid_t gid, int req)
348 if (ns == NULL) return NOTIFY_STATUS_FAILED;
350 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
351 status = _internal_check_access(ns, name, uid, gid, req);
352 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
358 _notify_lib_port_proc_new(notify_state_t *ns, mach_port_t port, pid_t proc, uint32_t state, dispatch_source_t src)
362 if (ns == NULL) return NOTIFY_STATUS_FAILED;
368 ns->stat_portproc_alloc++;
374 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
375 if (proc == 0) _nc_table_insert_n(ns->port_table, port, pdata);
376 else _nc_table_insert_n(ns->proc_table, proc, pdata);
377 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
383 _notify_lib_port_proc_find(notify_state_t *ns, mach_port_t port, pid_t proc)
387 if (ns == NULL) return NULL;
390 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
392 if (proc == 0) pdata = _nc_table_find_n(ns->port_table, port);
393 else pdata = _nc_table_find_n(ns->proc_table, proc);
397 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
403 _notify_lib_port_proc_release(notify_state_t *ns, mach_port_t port, pid_t proc)
407 if (ns == NULL) return;
410 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
412 if (proc == 0) pdata = _nc_table_find_n(ns->port_table, port);
413 else pdata = _nc_table_find_n(ns->proc_table, proc);
420 if (proc == 0) _nc_table_delete_n(ns->port_table, port);
421 else _nc_table_delete_n(ns->proc_table, proc);
427 ns->stat_portproc_free++;
431 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
438 _internal_send(notify_state_t *ns, client_t *c)
443 if (ns == NULL) return NOTIFY_STATUS_FAILED;
452 pdata = _nc_table_find_n(ns->proc_table, c->pid);
508 pdata = _nc_table_find_n(ns->port_table, c->port);
517 if (ns->flags & NOTIFY_STATE_ENABLE_RESEND) opts |= MACH_SEND_NOTIFY;
532 if (ns->flags & NOTIFY_STATE_ENABLE_RESEND)
570 _notify_lib_post_client(notify_state_t *ns, client_t *c)
574 if (ns == NULL) return NOTIFY_STATUS_FAILED;
577 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
578 status = _internal_send(ns, c);
579 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
585 _internal_post_name(notify_state_t *ns, name_info_t *n, uid_t uid, gid_t gid)
593 auth = _internal_check_access(ns, n->name, uid, gid, NOTIFY_ACCESS_WRITE);
601 if (c != NULL) _internal_send(ns, c);
611 _notify_lib_post(notify_state_t *ns, const char *name, uid_t uid, gid_t gid)
616 if (ns == NULL) return NOTIFY_STATUS_FAILED;
618 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
620 n = (name_info_t *)_nc_table_find(ns->name_table, name);
623 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
627 status = _internal_post_name(ns, n, uid, gid);
629 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
634 _notify_lib_post_nid(notify_state_t *ns, uint64_t nid, uid_t uid, gid_t gid)
639 if (ns == NULL) return NOTIFY_STATUS_FAILED;
641 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
643 n = (name_info_t *)_nc_table_find_64(ns->name_id_table, nid);
646 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
650 status = _internal_post_name(ns, n, uid, gid);
652 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
657 _internal_release_name_info(notify_state_t *ns, name_info_t *n)
659 if (ns == NULL) return;
665 _internal_remove_controlled_name(ns, n);
666 _nc_table_delete(ns->name_table, n->name);
667 _nc_table_delete_64(ns->name_id_table, n->name_id);
670 ns->stat_name_free++;
678 _internal_cancel(notify_state_t *ns, uint64_t cid)
683 if (ns == NULL) return;
688 c = _nc_table_find_64(ns->client_table, cid);
695 _internal_client_release(ns, c);
696 _internal_release_name_info(ns, n);
700 _notify_lib_cancel(notify_state_t *ns, pid_t pid, int token)
704 if (ns == NULL) return;
708 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
709 _internal_cancel(ns, cid);
710 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
714 _notify_lib_suspend(notify_state_t *ns, pid_t pid, int token)
719 if (ns == NULL) return;
723 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
725 c = _nc_table_find_64(ns->client_table, cid);
732 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
736 _notify_lib_resume(notify_state_t *ns, pid_t pid, int token)
742 if (ns == NULL) return NOTIFY_STATUS_FAILED;
746 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
748 c = _nc_table_find_64(ns->client_table, cid);
759 status = _internal_send(ns, c);
764 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
770 _notify_lib_suspend_proc(notify_state_t *ns, pid_t pid)
774 if (ns == NULL) return;
776 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
778 pdata = _nc_table_find_n(ns->proc_table, pid);
781 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
785 _notify_lib_resume_proc(notify_state_t *ns, pid_t pid)
791 if (ns == NULL) return;
793 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
796 pdata = _nc_table_find_n(ns->proc_table, pid);
799 tt = _nc_table_traverse_start(ns->client_table);
802 c = _nc_table_traverse(ns->client_table, tt);
815 _internal_send(ns, c);
820 _nc_table_traverse_end(ns->client_table, tt);
822 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
826 _notify_lib_suspend_port(notify_state_t *ns, mach_port_t port)
830 if (ns == NULL) return;
832 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
834 pdata = _nc_table_find_n(ns->port_table, port);
837 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
841 _notify_lib_resume_port(notify_state_t *ns, mach_port_t port)
847 if (ns == NULL) return;
849 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
852 pdata = _nc_table_find_n(ns->port_table, port);
855 tt = _nc_table_traverse_start(ns->client_table);
858 c = _nc_table_traverse(ns->client_table, tt);
871 _internal_send(ns, c);
876 _nc_table_traverse_end(ns->client_table, tt);
878 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
886 _notify_lib_cancel_proc(notify_state_t *ns, pid_t pid)
892 if (ns == NULL) return;
896 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
898 tt = _nc_table_traverse_start(ns->client_table);
901 c = _nc_table_traverse(ns->client_table, tt);
906 _nc_table_traverse_end(ns->client_table, tt);
911 _internal_cancel(ns, c->client_id);
916 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
924 _notify_lib_cancel_port(notify_state_t *ns, mach_port_t port)
930 if (ns == NULL) return;
934 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
936 tt = _nc_table_traverse_start(ns->client_table);
939 c = _nc_table_traverse(ns->client_table, tt);
944 _nc_table_traverse_end(ns->client_table, tt);
949 _internal_cancel(ns, c->client_id);
954 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
962 _notify_lib_check(notify_state_t *ns, pid_t pid, int token, int *check)
967 if (ns == NULL) return NOTIFY_STATUS_FAILED;
972 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
974 c = _nc_table_find_64(ns->client_table, cid);
978 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
984 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
991 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
998 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1006 _notify_lib_peek(notify_state_t *ns, pid_t pid, int token, int *val)
1011 if (ns == NULL) return NOTIFY_STATUS_FAILED;
1016 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
1018 c = _nc_table_find_64(ns->client_table, cid);
1022 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1028 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1034 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1039 _notify_lib_check_addr(notify_state_t *ns, pid_t pid, int token)
1045 if (ns == NULL) return NULL;
1049 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
1051 c = _nc_table_find_64(ns->client_table, cid);
1055 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1061 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1067 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1075 _notify_lib_get_state(notify_state_t *ns, uint64_t nid, uint64_t *state, uid_t uid, gid_t gid)
1079 if (ns == NULL) return NOTIFY_STATUS_FAILED;
1084 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
1086 n = (name_info_t *)_nc_table_find_64(ns->name_id_table, nid);
1090 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1095 int auth = _internal_check_access(ns, n->name, uid, gid, NOTIFY_ACCESS_READ);
1098 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1105 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1113 _notify_lib_set_state(notify_state_t *ns, uint64_t nid, uint64_t state, uid_t uid, gid_t gid)
1118 if (ns == NULL) return NOTIFY_STATUS_FAILED;
1120 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
1122 n = (name_info_t *)_nc_table_find_64(ns->name_id_table, nid);
1126 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1130 auth = _internal_check_access(ns, n->name, uid, gid, NOTIFY_ACCESS_WRITE);
1133 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1140 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1145 _internal_register_common(notify_state_t *ns, const char *name, pid_t pid, int token, uid_t uid, gid_t gid, client_t **outc)
1152 if (ns == NULL) return NOTIFY_STATUS_FAILED;
1156 status = _internal_check_access(ns, name, uid, gid, NOTIFY_ACCESS_READ);
1162 n = (name_info_t *)_nc_table_find(ns->name_table, name);
1167 n = _internal_new_name(ns, name);
1171 c = _internal_client_new(ns, pid, token);
1176 _nc_table_delete(ns->name_table, n->name);
1179 ns->stat_name_free++;
1200 _notify_lib_register_signal(notify_state_t *ns, const char *name, pid_t pid, int token, uint32_t sig, uid_t uid, gid_t gid, uint64_t *out_nid)
1205 if (ns == NULL) return NOTIFY_STATUS_FAILED;
1210 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
1212 status = _internal_register_common(ns, name, pid, token, uid, gid, &c);
1215 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1224 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1233 _notify_lib_register_file_descriptor(notify_state_t *ns, const char *name, pid_t pid, int token, int fd, uid_t uid, gid_t gid, uint64_t *out_nid)
1238 if (ns == NULL) return NOTIFY_STATUS_FAILED;
1243 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
1245 status = _internal_register_common(ns, name, pid, token, uid, gid, &c);
1248 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1256 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1265 _notify_lib_register_mach_port(notify_state_t *ns, const char *name, pid_t pid, int token, mach_port_t port, uid_t uid, gid_t gid, uint64_t *out_nid)
1270 if (ns == NULL) return NOTIFY_STATUS_FAILED;
1275 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
1277 status = _internal_register_common(ns, name, pid, token, uid, gid, &c);
1280 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1288 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1297 _notify_lib_register_plain(notify_state_t *ns, const char *name, pid_t pid, int token, uint32_t slot, uint32_t uid, uint32_t gid, uint64_t *out_nid)
1302 if (ns == NULL) return NOTIFY_STATUS_FAILED;
1307 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
1309 status = _internal_register_common(ns, name, pid, token, uid, gid, &c);
1312 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1328 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1333 _notify_lib_set_owner(notify_state_t *ns, const char *name, uid_t uid, gid_t gid)
1337 if (ns == NULL) return NOTIFY_STATUS_FAILED;
1340 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
1342 n = (name_info_t *)_nc_table_find(ns->name_table, name);
1346 n = _internal_new_name(ns, name);
1349 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1364 _internal_insert_controlled_name(ns, n);
1366 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1371 _notify_lib_get_owner(notify_state_t *ns, const char *name, uint32_t *uid, uint32_t *gid)
1376 if (ns == NULL) return NOTIFY_STATUS_FAILED;
1379 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
1381 n = (name_info_t *)_nc_table_find(ns->name_table, name);
1386 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1392 for (i = 0; i < ns->controlled_name_count; i++)
1394 n = ns->controlled_name[i];
1403 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1414 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1421 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1426 _notify_lib_set_access(notify_state_t *ns, const char *name, uint32_t mode)
1430 if (ns == NULL) return NOTIFY_STATUS_FAILED;
1433 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
1435 n = (name_info_t *)_nc_table_find(ns->name_table, name);
1439 n = _internal_new_name(ns, name);
1442 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1456 _internal_insert_controlled_name(ns, n);
1458 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1463 _notify_lib_get_access(notify_state_t *ns, const char *name, uint32_t *mode)
1468 if (ns == NULL) return NOTIFY_STATUS_FAILED;
1471 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
1473 n = (name_info_t *)_nc_table_find(ns->name_table, name);
1478 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1484 for (i = 0; i < ns->controlled_name_count; i++)
1486 n = ns->controlled_name[i];
1496 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1506 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1512 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1517 _notify_lib_release_name(notify_state_t *ns, const char *name, uid_t uid, gid_t gid)
1521 if (ns == NULL) return NOTIFY_STATUS_FAILED;
1524 if (ns->lock != NULL) pthread_mutex_lock(ns->lock);
1526 n = (name_info_t *)_nc_table_find(ns->name_table, name);
1529 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1536 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);
1540 _internal_release_name_info(ns, n);
1542 if (ns->lock != NULL) pthread_mutex_unlock(ns->lock);