From 681f29e6af8579f615cbea9000a2e5ec58871bd4 Mon Sep 17 00:00:00 2001 From: drakenclimber Date: Fri, 17 Dec 2021 22:35:50 +0000 Subject: [PATCH] deploy: ffb3f9908e441c39186a8b9abb33742067f246f0 --- annotated.html | 102 ++ bc_s.png | Bin 0 -> 676 bytes bdwn.png | Bin 0 -> 147 bytes cgrulesengd_8h_source.html | 152 ++ classes.html | 95 ++ closed.png | Bin 0 -> 132 bytes config_8h_source.html | 131 ++ dir_1563a38af0d3a5e4a6330d6d45e9792a.html | 78 + dir_2d094300ae4f2c55dd459b9ec7dd0ad3.html | 78 + dir_501cbd49daf77f17c121ad0979f93200.html | 78 + dir_66a7763e2a9b96033a682558820d533e.html | 78 + dir_68267d1309a1af8e8297ef4c3efbcdba.html | 84 + dir_bab0433f19b0a5661c5e0a15547f54b2.html | 78 + dir_d44c64559bbebec7f509842c48db8b23.html | 82 + dir_ea91a2a72b7cbbf988d2bd2cd1d23e49.html | 82 + doc.png | Bin 0 -> 746 bytes doxygen.css | 1793 +++++++++++++++++++++ doxygen.svg | 26 + dynsections.js | 121 ++ error_8h_source.html | 147 ++ files.html | 94 ++ folderclosed.png | Bin 0 -> 616 bytes folderopen.png | Bin 0 -> 597 bytes functions.html | 105 ++ functions_vars.html | 105 ++ group__group__config.html | 342 ++++ group__group__errors.html | 219 +++ group__group__groups.html | 1611 ++++++++++++++++++ group__group__init.html | 144 ++ group__group__iterators.html | 1056 ++++++++++++ group__group__log.html | 297 ++++ group__group__tasks.html | 555 +++++++ groups_8h_source.html | 238 +++ index.html | 86 + init_8h_source.html | 104 ++ iterators_8h_source.html | 233 +++ jquery.js | 35 + libcgroup-internal_8h_source.html | 400 +++++ libcgroup_8h_source.html | 109 ++ log_8h_source.html | 130 ++ md_CONTRIBUTING.html | 154 ++ md_README.html | 77 + menu.js | 51 + menudata.js | 36 + modules.html | 85 + nav_f.png | Bin 0 -> 153 bytes nav_g.png | Bin 0 -> 95 bytes nav_h.png | Bin 0 -> 98 bytes open.png | Bin 0 -> 123 bytes pages.html | 81 + search/all_0.html | 37 + search/all_0.js | 4 + search/all_1.html | 37 + search/all_1.js | 4 + search/all_10.html | 37 + search/all_10.js | 7 + search/all_11.html | 37 + search/all_11.js | 6 + search/all_12.html | 37 + search/all_12.js | 4 + search/all_13.html | 37 + search/all_13.js | 5 + search/all_14.html | 37 + search/all_14.js | 4 + search/all_2.html | 37 + search/all_2.js | 4 + search/all_3.html | 37 + search/all_3.js | 4 + search/all_4.html | 37 + search/all_4.js | 4 + search/all_5.html | 37 + search/all_5.js | 4 + search/all_6.html | 37 + search/all_6.js | 4 + search/all_7.html | 37 + search/all_7.js | 5 + search/all_8.html | 37 + search/all_8.js | 4 + search/all_9.html | 37 + search/all_9.js | 121 ++ search/all_a.html | 37 + search/all_a.js | 4 + search/all_b.html | 37 + search/all_b.js | 13 + search/all_c.html | 37 + search/all_c.js | 4 + search/all_d.html | 37 + search/all_d.js | 5 + search/all_e.html | 37 + search/all_e.js | 4 + search/all_f.html | 37 + search/all_f.js | 4 + search/classes_0.html | 37 + search/classes_0.js | 5 + search/classes_1.html | 37 + search/classes_1.js | 4 + search/classes_2.html | 37 + search/classes_2.js | 21 + search/classes_3.html | 37 + search/classes_3.js | 4 + search/classes_4.html | 37 + search/classes_4.js | 4 + search/classes_5.html | 37 + search/classes_5.js | 4 + search/close.svg | 31 + search/enums_0.html | 37 + search/enums_0.js | 6 + search/enumvalues_0.html | 37 + search/enumvalues_0.js | 12 + search/enumvalues_1.html | 37 + search/enumvalues_1.js | 10 + search/functions_0.html | 37 + search/functions_0.js | 90 ++ search/groups_0.html | 37 + search/groups_0.js | 4 + search/groups_1.html | 37 + search/groups_1.js | 4 + search/groups_2.html | 37 + search/groups_2.js | 4 + search/groups_3.html | 37 + search/groups_3.js | 4 + search/groups_4.html | 37 + search/groups_4.js | 4 + search/groups_5.html | 37 + search/groups_5.js | 4 + search/groups_6.html | 37 + search/groups_6.js | 4 + search/mag_sel.svg | 74 + search/nomatches.html | 13 + search/pages_0.html | 37 + search/pages_0.js | 4 + search/pages_1.html | 37 + search/pages_1.js | 4 + search/pages_2.html | 37 + search/pages_2.js | 4 + search/pages_3.html | 37 + search/pages_3.js | 4 + search/search.css | 257 +++ search/search.js | 816 ++++++++++ search/search_l.png | Bin 0 -> 567 bytes search/search_m.png | Bin 0 -> 158 bytes search/search_r.png | Bin 0 -> 553 bytes search/searchdata.js | 36 + search/variables_0.html | 37 + search/variables_0.js | 4 + search/variables_1.html | 37 + search/variables_1.js | 4 + search/variables_2.html | 37 + search/variables_2.js | 4 + search/variables_3.html | 37 + search/variables_3.js | 4 + search/variables_4.html | 37 + search/variables_4.js | 4 + search/variables_5.html | 37 + search/variables_5.js | 5 + search/variables_6.html | 37 + search/variables_6.js | 5 + search/variables_7.html | 37 + search/variables_7.js | 4 + splitbar.png | Bin 0 -> 314 bytes structarray__parent__info.html | 92 ++ structarray__unchanged.html | 92 ++ structblack__list__type.html | 89 + structcg__mount__point.html | 89 + structcg__mount__table__s.html | 124 ++ structcgroup.html | 117 ++ structcgroup__controller.html | 99 ++ structcgroup__dictionary.html | 96 ++ structcgroup__dictionary__item.html | 96 ++ structcgroup__dictionary__iterator.html | 90 ++ structcgroup__file__info.html | 173 ++ structcgroup__group__spec.html | 93 ++ structcgroup__mount__point.html | 122 ++ structcgroup__rule.html | 107 ++ structcgroup__rule__list.html | 92 ++ structcgroup__rules__data.html | 92 ++ structcgroup__stat.html | 93 ++ structcgroup__string__list.html | 96 ++ structcgroup__tree__handle.html | 89 + structcontrol__value.html | 95 ++ structcontroller__data.html | 156 ++ structext__cgroup__record.html | 92 ++ structparent__info.html | 89 + structunchanged__pid.html | 89 + sync_off.png | Bin 0 -> 853 bytes sync_on.png | Bin 0 -> 845 bytes tab_a.png | Bin 0 -> 142 bytes tab_b.png | Bin 0 -> 169 bytes tab_h.png | Bin 0 -> 177 bytes tab_s.png | Bin 0 -> 184 bytes tabs.css | 1 + tasks_8h_source.html | 152 ++ todo.html | 113 ++ tools-common_8h_source.html | 161 ++ 194 files changed, 15974 insertions(+) create mode 100644 annotated.html create mode 100644 bc_s.png create mode 100644 bdwn.png create mode 100644 cgrulesengd_8h_source.html create mode 100644 classes.html create mode 100644 closed.png create mode 100644 config_8h_source.html create mode 100644 dir_1563a38af0d3a5e4a6330d6d45e9792a.html create mode 100644 dir_2d094300ae4f2c55dd459b9ec7dd0ad3.html create mode 100644 dir_501cbd49daf77f17c121ad0979f93200.html create mode 100644 dir_66a7763e2a9b96033a682558820d533e.html create mode 100644 dir_68267d1309a1af8e8297ef4c3efbcdba.html create mode 100644 dir_bab0433f19b0a5661c5e0a15547f54b2.html create mode 100644 dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 dir_ea91a2a72b7cbbf988d2bd2cd1d23e49.html create mode 100644 doc.png create mode 100644 doxygen.css create mode 100644 doxygen.svg create mode 100644 dynsections.js create mode 100644 error_8h_source.html create mode 100644 files.html create mode 100644 folderclosed.png create mode 100644 folderopen.png create mode 100644 functions.html create mode 100644 functions_vars.html create mode 100644 group__group__config.html create mode 100644 group__group__errors.html create mode 100644 group__group__groups.html create mode 100644 group__group__init.html create mode 100644 group__group__iterators.html create mode 100644 group__group__log.html create mode 100644 group__group__tasks.html create mode 100644 groups_8h_source.html create mode 100644 index.html create mode 100644 init_8h_source.html create mode 100644 iterators_8h_source.html create mode 100644 jquery.js create mode 100644 libcgroup-internal_8h_source.html create mode 100644 libcgroup_8h_source.html create mode 100644 log_8h_source.html create mode 100644 md_CONTRIBUTING.html create mode 100644 md_README.html create mode 100644 menu.js create mode 100644 menudata.js create mode 100644 modules.html create mode 100644 nav_f.png create mode 100644 nav_g.png create mode 100644 nav_h.png create mode 100644 open.png create mode 100644 pages.html create mode 100644 search/all_0.html create mode 100644 search/all_0.js create mode 100644 search/all_1.html create mode 100644 search/all_1.js create mode 100644 search/all_10.html create mode 100644 search/all_10.js create mode 100644 search/all_11.html create mode 100644 search/all_11.js create mode 100644 search/all_12.html create mode 100644 search/all_12.js create mode 100644 search/all_13.html create mode 100644 search/all_13.js create mode 100644 search/all_14.html create mode 100644 search/all_14.js create mode 100644 search/all_2.html create mode 100644 search/all_2.js create mode 100644 search/all_3.html create mode 100644 search/all_3.js create mode 100644 search/all_4.html create mode 100644 search/all_4.js create mode 100644 search/all_5.html create mode 100644 search/all_5.js create mode 100644 search/all_6.html create mode 100644 search/all_6.js create mode 100644 search/all_7.html create mode 100644 search/all_7.js create mode 100644 search/all_8.html create mode 100644 search/all_8.js create mode 100644 search/all_9.html create mode 100644 search/all_9.js create mode 100644 search/all_a.html create mode 100644 search/all_a.js create mode 100644 search/all_b.html create mode 100644 search/all_b.js create mode 100644 search/all_c.html create mode 100644 search/all_c.js create mode 100644 search/all_d.html create mode 100644 search/all_d.js create mode 100644 search/all_e.html create mode 100644 search/all_e.js create mode 100644 search/all_f.html create mode 100644 search/all_f.js create mode 100644 search/classes_0.html create mode 100644 search/classes_0.js create mode 100644 search/classes_1.html create mode 100644 search/classes_1.js create mode 100644 search/classes_2.html create mode 100644 search/classes_2.js create mode 100644 search/classes_3.html create mode 100644 search/classes_3.js create mode 100644 search/classes_4.html create mode 100644 search/classes_4.js create mode 100644 search/classes_5.html create mode 100644 search/classes_5.js create mode 100644 search/close.svg create mode 100644 search/enums_0.html create mode 100644 search/enums_0.js create mode 100644 search/enumvalues_0.html create mode 100644 search/enumvalues_0.js create mode 100644 search/enumvalues_1.html create mode 100644 search/enumvalues_1.js create mode 100644 search/functions_0.html create mode 100644 search/functions_0.js create mode 100644 search/groups_0.html create mode 100644 search/groups_0.js create mode 100644 search/groups_1.html create mode 100644 search/groups_1.js create mode 100644 search/groups_2.html create mode 100644 search/groups_2.js create mode 100644 search/groups_3.html create mode 100644 search/groups_3.js create mode 100644 search/groups_4.html create mode 100644 search/groups_4.js create mode 100644 search/groups_5.html create mode 100644 search/groups_5.js create mode 100644 search/groups_6.html create mode 100644 search/groups_6.js create mode 100644 search/mag_sel.svg create mode 100644 search/nomatches.html create mode 100644 search/pages_0.html create mode 100644 search/pages_0.js create mode 100644 search/pages_1.html create mode 100644 search/pages_1.js create mode 100644 search/pages_2.html create mode 100644 search/pages_2.js create mode 100644 search/pages_3.html create mode 100644 search/pages_3.js create mode 100644 search/search.css create mode 100644 search/search.js create mode 100644 search/search_l.png create mode 100644 search/search_m.png create mode 100644 search/search_r.png create mode 100644 search/searchdata.js create mode 100644 search/variables_0.html create mode 100644 search/variables_0.js create mode 100644 search/variables_1.html create mode 100644 search/variables_1.js create mode 100644 search/variables_2.html create mode 100644 search/variables_2.js create mode 100644 search/variables_3.html create mode 100644 search/variables_3.js create mode 100644 search/variables_4.html create mode 100644 search/variables_4.js create mode 100644 search/variables_5.html create mode 100644 search/variables_5.js create mode 100644 search/variables_6.html create mode 100644 search/variables_6.js create mode 100644 search/variables_7.html create mode 100644 search/variables_7.js create mode 100644 splitbar.png create mode 100644 structarray__parent__info.html create mode 100644 structarray__unchanged.html create mode 100644 structblack__list__type.html create mode 100644 structcg__mount__point.html create mode 100644 structcg__mount__table__s.html create mode 100644 structcgroup.html create mode 100644 structcgroup__controller.html create mode 100644 structcgroup__dictionary.html create mode 100644 structcgroup__dictionary__item.html create mode 100644 structcgroup__dictionary__iterator.html create mode 100644 structcgroup__file__info.html create mode 100644 structcgroup__group__spec.html create mode 100644 structcgroup__mount__point.html create mode 100644 structcgroup__rule.html create mode 100644 structcgroup__rule__list.html create mode 100644 structcgroup__rules__data.html create mode 100644 structcgroup__stat.html create mode 100644 structcgroup__string__list.html create mode 100644 structcgroup__tree__handle.html create mode 100644 structcontrol__value.html create mode 100644 structcontroller__data.html create mode 100644 structext__cgroup__record.html create mode 100644 structparent__info.html create mode 100644 structunchanged__pid.html create mode 100644 sync_off.png create mode 100644 sync_on.png create mode 100644 tab_a.png create mode 100644 tab_b.png create mode 100644 tab_h.png create mode 100644 tab_s.png create mode 100644 tabs.css create mode 100644 tasks_8h_source.html create mode 100644 todo.html create mode 100644 tools-common_8h_source.html diff --git a/annotated.html b/annotated.html new file mode 100644 index 00000000..3a1dfcf9 --- /dev/null +++ b/annotated.html @@ -0,0 +1,102 @@ + + + + + + + +libcgroup: Data Structures + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Data Structures
+
+
+
Here are the data structures with brief descriptions:
+
+ + + + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zc-jG^0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 Hc-jL100001 diff --git a/bdwn.png b/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zc-rd>@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + + +libcgroup: src/daemon/cgrulesengd.h Source File + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
cgrulesengd.h
+
+
+
1 /*
+
2  * Copyright Red Hat Inc. 2008
+
3  *
+
4  * Author: Steve Olivieri <sjo@redhat.com>
+
5  *
+
6  * This program is free software; you can redistribute it and/or modify it
+
7  * under the terms of version 2.1 of the GNU Lesser General Public License
+
8  * as published by the Free Software Foundation.
+
9  *
+
10  * This program is distributed in the hope that it would be useful, but
+
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
+
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
13  */
+
14 
+
15 #ifndef _CGRULESENGD_H
+
16 #define _CGRULESENGD_H
+
17 
+
18 #include <features.h>
+
19 
+
20 #ifdef __cplusplus
+
21 extern "C" {
+
22 #endif
+
23 
+
24 #include "config.h"
+
25 #include "libcgroup.h"
+
26 #include <linux/connector.h>
+
27 #include <linux/cn_proc.h>
+
28 
+
29 #ifndef _GNU_SOURCE
+
30 #define _GNU_SOURCE
+
31 #endif
+
32 
+
33 #ifndef __USE_GNU
+
34 #define __USE_GNU
+
35 #endif
+
36 
+
37 /* The following ten macros are all for the Netlink code. */
+
38 #define SEND_MESSAGE_LEN (NLMSG_LENGTH(sizeof(struct cn_msg) + \
+
39  sizeof(enum proc_cn_mcast_op)))
+
40 #define RECV_MESSAGE_LEN (NLMSG_LENGTH(sizeof(struct cn_msg) + \
+
41  sizeof(struct proc_event)))
+
42 
+
43 #define SEND_MESSAGE_SIZE (NLMSG_SPACE(SEND_MESSAGE_LEN))
+
44 #define RECV_MESSAGE_SIZE (NLMSG_SPACE(RECV_MESSAGE_LEN))
+
45 
+
46 #define BUFF_SIZE (max(max(SEND_MESSAGE_SIZE, RECV_MESSAGE_SIZE), 1024))
+
47 #define MIN_RECV_SIZE (min(SEND_MESSAGE_SIZE, RECV_MESSAGE_SIZE))
+
48 
+
49 #define PROC_CN_MCAST_LISTEN (1)
+
50 #define PROC_CN_MCAST_IGNORE (2)
+
51 
+
59 void cgre_usage(FILE *fd, const char *msg, ...);
+
60 
+
69 void flog(int level, const char *msg, ...);
+
70 
+
79 int cgre_process_event(const struct proc_event *ev, const int type);
+
80 
+
88 int cgre_handle_message(struct cn_msg *cn_hdr);
+
89 
+
100 int cgre_start_daemon(const char *logp, const int logf,
+
101  const unsigned char daemon, const int logv);
+
102 
+
108 void cgre_flash_rules(int signum);
+
109 
+
115 void cgre_flash_templates(int signum);
+
116 
+
122 void cgre_catch_term(int signum);
+
123 
+
124 #ifdef __cplusplus
+
125 } /* extern "C" */
+
126 #endif
+
127 
+
128 #endif /* _CGRULESENGD_H */
+
129 
+
+ + + + diff --git a/classes.html b/classes.html new file mode 100644 index 00000000..20885cd3 --- /dev/null +++ b/classes.html @@ -0,0 +1,95 @@ + + + + + + + +libcgroup: Data Structure Index + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Data Structure Index
+
+ + + + + diff --git a/closed.png b/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zc-rd>@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 Hc-jL100001 diff --git a/config_8h_source.html b/config_8h_source.html new file mode 100644 index 00000000..4c821c80 --- /dev/null +++ b/config_8h_source.html @@ -0,0 +1,131 @@ + + + + + + + +libcgroup: include/libcgroup/config.h Source File + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
config.h
+
+
+
1 #ifndef _LIBCGROUP_CONFIG_H
+
2 #define _LIBCGROUP_CONFIG_H
+
3 
+
4 #ifndef _LIBCGROUP_H_INSIDE
+
5 #error "Only <libcgroup.h> should be included directly."
+
6 #endif
+
7 
+
8 #ifndef SWIG
+
9 #include <features.h>
+
10 #endif
+
11 
+
12 #ifdef __cplusplus
+
13 extern "C" {
+
14 #endif
+
15 
+
36 int cgroup_config_load_config(const char *pathname);
+
37 
+
41 int cgroup_unload_cgroups(void);
+
42 
+
58 int cgroup_config_unload_config(const char *pathname, int flags);
+
59 
+
76 int cgroup_config_set_default(struct cgroup *new_default);
+
77 
+
81 int cgroup_init_templates_cache(char *pathname);
+
82 
+
86 int cgroup_reload_cached_templates(char *pathname);
+
87 
+
94 int cgroup_load_templates_cache_from_files(int *file_index);
+
95 
+
101 struct cgroup_string_list;
+ +
103  struct cgroup_string_list *tmpl_files);
+
104 
+ +
126  struct cgroup *cgroup, char *template_name,
+
127  int flags);
+
128 
+
133 #ifdef __cplusplus
+
134 } /* extern "C" */
+
135 #endif
+
136 
+
137 #endif /*_LIBCGROUP_CONFIG_H*/
+
int cgroup_config_set_default(struct cgroup *new_default)
Definition: config.c:1470
+
int cgroup_init_templates_cache(char *pathname)
Definition: config.c:1557
+
int cgroup_config_create_template_group(struct cgroup *cgroup, char *template_name, int flags)
Definition: config.c:1778
+
int cgroup_unload_cgroups(void)
Definition: config.c:1382
+
int cgroup_reload_cached_templates(char *pathname)
Definition: config.c:1493
+
int cgroup_config_load_config(const char *pathname)
Definition: config.c:1121
+
int cgroup_load_templates_cache_from_files(int *file_index)
Definition: config.c:1697
+
void cgroup_templates_cache_set_source_files(struct cgroup_string_list *tmpl_files)
Definition: config.c:1624
+
int cgroup_config_unload_config(const char *pathname, int flags)
Definition: config.c:1256
+
Definition: tools-common.h:45
+
Definition: libcgroup-internal.h:106
+
+ + + + diff --git a/dir_1563a38af0d3a5e4a6330d6d45e9792a.html b/dir_1563a38af0d3a5e4a6330d6d45e9792a.html new file mode 100644 index 00000000..f464e92c --- /dev/null +++ b/dir_1563a38af0d3a5e4a6330d6d45e9792a.html @@ -0,0 +1,78 @@ + + + + + + + +libcgroup: src/tools Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tools Directory Reference
+
+
+
+ + + + diff --git a/dir_2d094300ae4f2c55dd459b9ec7dd0ad3.html b/dir_2d094300ae4f2c55dd459b9ec7dd0ad3.html new file mode 100644 index 00000000..b7a5d732 --- /dev/null +++ b/dir_2d094300ae4f2c55dd459b9ec7dd0ad3.html @@ -0,0 +1,78 @@ + + + + + + + +libcgroup: src/daemon Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
daemon Directory Reference
+
+
+
+ + + + diff --git a/dir_501cbd49daf77f17c121ad0979f93200.html b/dir_501cbd49daf77f17c121ad0979f93200.html new file mode 100644 index 00000000..5a11dce6 --- /dev/null +++ b/dir_501cbd49daf77f17c121ad0979f93200.html @@ -0,0 +1,78 @@ + + + + + + + +libcgroup: src/pam Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
pam Directory Reference
+
+
+
+ + + + diff --git a/dir_66a7763e2a9b96033a682558820d533e.html b/dir_66a7763e2a9b96033a682558820d533e.html new file mode 100644 index 00000000..c551cacb --- /dev/null +++ b/dir_66a7763e2a9b96033a682558820d533e.html @@ -0,0 +1,78 @@ + + + + + + + +libcgroup: include/libcgroup Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libcgroup Directory Reference
+
+
+
+ + + + diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 00000000..09d611c2 --- /dev/null +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,84 @@ + + + + + + + +libcgroup: src Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
src Directory Reference
+
+
+ + + + +

+Directories

directory  bindings
 
+
+ + + + diff --git a/dir_bab0433f19b0a5661c5e0a15547f54b2.html b/dir_bab0433f19b0a5661c5e0a15547f54b2.html new file mode 100644 index 00000000..f47ddbc1 --- /dev/null +++ b/dir_bab0433f19b0a5661c5e0a15547f54b2.html @@ -0,0 +1,78 @@ + + + + + + + +libcgroup: src/bindings/tests Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
tests Directory Reference
+
+
+
+ + + + diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 00000000..0e915887 --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,82 @@ + + + + + + + +libcgroup: include Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
include Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/dir_ea91a2a72b7cbbf988d2bd2cd1d23e49.html b/dir_ea91a2a72b7cbbf988d2bd2cd1d23e49.html new file mode 100644 index 00000000..e1c5c3ce --- /dev/null +++ b/dir_ea91a2a72b7cbbf988d2bd2cd1d23e49.html @@ -0,0 +1,82 @@ + + + + + + + +libcgroup: src/bindings Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
bindings Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff --git a/doc.png b/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zc-jH#0u}v7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 Hc-jL100001 diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 00000000..ffbff022 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,1793 @@ +/* The standard CSS for doxygen 1.9.1 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + border-right: 1px solid #A3B4D7; + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/doxygen.svg b/doxygen.svg new file mode 100644 index 00000000..d42dad52 --- /dev/null +++ b/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 00000000..3174bd7b --- /dev/null +++ b/dynsections.js @@ -0,0 +1,121 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +libcgroup: include/libcgroup/error.h Source File + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
error.h
+
+
+
1 #ifndef _LIBCGROUP_ERROR_H
+
2 #define _LIBCGROUP_ERROR_H
+
3 
+
4 #ifndef _LIBCGROUP_H_INSIDE
+
5 #error "Only <libcgroup.h> should be included directly."
+
6 #endif
+
7 
+
8 #ifndef SWIG
+
9 #include <features.h>
+
10 #endif
+
11 
+
12 #ifdef __cplusplus
+
13 extern "C" {
+
14 #endif
+
15 
+
31 enum {
+
32  ECGROUPNOTCOMPILED = 50000,
+
33  ECGROUPNOTMOUNTED,
+
34  ECGROUPNOTEXIST,
+
35  ECGROUPNOTCREATED,
+
36  ECGROUPSUBSYSNOTMOUNTED,
+
37  ECGROUPNOTOWNER,
+ +
40  /* This is the stock error. Default error. @todo really? */
+
41  ECGROUPNOTALLOWED,
+
42  ECGMAXVALUESEXCEEDED,
+
43  ECGCONTROLLEREXISTS,
+
44  ECGVALUEEXISTS,
+
45  ECGINVAL,
+
46  ECGCONTROLLERCREATEFAILED,
+
47  ECGFAIL,
+
48  ECGROUPNOTINITIALIZED,
+
49  ECGROUPVALUENOTEXIST,
+ +
56  ECGROUPNOTEQUAL,
+
57  ECGCONTROLLERNOTEQUAL,
+ + +
62  ECGMOUNTFAIL,
+
67  ECGEOF = 50023,
+ +
70  ECGNAMESPACEPATHS,
+
71  ECGNAMESPACECONTROLLER,
+
72  ECGMOUNTNAMESPACE,
+
73  ECGROUPUNSUPP,
+
74  ECGCANTSETVALUE,
+ +
77 };
+
78 
+
82 #define ECGRULESPARSEFAIL ECGROUPPARSEFAIL
+
83 
+
93 const char *cgroup_strerror(int code);
+
94 
+
98 int cgroup_get_last_errno(void);
+
99 
+
104 #ifdef __cplusplus
+
105 } /* extern "C" */
+
106 #endif
+
107 
+
108 #endif /* _LIBCGROUP_INIT_H */
+
int cgroup_get_last_errno(void)
Definition: api.c:4389
+
const char * cgroup_strerror(int code)
Definition: api.c:4378
+
@ ECGROUPMULTIMOUNTED
Definition: error.h:39
+
@ ECGEOF
Definition: error.h:67
+
@ ECGROUPNORULES
Definition: error.h:61
+
@ ECGOTHER
Definition: error.h:55
+
@ ECGNONEMPTY
Definition: error.h:76
+
@ ECGROUPPARSEFAIL
Definition: error.h:59
+
@ ECGCONFIGPARSEFAIL
Definition: error.h:69
+
+ + + + diff --git a/files.html b/files.html new file mode 100644 index 00000000..d33daade --- /dev/null +++ b/files.html @@ -0,0 +1,94 @@ + + + + + + + +libcgroup: File List + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + +
  include
  libcgroup
 config.h
 error.h
 groups.h
 init.h
 iterators.h
 log.h
 tasks.h
 libcgroup.h
  src
  daemon
 cgrulesengd.h
  tools
 tools-common.h
 libcgroup-internal.h
+
+
+ + + + diff --git a/folderclosed.png b/folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zc-jGI0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 Hc-jL100001 diff --git a/functions.html b/functions.html new file mode 100644 index 00000000..2ba5fc7c --- /dev/null +++ b/functions.html @@ -0,0 +1,105 @@ + + + + + + + +libcgroup: Data Fields + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+
+ + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 00000000..8c856dbc --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,105 @@ + + + + + + + +libcgroup: Data Fields - Variables + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/group__group__config.html b/group__group__config.html new file mode 100644 index 00000000..bcade428 --- /dev/null +++ b/group__group__config.html @@ -0,0 +1,342 @@ + + + + + + + +libcgroup: 5. Configuration + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
5. Configuration
+
+
+ + + + + + + + + + + + + + + + + + + + + +

Configuration file

libcgroup can mount and create control groups and set their parameters as specified in a configuration file.

+
Todo:
add this description?: These functions are mostly intended to be used by internal libcgroup tools, however they are fully supported and applications can benefit from them.
+
int cgroup_config_load_config (const char *pathname)
 
int cgroup_unload_cgroups (void)
 
int cgroup_config_unload_config (const char *pathname, int flags)
 
int cgroup_config_set_default (struct cgroup *new_default)
 
int cgroup_init_templates_cache (char *pathname)
 
int cgroup_reload_cached_templates (char *pathname)
 
int cgroup_load_templates_cache_from_files (int *file_index)
 
void cgroup_templates_cache_set_source_files (struct cgroup_string_list *tmpl_files)
 
int cgroup_config_create_template_group (struct cgroup *cgroup, char *template_name, int flags)
 
+

Detailed Description

+

Function Documentation

+ +

◆ cgroup_config_create_template_group()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_config_create_template_group (struct cgroupcgroup,
char * template_name,
int flags 
)
+
+

Physically create a new control group in kernel, based on given control group template and configuration file. If given template is not set in configuration file, then the procedure works create the control group using cgroup_create_cgroup() function

+

Templates are loaded using cgroup_load_templates_cache_from_files function, which must be preceded by cgroup_templates_cache_set_source_files call.

+

The flags can alter the behavior of this function: CGFLAG_USE_TEMPLATE_CACHE: Use cached templates instead of parsing the config file

+
Parameters
+ + + + + +
pathnameName of the configuration file with template definitions
cgroupWanted control group - contains substitute name and wanted controllers.
template_nameTemplate name used for cgroup setting
flagsBit flags to change the behavior
+
+
+ +
+
+ +

◆ cgroup_config_load_config()

+ +
+
+ + + + + + + + +
int cgroup_config_load_config (const char * pathname)
+
+

Load configuration file and mount and create control groups described there. See cgconfig.conf man page for format of the file.

Parameters
+ + +
pathnameName of the configuration file to load.
+
+
+ +
+
+ +

◆ cgroup_config_set_default()

+ +
+
+ + + + + + + + +
int cgroup_config_set_default (struct cgroupnew_default)
+
+

Sets default permissions of groups created by subsequent cgroup_config_load_config() calls. If a config file contains a 'default {}' section, the default permissions from the config file is then used.

+

Use cgroup_new_cgroup() to create a dummy group and cgroup_set_uid_gid() and cgroup_set_permissions() to set its permissions. Use NO_UID_GID instead of GID/UID and NO_PERMS instead of file/directory permissions to let kernel decide the default permissions where you don't want specific user and/or permissions. Kernel then uses current user/group and permissions from umask then.

+
Parameters
+ + +
new_defaultNew default permissions from this group are copied to libcgroup internal structures. I.e., this group can be freed immediatelly after this function returns.
+
+
+ +
+
+ +

◆ cgroup_config_unload_config()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_config_unload_config (const char * pathname,
int flags 
)
+
+

Delete all cgroups and unmount all mount points defined in specified config file.

+

The groups are either removed recursively or only the empty ones, based on given flags. Mount point are always umounted only if they are empty, regardless of any flags.

+

The groups are sorted before they are removed, so the removal of empty ones actually works (i.e. subgroups are removed first).

+
Parameters
+ + + +
pathnameName of the configuration file to unload.
flagsCombination of CGFLAG_DELETE_* flags, which indicate what and how to delete.
+
+
+ +
+
+ +

◆ cgroup_init_templates_cache()

+ +
+
+ + + + + + + + +
int cgroup_init_templates_cache (char * pathname)
+
+

Initializes the templates cache and load it from file pathname.

+

Initializes the templates cache.

Returns
0 on success, > 0 on error
+ +
+
+ +

◆ cgroup_load_templates_cache_from_files()

+ +
+
+ + + + + + + + +
int cgroup_load_templates_cache_from_files (int * file_index)
+
+

Load the templates cache from files. Before calling this function, cgroup_templates_cache_set_source_files has to be called first.

Parameters
+ + +
file_indexindex of file which was unable to be parsed
+
+
+
Returns
0 on success, > 0 on error
+ +
+
+ +

◆ cgroup_reload_cached_templates()

+ +
+
+ + + + + + + + +
int cgroup_reload_cached_templates (char * pathname)
+
+

Reloads the templates list from file pathname.

+

Reloads the templates list, using the given configuration file.

Returns
0 on success, > 0 on failure
+ +
+
+ +

◆ cgroup_templates_cache_set_source_files()

+ +
+
+ + + + + + + + +
void cgroup_templates_cache_set_source_files (struct cgroup_string_listtmpl_files)
+
+

Setting source files of templates. This function has to be called before any call of cgroup_load_templates_cache_from_files.

Parameters
+ + +
tmpl_files
+
+
+ +
+
+ +

◆ cgroup_unload_cgroups()

+ +
+
+ + + + + + + + +
int cgroup_unload_cgroups (void )
+
+

Delete all control groups and unmount all hierarchies.

+ +
+
+
+ + + + diff --git a/group__group__errors.html b/group__group__errors.html new file mode 100644 index 00000000..f14b75d5 --- /dev/null +++ b/group__group__errors.html @@ -0,0 +1,219 @@ + + + + + + + +libcgroup: 6. Error handling + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
6. Error handling
+
+
+ + + + + + + + + + + +

Error handling

Unless states otherwise in documentation of a function, all functions return int, which is zero (0) when the function succeeds, and positive number if the function fails.

+

The returned integer is one of the ECG* values described below. Value ECGOTHER means that the error was caused by underlying OS and the real cause can be found by calling cgroup_get_last_errno().

+
enum  {
+  ECGROUPNOTCOMPILED = 50000 +, ECGROUPNOTMOUNTED +, ECGROUPNOTEXIST +, ECGROUPNOTCREATED +,
+  ECGROUPSUBSYSNOTMOUNTED +, ECGROUPNOTOWNER +, ECGROUPMULTIMOUNTED +, ECGROUPNOTALLOWED +,
+  ECGMAXVALUESEXCEEDED +, ECGCONTROLLEREXISTS +, ECGVALUEEXISTS +, ECGINVAL +,
+  ECGCONTROLLERCREATEFAILED +, ECGFAIL +, ECGROUPNOTINITIALIZED +, ECGROUPVALUENOTEXIST +,
+  ECGOTHER +, ECGROUPNOTEQUAL +, ECGCONTROLLERNOTEQUAL +, ECGROUPPARSEFAIL +,
+  ECGROUPNORULES +, ECGMOUNTFAIL +, ECGEOF = 50023 +, ECGCONFIGPARSEFAIL +,
+  ECGNAMESPACEPATHS +, ECGNAMESPACECONTROLLER +, ECGMOUNTNAMESPACE +, ECGROUPUNSUPP +,
+  ECGCANTSETVALUE +, ECGNONEMPTY +
+ }
 
const char * cgroup_strerror (int code)
 
int cgroup_get_last_errno (void)
 
#define ECGRULESPARSEFAIL   ECGROUPPARSEFAIL
 
+

Detailed Description

+

Macro Definition Documentation

+ +

◆ ECGRULESPARSEFAIL

+ +
+
+ + + + +
#define ECGRULESPARSEFAIL   ECGROUPPARSEFAIL
+
+

Legacy definition of ECGRULESPARSEFAIL error code.

+ +
+
+

Enumeration Type Documentation

+ +

◆ anonymous enum

+ +
+
+ + + + +
anonymous enum
+
+ + + + + + + + +
Enumerator
ECGROUPMULTIMOUNTED 

Controllers bound to different mount points

+
ECGOTHER 

Represents error coming from other libraries like glibc. libcgroup users need to check cgroup_get_last_errno() upon encountering this error.

+
ECGROUPPARSEFAIL 

Failed to parse rules configuration file.

+
ECGROUPNORULES 

Rules list does not exist.

+
ECGEOF 

Not an real error, it just indicates that iterator has come to end of sequence and no more items are left.

+
ECGCONFIGPARSEFAIL 

Failed to parse config file (cgconfig.conf).

+
ECGNONEMPTY 

Removing of a group failed because it was not empty.

+
+ +
+
+

Function Documentation

+ +

◆ cgroup_get_last_errno()

+ +
+
+ + + + + + + + +
int cgroup_get_last_errno (void )
+
+

Return last errno, which caused ECGOTHER error.

+ +
+
+ +

◆ cgroup_strerror()

+ +
+
+ + + + + + + + +
const char* cgroup_strerror (int code)
+
+

Format error code to a human-readable English string. No internationalization is currently done. Returned pointer leads to libcgroup memory and must not be freed nor modified. The memory is rewritten by subsequent call to this function.

Parameters
+ + +
codeError code for which the corresponding error string is returned. When ECGOTHER is used, text with glibc's description of cgroup_get_last_errno() value is returned.
+
+
+ +
+
+
+ + + + diff --git a/group__group__groups.html b/group__group__groups.html new file mode 100644 index 00000000..6ca0eb53 --- /dev/null +++ b/group__group__groups.html @@ -0,0 +1,1611 @@ + + + + + + + +libcgroup: 2. Group manipulation API + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
2. Group manipulation API
+
+
+ + + + + + +

+Data Structures

struct  cgroup
 
struct  cgroup_controller
 
+ + + + + + + + + + + + + + + + + + +

Basic infrastructure

struct cgroup* is the heart of libcgroup API. The structure is opaque to applications, all access to the structure is through appropriate functions.

+

The most important information is that one struct cgroup* can represent zero, one or more real control groups in kernel. The struct cgroup* is identified by name of the group, which must be set by cgroup_new_cgroup(). Multiple controllers (aka subsystems) can be attached to one struct cgroup* using cgroup_add_controller(). These controllers can belong to different hierarchies.

+

This approach is different to the one in the Linux kernel - a control group must be part of exactly one hierarchy there. In libcgroup, a group can be part of multiple hierarchies, as long as the group name is the same.

+
Example:
Let there be following control groups:
cpu,cpuacct:/
+
cpu,cpuacct:/foo
+
cpu,cpuacct:/bar
+
freezer:/
+
freezer:/foo
+
I.e. there is cpu and cpuacct controller mounted together in one hierarchy, with foo and bar groups. In addition, freezer is mounted as separate hierarchy, with only one foo group.
+
Following code creates struct cgroup* structure, which represents one group cpu,cpuacct:/foo:
struct cgroup *foo = cgroup_new_cgroup("foo");
+ +
struct cgroup * cgroup_new_cgroup(const char *name)
Definition: wrapper.c:44
+
struct cgroup_controller * cgroup_add_controller(struct cgroup *cgroup, const char *name)
Definition: wrapper.c:56
+
Definition: libcgroup-internal.h:106
+
Now, you can call e.g. cgroup_delete_cgroup() and the group is deleted from the hierarchy. You can note that it's enough to add only one controller to the group to fully identify a group in cpu,cpuacct hierarchy.
+
Following code creates struct cgroup* structure, which represents two groups, cpu,cpuacct:/foo and freezer:/foo:
struct cgroup *foo = cgroup_new_cgroup("foo");
+ +
cgroup_add_controller(foo, "freezer");
+
Now, if you call e.g. cgroup_delete_cgroup(), the group gets deleted from both hierarchies.
+
Todo:
add some propaganda what's so great on this approach... I personally think it is broken and confusing (see TODOs below).
+

Following functions are provided to create/destroy various libcgroup structures. Please note that none of these functions actually create or delete a cgroup in kernel!

+
struct cgroupcgroup_new_cgroup (const char *name)
 
struct cgroup_controllercgroup_add_controller (struct cgroup *cgroup, const char *name)
 
int cgroup_add_all_controllers (struct cgroup *cgroup)
 
struct cgroup_controllercgroup_get_controller (struct cgroup *cgroup, const char *name)
 
void cgroup_free (struct cgroup **cgroup)
 
void cgroup_free_controllers (struct cgroup *cgroup)
 
#define NO_PERMS   (-1U)
 
#define NO_UID_GID   (-1U)
 
+ + + + + + + + + + + + +

Group manipulation API

Using following functions you can create and remove control groups and change their parameters.

Note
All access to kernel is through previously mounted cgroup filesystems. libcgroup does not mount/unmount anything for you.
+
int cgroup_create_cgroup (struct cgroup *cgroup, int ignore_ownership)
 
int cgroup_create_cgroup_from_parent (struct cgroup *cgroup, int ignore_ownership)
 
int cgroup_modify_cgroup (struct cgroup *cgroup)
 
int cgroup_delete_cgroup (struct cgroup *cgroup, int ignore_migration)
 
int cgroup_delete_cgroup_ext (struct cgroup *cgroup, int flags)
 
+ + + + + + + + + + + + + + + + +

Other functions

Helper functions to manipulate with control groups.

+
int cgroup_get_cgroup (struct cgroup *cgroup)
 
int cgroup_copy_cgroup (struct cgroup *dst, struct cgroup *src)
 
int cgroup_compare_cgroup (struct cgroup *cgroup_a, struct cgroup *cgroup_b)
 
int cgroup_compare_controllers (struct cgroup_controller *cgca, struct cgroup_controller *cgcb)
 
int cgroup_set_uid_gid (struct cgroup *cgroup, uid_t tasks_uid, gid_t tasks_gid, uid_t control_uid, gid_t control_gid)
 
int cgroup_get_uid_gid (struct cgroup *cgroup, uid_t *tasks_uid, gid_t *tasks_gid, uid_t *control_uid, gid_t *control_gid)
 
void cgroup_set_permissions (struct cgroup *cgroup, mode_t control_dperm, mode_t control_fperm, mode_t task_fperm)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Group parameters

These are functions can read or modify parameter of a group.

Note
All these functions read/write parameters to libcgorup internal structures. Use cgroup_get_cgroup() to load parameters from kernel to these internal structures and cgroup_modify_cgroup() or cgroup_create_cgroup() to write changes to kernel.
+
int cgroup_add_value_string (struct cgroup_controller *controller, const char *name, const char *value)
 
int cgroup_add_value_int64 (struct cgroup_controller *controller, const char *name, int64_t value)
 
int cgroup_add_value_uint64 (struct cgroup_controller *controller, const char *name, u_int64_t value)
 
int cgroup_add_value_bool (struct cgroup_controller *controller, const char *name, bool value)
 
int cgroup_get_value_string (struct cgroup_controller *controller, const char *name, char **value)
 
int cgroup_get_value_int64 (struct cgroup_controller *controller, const char *name, int64_t *value)
 
int cgroup_get_value_uint64 (struct cgroup_controller *controller, const char *name, u_int64_t *value)
 
int cgroup_get_value_bool (struct cgroup_controller *controller, const char *name, bool *value)
 
int cgroup_set_value_string (struct cgroup_controller *controller, const char *name, const char *value)
 
int cgroup_set_value_int64 (struct cgroup_controller *controller, const char *name, int64_t value)
 
int cgroup_set_value_uint64 (struct cgroup_controller *controller, const char *name, u_int64_t value)
 
int cgroup_set_value_bool (struct cgroup_controller *controller, const char *name, bool value)
 
int cgroup_get_value_name_count (struct cgroup_controller *controller)
 
char * cgroup_get_value_name (struct cgroup_controller *controller, int index)
 
int cgroup_get_procs (char *name, char *controller, pid_t **pids, int *size)
 
int cg_chmod_recursive (struct cgroup *cgroup, mode_t dir_mode, int dirm_change, mode_t file_mode, int filem_change)
 
char * cgroup_get_cgroup_name (struct cgroup *cgroup)
 
+

Detailed Description

+

Macro Definition Documentation

+ +

◆ NO_PERMS

+ +
+
+ + + + +
#define NO_PERMS   (-1U)
+
+

Uninitialized file/directory permissions used for task/control files.

+ +
+
+ +

◆ NO_UID_GID

+ +
+
+ + + + +
#define NO_UID_GID   (-1U)
+
+

Uninitialized UID/GID used for task/control files.

+ +
+
+

Function Documentation

+ +

◆ cg_chmod_recursive()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int cg_chmod_recursive (struct cgroupcgroup,
mode_t dir_mode,
int dirm_change,
mode_t file_mode,
int filem_change 
)
+
+

Change permission of files and directories of given group

Parameters
+ + + + + + +
cgroupThe cgroup which permissions should be changed
dir_modeThe permission mode of group directory
dirm_changeDenotes whether the directory change should be done
file_modeThe permission mode of group files
filem_changeDenotes whether the directory change should be done
+
+
+ +
+
+ +

◆ cgroup_add_all_controllers()

+ +
+
+ + + + + + + + +
int cgroup_add_all_controllers (struct cgroupcgroup)
+
+

Attach all mounted controllers to given cgroup. This function just modifies internal libcgroup structure, not the kernel control group.

+
Parameters
+ + +
cgroup
+
+
+
Returns
zero or error number
+ +
+
+ +

◆ cgroup_add_controller()

+ +
+
+ + + + + + + + + + + + + + + + + + +
struct cgroup_controller* cgroup_add_controller (struct cgroupcgroup,
const char * name 
)
+
+

Attach new controller to cgroup. This function just modifies internal libcgroup structure, not the kernel control group.

+
Parameters
+ + + +
cgroup
nameName of the controller, e.g. "freezer".
+
+
+
Returns
Created controller or NULL on error.
+ +
+
+ +

◆ cgroup_add_value_bool()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_add_value_bool (struct cgroup_controllercontroller,
const char * name,
bool value 
)
+
+

Add parameter and its value to internal libcgroup structures. Use cgroup_modify_cgroup() or cgroup_create_cgroup() to write it to kernel.

+
Parameters
+ + + + +
controller
nameName of the parameter.
value
+
+
+ +
+
+ +

◆ cgroup_add_value_int64()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_add_value_int64 (struct cgroup_controllercontroller,
const char * name,
int64_t value 
)
+
+

Add parameter and its value to internal libcgroup structures. Use cgroup_modify_cgroup() or cgroup_create_cgroup() to write it to kernel. Content of the value is copied to internal structures and is not needed after return from the function.

+
Parameters
+ + + + +
controller
nameName of the parameter.
value
+
+
+ +
+
+ +

◆ cgroup_add_value_string()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_add_value_string (struct cgroup_controllercontroller,
const char * name,
const char * value 
)
+
+

Add parameter and its value to internal libcgroup structures. Use cgroup_modify_cgroup() or cgroup_create_cgroup() to write it to kernel.

+
Parameters
+ + + + +
controller
nameName of the parameter.
value
+
+
+ +
+
+ +

◆ cgroup_add_value_uint64()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_add_value_uint64 (struct cgroup_controllercontroller,
const char * name,
u_int64_t value 
)
+
+

Add parameter and its value to internal libcgroup structures. Use cgroup_modify_cgroup() or cgroup_create_cgroup() to write it to kernel.

+
Parameters
+ + + + +
controller
nameName of the parameter.
value
+
+
+ +
+
+ +

◆ cgroup_compare_cgroup()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_compare_cgroup (struct cgroupcgroup_a,
struct cgroupcgroup_b 
)
+
+

Compare names, owners, controllers, parameters and values of two groups.

+
Parameters
+ + + +
cgroup_a
cgroup_b
+
+
+
Return values
+ + + + +
0if the groups are the same.
#ECGROUPNOTEQUALif the groups are not the same.
#ECGCONTROLLERNOTEQUALif the only difference are controllers, parameters or their values.
+
+
+ +
+
+ +

◆ cgroup_compare_controllers()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_compare_controllers (struct cgroup_controllercgca,
struct cgroup_controllercgcb 
)
+
+

Compare names, parameters and values of two controllers.

+
Parameters
+ + + +
cgca
cgcb
+
+
+
Return values
+ + + +
0if the controllers are the same.
#ECGCONTROLLERNOTEQUALif the controllers are not equal.
+
+
+ +
+
+ +

◆ cgroup_copy_cgroup()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_copy_cgroup (struct cgroupdst,
struct cgroupsrc 
)
+
+

Copy all controllers, their parameters and values. Group name, permissions and ownerships are not coppied. All existing controllers in the source group are discarded.

+
Parameters
+ + + +
dstDestination group.
srcSource group.
+
+
+

@dst: Destination control group @src: Source from which values will be copied to dst

+

Create a duplicate copy of src in dst. This will be useful for those who that intend to create new instances based on an existing control group

+ +
+
+ +

◆ cgroup_create_cgroup()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_create_cgroup (struct cgroupcgroup,
int ignore_ownership 
)
+
+

Physically create a control group in kernel. The group is created in all hierarchies, which cover controllers added by cgroup_add_controller(). All parameters set by cgroup_add_value_* functions are written. The created groups has owner which was set by cgroup_set_uid_gid() and permissions set by cgroup_set_permissions.

Parameters
+ + + +
cgroup
ignore_ownershipWhen nozero, all errors are ignored when setting owner of the group and/or its tasks file.
+
+
+
Todo:
what is ignore_ownership good for?
+
Return values
+ + +
#ECGROUPNOTEQUALif not all specified controller parameters were successfully set.
+
+
+

cgroup_create_cgroup creates a new control group. struct cgroup *cgroup: The control group to be created

+

returns 0 on success. We recommend calling cg_delete_cgroup if this routine fails. That should do the cleanup operation. If ECGCANTSETVALUE is returned, the group was created successfully but not all controller parameters were successfully set.

+ +
+
+ +

◆ cgroup_create_cgroup_from_parent()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_create_cgroup_from_parent (struct cgroupcgroup,
int ignore_ownership 
)
+
+

Physically create new control group in kernel, with all parameters and values copied from its parent group. The group is created in all hierarchies, where the parent group exists. I.e. following code creates subgroup in all hierarchies, because all of them have root (=parent) group.

struct cgroup *foo = cgroup_new_cgroup("foo");
+ +
int cgroup_create_cgroup_from_parent(struct cgroup *cgroup, int ignore_ownership)
Definition: api.c:2588
+
Todo:
what is this good for? Why the list of controllers added by cgroup_add_controller() is not used, like in cgroup_create_cgroup()? I can't crate subgroup of root group in just one hierarchy with this function!
+
Parameters
+ + + +
cgroupThe cgroup to create. Only it's name is used, everything else is discarded.
ignore_ownershipWhen nozero, all errors are ignored when setting owner of the group and/or its tasks file.
+
+
+
Todo:
what is ignore_ownership good for?
+
Return values
+ + +
#ECGROUPNOTEQUALif not all inherited controller parameters were successfully set (this is expected).
+
+
+

@cgroup: cgroup data structure to be filled with parent values and then passed down for creation @ignore_ownership: Ignore doing a chown on the newly created cgroup

Returns
0 on success, > 0 on failure. If ECGCANTSETVALUE is returned, the group was created successfully, but not all controller parameters were copied from the parent successfully; unfortunately, this is expected...
+ +
+
+ +

◆ cgroup_delete_cgroup()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_delete_cgroup (struct cgroupcgroup,
int ignore_migration 
)
+
+

Physically remove a control group from kernel. The group is removed from all hierarchies, which cover controllers added by cgroup_add_controller() or cgroup_get_cgroup(). All tasks inside the group are automatically moved to parent group.

+

The group being removed must be empty, i.e. without subgroups. Use cgroup_delete_cgroup_ext() for recursive delete.

+
Parameters
+ + + +
cgroup
ignore_migrationWhen nozero, all errors are ignored when migrating tasks from the group to the parent group.
+
+
+
Todo:
what is ignore_migration good for? rmdir() will fail if tasks were not moved.
+

cgroup_delete cgroup deletes a control group. struct cgroup *cgroup takes the group which is to be deleted.

+

returns 0 on success.

+ +
+
+ +

◆ cgroup_delete_cgroup_ext()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_delete_cgroup_ext (struct cgroupcgroup,
int flags 
)
+
+

Physically remove a control group from kernel. All tasks are automatically moved to parent group. If #CGFLAG_DELETE_IGNORE_MIGRATION flag is used, the errors that occurred during the task movement are ignored. #CGFLAG_DELETE_RECURSIVE flag specifies that all subgroups should be removed too. If root group is being removed with this flag specified, all subgroups are removed but the root group itself is left undeleted.

See also
cgroup_delete_flag.
+
Parameters
+ + + +
cgroup
flagsCombination of CGFLAG_DELETE_* flags, which indicate what and how to delete.
+
+
+ +
+
+ +

◆ cgroup_free()

+ +
+
+ + + + + + + + +
void cgroup_free (struct cgroup ** cgroup)
+
+

Free internal cgroup structure. This function frees also all controllers attached to the cgroup, including all parameters and their values.

Parameters
+ + +
cgroup
+
+
+ +
+
+ +

◆ cgroup_free_controllers()

+ +
+
+ + + + + + + + +
void cgroup_free_controllers (struct cgroupcgroup)
+
+

Free internal list of controllers from the group.

Todo:
should this function be public???
+
Parameters
+ + +
cgroup
+
+
+ +
+
+ +

◆ cgroup_get_cgroup()

+ +
+
+ + + + + + + + +
int cgroup_get_cgroup (struct cgroupcgroup)
+
+

Read all information regarding the group from kernel. Based on name of the group, list of controllers and all parameters and their values are read from all hierarchies, where a group with given name exists. All existing controllers are replaced. I.e. following code will fill root with controllers from all hierarchies, because the root group is available in all of them.

struct cgroup *root = cgroup_new_cgroup("/");
+ +
int cgroup_get_cgroup(struct cgroup *cgroup)
Definition: api.c:3141
+
Todo:
what is this function good for? Why is not considered only the list of controllers attached by cgroup_add_controller()? What owners will return cgroup_get_uid_gid() if the group is in multiple hierarchies, each with different owner of tasks file?
+
Parameters
+ + +
cgroupThe cgroup to load. Only it's name is used, everything else is replaced.
+
+
+ +
+
+ +

◆ cgroup_get_cgroup_name()

+ +
+
+ + + + + + + + +
char* cgroup_get_cgroup_name (struct cgroupcgroup)
+
+

Get the name of the cgroup from a given cgroup

Parameters
+ + +
cgroupThe cgroup whose name is needed
+
+
+ +
+
+ +

◆ cgroup_get_controller()

+ +
+
+ + + + + + + + + + + + + + + + + + +
struct cgroup_controller* cgroup_get_controller (struct cgroupcgroup,
const char * name 
)
+
+

Return appropriate controller from given group. The controller must be added before using cgroup_add_controller() or loaded from kernel using cgroup_get_cgroup().

Parameters
+ + + +
cgroup
nameName of the controller, e.g. "freezer".
+
+
+ +
+
+ +

◆ cgroup_get_procs()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_get_procs (char * name,
char * controller,
pid_t ** pids,
int * size 
)
+
+

Get the list of process in a cgroup. This list is guaranteed to be sorted. It is not necessary that it is unique.

Parameters
+ + + + + +
nameThe name of the cgroup
controllerThe name of the controller
pidsThe list of pids. Should be uninitialized when passed to the API. Should be freed by the caller using free.
sizeThe size of the pids array returned by the API.
+
+
+ +
+
+ +

◆ cgroup_get_uid_gid()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_get_uid_gid (struct cgroupcgroup,
uid_t * tasks_uid,
gid_t * tasks_gid,
uid_t * control_uid,
gid_t * control_gid 
)
+
+

Return owners of the group's tasks file and control files. The data is read from libcgroup internal cgroup structure, use cgroup_set_uid_gid() or cgroup_get_cgroup() to fill it.

+ +
+
+ +

◆ cgroup_get_value_bool()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_get_value_bool (struct cgroup_controllercontroller,
const char * name,
bool * value 
)
+
+

Read a parameter value from libcgroup internal structures. Use cgroup_get_cgroup() to fill these structures with data from kernel.

+
Parameters
+ + + + +
controller
nameName of the parameter.
value
+
+
+ +
+
+ +

◆ cgroup_get_value_int64()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_get_value_int64 (struct cgroup_controllercontroller,
const char * name,
int64_t * value 
)
+
+

Read a parameter value from libcgroup internal structures. Use cgroup_get_cgroup() to fill these structures with data from kernel.

+
Parameters
+ + + + +
controller
nameName of the parameter.
value
+
+
+ +
+
+ +

◆ cgroup_get_value_name()

+ +
+
+ + + + + + + + + + + + + + + + + + +
char* cgroup_get_value_name (struct cgroup_controllercontroller,
int index 
)
+
+

Return the name of parameter of controller at given index. The index goes from 0 to cgroup_get_value_name_count()-1. Use this function to list all parameter of the controller.

+
Note
The returned value is pointer to internal libcgroup structure, do not free it.
+
Parameters
+ + + +
controller
indexIndex of the parameter.
+
+
+
Returns
Name of the parameter.
+ +
+
+ +

◆ cgroup_get_value_name_count()

+ +
+
+ + + + + + + + +
int cgroup_get_value_name_count (struct cgroup_controllercontroller)
+
+

Return the number of variables for the specified controller in libcgroup internal structures. Use cgroup_get_cgroup() to fill these structures with data from kernel. Use this function together with cgroup_get_value_name() to list all parameters of a group.

+
Parameters
+ + +
controller
+
+
+
Returns
Count of the parameters or -1 on error.
+ +
+
+ +

◆ cgroup_get_value_string()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_get_value_string (struct cgroup_controllercontroller,
const char * name,
char ** value 
)
+
+

Read a parameter value from libcgroup internal structures. Use cgroup_get_cgroup() to fill these structures with data from kernel. It's up to the caller to free returned value.

+

This function works only for 'short' parameters. Use cgroup_read_stats_begin(), cgroup_read_stats_next() and cgroup_read_stats_end() to read stats parameter, which can be longer than libcgroup's internal buffers.

Todo:
rephrase, it's too vague... How big is the buffer actually?
+
Parameters
+ + + + +
controller
nameName of the parameter.
value
+
+
+ +
+
+ +

◆ cgroup_get_value_uint64()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_get_value_uint64 (struct cgroup_controllercontroller,
const char * name,
u_int64_t * value 
)
+
+

Read a parameter value from libcgroup internal structures. Use cgroup_get_cgroup() to fill these structures with data from kernel.

+
Parameters
+ + + + +
controller
nameName of the parameter.
value
+
+
+ +
+
+ +

◆ cgroup_modify_cgroup()

+ +
+
+ + + + + + + + +
int cgroup_modify_cgroup (struct cgroupcgroup)
+
+

Physically modify a control group in kernel. All parameters added by cgroup_add_value_ or cgroup_set_value_ are written. Currently it's not possible to change and owner of a group.

+
Parameters
+ + +
cgroupcgroup_modify_cgroup modifies the cgroup control files. struct cgroup *cgroup: The name will be the cgroup to be modified. The values will be the values to be modified, those not mentioned in the structure will not be modified.
+
+
+

The uids cannot be modified yet.

+

returns 0 on success.

+ +
+
+ +

◆ cgroup_new_cgroup()

+ +
+
+ + + + + + + + +
struct cgroup* cgroup_new_cgroup (const char * name)
+
+

Allocate new cgroup structure. This function itself does not create new control group in kernel, only new struct cgroup inside libcgroup!

+
Parameters
+ + +
namePath to the group, relative from root group. Use "/" or "." for the root group itself and "/foo/bar/baz" or "foo/bar/baz" for subgroups.
+
+
+
Todo:
suggest one preferred way, either "/foo" or "foo".
+
Returns
Created group or NULL on error.
+ +
+
+ +

◆ cgroup_set_permissions()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void cgroup_set_permissions (struct cgroupcgroup,
mode_t control_dperm,
mode_t control_fperm,
mode_t task_fperm 
)
+
+

Stores given file permissions of the group's control and tasks files into the cgroup data structure. Use NO_PERMS if permissions shouldn't be changed or a value which applicable to chmod(2). Please note that the given permissions are masked with the file owner's permissions. For example if a control file has permissions 640 and control_fperm is 471 the result will be 460.

Parameters
+ + + + + +
cgroup
control_dpermDirectory permission for the group.
control_fpermFile permission for the control files.
task_fpermFile permissions for task file.
+
+
+ +
+
+ +

◆ cgroup_set_uid_gid()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_set_uid_gid (struct cgroupcgroup,
uid_t tasks_uid,
gid_t tasks_gid,
uid_t control_uid,
gid_t control_gid 
)
+
+

Set owner of the group control files and the tasks file. This function modifies only libcgroup internal cgroup structure, use cgroup_create_cgroup() afterwards to create the group with given owners.

+
Parameters
+ + + + + + +
cgroup
tasks_uidUID of the owner of group's tasks file.
tasks_gidGID of the owner of group's tasks file.
control_uidUID of the owner of group's control files (i.e. parameters).
control_gidGID of the owner of group's control files (i.e. parameters).
+
+
+ +
+
+ +

◆ cgroup_set_value_bool()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_set_value_bool (struct cgroup_controllercontroller,
const char * name,
bool value 
)
+
+

Set a parameter value in libcgroup internal structures. Use cgroup_modify_cgroup() or cgroup_create_cgroup() to write it to kernel.

+
Parameters
+ + + + +
controller
nameName of the parameter.
value
+
+
+ +
+
+ +

◆ cgroup_set_value_int64()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_set_value_int64 (struct cgroup_controllercontroller,
const char * name,
int64_t value 
)
+
+

Set a parameter value in libcgroup internal structures. Use cgroup_modify_cgroup() or cgroup_create_cgroup() to write it to kernel. Content of the value is copied to internal structures and is not needed after return from the function.

+
Parameters
+ + + + +
controller
nameName of the parameter.
value
+
+
+ +
+
+ +

◆ cgroup_set_value_string()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_set_value_string (struct cgroup_controllercontroller,
const char * name,
const char * value 
)
+
+

Set a parameter value in libcgroup internal structures. Use cgroup_modify_cgroup() or cgroup_create_cgroup() to write it to kernel.

+
Parameters
+ + + + +
controller
nameName of the parameter.
value
+
+
+ +
+
+ +

◆ cgroup_set_value_uint64()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_set_value_uint64 (struct cgroup_controllercontroller,
const char * name,
u_int64_t value 
)
+
+

Set a parameter value in libcgroup internal structures. Use cgroup_modify_cgroup() or cgroup_create_cgroup() to write it to kernel.

+
Parameters
+ + + + +
controller
nameName of the parameter.
value
+
+
+ +
+
+
+ + + + diff --git a/group__group__init.html b/group__group__init.html new file mode 100644 index 00000000..406e9aa3 --- /dev/null +++ b/group__group__init.html @@ -0,0 +1,144 @@ + + + + + + + +libcgroup: 1. Initialization + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
1. Initialization
+
+
+ + + + + + + +

Initialization

Application must initialize libcgroup using cgroup_init() before any other libcgroup function can be called. libcgroup caches information about mounted hierarchies (just what's mounted where, not the control groups themselves) at this time. There is currently no way to refresh this cache, i.e. all subsequent mounts/remounts/unmounts are not reflected in this cache and libcgroup may produce unexpected results.

+

In addition, there is no way how to clean the cache on application exit.

+
Todo:
this is very bad... There should be at least way how to refresh the cache and/or an option to refresh it automatically (does kernel provide any indication, when a filesystem is mounted/unmounted?). Dtto the cleanup on exit.
+
int cgroup_init (void)
 
int cgroup_get_subsys_mount_point (const char *controller, char **mount_point)
 
+

Detailed Description

+

Function Documentation

+ +

◆ cgroup_get_subsys_mount_point()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_get_subsys_mount_point (const char * controller,
char ** mount_point 
)
+
+

Returns path where is mounted given controller. Applications should rely on libcgroup API and not call this function directly. Only the first mount point is returned, use cgroup_get_subsys_mount_point_begin(), cgroup_get_subsys_mount_point_next() and cgroup_get_subsys_mount_point_end() to get all of them.

Parameters
+ + + +
controllerName of the controller
mount_pointThe string where the mount point location is stored. Please note, the caller must free the mount_point.
+
+
+ +
+
+ +

◆ cgroup_init()

+ +
+
+ + + + + + + + +
int cgroup_init (void )
+
+

Initialize libcgroup. Information about mounted hierarchies are examined and cached internally (just what's mounted where, not the groups themselves).

+

If the cgroup logging was not set using cgroup_set_logger() or cgroup_set_default_logger() before calling cgroup_init(), the default logger is automatically set, logging CGROUP_LOG_ERROR messages.

+

cgroup_init(), initializes the MOUNT_POINT.

+

This code is theoretically thread safe now. Its not really tested so it can blow up. If does for you, please let us know with your test case and we can really make it thread safe.

+ +
+
+
+ + + + diff --git a/group__group__iterators.html b/group__group__iterators.html new file mode 100644 index 00000000..315af3ea --- /dev/null +++ b/group__group__iterators.html @@ -0,0 +1,1056 @@ + + + + + + + +libcgroup: 3. Iterators + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+ +
+
3. Iterators
+
+
+ + + + + + + + + + +

+Data Structures

struct  cgroup_file_info
 
struct  cgroup_stat
 
struct  cgroup_mount_point
 
struct  controller_data
 
+ + + + + + + + + + + + + + + + + + + + +

Walk through control group filesystem

This iterator returns all subgroups of given control group. It can be used to return all groups in given hierarchy, when root control group is provided.

+
enum  cgroup_walk_type { CGROUP_WALK_TYPE_PRE_DIR = 0x1 +, CGROUP_WALK_TYPE_POST_DIR = 0x2 + }
 
enum  cgroup_file_type { CGROUP_FILE_TYPE_FILE +, CGROUP_FILE_TYPE_DIR +, CGROUP_FILE_TYPE_OTHER + }
 
int cgroup_walk_tree_begin (const char *controller, const char *base_path, int depth, void **handle, struct cgroup_file_info *info, int *base_level)
 
int cgroup_walk_tree_next (int depth, void **handle, struct cgroup_file_info *info, int base_level)
 
int cgroup_walk_tree_end (void **handle)
 
int cgroup_walk_tree_set_flags (void **handle, int flags)
 
int cgroup_read_value_begin (const char *controller, const char *path, char *name, void **handle, char *buffer, int max)
 
int cgroup_read_value_next (void **handle, char *buffer, int max)
 
int cgroup_read_value_end (void **handle)
 
+ + + + + + + + + + +

Read group stats

libcgroup's cgroup_get_value_string() reads only relatively short parametrs of a group. Use following functions to read stats parameter, which can be quite long.

+
int cgroup_read_stats_begin (const char *controller, const char *path, void **handle, struct cgroup_stat *stat)
 
int cgroup_read_stats_next (void **handle, struct cgroup_stat *stat)
 
int cgroup_read_stats_end (void **handle)
 
#define CG_VALUE_MAX   100
 
+ + + + + + + + +

List all tasks in a group

Use following functions to read tasks file of a group.

+
int cgroup_get_task_begin (const char *cgroup, const char *controller, void **handle, pid_t *pid)
 
int cgroup_get_task_next (void **handle, pid_t *pid)
 
int cgroup_get_task_end (void **handle)
 
+ + + + + + + + +

List mounted controllers

Use following function to list mounted controllers and to see, how they are mounted together in hierarchies. Use cgroup_get_all_controller_begin() (see later) to list all controllers, including those which are not mounted.

+
int cgroup_get_controller_begin (void **handle, struct cgroup_mount_point *info)
 
int cgroup_get_controller_next (void **handle, struct cgroup_mount_point *info)
 
int cgroup_get_controller_end (void **handle)
 
+ + + + + + + + +

List all controllers

Use following functions to list all controllers, including those which are not mounted. The controllers are returned in the same order as in /proc/cgroups file, i.e. mostly random.

+
int cgroup_get_all_controller_begin (void **handle, struct controller_data *info)
 
int cgroup_get_all_controller_next (void **handle, struct controller_data *info)
 
int cgroup_get_all_controller_end (void **handle)
 
+ + + + + + + + +

List all mount points of a controller.

Use following functions to list all mount points of a hierarchy with given controller.

+
int cgroup_get_subsys_mount_point_begin (const char *controller, void **handle, char *path)
 
int cgroup_get_subsys_mount_point_next (void **handle, char *path)
 
int cgroup_get_subsys_mount_point_end (void **handle)
 
+

Detailed Description

+

So-called iterators are a code pattern to retrieve various data from libcgroup in distinct chunks, for example when an application needs to read list of groups in a hierarchy, it uses iterator to get one group at a time. Iterator is opaque to the application, the application sees only void* handle pointer, which is managed internally by libcgroup. Each iterator provides at least these functions:

    +
  • int iterator_name_begin(void **handle, my_type *item)
      +
    • Initialize the iterator, store pointer to it into the handle.
    • +
    • Return the first element in the iterator, let's say it's my_type.
    • +
    • Return 0, if the operation succeeded.
    • +
    • Return ECGEOF, if the operation succeeded, but the iterator is empty. The value of item is undefined in this case.
    • +
    • Return any other error code on error.
    • +
    +
  • +
  • int iterator_name_next(void **handle, my_type *item)
      +
    • Advance to next element in the iterator and return it.
    • +
    • Return 0, if the operation succeeded.
    • +
    • Return ECGEOF, if there is no item to advance to, i.e. the iterator is already at its end. The value of item is undefined in this case.
    • +
    • Return any other error code on error.
    • +
    +
  • +
  • void iterator_name_end(void **handle)

      +
    • Free any data associated with the iterator. This function must be called even when iterator_name_begin() fails.
    • +
    +
    Todo:
    not all iterators follow this pattern, e.g. cgroup_walk_tree_begin() can result both in a state that cgroup_walk_tree_end() is not needed and will sigsegv and in a state that cgroup_walk_tree_end() is needed to free allocated memory. Complete review is needed!
    +
    Example of iterator usage:
    void *handle; // our iterator handle
    +
    my_type item; // the data returned by the iterator
    +
    int ret;
    +
    ret = iterator_name_begin(&handle, &item);
    +
    while (ret == 0) {
    +
    // process the item here
    +
    ret = iterator_name_begin(&handle, &item);
    +
    }
    +
    if (ret != ECGEOF) {
    +
    // process the error here
    +
    }
    +
    iterator_name_end(&handle);
    +
    @ ECGEOF
    Definition: error.h:67
    +
    +
  • +
+

Macro Definition Documentation

+ +

◆ CG_VALUE_MAX

+ +
+
+ + + + +
#define CG_VALUE_MAX   100
+
+

Maximum length of a value in stats file.

+ +
+
+

Enumeration Type Documentation

+ +

◆ cgroup_file_type

+ +
+
+ + + + +
enum cgroup_file_type
+
+

Type of returned entity.

+ + + + +
Enumerator
CGROUP_FILE_TYPE_FILE 

File.

+
CGROUP_FILE_TYPE_DIR 

Directory.

+
CGROUP_FILE_TYPE_OTHER 

Directory.

Todo:
really?
+
+ +
+
+ +

◆ cgroup_walk_type

+ +
+
+ + + + +
enum cgroup_walk_type
+
+

Type of the walk.

+ + + +
Enumerator
CGROUP_WALK_TYPE_PRE_DIR 

Pre-order directory walk, return a directory first and then its subdirectories. E.g. directories would be returned in this order:

/
+
/group
+
/group/subgroup1
+
/group/subgroup1/subsubgroup
+
/group/subgroup2
+
CGROUP_WALK_TYPE_POST_DIR 

Post-order directory walk, return subdirectories of a directory first and then the directory itself. E.g. directories would be returned in this order:

/group/subgroup1/subsubgroup
+
/group/subgroup1
+
/group/subgroup2
+
/group
+
/
+
+ +
+
+

Function Documentation

+ +

◆ cgroup_get_all_controller_begin()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_get_all_controller_begin (void ** handle,
struct controller_datainfo 
)
+
+

Read the first of controllers from /proc/cgroups.

Parameters
+ + + +
handleHandle to be used for iteration.
infoThe structure which will be filled with controller data.
+
+
+ +
+
+ +

◆ cgroup_get_all_controller_end()

+ +
+
+ + + + + + + + +
int cgroup_get_all_controller_end (void ** handle)
+
+

Release the iterator

+ +
+
+ +

◆ cgroup_get_all_controller_next()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_get_all_controller_next (void ** handle,
struct controller_datainfo 
)
+
+

Read next controllers from /proc/cgroups.

Parameters
+ + + +
handleHandle to be used for iteration.
infoThe structure which will be filled with controller data.
+
+
+ +
+
+ +

◆ cgroup_get_controller_begin()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_get_controller_begin (void ** handle,
struct cgroup_mount_pointinfo 
)
+
+

Read the mount table to give a list where each controller is mounted.

Parameters
+ + + +
handleHandle to be used for iteration.
infoThe variable where the path to the controller is stored.
+
+
+
Returns
ECGEOF when no controllers are mounted.
+ +
+
+ +

◆ cgroup_get_controller_end()

+ +
+
+ + + + + + + + +
int cgroup_get_controller_end (void ** handle)
+
+

Release the iterator.

+ +
+
+ +

◆ cgroup_get_controller_next()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_get_controller_next (void ** handle,
struct cgroup_mount_pointinfo 
)
+
+

Read the next mounted controller. While walking through the mount table, the controllers are returned in order of their mount points, i.e. controllers mounted together in one hierarchy are returned next to each other.

Parameters
+ + + +
handleHandle to be used for iteration.
infoThe variable where the path to the controller is stored.
+
+
+
Returns
ECGEOF when all controllers were already returned.
+ +
+
+ +

◆ cgroup_get_subsys_mount_point_begin()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_get_subsys_mount_point_begin (const char * controller,
void ** handle,
char * path 
)
+
+

Read the first mount point of the hierarchy with given controller. The first is the same as the mount point returned by cgroup_get_subsys_mount_point().

Parameters
+ + + + +
handleHandle to be used for iteration.
controllerController name.
pathBuffer to fill the path into. The buffer must be at least FILENAME_MAX characters long.
+
+
+ +
+
+ +

◆ cgroup_get_subsys_mount_point_end()

+ +
+
+ + + + + + + + +
int cgroup_get_subsys_mount_point_end (void ** handle)
+
+

Release the iterator.

+ +
+
+ +

◆ cgroup_get_subsys_mount_point_next()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_get_subsys_mount_point_next (void ** handle,
char * path 
)
+
+

Read next mount point of the hierarchy with given controller.

Parameters
+ + + +
handleHandle to be used for iteration.
pathBuffer to fill the path into. The buffer must be at least FILENAME_MAX characters long.
+
+
+ +
+
+ +

◆ cgroup_get_task_begin()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_get_task_begin (const char * cgroup,
const char * controller,
void ** handle,
pid_t * pid 
)
+
+

Read the tasks file to get the list of tasks in a cgroup.

Parameters
+ + + + + +
cgroupName of the cgroup.
controllerName of the cgroup subsystem.
handleHandle to be used in the iteration.
pidThe pid read from the tasks file.
+
+
+
Returns
ECGEOF when the group does not contain any tasks.
+ +
+
+ +

◆ cgroup_get_task_end()

+ +
+
+ + + + + + + + +
int cgroup_get_task_end (void ** handle)
+
+

Release the iterator.

+ +
+
+ +

◆ cgroup_get_task_next()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_get_task_next (void ** handle,
pid_t * pid 
)
+
+

Read the next task value.

Parameters
+ + + +
handleThe handle used for iterating.
pidThe variable where the value will be stored.
+
+
+
Returns
ECGEOF when the iterator finishes getting the list of tasks.
+ +
+
+ +

◆ cgroup_read_stats_begin()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_read_stats_begin (const char * controller,
const char * path,
void ** handle,
struct cgroup_statstat 
)
+
+

Read the statistics values (= stats parameter) for the specified controller and control group. One line is returned per cgroup_read_stats_begin() and cgroup_read_stats_next() call.

Parameters
+ + + + + +
controllerName of the controller for which stats are requested.
pathPath to control group, relative to hierarchy root.
handleHandle to be used during iteration.
statReturned first item in the stats file.
+
+
+
Returns
ECGEOF when the stats file is empty.
+ +
+
+ +

◆ cgroup_read_stats_end()

+ +
+
+ + + + + + + + +
int cgroup_read_stats_end (void ** handle)
+
+

Release the iterator.

+ +
+
+ +

◆ cgroup_read_stats_next()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_read_stats_next (void ** handle,
struct cgroup_statstat 
)
+
+

Read the next stat value.

Parameters
+ + + +
handleHandle to be used during iteration.
statReturned next item in the stats file.
+
+
+
Returns
ECGEOF when the iterator finishes getting the list of stats.
+ +
+
+ +

◆ cgroup_read_value_begin()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_read_value_begin (const char * controller,
const char * path,
char * name,
void ** handle,
char * buffer,
int max 
)
+
+

Read the value of the given variable for the specified controller and control group. The value is read up to newline character or at most max-1 characters, whichever comes first (i.e. similar to fgets()).

Parameters
+ + + + + + + +
controllerName of the controller for which stats are requested.
pathPath to control group, relative to hierarchy root.
nameis variable name.
handleHandle to be used during iteration.
bufferBuffer to read the value into. The buffer is always zero-terminated.
maxMaximal lenght of the buffer
+
+
+
Returns
ECGEOF when the stats file is empty.
+ +
+
+ +

◆ cgroup_read_value_end()

+ +
+
+ + + + + + + + +
int cgroup_read_value_end (void ** handle)
+
+

Release the iterator.

+ +
+
+ +

◆ cgroup_read_value_next()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_read_value_next (void ** handle,
char * buffer,
int max 
)
+
+

Read the next string from the given variable handle which is generated by cgroup_read_stats_begin() function. the value is read up to newline character or at most max-1 characters, whichever comes first (i.e. similar to fgets()) per cgroup_read_stats_next() call

Parameters
+ + + + + +
handleHandle to be used during iteration.
datareturned the string.
bufferBuffer to read the value into. The buffer is always zero-terminated.
maxMaximal lenght of the buffer
+
+
+
Returns
ECGEOF when the iterator finishes getting the list of stats.
+ +
+
+ +

◆ cgroup_walk_tree_begin()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_walk_tree_begin (const char * controller,
const char * base_path,
int depth,
void ** handle,
struct cgroup_file_infoinfo,
int * base_level 
)
+
+

Walk through the directory tree for the specified controller. The directory representing base_path is returned in info. Use cgroup_walk_tree_set_flags() to specify, in which order should be next directories returned.

Parameters
+ + + + + + + +
controllerName of the controller, for which we want to walk the directory tree.
base_pathBegin walking from this path. Use "/" to walk through full hierarchy.
depthThe maximum depth to which the function should walk, 0 implies all the way down.
handleHandle to be used during iteration.
infoInfo filled and returned about directory information.
base_levelOpaque integer which you must pass to subsequent cgroup_walk_tree_next.
+
+
+
Todo:
why base_level is not hidden in **handle?
+
Returns
ECGEOF when there is no node.
+ +
+
+ +

◆ cgroup_walk_tree_end()

+ +
+
+ + + + + + + + +
int cgroup_walk_tree_end (void ** handle)
+
+

Release the iterator.

+ +
+
+ +

◆ cgroup_walk_tree_next()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_walk_tree_next (int depth,
void ** handle,
struct cgroup_file_infoinfo,
int base_level 
)
+
+

Get the next directory in the walk.

Parameters
+ + + + + +
depthThe maximum depth to which the function should walk, 0 implies all the way down.
handleHandle to be used during iteration.
infoInfo filled and returned about the next directory.
base_levelValue of base_level returned by cgroup_walk_tree_begin().
+
+
+
Returns
ECGEOF when we are done walking through the nodes.
+ +
+
+ +

◆ cgroup_walk_tree_set_flags()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_walk_tree_set_flags (void ** handle,
int flags 
)
+
+

Set the flags for walk_tree. Currently available flags are in cgroup_walk_type enum.

Parameters
+ + + +
handleHandle of the iterator.
flags
+
+
+ +
+
+
+ + + + diff --git a/group__group__log.html b/group__group__log.html new file mode 100644 index 00000000..e1fb8cde --- /dev/null +++ b/group__group__log.html @@ -0,0 +1,297 @@ + + + + + + + +libcgroup: 7. Logging + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
7. Logging
+
+
+ + + + + + + + + + + + + + + + + +

Logging

Libcgroup allows applications to register a callback function which libcgroup will call when it wants to log something. Each log message has associated a log level. As described in previous chapter, most libcgroup functions return an error code, which described root cause of the failure and log messages might provide further details about these failures and other notable events.

+
The logging callback can be set at any time, but setting the callback before any other libcgroup function (including cgroup_init()) is highly recommended. If no logger is set before cgroup_init() is called, default logger is automatically set, logging CGROUP_LOG_ERROR messages to stdout.
+
Setting log level
Some of the functions below set the log level as integer. Application can set directly a value of enum cgroup_log_level or use value -1 to set the log level automatically. In this case, libcgroup inspects environment variable CGROUP_LOGLEVEL if it is set and contains any of these values: ERROR, WARNING, INFO, DEBUG or integer number representing value from enum cgroup_log_level. If CGROUP_LOGLEVEL is not set or its value is not valid, CGROUP_LOG_ERROR is set as default log level.
+
Example:
Following short example shows custom libcgroup logger sending all log messages to stderr:
static void my_logger(void *userdata, int level, const char *fmt, va_list ap)
+
{
+
vfprintf(stderr, fmt, ap);
+
}
+
+
int main(int argc, char **argv)
+
{
+
int ret;
+
+
cgroup_set_logger(my_logger, -1, NULL);
+
ret = cgroup_init();
+
if (ret) {
+
...
+
}
+
...
+
int cgroup_init(void)
Definition: api.c:1271
+
void cgroup_set_logger(cgroup_logger_callback logger, int loglevel, void *userdata)
Definition: log.c:48
+
+
enum  cgroup_log_level { CGROUP_LOG_ERROR = 1 +, CGROUP_LOG_WARNING +, CGROUP_LOG_INFO +, CGROUP_LOG_DEBUG + }
 
+typedef void(* cgroup_logger_callback) (void *userdata, int level, const char *fmt, va_list ap)
 
void cgroup_set_logger (cgroup_logger_callback logger, int loglevel, void *userdata)
 
void cgroup_set_default_logger (int loglevel)
 
void cgroup_set_loglevel (int loglevel)
 
void cgroup_log (int loglevel, const char *fmt,...)
 
int cgroup_parse_log_level_str (const char *levelstr)
 
+

Detailed Description

+

Enumeration Type Documentation

+ +

◆ cgroup_log_level

+ +
+
+ + + + +
enum cgroup_log_level
+
+

Level of importance of a log message.

+ + + + + +
Enumerator
CGROUP_LOG_ERROR 

Something serious happened and libcgroup failed to perform requested operation.

+
CGROUP_LOG_WARNING 

Something bad happened but libcgroup recovered from the error.

+
CGROUP_LOG_INFO 

Something interesting happened and the message might be useful to the user.

+
CGROUP_LOG_DEBUG 

Debugging messages useful to libcgroup developers.

+
+ +
+
+

Function Documentation

+ +

◆ cgroup_log()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void cgroup_log (int loglevel,
const char * fmt,
 ... 
)
+
+

Libcgroup log function. This is for applications which are too lazy to set up their own complex logging and miss-use libcgroup for that purpose. I.e. this function should be used only by simple command-line tools. This logging automatically benefits from CGROUP_LOGLEVEL env. variable.

+ +
+
+ +

◆ cgroup_parse_log_level_str()

+ +
+
+ + + + + + + + +
int cgroup_parse_log_level_str (const char * levelstr)
+
+

Parse levelstr string for information about desired loglevel. The levelstr is usually a value of the CGROUP_LOGLEVEL environment variable.

Parameters
+ + +
levelstrString containing desired loglevel.
+
+
+ +
+
+ +

◆ cgroup_set_default_logger()

+ +
+
+ + + + + + + + +
void cgroup_set_default_logger (int loglevel)
+
+

Set libcgroup logging to stdout. All messages with the given loglevel or below will be sent to standard output. Previous logger set by cgroup_set_logger() is replaced.

+
Parameters
+ + +
loglevelThe log level. Use value -1 to automatically discover the level from CGROUP_LOGLEVEL environment variable.
+
+
+ +
+
+ +

◆ cgroup_set_logger()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void cgroup_set_logger (cgroup_logger_callback logger,
int loglevel,
void * userdata 
)
+
+

Set libcgroup logging callback. All log messages with equal or lower log level will be sent to the application's callback. There can be only one callback logger set, the previous callback is replaced with the new one by calling this function. Use NULL as the logger callback to completely disable libcgroup logging.

+
Parameters
+ + + + +
loggerThe callback.
loglevelThe log level. Use value -1 to automatically discover the level from CGROUP_LOGLEVEL environment variable.
userdataApplication's data which will be provided back to the callback.
+
+
+ +
+
+ +

◆ cgroup_set_loglevel()

+ +
+
+ + + + + + + + +
void cgroup_set_loglevel (int loglevel)
+
+

Change current loglevel.

Parameters
+ + +
loglevelThe log level. Use value -1 to automatically discover the level from CGROUP_LOGLEVEL environment variable.
+
+
+ +
+
+
+ + + + diff --git a/group__group__tasks.html b/group__group__tasks.html new file mode 100644 index 00000000..837b581a --- /dev/null +++ b/group__group__tasks.html @@ -0,0 +1,555 @@ + + + + + + + +libcgroup: 4. Manipulation with tasks + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
4. Manipulation with tasks
+
+
+ + + + + + + + + + + +

Simple task assignment

Applications can use following functions to simply put a task into given control group and find a groups where given tasks is.

+
int cgroup_attach_task (struct cgroup *cgroup)
 
int cgroup_attach_task_pid (struct cgroup *cgroup, pid_t tid)
 
int cgroup_change_cgroup_path (const char *path, pid_t pid, const char *const controllers[])
 
int cgroup_get_current_controller_path (pid_t pid, const char *controller, char **current_path)
 
+ + + + + + + + +

Rules

libcgroup can move tasks to control groups using simple rules, loaded from configuration file. See cgrules.conf man page to see format of the file. Following functions can be used to load these rules from a file.

+
int cgroup_init_rules_cache (void)
 
int cgroup_reload_cached_rules (void)
 
void cgroup_print_rules_config (FILE *fp)
 
+ + + + + + + + + + +

Rule based task assignment

libcgroup can move tasks to control groups using simple rules, loaded from configuration file. See cgrules.conf man page to see format of the file. Applications can move tasks to control groups based on these rules using following functions.

+
int cgroup_change_all_cgroups (void)
 
int cgroup_change_cgroup_flags (uid_t uid, gid_t gid, const char *procname, pid_t pid, int flags)
 
int cgroup_change_cgroup_uid_gid_flags (uid_t uid, gid_t gid, pid_t pid, int flags)
 
int cgroup_change_cgroup_uid_gid (uid_t uid, gid_t gid, pid_t pid)
 
+ + + + +

Communication with cgrulesengd daemon

Users can use cgrulesengd daemon to move tasks to groups based on the rules automatically when they change their UID, GID or executable name. The daemon allows tasks to be 'sticky', i.e. all rules are ignored for these tasks and the daemon never moves them.

+
int cgroup_register_unchanged_process (pid_t pid, int flags)
 
+

Detailed Description

+

Function Documentation

+ +

◆ cgroup_attach_task()

+ +
+
+ + + + + + + + +
int cgroup_attach_task (struct cgroupcgroup)
+
+

Move current task (=thread) to given control group.

Parameters
+ + +
cgroupDestination control group.
+
+
+

cgroup_attach_task is used to attach the current thread to a cgroup. struct cgroup *cgroup: The cgroup to assign the current thread to.

+

See cg_attach_task_pid for return values.

+ +
+
+ +

◆ cgroup_attach_task_pid()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_attach_task_pid (struct cgroupcgroup,
pid_t tid 
)
+
+

Move given task (=thread) to to given control group.

Parameters
+ + + +
cgroupDestination control group.
tidThe task to move.
+
+
+

cgroup_attach_task_pid is used to assign tasks to a cgroup. struct cgroup *cgroup: The cgroup to assign the thread to. pid_t tid: The thread to be assigned to the cgroup.

+

returns 0 on success. returns ECGROUPNOTOWNER if the caller does not have access to the cgroup. returns ECGROUPNOTALLOWED for other causes of failure.

+ +
+
+ +

◆ cgroup_change_all_cgroups()

+ +
+
+ + + + + + + + +
int cgroup_change_all_cgroups (void )
+
+

Changes the cgroup of all running PIDs based on the rules in the config file. If a rules exists for a PID, then the PID is placed in the correct group.

+

This function may be called after creating new control groups to move running PIDs into the newly created control groups.

Returns
0 on success, < 0 on error
+ +
+
+ +

◆ cgroup_change_cgroup_flags()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_change_cgroup_flags (uid_t uid,
gid_t gid,
const char * procname,
pid_t pid,
int flags 
)
+
+

Changes the cgroup of a program based on the rules in the config file. If a rule exists for the given UID, GID or PROCESS NAME, then the given PID is placed into the correct group. By default, this function parses the configuration file each time it is called.

+

The flags can alter the behavior of this function: CGFLAG_USECACHE: Use cached rules instead of parsing the config file CGFLAG_USE_TEMPLATE_CACHE: Use cached templates instead of parsing the config file

+

This function may NOT be thread safe.

Parameters
+ + + + + + +
uidThe UID to match.
gidThe GID to match.
procnameThe PROCESS NAME to match.
pidThe PID of the process to move.
flagsBit flags to change the behavior, as defined in enum #cgflags.
+
+
+
Todo:
Determine thread-safeness and fix of not safe.
+ +
+
+ +

◆ cgroup_change_cgroup_path()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_change_cgroup_path (const char * dest,
pid_t pid,
const char *const controllers[] 
)
+
+

Changes the cgroup of a task based on the path provided. In this case, the user must already know into which cgroup the task should be placed and no rules will be parsed.

+
Parameters
+ + + + +
pathName of the destination group.
pidThe task to move.
controllersList of controllers.
+
+
+
Todo:
should this function be really public?
+

Changes the cgroup of a program based on the path provided. In this case, the user must already know into which cgroup the task should be placed and no rules will be parsed.

+

returns 0 on success.

+ +
+
+ +

◆ cgroup_change_cgroup_uid_gid()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_change_cgroup_uid_gid (uid_t uid,
gid_t gid,
pid_t pid 
)
+
+

Provides backwards-compatibility with older versions of the API. This function is deprecated, and cgroup_change_cgroup_uid_gid_flags() should be used instead. In fact, this function simply calls the newer one with flags set to 0 (none).

Parameters
+ + + + +
uidThe UID to match.
gidThe GID to match.
pidThe PID of the process to move.
+
+
+

Provides backwards-compatibility with older versions of the API. This function is deprecated, and cgroup_change_cgroup_uid_gid_flags() should be used instead. In fact, this function simply calls the newer one with flags set to 0 (none).

Parameters
+ + + + +
uidThe UID to match
gidThe GID to match
pidThe PID of the process to move
+
+
+
Returns
0 on success, > 0 on error
+ +
+
+ +

◆ cgroup_change_cgroup_uid_gid_flags()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_change_cgroup_uid_gid_flags (uid_t uid,
gid_t gid,
pid_t pid,
int flags 
)
+
+

Changes the cgroup of a program based on the rules in the config file. If a rule exists for the given UID or GID, then the given PID is placed into the correct group. By default, this function parses the configuration file each time it is called.

+

This function may NOT be thread safe.

Parameters
+ + + + + +
uidThe UID to match.
gidThe GID to match.
pidThe PID of the process to move.
flagsBit flags to change the behavior, as defined in enum #cgflags.
+
+
+
Todo:
Determine thread-safeness and fix if not safe.
+ +
+
+ +

◆ cgroup_get_current_controller_path()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int cgroup_get_current_controller_path (pid_t pid,
const char * controller,
char ** current_path 
)
+
+

Get the current control group path where the given task is.

Parameters
+ + + + +
pidThe task to find.
controllerThe controller (hierarchy), where to find the task.
current_pathThe path to control group, where the task has been found. The patch is relative to the root of the hierarchy. The caller must free this memory.
+
+
+

cgroup_get_current_controller_path @pid: pid of the current process for which the path is to be determined @controller: name of the controller for which to determine current path @current_path: a pointer that is filled with the value of the current path as seen in /proc/<pid>/cgroup

+ +
+
+ +

◆ cgroup_init_rules_cache()

+ +
+
+ + + + + + + + +
int cgroup_init_rules_cache (void )
+
+

Initializes the rules cache and load it from /etc/cgrules.conf.

Todo:
add parameter with the filename?
+

Initializes the rules cache.

Returns
0 on success, > 0 on error
+ +
+
+ +

◆ cgroup_print_rules_config()

+ +
+
+ + + + + + + + +
void cgroup_print_rules_config (FILE * fp)
+
+

Print the cached rules table. This function should be called only after first calling cgroup_parse_config(), but it will work with an empty rule list.

Parameters
+ + +
fpDestination file, where the rules will be printed.
+
+
+

Print the cached rules table. This function should be called only after first calling cgroup_parse_config(), but it will work with an empty rule list.

Parameters
+ + +
fpThe file stream to print to
+
+
+ +
+
+ +

◆ cgroup_register_unchanged_process()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int cgroup_register_unchanged_process (pid_t pid,
int flags 
)
+
+

Register the unchanged process to a cgrulesengd daemon. This process is never moved to another control group by the daemon. If the daemon does not work, this function returns 0 as success.

Parameters
+ + + +
pidThe task id.
flagsBit flags to change the behavior, as defined in #cgroup_daemon_type
+
+
+ +
+
+ +

◆ cgroup_reload_cached_rules()

+ +
+
+ + + + + + + + +
int cgroup_reload_cached_rules (void )
+
+

Reloads the rules list from /etc/cgrules.conf. This function is probably NOT thread safe (calls cgroup_parse_rules_config()).

+

Reloads the rules list, using the given configuration file. This function is probably NOT thread safe (calls cgroup_parse_rules()).

Returns
0 on success, > 0 on failure
+ +
+
+
+ + + + diff --git a/groups_8h_source.html b/groups_8h_source.html new file mode 100644 index 00000000..5c6c5a1a --- /dev/null +++ b/groups_8h_source.html @@ -0,0 +1,238 @@ + + + + + + + +libcgroup: include/libcgroup/groups.h Source File + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
groups.h
+
+
+
1 #ifndef _LIBCGROUP_GROUPS_H
+
2 #define _LIBCGROUP_GROUPS_H
+
3 
+
4 #ifndef _LIBCGROUP_H_INSIDE
+
5 #error "Only <libcgroup.h> should be included directly."
+
6 #endif
+
7 
+
8 #ifndef SWIG
+
9 #include <features.h>
+
10 #include <sys/types.h>
+
11 #include <stdbool.h>
+
12 #endif
+
13 
+
14 #ifdef __cplusplus
+
15 extern "C" {
+
16 #endif
+
17 
+
21 enum cgroup_delete_flag {
+
25  CGFLAG_DELETE_IGNORE_MIGRATION = 1,
+
26 
+
30  CGFLAG_DELETE_RECURSIVE = 2,
+
31 
+
37  CGFLAG_DELETE_EMPTY_ONLY = 4,
+
38 };
+
39 
+
110 struct cgroup;
+
111 
+
119 struct cgroup_controller;
+
120 
+
124 #define NO_PERMS (-1U)
+
125 
+
129 #define NO_UID_GID (-1U)
+
130 
+
141 struct cgroup *cgroup_new_cgroup(const char *name);
+
142 
+ +
152  const char *name);
+
153 
+ +
162 
+
163 
+ +
172  const char *name);
+
173 
+
179 void cgroup_free(struct cgroup **cgroup);
+
180 
+ +
187 
+
188 
+
212 int cgroup_create_cgroup(struct cgroup *cgroup, int ignore_ownership);
+
213 
+ +
236  int ignore_ownership);
+
237 
+
245 int cgroup_modify_cgroup(struct cgroup *cgroup);
+
246 
+
261 int cgroup_delete_cgroup(struct cgroup *cgroup, int ignore_migration);
+
262 
+
277 int cgroup_delete_cgroup_ext(struct cgroup *cgroup, int flags);
+
278 
+
279 
+
307 int cgroup_get_cgroup(struct cgroup *cgroup);
+
308 
+
317 int cgroup_copy_cgroup(struct cgroup *dst, struct cgroup *src);
+
318 
+
330 int cgroup_compare_cgroup(struct cgroup *cgroup_a, struct cgroup *cgroup_b);
+
331 
+
332 
+ +
343  struct cgroup_controller *cgcb);
+
344 
+
358 int cgroup_set_uid_gid(struct cgroup *cgroup, uid_t tasks_uid, gid_t tasks_gid,
+
359  uid_t control_uid, gid_t control_gid);
+
360 
+
366 int cgroup_get_uid_gid(struct cgroup *cgroup, uid_t *tasks_uid,
+
367  gid_t *tasks_gid, uid_t *control_uid, gid_t *control_gid);
+
368 
+ +
382  mode_t control_dperm, mode_t control_fperm,
+
383  mode_t task_fperm);
+
384 
+
405 int cgroup_add_value_string(struct cgroup_controller *controller,
+
406  const char *name, const char *value);
+
418 int cgroup_add_value_int64(struct cgroup_controller *controller,
+
419  const char *name, int64_t value);
+
429 int cgroup_add_value_uint64(struct cgroup_controller *controller,
+
430  const char *name, u_int64_t value);
+
440 int cgroup_add_value_bool(struct cgroup_controller *controller,
+
441  const char *name, bool value);
+
442 
+
458 int cgroup_get_value_string(struct cgroup_controller *controller,
+
459  const char *name, char **value);
+
468 int cgroup_get_value_int64(struct cgroup_controller *controller,
+
469  const char *name, int64_t *value);
+
478 int cgroup_get_value_uint64(struct cgroup_controller *controller,
+
479  const char *name, u_int64_t *value);
+
488 int cgroup_get_value_bool(struct cgroup_controller *controller,
+
489  const char *name, bool *value);
+
490 
+
499 int cgroup_set_value_string(struct cgroup_controller *controller,
+
500  const char *name, const char *value);
+
511 int cgroup_set_value_int64(struct cgroup_controller *controller,
+
512  const char *name, int64_t value);
+
521 int cgroup_set_value_uint64(struct cgroup_controller *controller,
+
522  const char *name, u_int64_t value);
+
531 int cgroup_set_value_bool(struct cgroup_controller *controller,
+
532  const char *name, bool value);
+
542 int cgroup_get_value_name_count(struct cgroup_controller *controller);
+
543 
+
556 char *cgroup_get_value_name(struct cgroup_controller *controller, int index);
+
557 
+
567 int cgroup_get_procs(char *name, char *controller, pid_t **pids, int *size);
+
568 
+
577 int cg_chmod_recursive(struct cgroup *cgroup, mode_t dir_mode,
+
578  int dirm_change, mode_t file_mode, int filem_change);
+
579 
+
584 char *cgroup_get_cgroup_name(struct cgroup *cgroup);
+
585 
+
592 #ifdef __cplusplus
+
593 } /* extern "C" */
+
594 #endif
+
595 
+
596 #endif /* _LIBCGROUP_GROUPS_H */
+
int cgroup_get_uid_gid(struct cgroup *cgroup, uid_t *tasks_uid, gid_t *tasks_gid, uid_t *control_uid, gid_t *control_gid)
Definition: wrapper.c:357
+
int cgroup_get_procs(char *name, char *controller, pid_t **pids, int *size)
Definition: api.c:5422
+
int cgroup_get_value_int64(struct cgroup_controller *controller, const char *name, int64_t *value)
Definition: wrapper.c:436
+
char * cgroup_get_value_name(struct cgroup_controller *controller, int index)
Definition: wrapper.c:665
+
int cgroup_delete_cgroup(struct cgroup *cgroup, int ignore_migration)
Definition: api.c:2842
+
int cgroup_get_value_name_count(struct cgroup_controller *controller)
Definition: wrapper.c:656
+
int cgroup_modify_cgroup(struct cgroup *cgroup)
Definition: api.c:2162
+
int cgroup_add_value_string(struct cgroup_controller *controller, const char *name, const char *value)
Definition: wrapper.c:180
+
int cgroup_add_value_bool(struct cgroup_controller *controller, const char *name, bool value)
Definition: wrapper.c:260
+
int cgroup_set_uid_gid(struct cgroup *cgroup, uid_t tasks_uid, gid_t tasks_gid, uid_t control_uid, gid_t control_gid)
Definition: wrapper.c:343
+
int cgroup_add_value_int64(struct cgroup_controller *controller, const char *name, int64_t value)
Definition: wrapper.c:224
+
struct cgroup * cgroup_new_cgroup(const char *name)
Definition: wrapper.c:44
+
struct cgroup_controller * cgroup_get_controller(struct cgroup *cgroup, const char *name)
Definition: wrapper.c:371
+
int cgroup_delete_cgroup_ext(struct cgroup *cgroup, int flags)
Definition: api.c:2848
+
int cgroup_compare_cgroup(struct cgroup *cgroup_a, struct cgroup *cgroup_b)
Definition: wrapper.c:308
+
int cgroup_create_cgroup_from_parent(struct cgroup *cgroup, int ignore_ownership)
Definition: api.c:2588
+
void cgroup_free_controllers(struct cgroup *cgroup)
Definition: wrapper.c:145
+
int cgroup_set_value_string(struct cgroup_controller *controller, const char *name, const char *value)
Definition: wrapper.c:415
+
int cgroup_get_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t *value)
Definition: wrapper.c:486
+
void cgroup_set_permissions(struct cgroup *cgroup, mode_t control_dperm, mode_t control_fperm, mode_t task_fperm)
Definition: api.c:361
+
struct cgroup_controller * cgroup_add_controller(struct cgroup *cgroup, const char *name)
Definition: wrapper.c:56
+
int cgroup_set_value_int64(struct cgroup_controller *controller, const char *name, int64_t value)
Definition: wrapper.c:459
+
int cgroup_copy_cgroup(struct cgroup *dst, struct cgroup *src)
Definition: api.c:2265
+
int cgroup_compare_controllers(struct cgroup_controller *cgca, struct cgroup_controller *cgcb)
Definition: wrapper.c:281
+
void cgroup_free(struct cgroup **cgroup)
Definition: wrapper.c:165
+
int cgroup_get_value_bool(struct cgroup_controller *controller, const char *name, bool *value)
Definition: wrapper.c:535
+
char * cgroup_get_cgroup_name(struct cgroup *cgroup)
Definition: wrapper.c:677
+
int cgroup_get_cgroup(struct cgroup *cgroup)
Definition: api.c:3141
+
int cgroup_add_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t value)
Definition: wrapper.c:242
+
int cgroup_create_cgroup(struct cgroup *cgroup, int ignore_ownership)
Definition: api.c:2348
+
int cgroup_set_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t value)
Definition: wrapper.c:508
+
int cgroup_add_all_controllers(struct cgroup *cgroup)
Definition: wrapper.c:95
+
int cg_chmod_recursive(struct cgroup *cgroup, mode_t dir_mode, int dirm_change, mode_t file_mode, int filem_change)
Definition: api.c:333
+
int cgroup_get_value_string(struct cgroup_controller *controller, const char *name, char **value)
Definition: wrapper.c:390
+
int cgroup_set_value_bool(struct cgroup_controller *controller, const char *name, bool value)
Definition: wrapper.c:563
+
Definition: libcgroup-internal.h:99
+
Definition: libcgroup-internal.h:106
+
+ + + + diff --git a/index.html b/index.html new file mode 100644 index 00000000..770177cb --- /dev/null +++ b/index.html @@ -0,0 +1,86 @@ + + + + + + + +libcgroup: libcgroup + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
libcgroup
+
+
+

+Introduction

+

libcgroup is a library that abstracts the control group file system in Linux. It comes with various command-line tools and configuration files, see their man pages for details.

+

This documentation provides description of libcgroup API. Read following sections, preferably in this order:

    +
  1. Initialization
  2. +
  3. Control Groups
  4. +
  5. Iterators
  6. +
  7. Manipulation with tasks
  8. +
  9. Configuration
  10. +
  11. Error Handling
  12. +
+
+
+ + + + diff --git a/init_8h_source.html b/init_8h_source.html new file mode 100644 index 00000000..311317f2 --- /dev/null +++ b/init_8h_source.html @@ -0,0 +1,104 @@ + + + + + + + +libcgroup: include/libcgroup/init.h Source File + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
init.h
+
+
+
1 #ifndef _LIBCGROUP_INIT_H
+
2 #define _LIBCGROUP_INIT_H
+
3 
+
4 #ifndef _LIBCGROUP_H_INSIDE
+
5 #error "Only <libcgroup.h> should be included directly."
+
6 #endif
+
7 
+
8 #ifndef SWIG
+
9 #include <features.h>
+
10 #endif
+
11 
+
12 #ifdef __cplusplus
+
13 extern "C" {
+
14 #endif
+
15 
+
45 int cgroup_init(void);
+
46 
+
57 int cgroup_get_subsys_mount_point(const char *controller, char **mount_point);
+
58 
+
63 #ifdef __cplusplus
+
64 } /* extern "C" */
+
65 #endif
+
66 
+
67 #endif /* _LIBCGROUP_INIT_H */
+
int cgroup_init(void)
Definition: api.c:1271
+
int cgroup_get_subsys_mount_point(const char *controller, char **mount_point)
Definition: api.c:5300
+
+ + + + diff --git a/iterators_8h_source.html b/iterators_8h_source.html new file mode 100644 index 00000000..2ca30196 --- /dev/null +++ b/iterators_8h_source.html @@ -0,0 +1,233 @@ + + + + + + + +libcgroup: include/libcgroup/iterators.h Source File + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
iterators.h
+
+
+
1 #ifndef _LIBCGROUP_ITERATORS_H
+
2 #define _LIBCGROUP_ITERATORS_H
+
3 
+
4 #ifndef _LIBCGROUP_H_INSIDE
+
5 #error "Only <libcgroup.h> should be included directly."
+
6 #endif
+
7 
+
8 #ifndef SWIG
+
9 #include <sys/types.h>
+
10 #include <stdio.h>
+
11 #include <features.h>
+
12 #endif
+
13 
+
14 #ifdef __cplusplus
+
15 extern "C" {
+
16 #endif
+
17 
+ + + +
100 };
+
101 
+ + + + +
109 };
+
110 
+ +
116  enum cgroup_file_type type;
+
118  const char *path;
+
120  const char *parent;
+
126  const char *full_path;
+
131  short depth;
+
132 };
+
133 
+
152 int cgroup_walk_tree_begin(const char *controller, const char *base_path, int depth,
+
153  void **handle, struct cgroup_file_info *info,
+
154  int *base_level);
+
164 int cgroup_walk_tree_next(int depth, void **handle,
+
165  struct cgroup_file_info *info, int base_level);
+
166 
+
170 int cgroup_walk_tree_end(void **handle);
+
171 
+
178 int cgroup_walk_tree_set_flags(void **handle, int flags);
+
179 
+
195 int cgroup_read_value_begin(const char *controller, const char *path,
+
196  char *name, void **handle, char *buffer, int max);
+
197 
+
211 int cgroup_read_value_next(void **handle, char *buffer, int max);
+
212 
+
216 int cgroup_read_value_end(void **handle);
+
217 
+
230 #define CG_VALUE_MAX 100
+
234 struct cgroup_stat {
+
235  char name[FILENAME_MAX];
+
236  char value[CG_VALUE_MAX];
+
237 };
+
238 
+
249 int cgroup_read_stats_begin(const char *controller, const char *path, void **handle,
+
250  struct cgroup_stat *stat);
+
251 
+
258 int cgroup_read_stats_next(void **handle, struct cgroup_stat *stat);
+
259 
+
263 int cgroup_read_stats_end(void **handle);
+
264 
+
281 int cgroup_get_task_begin(const char *cgroup, const char *controller, void **handle,
+
282  pid_t *pid);
+
283 
+
291 int cgroup_get_task_next(void **handle, pid_t *pid);
+
292 
+
296 int cgroup_get_task_end(void **handle);
+
297 
+ +
314  char name[FILENAME_MAX];
+
316  char path[FILENAME_MAX];
+
317 };
+
318 
+
326 int cgroup_get_controller_begin(void **handle, struct cgroup_mount_point *info);
+
327 
+
337 int cgroup_get_controller_next(void **handle, struct cgroup_mount_point *info);
+
338 
+
342 int cgroup_get_controller_end(void **handle);
+
343 
+ +
358  char name[FILENAME_MAX];
+ + +
368  int enabled;
+
369 };
+
370 
+
376 int cgroup_get_all_controller_begin(void **handle,
+
377  struct controller_data *info);
+
383 int cgroup_get_all_controller_next(void **handle, struct controller_data *info);
+
384 
+
388 int cgroup_get_all_controller_end(void **handle);
+
389 
+
407 int cgroup_get_subsys_mount_point_begin(const char *controller, void **handle,
+
408  char *path);
+
415 int cgroup_get_subsys_mount_point_next(void **handle,
+
416  char *path);
+
417 
+ +
422 
+
428 #ifdef __cplusplus
+
429 } /* extern "C" */
+
430 #endif
+
431 
+
432 #endif /* _LIBCGROUP_ITERATORS_H */
+
int cgroup_walk_tree_end(void **handle)
Definition: api.c:4466
+
int cgroup_get_all_controller_end(void **handle)
Definition: api.c:5333
+
int cgroup_read_stats_begin(const char *controller, const char *path, void **handle, struct cgroup_stat *stat)
Definition: api.c:4724
+
int cgroup_get_subsys_mount_point_begin(const char *controller, void **handle, char *path)
Definition: api.c:5616
+
cgroup_walk_type
Definition: iterators.h:73
+
int cgroup_get_subsys_mount_point_next(void **handle, char *path)
Definition: api.c:5647
+
int cgroup_get_all_controller_next(void **handle, struct controller_data *info)
Definition: api.c:5347
+
int cgroup_walk_tree_next(int depth, void **handle, struct cgroup_file_info *info, int base_level)
Definition: api.c:4439
+
#define CG_VALUE_MAX
Definition: iterators.h:230
+
int cgroup_get_controller_begin(void **handle, struct cgroup_mount_point *info)
Definition: api.c:4873
+
cgroup_file_type
Definition: iterators.h:105
+
int cgroup_walk_tree_set_flags(void **handle, int flags)
Definition: api.c:4552
+
int cgroup_read_value_begin(const char *controller, const char *path, char *name, void **handle, char *buffer, int max)
Definition: api.c:4648
+
int cgroup_walk_tree_begin(const char *controller, const char *base_path, int depth, void **handle, struct cgroup_file_info *info, int *base_level)
Definition: api.c:4487
+
int cgroup_get_controller_next(void **handle, struct cgroup_mount_point *info)
Definition: api.c:4840
+
int cgroup_get_subsys_mount_point_end(void **handle)
Definition: api.c:5669
+
int cgroup_get_controller_end(void **handle)
Definition: api.c:4824
+
int cgroup_read_stats_end(void **handle)
Definition: api.c:4686
+
int cgroup_read_value_next(void **handle, char *buffer, int max)
Definition: api.c:4628
+
int cgroup_read_value_end(void **handle)
Definition: api.c:4612
+
int cgroup_get_all_controller_begin(void **handle, struct controller_data *info)
Definition: api.c:5376
+
int cgroup_get_task_begin(const char *cgroup, const char *controller, void **handle, pid_t *pid)
Definition: api.c:4791
+
int cgroup_get_task_end(void **handle)
Definition: api.c:4755
+
int cgroup_get_task_next(void **handle, pid_t *pid)
Definition: api.c:4769
+
int cgroup_read_stats_next(void **handle, struct cgroup_stat *stat)
Definition: api.c:4704
+
@ CGROUP_WALK_TYPE_POST_DIR
Definition: iterators.h:99
+
@ CGROUP_WALK_TYPE_PRE_DIR
Definition: iterators.h:86
+
@ CGROUP_FILE_TYPE_OTHER
Definition: iterators.h:108
+
@ CGROUP_FILE_TYPE_DIR
Definition: iterators.h:107
+
@ CGROUP_FILE_TYPE_FILE
Definition: iterators.h:106
+
Definition: iterators.h:114
+
const char * full_path
Definition: iterators.h:126
+
const char * parent
Definition: iterators.h:120
+
const char * path
Definition: iterators.h:118
+
enum cgroup_file_type type
Definition: iterators.h:116
+
short depth
Definition: iterators.h:131
+
Definition: iterators.h:312
+
char name[FILENAME_MAX]
Definition: iterators.h:314
+
char path[FILENAME_MAX]
Definition: iterators.h:316
+
Definition: iterators.h:234
+
Definition: libcgroup-internal.h:106
+
Definition: iterators.h:356
+
int enabled
Definition: iterators.h:368
+
int hierarchy
Definition: iterators.h:364
+
char name[FILENAME_MAX]
Definition: iterators.h:358
+
int num_cgroups
Definition: iterators.h:366
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 00000000..103c32d7 --- /dev/null +++ b/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/libcgroup-internal_8h_source.html b/libcgroup-internal_8h_source.html new file mode 100644 index 00000000..966e398f --- /dev/null +++ b/libcgroup-internal_8h_source.html @@ -0,0 +1,400 @@ + + + + + + + +libcgroup: src/libcgroup-internal.h Source File + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libcgroup-internal.h
+
+
+
1 /*
+
2  * Copyright IBM Corporation. 2008
+
3  *
+
4  * Author: Dhaval Giani <dhaval@linux.vnet.ibm.com>
+
5  *
+
6  * This program is free software; you can redistribute it and/or modify it
+
7  * under the terms of version 2.1 of the GNU Lesser General Public License
+
8  * as published by the Free Software Foundation.
+
9  *
+
10  * This program is distributed in the hope that it would be useful, but
+
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
+
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
13  *
+
14  */
+
15 #ifndef __LIBCG_INTERNAL
+
16 
+
17 #define __LIBCG_INTERNAL
+
18 
+
19 #ifdef __cplusplus
+
20 extern "C" {
+
21 #endif
+
22 
+
23 #include "config.h"
+
24 #include <dirent.h>
+
25 #include <fts.h>
+
26 #include <libcgroup.h>
+
27 #include <limits.h>
+
28 #include <mntent.h>
+
29 #include <pthread.h>
+
30 #include <sys/stat.h>
+
31 #include <sys/types.h>
+
32 #include <setjmp.h>
+
33 
+
34 /* Maximum number of mount points/controllers */
+
35 #define MAX_MNT_ELEMENTS 16
+
36 /* Estimated number of groups created */
+
37 #define MAX_GROUP_ELEMENTS 128
+
38 
+
39 /* Maximum length of a value */
+
40 #define CG_CONTROL_VALUE_MAX 4096
+
41 
+
42 #define CG_NV_MAX 100
+
43 #define CG_CONTROLLER_MAX 100
+
44 #define CG_OPTIONS_MAX 100
+
45 /* Max number of mounted hierarchies. Event if one controller is mounted per
+
46  * hier, it can not exceed CG_CONTROLLER_MAX
+
47  */
+
48 #define CG_HIER_MAX CG_CONTROLLER_MAX
+
49 
+
50 /* Definitions for the uid and gid members of a cgroup_rules */
+
51 /* FIXME: These really should not be negative values */
+
52 #define CGRULE_INVALID ((uid_t) -1)
+
53 #define CGRULE_WILD ((uid_t) -2)
+
54 
+
55 #define CGRULE_SUCCESS_STORE_PID "SUCCESS_STORE_PID"
+
56 
+
57 /* Definitions for the cgrules options field */
+
58 #define CGRULE_OPTION_IGNORE "ignore"
+
59 
+
60 #define CGCONFIG_CONF_FILE "/etc/cgconfig.conf"
+
61 /* Minimum number of file in template file list for cgrulesengd */
+
62 #define CGCONFIG_CONF_FILES_LIST_MINIMUM_SIZE 4
+
63 #define CGCONFIG_CONF_DIR "/etc/cgconfig.d"
+
64 
+
65 #define CGRULES_CONF_FILE "/etc/cgrules.conf"
+
66 #define CGRULES_CONF_DIR "/etc/cgrules.d"
+
67 #define CGRULES_MAX_FIELDS_PER_LINE 3
+
68 
+
69 #define CGROUP_BUFFER_LEN (5 * FILENAME_MAX)
+
70 
+
71 /* Maximum length of a key(<user>:<process name>) in the daemon config file */
+
72 #define CGROUP_RULE_MAXKEY (LOGIN_NAME_MAX + FILENAME_MAX + 1)
+
73 
+
74 /* Maximum length of a line in the daemon config file */
+
75 #define CGROUP_RULE_MAXLINE (FILENAME_MAX + CGROUP_RULE_MAXKEY + \
+
76  CG_CONTROLLER_MAX + 3)
+
77 
+
78 #define CGROUP_FILE_PREFIX "cgroup"
+
79 
+
80 #define cgroup_err(x...) cgroup_log(CGROUP_LOG_ERROR, x)
+
81 #define cgroup_warn(x...) cgroup_log(CGROUP_LOG_WARNING, x)
+
82 #define cgroup_info(x...) cgroup_log(CGROUP_LOG_INFO, x)
+
83 #define cgroup_dbg(x...) cgroup_log(CGROUP_LOG_DEBUG, x)
+
84 
+
85 #define CGROUP_DEFAULT_LOGLEVEL CGROUP_LOG_ERROR
+
86 
+
87 #define max(x,y) ((y)<(x)?(x):(y))
+
88 #define min(x,y) ((y)>(x)?(x):(y))
+
89 
+
90 struct control_value {
+
91  char name[FILENAME_MAX];
+
92  char value[CG_CONTROL_VALUE_MAX];
+
93 
+
94  /* cgget uses this field for values that span multiple lines */
+
95  char *multiline_value;
+
96  bool dirty;
+
97 };
+
98 
+ +
100  char name[FILENAME_MAX];
+
101  struct control_value *values[CG_NV_MAX];
+
102  struct cgroup *cgroup;
+
103  int index;
+
104 };
+
105 
+
106 struct cgroup {
+
107  char name[FILENAME_MAX];
+
108  struct cgroup_controller *controller[CG_CONTROLLER_MAX];
+
109  int index;
+
110  uid_t tasks_uid;
+
111  gid_t tasks_gid;
+
112  mode_t task_fperm;
+
113  uid_t control_uid;
+
114  gid_t control_gid;
+
115  mode_t control_fperm;
+
116  mode_t control_dperm;
+
117 };
+
118 
+ +
120  char path[FILENAME_MAX];
+
121  struct cg_mount_point *next;
+
122 };
+
123 
+
124 enum cg_version_t {
+
125  CGROUP_UNK = 0,
+
126  CGROUP_V1,
+
127  CGROUP_V2,
+
128 };
+
129 
+ +
132  char name[FILENAME_MAX];
+
136  struct cg_mount_point mount;
+
137  int index;
+
138  enum cg_version_t version;
+
139 };
+
140 
+ +
142  pid_t pid; /* pid of the process which needs to change group */
+
143 
+
144  /* Details of user under consideration for destination cgroup */
+
145  struct passwd *pw;
+
146  /* Gid of the process */
+
147  gid_t gid;
+
148 };
+
149 
+
150 /* A rule that maps UID/GID to a cgroup */
+
151 struct cgroup_rule {
+
152  uid_t uid;
+
153  gid_t gid;
+
154  bool is_ignore;
+
155  char *procname;
+
156  char username[LOGIN_NAME_MAX];
+
157  char destination[FILENAME_MAX];
+
158  char *controllers[MAX_MNT_ELEMENTS];
+
159  struct cgroup_rule *next;
+
160 };
+
161 
+
162 /* Container for a list of rules */
+ +
164  struct cgroup_rule *head;
+
165  struct cgroup_rule *tail;
+
166  int len;
+
167 };
+
168 
+
169 /*The walk_tree handle */
+ +
171  FTS *fts;
+
172  int flags;
+
173 };
+
174 
+ +
183  const char *name;
+
184  const char *value;
+
185  struct cgroup_dictionary_item *next;
+
186 };
+
187 
+
188 /* Flags for cgroup_dictionary_create */
+
195 #define CG_DICT_DONT_FREE_ITEMS 1
+
196 
+ +
206  struct cgroup_dictionary_item *head;
+
207  struct cgroup_dictionary_item *tail;
+
208  int flags;
+
209 };
+
210 
+ +
213  struct cgroup_dictionary_item *item;
+
214 };
+
215 
+
219 extern __thread int last_errno;
+
220 
+
224 extern jmp_buf parser_error_env;
+
225 
+
226 /* Internal API */
+
227 char *cg_build_path(const char *name, char *path, const char *type);
+
228 int cgroup_get_uid_gid_from_procfs(pid_t pid, uid_t *euid, gid_t *egid);
+
229 int cgroup_get_procname_from_procfs(pid_t pid, char **procname);
+
230 int cg_mkdir_p(const char *path);
+
231 struct cgroup *create_cgroup_from_name_value_pairs(const char *name,
+
232  struct control_value *name_value, int nv_number);
+
233 void init_cgroup_table(struct cgroup *cgroups, size_t count);
+
234 
+
235 /*
+
236  * Main mounting structures
+
237  */
+
238 extern struct cg_mount_table_s cg_mount_table[CG_CONTROLLER_MAX];
+
239 extern pthread_rwlock_t cg_mount_table_lock;
+
240 
+
241 /*
+
242  * config related structures
+
243  */
+
244 
+
245 extern __thread char *cg_namespace_table[CG_CONTROLLER_MAX];
+
246 
+
247 /*
+
248  * config related API
+
249  */
+
250 int cgroup_config_insert_cgroup(char *cg_name);
+
251 int cgroup_config_parse_controller_options(char *controller,
+
252  struct cgroup_dictionary *values);
+
253 int template_config_insert_cgroup(char *cg_name);
+
254 int template_config_parse_controller_options(char *controller,
+
255  struct cgroup_dictionary *values);
+
256 int template_config_group_task_perm(char *perm_type, char *value);
+
257 int template_config_group_admin_perm(char *perm_type, char *value);
+
258 int cgroup_config_group_task_perm(char *perm_type, char *value);
+
259 int cgroup_config_group_admin_perm(char *perm_type, char *value);
+
260 int cgroup_config_insert_into_mount_table(char *name, char *mount_point);
+
261 int cgroup_config_insert_into_namespace_table(char *name, char *mount_point);
+
262 void cgroup_config_cleanup_mount_table(void);
+
263 void cgroup_config_cleanup_namespace_table(void);
+
264 int cgroup_config_define_default(void);
+
265 
+
269 extern int cgroup_dictionary_create(struct cgroup_dictionary **dict,
+
270  int flags);
+
274 extern int cgroup_dictionary_add(struct cgroup_dictionary *dict,
+
275  const char *name, const char *value);
+
280 extern int cgroup_dictionary_free(struct cgroup_dictionary *dict);
+
281 
+
286 extern int cgroup_dictionary_iterator_begin(struct cgroup_dictionary *dict,
+
287  void **handle, const char **name, const char **value);
+
291 extern int cgroup_dictionary_iterator_next(void **handle,
+
292  const char **name, const char **value);
+
296 extern void cgroup_dictionary_iterator_end(void **handle);
+
297 
+
307 int cg_chmod_path(const char *path, mode_t mode, int owner_is_umask);
+
308 
+
316 int cgroup_get_controller_version(const char * const controller,
+
317  enum cg_version_t * const version);
+
318 
+
328 int cgroup_build_tasks_procs_path(char * const path,
+
329  size_t path_sz, const char * const cg_name,
+
330  const char * const ctrl_name);
+
331 
+
343 char *cg_build_path_locked(const char *setting, char *path,
+
344  const char *controller);
+
345 
+
357 int cgroup_fill_cgc(struct dirent *ctrl_dir, struct cgroup *cgroup,
+
358  struct cgroup_controller *cgc, int cg_index);
+
359 
+
366 int cgroup_test_subsys_mounted(const char *ctrl_name);
+
367 
+
373 #ifdef UNIT_TEST
+
374 
+
375 #define TEST_PROC_PID_CGROUP_FILE "test-procpidcgroup"
+
376 
+
377 int cgroup_parse_rules_options(char *options,
+
378  struct cgroup_rule * const rule);
+
379 
+
380 int cg_get_cgroups_from_proc_cgroups(pid_t pid, char *cgroup_list[],
+
381  char *controller_list[],
+
382  int list_len);
+
383 
+
384 bool cgroup_compare_ignore_rule(const struct cgroup_rule * const rule,
+
385  pid_t pid, const char * const procname);
+
386 
+
387 bool cgroup_compare_wildcard_procname(const char * const rule_procname,
+
388  const char * const procname);
+
389 
+
390 int cgroup_process_v1_mnt(char *controllers[], struct mntent *ent,
+
391  int *mnt_tbl_idx);
+
392 
+
393 int cgroup_process_v2_mnt(struct mntent *ent, int *mnt_tbl_idx);
+
394 
+
395 int cgroup_set_values_recursive(const char * const base,
+
396  const struct cgroup_controller * const controller,
+
397  bool ignore_non_dirty_failures);
+
398 
+
399 int cgroup_chown_chmod_tasks(const char * const cg_path,
+
400  uid_t uid, gid_t gid, mode_t fperm);
+
401 
+
402 int cgroupv2_subtree_control(const char *path, const char *ctrl_name,
+
403  bool enable);
+
404 
+
405 int cgroupv2_get_subtree_control(const char *path,
+
406  const char *ctrl_name,
+
407  bool * const enabled);
+
408 
+
409 int cgroupv2_controller_enabled(const char * const cg_name,
+
410  const char * const ctrl_name);
+
411 
+
412 #endif /* UNIT_TEST */
+
413 
+
414 #ifdef __cplusplus
+
415 } /* extern "C" */
+
416 #endif
+
417 
+
418 #endif
+
Definition: libcgroup-internal.h:119
+
Definition: libcgroup-internal.h:130
+
struct cg_mount_point mount
Definition: libcgroup-internal.h:136
+
char name[FILENAME_MAX]
Definition: libcgroup-internal.h:132
+
Definition: libcgroup-internal.h:99
+
Definition: libcgroup-internal.h:182
+
Definition: libcgroup-internal.h:212
+
Definition: libcgroup-internal.h:205
+
Definition: libcgroup-internal.h:163
+
Definition: libcgroup-internal.h:151
+
Definition: libcgroup-internal.h:141
+
Definition: libcgroup-internal.h:170
+
Definition: libcgroup-internal.h:106
+
Definition: libcgroup-internal.h:90
+
+ + + + diff --git a/libcgroup_8h_source.html b/libcgroup_8h_source.html new file mode 100644 index 00000000..2c3805f3 --- /dev/null +++ b/libcgroup_8h_source.html @@ -0,0 +1,109 @@ + + + + + + + +libcgroup: include/libcgroup.h Source File + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
libcgroup.h
+
+
+
1 /*
+
2  * Copyright IBM Corporation. 2007
+
3  *
+
4  * Author: Balbir Singh <balbir@linux.vnet.ibm.com>
+
5  *
+
6  * This program is free software; you can redistribute it and/or modify it
+
7  * under the terms of version 2.1 of the GNU Lesser General Public License
+
8  * as published by the Free Software Foundation.
+
9  *
+
10  * This program is distributed in the hope that it would be useful, but
+
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
+
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
13  *
+
14  */
+
15 
+
16 #ifndef _LIBCGROUP_H
+
17 #define _LIBCGROUP_H
+
18 
+
19 #define _LIBCGROUP_H_INSIDE
+
20 
+
21 #include <libcgroup/error.h>
+
22 #include <libcgroup/init.h>
+
23 #include <libcgroup/iterators.h>
+
24 #include <libcgroup/groups.h>
+
25 #include <libcgroup/tasks.h>
+
26 #include <libcgroup/config.h>
+
27 #include <libcgroup/log.h>
+
28 
+
29 #undef _LIBCGROUP_H_INSIDE
+
30 
+
49 #endif /* _LIBCGROUP_H */
+
+ + + + diff --git a/log_8h_source.html b/log_8h_source.html new file mode 100644 index 00000000..a419c587 --- /dev/null +++ b/log_8h_source.html @@ -0,0 +1,130 @@ + + + + + + + +libcgroup: include/libcgroup/log.h Source File + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
log.h
+
+
+
1 #ifndef _LIBCGROUP_LOG_H
+
2 #define _LIBCGROUP_LOG_H
+
3 
+
4 #ifndef _LIBCGROUP_H_INSIDE
+
5 #error "Only <libcgroup.h> should be included directly."
+
6 #endif
+
7 
+
8 #ifndef SWIG
+
9 #include <features.h>
+
10 #endif
+
11 
+
12 #include <stdarg.h>
+
13 
+
14 #ifdef __cplusplus
+
15 extern "C" {
+
16 #endif
+
17 
+ + + + + +
91 };
+
92 
+
93 typedef void (*cgroup_logger_callback)(void *userdata, int level,
+
94  const char *fmt, va_list ap);
+
95 
+
109 extern void cgroup_set_logger(cgroup_logger_callback logger, int loglevel,
+
110  void *userdata);
+
111 
+
120 extern void cgroup_set_default_logger(int loglevel);
+
121 
+
127 extern void cgroup_set_loglevel(int loglevel);
+
128 
+
135 extern void cgroup_log(int loglevel, const char *fmt, ...);
+
136 
+
142 extern int cgroup_parse_log_level_str(const char *levelstr);
+
147 #ifdef __cplusplus
+
148 } /* extern "C" */
+
149 #endif
+
150 
+
151 #endif /* _LIBCGROUP_LOG_H */
+
void cgroup_set_logger(cgroup_logger_callback logger, int loglevel, void *userdata)
Definition: log.c:48
+
cgroup_log_level
Definition: log.h:72
+
int cgroup_parse_log_level_str(const char *levelstr)
Definition: log.c:62
+
void cgroup_set_loglevel(int loglevel)
Definition: log.c:85
+
void cgroup_set_default_logger(int loglevel)
Definition: log.c:56
+
void cgroup_log(int loglevel, const char *fmt,...)
Definition: log.c:33
+
@ CGROUP_LOG_ERROR
Definition: log.h:77
+
@ CGROUP_LOG_DEBUG
Definition: log.h:90
+
@ CGROUP_LOG_WARNING
Definition: log.h:81
+
@ CGROUP_LOG_INFO
Definition: log.h:86
+
+ + + + diff --git a/md_CONTRIBUTING.html b/md_CONTRIBUTING.html new file mode 100644 index 00000000..a518332b --- /dev/null +++ b/md_CONTRIBUTING.html @@ -0,0 +1,154 @@ + + + + + + + +libcgroup: How to Contribute to the libcgroup Project + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
How to Contribute to the libcgroup Project
+
+
+

https://github.com/libcgroup/libcgroup

+

This document outlines the steps to help you contribute to the libcgroup project. As with the libcgroup code itself, the process is a work in progress. Improvements and suggestions are welcome and encouraged.

+

+Interacting with the Community

+
+

"When you are kind to others, it not only changes you, it changes the +world." - Harold Kushner

+
+

The libcgroup project strives to be an inclusive and welcoming place. If you interact with the libcgroup project, we request that you treat others with dignity and respect. Failure to do so will result in a warning. In extreme cases, we reserve the right to block the individual from the project.

+

Examples of inappropriate behavior includes: profane, abusive, or prejudicial language directed at another person, vandalism (e.g. GitHub issue/PR "litter"), or spam.

+

+Test Your Code Using Existing Tests

+

The libcgroup project utilizes unit and functional tests. These tests must successfully pass prior to a commit being merged.

+

You can run both the unit and functional tests with the following command:

# make check
+

You can invoke only the unit tests with the following commands:

# cd tests/gunit
+# make check
+

If there are unit test failures, running the unit tests outside of the automake framework will provide more information.

# cd tests/gunit
+# ./gtest
+

You can invoke only the functional tests with the following commands:

# cd tests/ftests
+# make check
+

Note that the functional tests can be run within a container or directly on your system. For the containerized tests, libcgroup utilizes LXC/LXD containers. If your system or distro doesn't support LXC/LXD, you can utilize the continuous integration infrastructure to test your changes. A successful continuous integration run is required for each pull request.

+

Many tests can also be run outside of a container. Use caution with these tests though, as they will modify your host's cgroup hierarchy. This could significantly and negatively affect your system.

+

We encourage utilizing a VM for libcgroup development work. The continuous integration suite utilizes the latest Ubuntu LTS.

+

To run the containerized tests only:

# cd tests/ftests
+# ./ftests.sh
+

To run the non-containerized tests only:

# cd tests/ftests
+# ./ftests-nocontainer.sh
+

After the run is complete, the ftests.sh.log and ftests-nocontainer.sh.log contain the full debug log for each run.

+

+Add New Tests for New Functionality

+

The libcgroup project utilizes automated tests, code coverage, and continuous integration to maintain a high level of code quality. Any pull requests that add functionality or significantly change existing code should include additional tests to verify the proper operation of the proposed changes. Note that functional tests are preferred over unit tests.

+

The continuous integration tools run the automated tests and automatically gather code coverage numbers. Pull requests that cause the code coverage numbers to decrease are strongly discouraged.

+

+Explain Your Work

+

At the top of every patch you should include a description of the problem you are trying to solve, how you solved it, and why you chose the solution you implemented. If you are submitting a bug fix, it is also incredibly helpful if you can describe/include a reproducer for the problem in the description as well as instructions on how to test for the bug and verify that it has been fixed.

+

+Sign Your Work

+

The sign-off is a simple line at the end of the patch description, which certifies that you wrote it or otherwise have the right to pass it on as an open-source patch. The "Developer's Certificate of Origin" pledge is taken from the Linux Kernel and the rules are pretty simple:

Developer's Certificate of Origin 1.1
+
+By making a contribution to this project, I certify that:
+
+(a) The contribution was created in whole or in part by me and I
+    have the right to submit it under the open source license
+    indicated in the file; or
+
+(b) The contribution is based upon previous work that, to the best
+    of my knowledge, is covered under an appropriate open source
+    license and I have the right under that license to submit that
+    work with modifications, whether created in whole or in part
+    by me, under the same open source license (unless I am
+    permitted to submit under a different license), as indicated
+    in the file; or
+
+(c) The contribution was provided directly to me by some other
+    person who certified (a), (b) or (c) and I have not modified
+    it.
+
+(d) I understand and agree that this project and the contribution
+    are public and that a record of the contribution (including all
+    personal information I submit with it, including my sign-off) is
+    maintained indefinitely and may be redistributed consistent with
+    this project or the open source license(s) involved.
+

... then you just add a line to the bottom of your patch description, with your real name, saying:

Signed-off-by: Random J Developer <random@developer.example.org>
+

You can add this to your commit description in git with git commit -s

+

+Submitting Patches

+

libcgroup was initially hosted on Sourceforge and at that time only accepted patches via the mailing list. In 2018, libcgroup was moved to github and now accepts patches via email or github pull request. Over time the libcgroup project will likely fully transition to gitub pull requests and issues.

+

+Post Your Patches Upstream

+

The sections below explain how to contribute via either method. Please read each step and perform all steps that apply to your chosen contribution method.

+

+Submitting via Email

+

Depending on how you decided to work with the libcgroup code base and what tools you are using there are different ways to generate your patch(es). However, regardless of what tools you use, you should always generate your patches using the "unified" diff/patch format and the patches should always apply to the libcgroup source tree using the following command from the top directory of the libcgroup sources:

# patch -p1 < changes.patch
+

If you are not using git, stacked git (stgit), or some other tool which can generate patch files for you automatically, you may find the following command helpful in generating patches, where "libcgroup.orig/" is the unmodified source code directory and "libcgroup/" is the source code directory with your changes:

# diff -purN libcgroup.orig/ libcgroup/
+

When in doubt please generate your patch and try applying it to an unmodified copy of the libcgroup sources; if it fails for you, it will fail for the rest of us.

+

Finally, you will need to email your patches to the mailing list so they can be reviewed and potentially merged into the main libcgroup repository. When sending patches to the mailing list it is important to send your email in text form, no HTML mail please, and ensure that your email client does not mangle your patches. It should be possible to save your raw email to disk and apply it directly to the libcgroup source code; if that fails then you likely have a problem with your email client. When in doubt try a test first by sending yourself an email with your patch and attempting to apply the emailed patch to the libcgrup repository; if it fails for you, it will fail for the rest of us trying to test your patch and include it in the main libcgroup repository.

+

+Submitting via GitHub Pull Requests

+

See this guide if you've never done this before.

+
+
+ + + + diff --git a/md_README.html b/md_README.html new file mode 100644 index 00000000..9bc63e0a --- /dev/null +++ b/md_README.html @@ -0,0 +1,77 @@ + + + + + + + +libcgroup: README + + + + + + + + + +
+
+ + + + + + +
+
libcgroup +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ +
+
+
+
README
+
+
+

Build Status Coverage Status

+

The entire libcgroup README is available [here](README).

+
+
+ + + + diff --git a/menu.js b/menu.js new file mode 100644 index 00000000..2fe2214f --- /dev/null +++ b/menu.js @@ -0,0 +1,51 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 00000000..f543bf19 --- /dev/null +++ b/menudata.js @@ -0,0 +1,36 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Modules",url:"modules.html"}, +{text:"Data Structures",url:"annotated.html",children:[ +{text:"Data Structures",url:"annotated.html"}, +{text:"Data Structure Index",url:"classes.html"}, +{text:"Data Fields",url:"functions.html",children:[ +{text:"All",url:"functions.html"}, +{text:"Variables",url:"functions_vars.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/modules.html b/modules.html new file mode 100644 index 00000000..f0c40ba9 --- /dev/null +++ b/modules.html @@ -0,0 +1,85 @@ + + + + + + + +libcgroup: Modules + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Modules
    +
    + + + + + diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zc-rd>@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 Hc-jL100001 diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zc-rd>@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!K@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t22D>F$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + +libcgroup: Related Pages + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    +
    + + + + diff --git a/search/all_0.html b/search/all_0.html new file mode 100644 index 00000000..1ec5b2d5 --- /dev/null +++ b/search/all_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 00000000..89285fef --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['1_2e_20initialization_0',['1. Initialization',['../group__group__init.html',1,'']]] +]; diff --git a/search/all_1.html b/search/all_1.html new file mode 100644 index 00000000..9f80e904 --- /dev/null +++ b/search/all_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 00000000..4e22f30f --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['2_2e_20group_20manipulation_20api_1',['2. Group manipulation API',['../group__group__groups.html',1,'']]] +]; diff --git a/search/all_10.html b/search/all_10.html new file mode 100644 index 00000000..3bf11961 --- /dev/null +++ b/search/all_10.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_10.js b/search/all_10.js new file mode 100644 index 00000000..efb7dbcd --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['name_144',['name',['../structcgroup__mount__point.html#a849ccf1e77fffd5d45304c6adf0d2100',1,'cgroup_mount_point::name()'],['../structcontroller__data.html#a5474be4d8cc4553c94ca81c6a93f5a18',1,'controller_data::name()'],['../structcg__mount__table__s.html#aa9b2cc62fb6cb35334f3d85d660c9fa6',1,'cg_mount_table_s::name()']]], + ['no_5fperms_145',['NO_PERMS',['../group__group__groups.html#gad4ffad2eccf9fcbfa8a551e269e0ad58',1,'groups.h']]], + ['no_5fuid_5fgid_146',['NO_UID_GID',['../group__group__groups.html#ga2a7954a987e3fbf8eabcc94cf381353e',1,'groups.h']]], + ['num_5fcgroups_147',['num_cgroups',['../structcontroller__data.html#acd075c0bb48062bf720b68d0a30116eb',1,'controller_data']]] +]; diff --git a/search/all_11.html b/search/all_11.html new file mode 100644 index 00000000..c9f79d28 --- /dev/null +++ b/search/all_11.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_11.js b/search/all_11.js new file mode 100644 index 00000000..7ba9e30f --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['parent_148',['parent',['../structcgroup__file__info.html#a739c7f87593e36d8589d3ffa80b57059',1,'cgroup_file_info']]], + ['parent_5finfo_149',['parent_info',['../structparent__info.html',1,'']]], + ['path_150',['path',['../structcgroup__file__info.html#a801424e68139c930e40ea24be4d96a68',1,'cgroup_file_info::path()'],['../structcgroup__mount__point.html#ad1e89dfc02cfd7341e2296086a4f251e',1,'cgroup_mount_point::path()']]] +]; diff --git a/search/all_12.html b/search/all_12.html new file mode 100644 index 00000000..ab934722 --- /dev/null +++ b/search/all_12.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_12.js b/search/all_12.js new file mode 100644 index 00000000..03bfe7ac --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['readme_151',['README',['../md_README.html',1,'']]] +]; diff --git a/search/all_13.html b/search/all_13.html new file mode 100644 index 00000000..51172c2f --- /dev/null +++ b/search/all_13.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_13.js b/search/all_13.js new file mode 100644 index 00000000..543b3fc0 --- /dev/null +++ b/search/all_13.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['todo_20list_152',['Todo List',['../todo.html',1,'']]], + ['type_153',['type',['../structcgroup__file__info.html#a955506601f440d05cb11e4ee6b455c55',1,'cgroup_file_info']]] +]; diff --git a/search/all_14.html b/search/all_14.html new file mode 100644 index 00000000..afecf563 --- /dev/null +++ b/search/all_14.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_14.js b/search/all_14.js new file mode 100644 index 00000000..8339dcd2 --- /dev/null +++ b/search/all_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unchanged_5fpid_154',['unchanged_pid',['../structunchanged__pid.html',1,'']]] +]; diff --git a/search/all_2.html b/search/all_2.html new file mode 100644 index 00000000..02cfffc2 --- /dev/null +++ b/search/all_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 00000000..f1ff63ec --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['3_2e_20iterators_2',['3. Iterators',['../group__group__iterators.html',1,'']]] +]; diff --git a/search/all_3.html b/search/all_3.html new file mode 100644 index 00000000..39767b85 --- /dev/null +++ b/search/all_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 00000000..5023853e --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['4_2e_20manipulation_20with_20tasks_3',['4. Manipulation with tasks',['../group__group__tasks.html',1,'']]] +]; diff --git a/search/all_4.html b/search/all_4.html new file mode 100644 index 00000000..fc40463c --- /dev/null +++ b/search/all_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 00000000..0c78faa3 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['5_2e_20configuration_4',['5. Configuration',['../group__group__config.html',1,'']]] +]; diff --git a/search/all_5.html b/search/all_5.html new file mode 100644 index 00000000..9dd9344b --- /dev/null +++ b/search/all_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 00000000..785cf569 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['6_2e_20error_20handling_5',['6. Error handling',['../group__group__errors.html',1,'']]] +]; diff --git a/search/all_6.html b/search/all_6.html new file mode 100644 index 00000000..f1e516d7 --- /dev/null +++ b/search/all_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 00000000..ef106f4f --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['7_2e_20logging_6',['7. Logging',['../group__group__log.html',1,'']]] +]; diff --git a/search/all_7.html b/search/all_7.html new file mode 100644 index 00000000..8ddbf6c8 --- /dev/null +++ b/search/all_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 00000000..31d26616 --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['array_5fparent_5finfo_7',['array_parent_info',['../structarray__parent__info.html',1,'']]], + ['array_5funchanged_8',['array_unchanged',['../structarray__unchanged.html',1,'']]] +]; diff --git a/search/all_8.html b/search/all_8.html new file mode 100644 index 00000000..83c55ae2 --- /dev/null +++ b/search/all_8.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 00000000..7f9eb3c0 --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['black_5flist_5ftype_9',['black_list_type',['../structblack__list__type.html',1,'']]] +]; diff --git a/search/all_9.html b/search/all_9.html new file mode 100644 index 00000000..1e263c13 --- /dev/null +++ b/search/all_9.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 00000000..5e1c27dc --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,121 @@ +var searchData= +[ + ['cg_5fchmod_5frecursive_10',['cg_chmod_recursive',['../group__group__groups.html#gaef0bf6cd480f2dcb5e964de151a27dd1',1,'cg_chmod_recursive(struct cgroup *cgroup, mode_t dir_mode, int dirm_change, mode_t file_mode, int filem_change): api.c'],['../group__group__groups.html#gaef0bf6cd480f2dcb5e964de151a27dd1',1,'cg_chmod_recursive(struct cgroup *cgroup, mode_t dir_mode, int dirm_change, mode_t file_mode, int filem_change): api.c']]], + ['cg_5fmount_5fpoint_11',['cg_mount_point',['../structcg__mount__point.html',1,'']]], + ['cg_5fmount_5ftable_5fs_12',['cg_mount_table_s',['../structcg__mount__table__s.html',1,'']]], + ['cg_5fvalue_5fmax_13',['CG_VALUE_MAX',['../group__group__iterators.html#ga55d2eac2af703794651d344c073566f5',1,'iterators.h']]], + ['cgroup_14',['cgroup',['../structcgroup.html',1,'']]], + ['cgroup_5fadd_5fall_5fcontrollers_15',['cgroup_add_all_controllers',['../group__group__groups.html#gae870d271b789b5c54c2e3d35de3cd6f9',1,'cgroup_add_all_controllers(struct cgroup *cgroup): wrapper.c'],['../group__group__groups.html#gae870d271b789b5c54c2e3d35de3cd6f9',1,'cgroup_add_all_controllers(struct cgroup *cgroup): wrapper.c']]], + ['cgroup_5fadd_5fcontroller_16',['cgroup_add_controller',['../group__group__groups.html#gaa2f9c2ac75fd7e56e5ec6fb970304130',1,'cgroup_add_controller(struct cgroup *cgroup, const char *name): wrapper.c'],['../group__group__groups.html#gaa2f9c2ac75fd7e56e5ec6fb970304130',1,'cgroup_add_controller(struct cgroup *cgroup, const char *name): wrapper.c']]], + ['cgroup_5fadd_5fvalue_5fbool_17',['cgroup_add_value_bool',['../group__group__groups.html#ga4b191a600f84b00ea7afd12c01d918f3',1,'cgroup_add_value_bool(struct cgroup_controller *controller, const char *name, bool value): wrapper.c'],['../group__group__groups.html#ga4b191a600f84b00ea7afd12c01d918f3',1,'cgroup_add_value_bool(struct cgroup_controller *controller, const char *name, bool value): wrapper.c']]], + ['cgroup_5fadd_5fvalue_5fint64_18',['cgroup_add_value_int64',['../group__group__groups.html#ga6c973bb5ce99e7a91def2032f23d7087',1,'cgroup_add_value_int64(struct cgroup_controller *controller, const char *name, int64_t value): wrapper.c'],['../group__group__groups.html#ga6c973bb5ce99e7a91def2032f23d7087',1,'cgroup_add_value_int64(struct cgroup_controller *controller, const char *name, int64_t value): wrapper.c']]], + ['cgroup_5fadd_5fvalue_5fstring_19',['cgroup_add_value_string',['../group__group__groups.html#ga4817c68ab791c09c07b663c29b3fb029',1,'cgroup_add_value_string(struct cgroup_controller *controller, const char *name, const char *value): wrapper.c'],['../group__group__groups.html#ga4817c68ab791c09c07b663c29b3fb029',1,'cgroup_add_value_string(struct cgroup_controller *controller, const char *name, const char *value): wrapper.c']]], + ['cgroup_5fadd_5fvalue_5fuint64_20',['cgroup_add_value_uint64',['../group__group__groups.html#gad9d2216205b96278c626122f8d5e63bb',1,'cgroup_add_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t value): wrapper.c'],['../group__group__groups.html#gad9d2216205b96278c626122f8d5e63bb',1,'cgroup_add_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t value): wrapper.c']]], + ['cgroup_5fattach_5ftask_21',['cgroup_attach_task',['../group__group__tasks.html#ga43414ac2b1fc73bbb46b6278c7500188',1,'cgroup_attach_task(struct cgroup *cgroup): api.c'],['../group__group__tasks.html#ga43414ac2b1fc73bbb46b6278c7500188',1,'cgroup_attach_task(struct cgroup *cgroup): api.c']]], + ['cgroup_5fattach_5ftask_5fpid_22',['cgroup_attach_task_pid',['../group__group__tasks.html#ga9c7532681986d156ac3f6bac1fcf6aab',1,'cgroup_attach_task_pid(struct cgroup *cgroup, pid_t tid): api.c'],['../group__group__tasks.html#ga9c7532681986d156ac3f6bac1fcf6aab',1,'cgroup_attach_task_pid(struct cgroup *cgroup, pid_t tid): api.c']]], + ['cgroup_5fchange_5fall_5fcgroups_23',['cgroup_change_all_cgroups',['../group__group__tasks.html#gafc69658b012b6f1c11ba078ffccd70a2',1,'cgroup_change_all_cgroups(void): api.c'],['../group__group__tasks.html#gafc69658b012b6f1c11ba078ffccd70a2',1,'cgroup_change_all_cgroups(void): api.c']]], + ['cgroup_5fchange_5fcgroup_5fflags_24',['cgroup_change_cgroup_flags',['../group__group__tasks.html#ga368e7b8e19b3943ab6fb50e76a09e6ea',1,'cgroup_change_cgroup_flags(uid_t uid, gid_t gid, const char *procname, pid_t pid, int flags): api.c'],['../group__group__tasks.html#ga368e7b8e19b3943ab6fb50e76a09e6ea',1,'cgroup_change_cgroup_flags(uid_t uid, gid_t gid, const char *procname, pid_t pid, int flags): api.c']]], + ['cgroup_5fchange_5fcgroup_5fpath_25',['cgroup_change_cgroup_path',['../group__group__tasks.html#ga2d4677baef780c003fc6fba6b5dc78f2',1,'cgroup_change_cgroup_path(const char *path, pid_t pid, const char *const controllers[]): api.c'],['../group__group__tasks.html#ga2d4677baef780c003fc6fba6b5dc78f2',1,'cgroup_change_cgroup_path(const char *dest, pid_t pid, const char *const controllers[]): api.c']]], + ['cgroup_5fchange_5fcgroup_5fuid_5fgid_26',['cgroup_change_cgroup_uid_gid',['../group__group__tasks.html#ga5eab78a922dbacd368360f03c70146be',1,'cgroup_change_cgroup_uid_gid(uid_t uid, gid_t gid, pid_t pid): api.c'],['../group__group__tasks.html#ga5eab78a922dbacd368360f03c70146be',1,'cgroup_change_cgroup_uid_gid(uid_t uid, gid_t gid, pid_t pid): api.c']]], + ['cgroup_5fchange_5fcgroup_5fuid_5fgid_5fflags_27',['cgroup_change_cgroup_uid_gid_flags',['../group__group__tasks.html#gae472183a7c9a37826ef15c77014c47fb',1,'cgroup_change_cgroup_uid_gid_flags(uid_t uid, gid_t gid, pid_t pid, int flags): api.c'],['../group__group__tasks.html#gae472183a7c9a37826ef15c77014c47fb',1,'cgroup_change_cgroup_uid_gid_flags(uid_t uid, gid_t gid, pid_t pid, int flags): api.c']]], + ['cgroup_5fcompare_5fcgroup_28',['cgroup_compare_cgroup',['../group__group__groups.html#ga86898b59e50335f99fe84a11fa38d3fc',1,'cgroup_compare_cgroup(struct cgroup *cgroup_a, struct cgroup *cgroup_b): wrapper.c'],['../group__group__groups.html#ga86898b59e50335f99fe84a11fa38d3fc',1,'cgroup_compare_cgroup(struct cgroup *cgroup_a, struct cgroup *cgroup_b): wrapper.c']]], + ['cgroup_5fcompare_5fcontrollers_29',['cgroup_compare_controllers',['../group__group__groups.html#gab1725c50c49cec4b0bdad1f26b150ca7',1,'cgroup_compare_controllers(struct cgroup_controller *cgca, struct cgroup_controller *cgcb): wrapper.c'],['../group__group__groups.html#gab1725c50c49cec4b0bdad1f26b150ca7',1,'cgroup_compare_controllers(struct cgroup_controller *cgca, struct cgroup_controller *cgcb): wrapper.c']]], + ['cgroup_5fconfig_5fcreate_5ftemplate_5fgroup_30',['cgroup_config_create_template_group',['../group__group__config.html#ga72066260cd31ceed7ecc1a648eba37f2',1,'cgroup_config_create_template_group(struct cgroup *cgroup, char *template_name, int flags): config.c'],['../group__group__config.html#ga72066260cd31ceed7ecc1a648eba37f2',1,'cgroup_config_create_template_group(struct cgroup *cgroup, char *template_name, int flags): config.c']]], + ['cgroup_5fconfig_5fload_5fconfig_31',['cgroup_config_load_config',['../group__group__config.html#ga8adfaca013333acf922a167f55b84140',1,'cgroup_config_load_config(const char *pathname): config.c'],['../group__group__config.html#ga8adfaca013333acf922a167f55b84140',1,'cgroup_config_load_config(const char *pathname): config.c']]], + ['cgroup_5fconfig_5fset_5fdefault_32',['cgroup_config_set_default',['../group__group__config.html#ga2d3a252b2c0c61c8f64cb1fc41e370ea',1,'cgroup_config_set_default(struct cgroup *new_default): config.c'],['../group__group__config.html#ga2d3a252b2c0c61c8f64cb1fc41e370ea',1,'cgroup_config_set_default(struct cgroup *new_default): config.c']]], + ['cgroup_5fconfig_5funload_5fconfig_33',['cgroup_config_unload_config',['../group__group__config.html#gaff77affa0b80ccf507b4b46cc0a8c085',1,'cgroup_config_unload_config(const char *pathname, int flags): config.c'],['../group__group__config.html#gaff77affa0b80ccf507b4b46cc0a8c085',1,'cgroup_config_unload_config(const char *pathname, int flags): config.c']]], + ['cgroup_5fcontroller_34',['cgroup_controller',['../structcgroup__controller.html',1,'']]], + ['cgroup_5fcopy_5fcgroup_35',['cgroup_copy_cgroup',['../group__group__groups.html#gaa981a95e0917d3167601a4c1b392336a',1,'cgroup_copy_cgroup(struct cgroup *dst, struct cgroup *src): api.c'],['../group__group__groups.html#gaa981a95e0917d3167601a4c1b392336a',1,'cgroup_copy_cgroup(struct cgroup *dst, struct cgroup *src): api.c']]], + ['cgroup_5fcreate_5fcgroup_36',['cgroup_create_cgroup',['../group__group__groups.html#gadb8e13df6064841d3c9707960f782fa7',1,'cgroup_create_cgroup(struct cgroup *cgroup, int ignore_ownership): api.c'],['../group__group__groups.html#gadb8e13df6064841d3c9707960f782fa7',1,'cgroup_create_cgroup(struct cgroup *cgroup, int ignore_ownership): api.c']]], + ['cgroup_5fcreate_5fcgroup_5ffrom_5fparent_37',['cgroup_create_cgroup_from_parent',['../group__group__groups.html#ga90e1ce96f3cb540f7e82d076dd938f62',1,'cgroup_create_cgroup_from_parent(struct cgroup *cgroup, int ignore_ownership): api.c'],['../group__group__groups.html#ga90e1ce96f3cb540f7e82d076dd938f62',1,'cgroup_create_cgroup_from_parent(struct cgroup *cgroup, int ignore_ownership): api.c']]], + ['cgroup_5fdelete_5fcgroup_38',['cgroup_delete_cgroup',['../group__group__groups.html#ga1dca18434e5d6be30c28c556da94f565',1,'cgroup_delete_cgroup(struct cgroup *cgroup, int ignore_migration): api.c'],['../group__group__groups.html#ga1dca18434e5d6be30c28c556da94f565',1,'cgroup_delete_cgroup(struct cgroup *cgroup, int ignore_migration): api.c']]], + ['cgroup_5fdelete_5fcgroup_5fext_39',['cgroup_delete_cgroup_ext',['../group__group__groups.html#ga860c1ec70189c969b2c8373fc1e96d36',1,'cgroup_delete_cgroup_ext(struct cgroup *cgroup, int flags): api.c'],['../group__group__groups.html#ga860c1ec70189c969b2c8373fc1e96d36',1,'cgroup_delete_cgroup_ext(struct cgroup *cgroup, int flags): api.c']]], + ['cgroup_5fdictionary_40',['cgroup_dictionary',['../structcgroup__dictionary.html',1,'']]], + ['cgroup_5fdictionary_5fitem_41',['cgroup_dictionary_item',['../structcgroup__dictionary__item.html',1,'']]], + ['cgroup_5fdictionary_5fiterator_42',['cgroup_dictionary_iterator',['../structcgroup__dictionary__iterator.html',1,'']]], + ['cgroup_5ffile_5finfo_43',['cgroup_file_info',['../structcgroup__file__info.html',1,'']]], + ['cgroup_5ffile_5ftype_44',['cgroup_file_type',['../group__group__iterators.html#ga608b4aa32e2db58fed34771a6a272444',1,'iterators.h']]], + ['cgroup_5ffile_5ftype_5fdir_45',['CGROUP_FILE_TYPE_DIR',['../group__group__iterators.html#gga608b4aa32e2db58fed34771a6a272444a5418798fc4bf9634429c6af167a0e7c3',1,'iterators.h']]], + ['cgroup_5ffile_5ftype_5ffile_46',['CGROUP_FILE_TYPE_FILE',['../group__group__iterators.html#gga608b4aa32e2db58fed34771a6a272444ad925cc45f1b34fe80e14fc6b05269740',1,'iterators.h']]], + ['cgroup_5ffile_5ftype_5fother_47',['CGROUP_FILE_TYPE_OTHER',['../group__group__iterators.html#gga608b4aa32e2db58fed34771a6a272444a24e202c59f318e63ad8cafcc1b4b102b',1,'iterators.h']]], + ['cgroup_5ffree_48',['cgroup_free',['../group__group__groups.html#gab20fdb1ae479f8baac482336abf73900',1,'cgroup_free(struct cgroup **cgroup): wrapper.c'],['../group__group__groups.html#gab20fdb1ae479f8baac482336abf73900',1,'cgroup_free(struct cgroup **cgroup): wrapper.c']]], + ['cgroup_5ffree_5fcontrollers_49',['cgroup_free_controllers',['../group__group__groups.html#ga92d27c9ff0d655838642a7aa68497596',1,'cgroup_free_controllers(struct cgroup *cgroup): wrapper.c'],['../group__group__groups.html#ga92d27c9ff0d655838642a7aa68497596',1,'cgroup_free_controllers(struct cgroup *cgroup): wrapper.c']]], + ['cgroup_5fget_5fall_5fcontroller_5fbegin_50',['cgroup_get_all_controller_begin',['../group__group__iterators.html#gad48ef653388ca6739a9b6bbb9d7da82e',1,'cgroup_get_all_controller_begin(void **handle, struct controller_data *info): api.c'],['../group__group__iterators.html#gad48ef653388ca6739a9b6bbb9d7da82e',1,'cgroup_get_all_controller_begin(void **handle, struct controller_data *info): api.c']]], + ['cgroup_5fget_5fall_5fcontroller_5fend_51',['cgroup_get_all_controller_end',['../group__group__iterators.html#ga0c467d42a2c9a916a0edd339a6d7afc8',1,'cgroup_get_all_controller_end(void **handle): api.c'],['../group__group__iterators.html#ga0c467d42a2c9a916a0edd339a6d7afc8',1,'cgroup_get_all_controller_end(void **handle): api.c']]], + ['cgroup_5fget_5fall_5fcontroller_5fnext_52',['cgroup_get_all_controller_next',['../group__group__iterators.html#ga3d98a04b29b1fe409db1114b7aa76809',1,'cgroup_get_all_controller_next(void **handle, struct controller_data *info): api.c'],['../group__group__iterators.html#ga3d98a04b29b1fe409db1114b7aa76809',1,'cgroup_get_all_controller_next(void **handle, struct controller_data *info): api.c']]], + ['cgroup_5fget_5fcgroup_53',['cgroup_get_cgroup',['../group__group__groups.html#gad4ba31fe5a8bba63b33b1ea339b849e6',1,'cgroup_get_cgroup(struct cgroup *cgroup): api.c'],['../group__group__groups.html#gad4ba31fe5a8bba63b33b1ea339b849e6',1,'cgroup_get_cgroup(struct cgroup *cgroup): api.c']]], + ['cgroup_5fget_5fcgroup_5fname_54',['cgroup_get_cgroup_name',['../group__group__groups.html#gac9b5ff481de08ba8fdfcbd42940d2cbf',1,'cgroup_get_cgroup_name(struct cgroup *cgroup): wrapper.c'],['../group__group__groups.html#gac9b5ff481de08ba8fdfcbd42940d2cbf',1,'cgroup_get_cgroup_name(struct cgroup *cgroup): wrapper.c']]], + ['cgroup_5fget_5fcontroller_55',['cgroup_get_controller',['../group__group__groups.html#ga8335b0aec59c8f845639a7404affce05',1,'cgroup_get_controller(struct cgroup *cgroup, const char *name): wrapper.c'],['../group__group__groups.html#ga8335b0aec59c8f845639a7404affce05',1,'cgroup_get_controller(struct cgroup *cgroup, const char *name): wrapper.c']]], + ['cgroup_5fget_5fcontroller_5fbegin_56',['cgroup_get_controller_begin',['../group__group__iterators.html#ga5f9f21138f9b18912a16b21a45b53c44',1,'cgroup_get_controller_begin(void **handle, struct cgroup_mount_point *info): api.c'],['../group__group__iterators.html#ga5f9f21138f9b18912a16b21a45b53c44',1,'cgroup_get_controller_begin(void **handle, struct cgroup_mount_point *info): api.c']]], + ['cgroup_5fget_5fcontroller_5fend_57',['cgroup_get_controller_end',['../group__group__iterators.html#gab485cda2bc9640bacbf61f1953ae750c',1,'cgroup_get_controller_end(void **handle): api.c'],['../group__group__iterators.html#gab485cda2bc9640bacbf61f1953ae750c',1,'cgroup_get_controller_end(void **handle): api.c']]], + ['cgroup_5fget_5fcontroller_5fnext_58',['cgroup_get_controller_next',['../group__group__iterators.html#ga926b70423b6c087c21a14670cd23cd7d',1,'cgroup_get_controller_next(void **handle, struct cgroup_mount_point *info): api.c'],['../group__group__iterators.html#ga926b70423b6c087c21a14670cd23cd7d',1,'cgroup_get_controller_next(void **handle, struct cgroup_mount_point *info): api.c']]], + ['cgroup_5fget_5fcurrent_5fcontroller_5fpath_59',['cgroup_get_current_controller_path',['../group__group__tasks.html#ga6f2c17b99cf2526cb46df4769eb3f46e',1,'cgroup_get_current_controller_path(pid_t pid, const char *controller, char **current_path): api.c'],['../group__group__tasks.html#ga6f2c17b99cf2526cb46df4769eb3f46e',1,'cgroup_get_current_controller_path(pid_t pid, const char *controller, char **current_path): api.c']]], + ['cgroup_5fget_5flast_5ferrno_60',['cgroup_get_last_errno',['../group__group__errors.html#ga29057c4aec05bef2b6bf2855ae5d5d46',1,'cgroup_get_last_errno(void): api.c'],['../group__group__errors.html#ga29057c4aec05bef2b6bf2855ae5d5d46',1,'cgroup_get_last_errno(void): api.c']]], + ['cgroup_5fget_5fprocs_61',['cgroup_get_procs',['../group__group__groups.html#ga08a4fe913d59f61a39e61b8b02537dc2',1,'cgroup_get_procs(char *name, char *controller, pid_t **pids, int *size): api.c'],['../group__group__groups.html#ga08a4fe913d59f61a39e61b8b02537dc2',1,'cgroup_get_procs(char *name, char *controller, pid_t **pids, int *size): api.c']]], + ['cgroup_5fget_5fsubsys_5fmount_5fpoint_62',['cgroup_get_subsys_mount_point',['../group__group__init.html#ga4f061b353321b81869057970d96f09f7',1,'cgroup_get_subsys_mount_point(const char *controller, char **mount_point): api.c'],['../group__group__init.html#ga4f061b353321b81869057970d96f09f7',1,'cgroup_get_subsys_mount_point(const char *controller, char **mount_point): api.c']]], + ['cgroup_5fget_5fsubsys_5fmount_5fpoint_5fbegin_63',['cgroup_get_subsys_mount_point_begin',['../group__group__iterators.html#ga18a3c6fe7da42b9da96ce34dce1e31b8',1,'cgroup_get_subsys_mount_point_begin(const char *controller, void **handle, char *path): api.c'],['../group__group__iterators.html#ga18a3c6fe7da42b9da96ce34dce1e31b8',1,'cgroup_get_subsys_mount_point_begin(const char *controller, void **handle, char *path): api.c']]], + ['cgroup_5fget_5fsubsys_5fmount_5fpoint_5fend_64',['cgroup_get_subsys_mount_point_end',['../group__group__iterators.html#ga9c9b0f1921c205bd25bfc6c1d20486eb',1,'cgroup_get_subsys_mount_point_end(void **handle): api.c'],['../group__group__iterators.html#ga9c9b0f1921c205bd25bfc6c1d20486eb',1,'cgroup_get_subsys_mount_point_end(void **handle): api.c']]], + ['cgroup_5fget_5fsubsys_5fmount_5fpoint_5fnext_65',['cgroup_get_subsys_mount_point_next',['../group__group__iterators.html#ga3d66997158cb8a334317923ad94cc789',1,'cgroup_get_subsys_mount_point_next(void **handle, char *path): api.c'],['../group__group__iterators.html#ga3d66997158cb8a334317923ad94cc789',1,'cgroup_get_subsys_mount_point_next(void **handle, char *path): api.c']]], + ['cgroup_5fget_5ftask_5fbegin_66',['cgroup_get_task_begin',['../group__group__iterators.html#gad7218154192f733120e1025cc19d0a36',1,'cgroup_get_task_begin(const char *cgroup, const char *controller, void **handle, pid_t *pid): api.c'],['../group__group__iterators.html#gad7218154192f733120e1025cc19d0a36',1,'cgroup_get_task_begin(const char *cgroup, const char *controller, void **handle, pid_t *pid): api.c']]], + ['cgroup_5fget_5ftask_5fend_67',['cgroup_get_task_end',['../group__group__iterators.html#gaeb955e5f4da551268380b1271d478816',1,'cgroup_get_task_end(void **handle): api.c'],['../group__group__iterators.html#gaeb955e5f4da551268380b1271d478816',1,'cgroup_get_task_end(void **handle): api.c']]], + ['cgroup_5fget_5ftask_5fnext_68',['cgroup_get_task_next',['../group__group__iterators.html#gaf3a0364682b7449ddccfb0862bbb565e',1,'cgroup_get_task_next(void **handle, pid_t *pid): api.c'],['../group__group__iterators.html#gaf3a0364682b7449ddccfb0862bbb565e',1,'cgroup_get_task_next(void **handle, pid_t *pid): api.c']]], + ['cgroup_5fget_5fuid_5fgid_69',['cgroup_get_uid_gid',['../group__group__groups.html#ga007d21c304d9cc6e948dc0ae51ecfa86',1,'cgroup_get_uid_gid(struct cgroup *cgroup, uid_t *tasks_uid, gid_t *tasks_gid, uid_t *control_uid, gid_t *control_gid): wrapper.c'],['../group__group__groups.html#ga007d21c304d9cc6e948dc0ae51ecfa86',1,'cgroup_get_uid_gid(struct cgroup *cgroup, uid_t *tasks_uid, gid_t *tasks_gid, uid_t *control_uid, gid_t *control_gid): wrapper.c']]], + ['cgroup_5fget_5fvalue_5fbool_70',['cgroup_get_value_bool',['../group__group__groups.html#gab95007148eac89b7e935d93a4524787b',1,'cgroup_get_value_bool(struct cgroup_controller *controller, const char *name, bool *value): wrapper.c'],['../group__group__groups.html#gab95007148eac89b7e935d93a4524787b',1,'cgroup_get_value_bool(struct cgroup_controller *controller, const char *name, bool *value): wrapper.c']]], + ['cgroup_5fget_5fvalue_5fint64_71',['cgroup_get_value_int64',['../group__group__groups.html#ga0fe9b05f26b3cab21fc446c9a2700526',1,'cgroup_get_value_int64(struct cgroup_controller *controller, const char *name, int64_t *value): wrapper.c'],['../group__group__groups.html#ga0fe9b05f26b3cab21fc446c9a2700526',1,'cgroup_get_value_int64(struct cgroup_controller *controller, const char *name, int64_t *value): wrapper.c']]], + ['cgroup_5fget_5fvalue_5fname_72',['cgroup_get_value_name',['../group__group__groups.html#ga16ca75fd16eda7cfc642421111e9a331',1,'cgroup_get_value_name(struct cgroup_controller *controller, int index): wrapper.c'],['../group__group__groups.html#ga16ca75fd16eda7cfc642421111e9a331',1,'cgroup_get_value_name(struct cgroup_controller *controller, int index): wrapper.c']]], + ['cgroup_5fget_5fvalue_5fname_5fcount_73',['cgroup_get_value_name_count',['../group__group__groups.html#ga25115085978ce2a8d671e7876cc49c1d',1,'cgroup_get_value_name_count(struct cgroup_controller *controller): wrapper.c'],['../group__group__groups.html#ga25115085978ce2a8d671e7876cc49c1d',1,'cgroup_get_value_name_count(struct cgroup_controller *controller): wrapper.c']]], + ['cgroup_5fget_5fvalue_5fstring_74',['cgroup_get_value_string',['../group__group__groups.html#gafaa51e5ffe09f8ad05585a1d3b6f7fa9',1,'cgroup_get_value_string(struct cgroup_controller *controller, const char *name, char **value): wrapper.c'],['../group__group__groups.html#gafaa51e5ffe09f8ad05585a1d3b6f7fa9',1,'cgroup_get_value_string(struct cgroup_controller *controller, const char *name, char **value): wrapper.c']]], + ['cgroup_5fget_5fvalue_5fuint64_75',['cgroup_get_value_uint64',['../group__group__groups.html#ga951861259c0373895bfb637fce337312',1,'cgroup_get_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t *value): wrapper.c'],['../group__group__groups.html#ga951861259c0373895bfb637fce337312',1,'cgroup_get_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t *value): wrapper.c']]], + ['cgroup_5fgroup_5fspec_76',['cgroup_group_spec',['../structcgroup__group__spec.html',1,'']]], + ['cgroup_5finit_77',['cgroup_init',['../group__group__init.html#ga37740e2f5f298edf13e18fcd7632b75a',1,'cgroup_init(void): api.c'],['../group__group__init.html#ga37740e2f5f298edf13e18fcd7632b75a',1,'cgroup_init(void): api.c']]], + ['cgroup_5finit_5frules_5fcache_78',['cgroup_init_rules_cache',['../group__group__tasks.html#gad7fa5a2c4db08d31da5bfbecaf482d3d',1,'cgroup_init_rules_cache(void): api.c'],['../group__group__tasks.html#gad7fa5a2c4db08d31da5bfbecaf482d3d',1,'cgroup_init_rules_cache(void): api.c']]], + ['cgroup_5finit_5ftemplates_5fcache_79',['cgroup_init_templates_cache',['../group__group__config.html#ga6f8c41bb920565e674787fe6dabaef00',1,'cgroup_init_templates_cache(char *pathname): config.c'],['../group__group__config.html#ga6f8c41bb920565e674787fe6dabaef00',1,'cgroup_init_templates_cache(char *pathname): config.c']]], + ['cgroup_5fload_5ftemplates_5fcache_5ffrom_5ffiles_80',['cgroup_load_templates_cache_from_files',['../group__group__config.html#ga924860998c37da53cababe24163fc89b',1,'cgroup_load_templates_cache_from_files(int *file_index): config.c'],['../group__group__config.html#ga924860998c37da53cababe24163fc89b',1,'cgroup_load_templates_cache_from_files(int *file_index): config.c']]], + ['cgroup_5flog_81',['cgroup_log',['../group__group__log.html#gab514ad5d83422ddfe479bdf651e80958',1,'cgroup_log(int loglevel, const char *fmt,...): log.c'],['../group__group__log.html#gab514ad5d83422ddfe479bdf651e80958',1,'cgroup_log(int level, const char *fmt,...): log.c']]], + ['cgroup_5flog_5fdebug_82',['CGROUP_LOG_DEBUG',['../group__group__log.html#gga98b7aea5d23411e70c7e3da54d90233aa86b4157fb38d9f8053c6b7429bd26c72',1,'log.h']]], + ['cgroup_5flog_5ferror_83',['CGROUP_LOG_ERROR',['../group__group__log.html#gga98b7aea5d23411e70c7e3da54d90233aa4dd44215cd3553e79dbf91eb9ca418a2',1,'log.h']]], + ['cgroup_5flog_5finfo_84',['CGROUP_LOG_INFO',['../group__group__log.html#gga98b7aea5d23411e70c7e3da54d90233aad66ab51dba078ffc3b1c6d397053f9e2',1,'log.h']]], + ['cgroup_5flog_5flevel_85',['cgroup_log_level',['../group__group__log.html#ga98b7aea5d23411e70c7e3da54d90233a',1,'log.h']]], + ['cgroup_5flog_5fwarning_86',['CGROUP_LOG_WARNING',['../group__group__log.html#gga98b7aea5d23411e70c7e3da54d90233aaa99ec9e854a543901bddf854d1960057',1,'log.h']]], + ['cgroup_5fmodify_5fcgroup_87',['cgroup_modify_cgroup',['../group__group__groups.html#ga31ba5e865ae8d58b4453c0ef06d2c071',1,'cgroup_modify_cgroup(struct cgroup *cgroup): api.c'],['../group__group__groups.html#ga31ba5e865ae8d58b4453c0ef06d2c071',1,'cgroup_modify_cgroup(struct cgroup *cgroup): api.c']]], + ['cgroup_5fmount_5fpoint_88',['cgroup_mount_point',['../structcgroup__mount__point.html',1,'']]], + ['cgroup_5fnew_5fcgroup_89',['cgroup_new_cgroup',['../group__group__groups.html#ga6cd4733e5982ac2c92ee3cb3dbd10a31',1,'cgroup_new_cgroup(const char *name): wrapper.c'],['../group__group__groups.html#ga6cd4733e5982ac2c92ee3cb3dbd10a31',1,'cgroup_new_cgroup(const char *name): wrapper.c']]], + ['cgroup_5fparse_5flog_5flevel_5fstr_90',['cgroup_parse_log_level_str',['../group__group__log.html#gaa364a06aee0e99228a1e6a26b25a9794',1,'cgroup_parse_log_level_str(const char *levelstr): log.c'],['../group__group__log.html#gaa364a06aee0e99228a1e6a26b25a9794',1,'cgroup_parse_log_level_str(const char *levelstr): log.c']]], + ['cgroup_5fprint_5frules_5fconfig_91',['cgroup_print_rules_config',['../group__group__tasks.html#gac4e3f29cfbdc3d77f08c9fe60857274a',1,'cgroup_print_rules_config(FILE *fp): api.c'],['../group__group__tasks.html#gac4e3f29cfbdc3d77f08c9fe60857274a',1,'cgroup_print_rules_config(FILE *fp): api.c']]], + ['cgroup_5fread_5fstats_5fbegin_92',['cgroup_read_stats_begin',['../group__group__iterators.html#ga1138e47f124f0f634586db5e0c4ae5de',1,'cgroup_read_stats_begin(const char *controller, const char *path, void **handle, struct cgroup_stat *stat): api.c'],['../group__group__iterators.html#ga1138e47f124f0f634586db5e0c4ae5de',1,'cgroup_read_stats_begin(const char *controller, const char *path, void **handle, struct cgroup_stat *cgroup_stat): api.c']]], + ['cgroup_5fread_5fstats_5fend_93',['cgroup_read_stats_end',['../group__group__iterators.html#gaba386d9db6cadc6ad85c2552f63447bb',1,'cgroup_read_stats_end(void **handle): api.c'],['../group__group__iterators.html#gaba386d9db6cadc6ad85c2552f63447bb',1,'cgroup_read_stats_end(void **handle): api.c']]], + ['cgroup_5fread_5fstats_5fnext_94',['cgroup_read_stats_next',['../group__group__iterators.html#gaf95587508fc15d74fd5ed0df58024be7',1,'cgroup_read_stats_next(void **handle, struct cgroup_stat *cgroup_stat): api.c'],['../group__group__iterators.html#gaf95587508fc15d74fd5ed0df58024be7',1,'cgroup_read_stats_next(void **handle, struct cgroup_stat *stat): api.c']]], + ['cgroup_5fread_5fvalue_5fbegin_95',['cgroup_read_value_begin',['../group__group__iterators.html#ga73edb115af6779644d3371b12cf09140',1,'cgroup_read_value_begin(const char *controller, const char *path, char *name, void **handle, char *buffer, int max): api.c'],['../group__group__iterators.html#ga73edb115af6779644d3371b12cf09140',1,'cgroup_read_value_begin(const char *controller, const char *path, char *name, void **handle, char *buffer, int max): api.c']]], + ['cgroup_5fread_5fvalue_5fend_96',['cgroup_read_value_end',['../group__group__iterators.html#gad348f041e283860cbf6bcea567e23a21',1,'cgroup_read_value_end(void **handle): api.c'],['../group__group__iterators.html#gad348f041e283860cbf6bcea567e23a21',1,'cgroup_read_value_end(void **handle): api.c']]], + ['cgroup_5fread_5fvalue_5fnext_97',['cgroup_read_value_next',['../group__group__iterators.html#gaced2fe331f19d599a3270db2440847cc',1,'cgroup_read_value_next(void **handle, char *buffer, int max): api.c'],['../group__group__iterators.html#gaced2fe331f19d599a3270db2440847cc',1,'cgroup_read_value_next(void **handle, char *buffer, int max): api.c']]], + ['cgroup_5fregister_5funchanged_5fprocess_98',['cgroup_register_unchanged_process',['../group__group__tasks.html#ga64f7967d6d5edfff9afddaa6a6974b1c',1,'cgroup_register_unchanged_process(pid_t pid, int flags): api.c'],['../group__group__tasks.html#ga64f7967d6d5edfff9afddaa6a6974b1c',1,'cgroup_register_unchanged_process(pid_t pid, int flags): api.c']]], + ['cgroup_5freload_5fcached_5frules_99',['cgroup_reload_cached_rules',['../group__group__tasks.html#gaf81ebd9cb5575c75b4c85f385ebda1ce',1,'cgroup_reload_cached_rules(void): api.c'],['../group__group__tasks.html#gaf81ebd9cb5575c75b4c85f385ebda1ce',1,'cgroup_reload_cached_rules(void): api.c']]], + ['cgroup_5freload_5fcached_5ftemplates_100',['cgroup_reload_cached_templates',['../group__group__config.html#ga89fe0d7943b29cc10d57b07abcdfa7b5',1,'cgroup_reload_cached_templates(char *pathname): config.c'],['../group__group__config.html#ga89fe0d7943b29cc10d57b07abcdfa7b5',1,'cgroup_reload_cached_templates(char *pathname): config.c']]], + ['cgroup_5frule_101',['cgroup_rule',['../structcgroup__rule.html',1,'']]], + ['cgroup_5frule_5flist_102',['cgroup_rule_list',['../structcgroup__rule__list.html',1,'']]], + ['cgroup_5frules_5fdata_103',['cgroup_rules_data',['../structcgroup__rules__data.html',1,'']]], + ['cgroup_5fset_5fdefault_5flogger_104',['cgroup_set_default_logger',['../group__group__log.html#gab1457ce518dcde0b9f3c14ec9efa2de7',1,'cgroup_set_default_logger(int loglevel): log.c'],['../group__group__log.html#gab1457ce518dcde0b9f3c14ec9efa2de7',1,'cgroup_set_default_logger(int level): log.c']]], + ['cgroup_5fset_5flogger_105',['cgroup_set_logger',['../group__group__log.html#ga76d7032206f9b9d1c0be1a71a68c43d0',1,'cgroup_set_logger(cgroup_logger_callback logger, int loglevel, void *userdata): log.c'],['../group__group__log.html#ga76d7032206f9b9d1c0be1a71a68c43d0',1,'cgroup_set_logger(cgroup_logger_callback logger, int loglevel, void *userdata): log.c']]], + ['cgroup_5fset_5floglevel_106',['cgroup_set_loglevel',['../group__group__log.html#gaac5fe2352800ff62465a5abe649d5b8c',1,'cgroup_set_loglevel(int loglevel): log.c'],['../group__group__log.html#gaac5fe2352800ff62465a5abe649d5b8c',1,'cgroup_set_loglevel(int loglevel): log.c']]], + ['cgroup_5fset_5fpermissions_107',['cgroup_set_permissions',['../group__group__groups.html#gaa0400f1ff2fba7fbb6db82d97039d92b',1,'cgroup_set_permissions(struct cgroup *cgroup, mode_t control_dperm, mode_t control_fperm, mode_t task_fperm): api.c'],['../group__group__groups.html#gaa0400f1ff2fba7fbb6db82d97039d92b',1,'cgroup_set_permissions(struct cgroup *cgroup, mode_t control_dperm, mode_t control_fperm, mode_t task_fperm): api.c']]], + ['cgroup_5fset_5fuid_5fgid_108',['cgroup_set_uid_gid',['../group__group__groups.html#ga53b9e13e30660c805ab5773d69397a43',1,'cgroup_set_uid_gid(struct cgroup *cgroup, uid_t tasks_uid, gid_t tasks_gid, uid_t control_uid, gid_t control_gid): wrapper.c'],['../group__group__groups.html#ga53b9e13e30660c805ab5773d69397a43',1,'cgroup_set_uid_gid(struct cgroup *cgroup, uid_t tasks_uid, gid_t tasks_gid, uid_t control_uid, gid_t control_gid): wrapper.c']]], + ['cgroup_5fset_5fvalue_5fbool_109',['cgroup_set_value_bool',['../group__group__groups.html#gafb24892bc221cffee0f5fe07f64d54d7',1,'cgroup_set_value_bool(struct cgroup_controller *controller, const char *name, bool value): wrapper.c'],['../group__group__groups.html#gafb24892bc221cffee0f5fe07f64d54d7',1,'cgroup_set_value_bool(struct cgroup_controller *controller, const char *name, bool value): wrapper.c']]], + ['cgroup_5fset_5fvalue_5fint64_110',['cgroup_set_value_int64',['../group__group__groups.html#gaa5c39e51035cc43dd26a3c620441a956',1,'cgroup_set_value_int64(struct cgroup_controller *controller, const char *name, int64_t value): wrapper.c'],['../group__group__groups.html#gaa5c39e51035cc43dd26a3c620441a956',1,'cgroup_set_value_int64(struct cgroup_controller *controller, const char *name, int64_t value): wrapper.c']]], + ['cgroup_5fset_5fvalue_5fstring_111',['cgroup_set_value_string',['../group__group__groups.html#ga938febc02b59cbeb8e4ceb2dc7fdac82',1,'cgroup_set_value_string(struct cgroup_controller *controller, const char *name, const char *value): wrapper.c'],['../group__group__groups.html#ga938febc02b59cbeb8e4ceb2dc7fdac82',1,'cgroup_set_value_string(struct cgroup_controller *controller, const char *name, const char *value): wrapper.c']]], + ['cgroup_5fset_5fvalue_5fuint64_112',['cgroup_set_value_uint64',['../group__group__groups.html#gade01aa1fe30ccc968af9fe8a3bc821e5',1,'cgroup_set_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t value): wrapper.c'],['../group__group__groups.html#gade01aa1fe30ccc968af9fe8a3bc821e5',1,'cgroup_set_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t value): wrapper.c']]], + ['cgroup_5fstat_113',['cgroup_stat',['../structcgroup__stat.html',1,'']]], + ['cgroup_5fstrerror_114',['cgroup_strerror',['../group__group__errors.html#gaeae1d51db8528c89d84501c745020e6b',1,'cgroup_strerror(int code): api.c'],['../group__group__errors.html#gaeae1d51db8528c89d84501c745020e6b',1,'cgroup_strerror(int code): api.c']]], + ['cgroup_5fstring_5flist_115',['cgroup_string_list',['../structcgroup__string__list.html',1,'']]], + ['cgroup_5ftemplates_5fcache_5fset_5fsource_5ffiles_116',['cgroup_templates_cache_set_source_files',['../group__group__config.html#gacb09024dc469a1a1ff8cdebd8d0ab422',1,'cgroup_templates_cache_set_source_files(struct cgroup_string_list *tmpl_files): config.c'],['../group__group__config.html#gacb09024dc469a1a1ff8cdebd8d0ab422',1,'cgroup_templates_cache_set_source_files(struct cgroup_string_list *tmpl_files): config.c']]], + ['cgroup_5ftree_5fhandle_117',['cgroup_tree_handle',['../structcgroup__tree__handle.html',1,'']]], + ['cgroup_5funload_5fcgroups_118',['cgroup_unload_cgroups',['../group__group__config.html#ga85b285712354faca495193075035938d',1,'cgroup_unload_cgroups(void): config.c'],['../group__group__config.html#ga85b285712354faca495193075035938d',1,'cgroup_unload_cgroups(void): config.c']]], + ['cgroup_5fwalk_5ftree_5fbegin_119',['cgroup_walk_tree_begin',['../group__group__iterators.html#ga7b19f10c06abb96d8c8ae88a04888a68',1,'cgroup_walk_tree_begin(const char *controller, const char *base_path, int depth, void **handle, struct cgroup_file_info *info, int *base_level): api.c'],['../group__group__iterators.html#ga7b19f10c06abb96d8c8ae88a04888a68',1,'cgroup_walk_tree_begin(const char *controller, const char *base_path, int depth, void **handle, struct cgroup_file_info *info, int *base_level): api.c']]], + ['cgroup_5fwalk_5ftree_5fend_120',['cgroup_walk_tree_end',['../group__group__iterators.html#ga09a70990837a58e506a264f8c50d4cde',1,'cgroup_walk_tree_end(void **handle): api.c'],['../group__group__iterators.html#ga09a70990837a58e506a264f8c50d4cde',1,'cgroup_walk_tree_end(void **handle): api.c']]], + ['cgroup_5fwalk_5ftree_5fnext_121',['cgroup_walk_tree_next',['../group__group__iterators.html#ga527f5499b0aa04d325074435baebdff1',1,'cgroup_walk_tree_next(int depth, void **handle, struct cgroup_file_info *info, int base_level): api.c'],['../group__group__iterators.html#ga527f5499b0aa04d325074435baebdff1',1,'cgroup_walk_tree_next(int depth, void **handle, struct cgroup_file_info *info, int base_level): api.c']]], + ['cgroup_5fwalk_5ftree_5fset_5fflags_122',['cgroup_walk_tree_set_flags',['../group__group__iterators.html#ga645ec7a6206dffb32667e7a0e148edc8',1,'cgroup_walk_tree_set_flags(void **handle, int flags): api.c'],['../group__group__iterators.html#ga645ec7a6206dffb32667e7a0e148edc8',1,'cgroup_walk_tree_set_flags(void **handle, int flags): api.c']]], + ['cgroup_5fwalk_5ftype_123',['cgroup_walk_type',['../group__group__iterators.html#ga29a572cbc0c07e2b02dfa0f1ac0067d3',1,'iterators.h']]], + ['cgroup_5fwalk_5ftype_5fpost_5fdir_124',['CGROUP_WALK_TYPE_POST_DIR',['../group__group__iterators.html#gga29a572cbc0c07e2b02dfa0f1ac0067d3abf3c31227768960bd6622d2562aae3e1',1,'iterators.h']]], + ['cgroup_5fwalk_5ftype_5fpre_5fdir_125',['CGROUP_WALK_TYPE_PRE_DIR',['../group__group__iterators.html#gga29a572cbc0c07e2b02dfa0f1ac0067d3af865296e6a0e55cff574fbb132b9f913',1,'iterators.h']]], + ['control_5fvalue_126',['control_value',['../structcontrol__value.html',1,'']]], + ['controller_5fdata_127',['controller_data',['../structcontroller__data.html',1,'']]] +]; diff --git a/search/all_a.html b/search/all_a.html new file mode 100644 index 00000000..3a6cac10 --- /dev/null +++ b/search/all_a.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 00000000..3659b192 --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['depth_128',['depth',['../structcgroup__file__info.html#ad56dca35266f0f5f5c2666b946d72709',1,'cgroup_file_info']]] +]; diff --git a/search/all_b.html b/search/all_b.html new file mode 100644 index 00000000..130deb4e --- /dev/null +++ b/search/all_b.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 00000000..22a3e5ef --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['ecgconfigparsefail_129',['ECGCONFIGPARSEFAIL',['../group__group__errors.html#gga06fc87d81c62e9abb8790b6e5713c55baf808b0e31be4bfbe8a21f800f913f9c0',1,'error.h']]], + ['ecgeof_130',['ECGEOF',['../group__group__errors.html#gga06fc87d81c62e9abb8790b6e5713c55ba2724c2f0af0d3e3cea66027f6bf2e436',1,'error.h']]], + ['ecgnonempty_131',['ECGNONEMPTY',['../group__group__errors.html#gga06fc87d81c62e9abb8790b6e5713c55ba94dbe90328ef8a212633ec464b9b9b11',1,'error.h']]], + ['ecgother_132',['ECGOTHER',['../group__group__errors.html#gga06fc87d81c62e9abb8790b6e5713c55ba88111f9ca2e967cbf7565724444c0193',1,'error.h']]], + ['ecgroupmultimounted_133',['ECGROUPMULTIMOUNTED',['../group__group__errors.html#gga06fc87d81c62e9abb8790b6e5713c55ba24a6584dd4238475a4e247bdf6956def',1,'error.h']]], + ['ecgroupnorules_134',['ECGROUPNORULES',['../group__group__errors.html#gga06fc87d81c62e9abb8790b6e5713c55ba7c23c1a7cbfb7e8e9c66dd96b5c66d21',1,'error.h']]], + ['ecgroupparsefail_135',['ECGROUPPARSEFAIL',['../group__group__errors.html#gga06fc87d81c62e9abb8790b6e5713c55bac62bda67f3029c39ef456100008b1f39',1,'error.h']]], + ['ecgrulesparsefail_136',['ECGRULESPARSEFAIL',['../group__group__errors.html#ga515eba7218b187ffe263b7d9ecb3ac1b',1,'error.h']]], + ['enabled_137',['enabled',['../structcontroller__data.html#a24be412cfb6c19f7a13a4bff9e55206e',1,'controller_data']]], + ['ext_5fcgroup_5frecord_138',['ext_cgroup_record',['../structext__cgroup__record.html',1,'']]] +]; diff --git a/search/all_c.html b/search/all_c.html new file mode 100644 index 00000000..3dd5af06 --- /dev/null +++ b/search/all_c.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 00000000..a40885f4 --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['full_5fpath_139',['full_path',['../structcgroup__file__info.html#a4c61dc7f726ba0784ff8c71473dbc6e6',1,'cgroup_file_info']]] +]; diff --git a/search/all_d.html b/search/all_d.html new file mode 100644 index 00000000..af7f2f0f --- /dev/null +++ b/search/all_d.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 00000000..a1363670 --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['hierarchy_140',['hierarchy',['../structcontroller__data.html#a25e316f55473ca2b333b0d7e0ca644b4',1,'controller_data']]], + ['how_20to_20contribute_20to_20the_20libcgroup_20project_141',['How to Contribute to the libcgroup Project',['../md_CONTRIBUTING.html',1,'']]] +]; diff --git a/search/all_e.html b/search/all_e.html new file mode 100644 index 00000000..e25df423 --- /dev/null +++ b/search/all_e.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 00000000..4202531a --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['libcgroup_142',['libcgroup',['../index.html',1,'']]] +]; diff --git a/search/all_f.html b/search/all_f.html new file mode 100644 index 00000000..b23da6ce --- /dev/null +++ b/search/all_f.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 00000000..cfc39d8e --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mount_143',['mount',['../structcg__mount__table__s.html#a9704fa3ec3674f6d433345ea52b6aeef',1,'cg_mount_table_s']]] +]; diff --git a/search/classes_0.html b/search/classes_0.html new file mode 100644 index 00000000..af8159ee --- /dev/null +++ b/search/classes_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 00000000..682df078 --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['array_5fparent_5finfo_155',['array_parent_info',['../structarray__parent__info.html',1,'']]], + ['array_5funchanged_156',['array_unchanged',['../structarray__unchanged.html',1,'']]] +]; diff --git a/search/classes_1.html b/search/classes_1.html new file mode 100644 index 00000000..576e9168 --- /dev/null +++ b/search/classes_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 00000000..0eb0e162 --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['black_5flist_5ftype_157',['black_list_type',['../structblack__list__type.html',1,'']]] +]; diff --git a/search/classes_2.html b/search/classes_2.html new file mode 100644 index 00000000..956405e5 --- /dev/null +++ b/search/classes_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 00000000..298768ce --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['cg_5fmount_5fpoint_158',['cg_mount_point',['../structcg__mount__point.html',1,'']]], + ['cg_5fmount_5ftable_5fs_159',['cg_mount_table_s',['../structcg__mount__table__s.html',1,'']]], + ['cgroup_160',['cgroup',['../structcgroup.html',1,'']]], + ['cgroup_5fcontroller_161',['cgroup_controller',['../structcgroup__controller.html',1,'']]], + ['cgroup_5fdictionary_162',['cgroup_dictionary',['../structcgroup__dictionary.html',1,'']]], + ['cgroup_5fdictionary_5fitem_163',['cgroup_dictionary_item',['../structcgroup__dictionary__item.html',1,'']]], + ['cgroup_5fdictionary_5fiterator_164',['cgroup_dictionary_iterator',['../structcgroup__dictionary__iterator.html',1,'']]], + ['cgroup_5ffile_5finfo_165',['cgroup_file_info',['../structcgroup__file__info.html',1,'']]], + ['cgroup_5fgroup_5fspec_166',['cgroup_group_spec',['../structcgroup__group__spec.html',1,'']]], + ['cgroup_5fmount_5fpoint_167',['cgroup_mount_point',['../structcgroup__mount__point.html',1,'']]], + ['cgroup_5frule_168',['cgroup_rule',['../structcgroup__rule.html',1,'']]], + ['cgroup_5frule_5flist_169',['cgroup_rule_list',['../structcgroup__rule__list.html',1,'']]], + ['cgroup_5frules_5fdata_170',['cgroup_rules_data',['../structcgroup__rules__data.html',1,'']]], + ['cgroup_5fstat_171',['cgroup_stat',['../structcgroup__stat.html',1,'']]], + ['cgroup_5fstring_5flist_172',['cgroup_string_list',['../structcgroup__string__list.html',1,'']]], + ['cgroup_5ftree_5fhandle_173',['cgroup_tree_handle',['../structcgroup__tree__handle.html',1,'']]], + ['control_5fvalue_174',['control_value',['../structcontrol__value.html',1,'']]], + ['controller_5fdata_175',['controller_data',['../structcontroller__data.html',1,'']]] +]; diff --git a/search/classes_3.html b/search/classes_3.html new file mode 100644 index 00000000..d33343bc --- /dev/null +++ b/search/classes_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 00000000..4f3c6592 --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ext_5fcgroup_5frecord_176',['ext_cgroup_record',['../structext__cgroup__record.html',1,'']]] +]; diff --git a/search/classes_4.html b/search/classes_4.html new file mode 100644 index 00000000..8430b07f --- /dev/null +++ b/search/classes_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_4.js b/search/classes_4.js new file mode 100644 index 00000000..f401d732 --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['parent_5finfo_177',['parent_info',['../structparent__info.html',1,'']]] +]; diff --git a/search/classes_5.html b/search/classes_5.html new file mode 100644 index 00000000..c2f1b767 --- /dev/null +++ b/search/classes_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/classes_5.js b/search/classes_5.js new file mode 100644 index 00000000..931696cb --- /dev/null +++ b/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unchanged_5fpid_178',['unchanged_pid',['../structunchanged__pid.html',1,'']]] +]; diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 00000000..a933eea1 --- /dev/null +++ b/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/search/enums_0.html b/search/enums_0.html new file mode 100644 index 00000000..141fff57 --- /dev/null +++ b/search/enums_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enums_0.js b/search/enums_0.js new file mode 100644 index 00000000..d4d54dfc --- /dev/null +++ b/search/enums_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['cgroup_5ffile_5ftype_276',['cgroup_file_type',['../group__group__iterators.html#ga608b4aa32e2db58fed34771a6a272444',1,'iterators.h']]], + ['cgroup_5flog_5flevel_277',['cgroup_log_level',['../group__group__log.html#ga98b7aea5d23411e70c7e3da54d90233a',1,'log.h']]], + ['cgroup_5fwalk_5ftype_278',['cgroup_walk_type',['../group__group__iterators.html#ga29a572cbc0c07e2b02dfa0f1ac0067d3',1,'iterators.h']]] +]; diff --git a/search/enumvalues_0.html b/search/enumvalues_0.html new file mode 100644 index 00000000..0d131d95 --- /dev/null +++ b/search/enumvalues_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_0.js b/search/enumvalues_0.js new file mode 100644 index 00000000..9db91aee --- /dev/null +++ b/search/enumvalues_0.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['cgroup_5ffile_5ftype_5fdir_279',['CGROUP_FILE_TYPE_DIR',['../group__group__iterators.html#gga608b4aa32e2db58fed34771a6a272444a5418798fc4bf9634429c6af167a0e7c3',1,'iterators.h']]], + ['cgroup_5ffile_5ftype_5ffile_280',['CGROUP_FILE_TYPE_FILE',['../group__group__iterators.html#gga608b4aa32e2db58fed34771a6a272444ad925cc45f1b34fe80e14fc6b05269740',1,'iterators.h']]], + ['cgroup_5ffile_5ftype_5fother_281',['CGROUP_FILE_TYPE_OTHER',['../group__group__iterators.html#gga608b4aa32e2db58fed34771a6a272444a24e202c59f318e63ad8cafcc1b4b102b',1,'iterators.h']]], + ['cgroup_5flog_5fdebug_282',['CGROUP_LOG_DEBUG',['../group__group__log.html#gga98b7aea5d23411e70c7e3da54d90233aa86b4157fb38d9f8053c6b7429bd26c72',1,'log.h']]], + ['cgroup_5flog_5ferror_283',['CGROUP_LOG_ERROR',['../group__group__log.html#gga98b7aea5d23411e70c7e3da54d90233aa4dd44215cd3553e79dbf91eb9ca418a2',1,'log.h']]], + ['cgroup_5flog_5finfo_284',['CGROUP_LOG_INFO',['../group__group__log.html#gga98b7aea5d23411e70c7e3da54d90233aad66ab51dba078ffc3b1c6d397053f9e2',1,'log.h']]], + ['cgroup_5flog_5fwarning_285',['CGROUP_LOG_WARNING',['../group__group__log.html#gga98b7aea5d23411e70c7e3da54d90233aaa99ec9e854a543901bddf854d1960057',1,'log.h']]], + ['cgroup_5fwalk_5ftype_5fpost_5fdir_286',['CGROUP_WALK_TYPE_POST_DIR',['../group__group__iterators.html#gga29a572cbc0c07e2b02dfa0f1ac0067d3abf3c31227768960bd6622d2562aae3e1',1,'iterators.h']]], + ['cgroup_5fwalk_5ftype_5fpre_5fdir_287',['CGROUP_WALK_TYPE_PRE_DIR',['../group__group__iterators.html#gga29a572cbc0c07e2b02dfa0f1ac0067d3af865296e6a0e55cff574fbb132b9f913',1,'iterators.h']]] +]; diff --git a/search/enumvalues_1.html b/search/enumvalues_1.html new file mode 100644 index 00000000..cd9187ab --- /dev/null +++ b/search/enumvalues_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/enumvalues_1.js b/search/enumvalues_1.js new file mode 100644 index 00000000..f8a5caad --- /dev/null +++ b/search/enumvalues_1.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['ecgconfigparsefail_288',['ECGCONFIGPARSEFAIL',['../group__group__errors.html#gga06fc87d81c62e9abb8790b6e5713c55baf808b0e31be4bfbe8a21f800f913f9c0',1,'error.h']]], + ['ecgeof_289',['ECGEOF',['../group__group__errors.html#gga06fc87d81c62e9abb8790b6e5713c55ba2724c2f0af0d3e3cea66027f6bf2e436',1,'error.h']]], + ['ecgnonempty_290',['ECGNONEMPTY',['../group__group__errors.html#gga06fc87d81c62e9abb8790b6e5713c55ba94dbe90328ef8a212633ec464b9b9b11',1,'error.h']]], + ['ecgother_291',['ECGOTHER',['../group__group__errors.html#gga06fc87d81c62e9abb8790b6e5713c55ba88111f9ca2e967cbf7565724444c0193',1,'error.h']]], + ['ecgroupmultimounted_292',['ECGROUPMULTIMOUNTED',['../group__group__errors.html#gga06fc87d81c62e9abb8790b6e5713c55ba24a6584dd4238475a4e247bdf6956def',1,'error.h']]], + ['ecgroupnorules_293',['ECGROUPNORULES',['../group__group__errors.html#gga06fc87d81c62e9abb8790b6e5713c55ba7c23c1a7cbfb7e8e9c66dd96b5c66d21',1,'error.h']]], + ['ecgroupparsefail_294',['ECGROUPPARSEFAIL',['../group__group__errors.html#gga06fc87d81c62e9abb8790b6e5713c55bac62bda67f3029c39ef456100008b1f39',1,'error.h']]] +]; diff --git a/search/functions_0.html b/search/functions_0.html new file mode 100644 index 00000000..eb4c5014 --- /dev/null +++ b/search/functions_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 00000000..10dc0f8d --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,90 @@ +var searchData= +[ + ['cg_5fchmod_5frecursive_179',['cg_chmod_recursive',['../group__group__groups.html#gaef0bf6cd480f2dcb5e964de151a27dd1',1,'cg_chmod_recursive(struct cgroup *cgroup, mode_t dir_mode, int dirm_change, mode_t file_mode, int filem_change): api.c'],['../group__group__groups.html#gaef0bf6cd480f2dcb5e964de151a27dd1',1,'cg_chmod_recursive(struct cgroup *cgroup, mode_t dir_mode, int dirm_change, mode_t file_mode, int filem_change): api.c']]], + ['cgroup_5fadd_5fall_5fcontrollers_180',['cgroup_add_all_controllers',['../group__group__groups.html#gae870d271b789b5c54c2e3d35de3cd6f9',1,'cgroup_add_all_controllers(struct cgroup *cgroup): wrapper.c'],['../group__group__groups.html#gae870d271b789b5c54c2e3d35de3cd6f9',1,'cgroup_add_all_controllers(struct cgroup *cgroup): wrapper.c']]], + ['cgroup_5fadd_5fcontroller_181',['cgroup_add_controller',['../group__group__groups.html#gaa2f9c2ac75fd7e56e5ec6fb970304130',1,'cgroup_add_controller(struct cgroup *cgroup, const char *name): wrapper.c'],['../group__group__groups.html#gaa2f9c2ac75fd7e56e5ec6fb970304130',1,'cgroup_add_controller(struct cgroup *cgroup, const char *name): wrapper.c']]], + ['cgroup_5fadd_5fvalue_5fbool_182',['cgroup_add_value_bool',['../group__group__groups.html#ga4b191a600f84b00ea7afd12c01d918f3',1,'cgroup_add_value_bool(struct cgroup_controller *controller, const char *name, bool value): wrapper.c'],['../group__group__groups.html#ga4b191a600f84b00ea7afd12c01d918f3',1,'cgroup_add_value_bool(struct cgroup_controller *controller, const char *name, bool value): wrapper.c']]], + ['cgroup_5fadd_5fvalue_5fint64_183',['cgroup_add_value_int64',['../group__group__groups.html#ga6c973bb5ce99e7a91def2032f23d7087',1,'cgroup_add_value_int64(struct cgroup_controller *controller, const char *name, int64_t value): wrapper.c'],['../group__group__groups.html#ga6c973bb5ce99e7a91def2032f23d7087',1,'cgroup_add_value_int64(struct cgroup_controller *controller, const char *name, int64_t value): wrapper.c']]], + ['cgroup_5fadd_5fvalue_5fstring_184',['cgroup_add_value_string',['../group__group__groups.html#ga4817c68ab791c09c07b663c29b3fb029',1,'cgroup_add_value_string(struct cgroup_controller *controller, const char *name, const char *value): wrapper.c'],['../group__group__groups.html#ga4817c68ab791c09c07b663c29b3fb029',1,'cgroup_add_value_string(struct cgroup_controller *controller, const char *name, const char *value): wrapper.c']]], + ['cgroup_5fadd_5fvalue_5fuint64_185',['cgroup_add_value_uint64',['../group__group__groups.html#gad9d2216205b96278c626122f8d5e63bb',1,'cgroup_add_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t value): wrapper.c'],['../group__group__groups.html#gad9d2216205b96278c626122f8d5e63bb',1,'cgroup_add_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t value): wrapper.c']]], + ['cgroup_5fattach_5ftask_186',['cgroup_attach_task',['../group__group__tasks.html#ga43414ac2b1fc73bbb46b6278c7500188',1,'cgroup_attach_task(struct cgroup *cgroup): api.c'],['../group__group__tasks.html#ga43414ac2b1fc73bbb46b6278c7500188',1,'cgroup_attach_task(struct cgroup *cgroup): api.c']]], + ['cgroup_5fattach_5ftask_5fpid_187',['cgroup_attach_task_pid',['../group__group__tasks.html#ga9c7532681986d156ac3f6bac1fcf6aab',1,'cgroup_attach_task_pid(struct cgroup *cgroup, pid_t tid): api.c'],['../group__group__tasks.html#ga9c7532681986d156ac3f6bac1fcf6aab',1,'cgroup_attach_task_pid(struct cgroup *cgroup, pid_t tid): api.c']]], + ['cgroup_5fchange_5fall_5fcgroups_188',['cgroup_change_all_cgroups',['../group__group__tasks.html#gafc69658b012b6f1c11ba078ffccd70a2',1,'cgroup_change_all_cgroups(void): api.c'],['../group__group__tasks.html#gafc69658b012b6f1c11ba078ffccd70a2',1,'cgroup_change_all_cgroups(void): api.c']]], + ['cgroup_5fchange_5fcgroup_5fflags_189',['cgroup_change_cgroup_flags',['../group__group__tasks.html#ga368e7b8e19b3943ab6fb50e76a09e6ea',1,'cgroup_change_cgroup_flags(uid_t uid, gid_t gid, const char *procname, pid_t pid, int flags): api.c'],['../group__group__tasks.html#ga368e7b8e19b3943ab6fb50e76a09e6ea',1,'cgroup_change_cgroup_flags(uid_t uid, gid_t gid, const char *procname, pid_t pid, int flags): api.c']]], + ['cgroup_5fchange_5fcgroup_5fpath_190',['cgroup_change_cgroup_path',['../group__group__tasks.html#ga2d4677baef780c003fc6fba6b5dc78f2',1,'cgroup_change_cgroup_path(const char *path, pid_t pid, const char *const controllers[]): api.c'],['../group__group__tasks.html#ga2d4677baef780c003fc6fba6b5dc78f2',1,'cgroup_change_cgroup_path(const char *dest, pid_t pid, const char *const controllers[]): api.c']]], + ['cgroup_5fchange_5fcgroup_5fuid_5fgid_191',['cgroup_change_cgroup_uid_gid',['../group__group__tasks.html#ga5eab78a922dbacd368360f03c70146be',1,'cgroup_change_cgroup_uid_gid(uid_t uid, gid_t gid, pid_t pid): api.c'],['../group__group__tasks.html#ga5eab78a922dbacd368360f03c70146be',1,'cgroup_change_cgroup_uid_gid(uid_t uid, gid_t gid, pid_t pid): api.c']]], + ['cgroup_5fchange_5fcgroup_5fuid_5fgid_5fflags_192',['cgroup_change_cgroup_uid_gid_flags',['../group__group__tasks.html#gae472183a7c9a37826ef15c77014c47fb',1,'cgroup_change_cgroup_uid_gid_flags(uid_t uid, gid_t gid, pid_t pid, int flags): api.c'],['../group__group__tasks.html#gae472183a7c9a37826ef15c77014c47fb',1,'cgroup_change_cgroup_uid_gid_flags(uid_t uid, gid_t gid, pid_t pid, int flags): api.c']]], + ['cgroup_5fcompare_5fcgroup_193',['cgroup_compare_cgroup',['../group__group__groups.html#ga86898b59e50335f99fe84a11fa38d3fc',1,'cgroup_compare_cgroup(struct cgroup *cgroup_a, struct cgroup *cgroup_b): wrapper.c'],['../group__group__groups.html#ga86898b59e50335f99fe84a11fa38d3fc',1,'cgroup_compare_cgroup(struct cgroup *cgroup_a, struct cgroup *cgroup_b): wrapper.c']]], + ['cgroup_5fcompare_5fcontrollers_194',['cgroup_compare_controllers',['../group__group__groups.html#gab1725c50c49cec4b0bdad1f26b150ca7',1,'cgroup_compare_controllers(struct cgroup_controller *cgca, struct cgroup_controller *cgcb): wrapper.c'],['../group__group__groups.html#gab1725c50c49cec4b0bdad1f26b150ca7',1,'cgroup_compare_controllers(struct cgroup_controller *cgca, struct cgroup_controller *cgcb): wrapper.c']]], + ['cgroup_5fconfig_5fcreate_5ftemplate_5fgroup_195',['cgroup_config_create_template_group',['../group__group__config.html#ga72066260cd31ceed7ecc1a648eba37f2',1,'cgroup_config_create_template_group(struct cgroup *cgroup, char *template_name, int flags): config.c'],['../group__group__config.html#ga72066260cd31ceed7ecc1a648eba37f2',1,'cgroup_config_create_template_group(struct cgroup *cgroup, char *template_name, int flags): config.c']]], + ['cgroup_5fconfig_5fload_5fconfig_196',['cgroup_config_load_config',['../group__group__config.html#ga8adfaca013333acf922a167f55b84140',1,'cgroup_config_load_config(const char *pathname): config.c'],['../group__group__config.html#ga8adfaca013333acf922a167f55b84140',1,'cgroup_config_load_config(const char *pathname): config.c']]], + ['cgroup_5fconfig_5fset_5fdefault_197',['cgroup_config_set_default',['../group__group__config.html#ga2d3a252b2c0c61c8f64cb1fc41e370ea',1,'cgroup_config_set_default(struct cgroup *new_default): config.c'],['../group__group__config.html#ga2d3a252b2c0c61c8f64cb1fc41e370ea',1,'cgroup_config_set_default(struct cgroup *new_default): config.c']]], + ['cgroup_5fconfig_5funload_5fconfig_198',['cgroup_config_unload_config',['../group__group__config.html#gaff77affa0b80ccf507b4b46cc0a8c085',1,'cgroup_config_unload_config(const char *pathname, int flags): config.c'],['../group__group__config.html#gaff77affa0b80ccf507b4b46cc0a8c085',1,'cgroup_config_unload_config(const char *pathname, int flags): config.c']]], + ['cgroup_5fcopy_5fcgroup_199',['cgroup_copy_cgroup',['../group__group__groups.html#gaa981a95e0917d3167601a4c1b392336a',1,'cgroup_copy_cgroup(struct cgroup *dst, struct cgroup *src): api.c'],['../group__group__groups.html#gaa981a95e0917d3167601a4c1b392336a',1,'cgroup_copy_cgroup(struct cgroup *dst, struct cgroup *src): api.c']]], + ['cgroup_5fcreate_5fcgroup_200',['cgroup_create_cgroup',['../group__group__groups.html#gadb8e13df6064841d3c9707960f782fa7',1,'cgroup_create_cgroup(struct cgroup *cgroup, int ignore_ownership): api.c'],['../group__group__groups.html#gadb8e13df6064841d3c9707960f782fa7',1,'cgroup_create_cgroup(struct cgroup *cgroup, int ignore_ownership): api.c']]], + ['cgroup_5fcreate_5fcgroup_5ffrom_5fparent_201',['cgroup_create_cgroup_from_parent',['../group__group__groups.html#ga90e1ce96f3cb540f7e82d076dd938f62',1,'cgroup_create_cgroup_from_parent(struct cgroup *cgroup, int ignore_ownership): api.c'],['../group__group__groups.html#ga90e1ce96f3cb540f7e82d076dd938f62',1,'cgroup_create_cgroup_from_parent(struct cgroup *cgroup, int ignore_ownership): api.c']]], + ['cgroup_5fdelete_5fcgroup_202',['cgroup_delete_cgroup',['../group__group__groups.html#ga1dca18434e5d6be30c28c556da94f565',1,'cgroup_delete_cgroup(struct cgroup *cgroup, int ignore_migration): api.c'],['../group__group__groups.html#ga1dca18434e5d6be30c28c556da94f565',1,'cgroup_delete_cgroup(struct cgroup *cgroup, int ignore_migration): api.c']]], + ['cgroup_5fdelete_5fcgroup_5fext_203',['cgroup_delete_cgroup_ext',['../group__group__groups.html#ga860c1ec70189c969b2c8373fc1e96d36',1,'cgroup_delete_cgroup_ext(struct cgroup *cgroup, int flags): api.c'],['../group__group__groups.html#ga860c1ec70189c969b2c8373fc1e96d36',1,'cgroup_delete_cgroup_ext(struct cgroup *cgroup, int flags): api.c']]], + ['cgroup_5ffree_204',['cgroup_free',['../group__group__groups.html#gab20fdb1ae479f8baac482336abf73900',1,'cgroup_free(struct cgroup **cgroup): wrapper.c'],['../group__group__groups.html#gab20fdb1ae479f8baac482336abf73900',1,'cgroup_free(struct cgroup **cgroup): wrapper.c']]], + ['cgroup_5ffree_5fcontrollers_205',['cgroup_free_controllers',['../group__group__groups.html#ga92d27c9ff0d655838642a7aa68497596',1,'cgroup_free_controllers(struct cgroup *cgroup): wrapper.c'],['../group__group__groups.html#ga92d27c9ff0d655838642a7aa68497596',1,'cgroup_free_controllers(struct cgroup *cgroup): wrapper.c']]], + ['cgroup_5fget_5fall_5fcontroller_5fbegin_206',['cgroup_get_all_controller_begin',['../group__group__iterators.html#gad48ef653388ca6739a9b6bbb9d7da82e',1,'cgroup_get_all_controller_begin(void **handle, struct controller_data *info): api.c'],['../group__group__iterators.html#gad48ef653388ca6739a9b6bbb9d7da82e',1,'cgroup_get_all_controller_begin(void **handle, struct controller_data *info): api.c']]], + ['cgroup_5fget_5fall_5fcontroller_5fend_207',['cgroup_get_all_controller_end',['../group__group__iterators.html#ga0c467d42a2c9a916a0edd339a6d7afc8',1,'cgroup_get_all_controller_end(void **handle): api.c'],['../group__group__iterators.html#ga0c467d42a2c9a916a0edd339a6d7afc8',1,'cgroup_get_all_controller_end(void **handle): api.c']]], + ['cgroup_5fget_5fall_5fcontroller_5fnext_208',['cgroup_get_all_controller_next',['../group__group__iterators.html#ga3d98a04b29b1fe409db1114b7aa76809',1,'cgroup_get_all_controller_next(void **handle, struct controller_data *info): api.c'],['../group__group__iterators.html#ga3d98a04b29b1fe409db1114b7aa76809',1,'cgroup_get_all_controller_next(void **handle, struct controller_data *info): api.c']]], + ['cgroup_5fget_5fcgroup_209',['cgroup_get_cgroup',['../group__group__groups.html#gad4ba31fe5a8bba63b33b1ea339b849e6',1,'cgroup_get_cgroup(struct cgroup *cgroup): api.c'],['../group__group__groups.html#gad4ba31fe5a8bba63b33b1ea339b849e6',1,'cgroup_get_cgroup(struct cgroup *cgroup): api.c']]], + ['cgroup_5fget_5fcgroup_5fname_210',['cgroup_get_cgroup_name',['../group__group__groups.html#gac9b5ff481de08ba8fdfcbd42940d2cbf',1,'cgroup_get_cgroup_name(struct cgroup *cgroup): wrapper.c'],['../group__group__groups.html#gac9b5ff481de08ba8fdfcbd42940d2cbf',1,'cgroup_get_cgroup_name(struct cgroup *cgroup): wrapper.c']]], + ['cgroup_5fget_5fcontroller_211',['cgroup_get_controller',['../group__group__groups.html#ga8335b0aec59c8f845639a7404affce05',1,'cgroup_get_controller(struct cgroup *cgroup, const char *name): wrapper.c'],['../group__group__groups.html#ga8335b0aec59c8f845639a7404affce05',1,'cgroup_get_controller(struct cgroup *cgroup, const char *name): wrapper.c']]], + ['cgroup_5fget_5fcontroller_5fbegin_212',['cgroup_get_controller_begin',['../group__group__iterators.html#ga5f9f21138f9b18912a16b21a45b53c44',1,'cgroup_get_controller_begin(void **handle, struct cgroup_mount_point *info): api.c'],['../group__group__iterators.html#ga5f9f21138f9b18912a16b21a45b53c44',1,'cgroup_get_controller_begin(void **handle, struct cgroup_mount_point *info): api.c']]], + ['cgroup_5fget_5fcontroller_5fend_213',['cgroup_get_controller_end',['../group__group__iterators.html#gab485cda2bc9640bacbf61f1953ae750c',1,'cgroup_get_controller_end(void **handle): api.c'],['../group__group__iterators.html#gab485cda2bc9640bacbf61f1953ae750c',1,'cgroup_get_controller_end(void **handle): api.c']]], + ['cgroup_5fget_5fcontroller_5fnext_214',['cgroup_get_controller_next',['../group__group__iterators.html#ga926b70423b6c087c21a14670cd23cd7d',1,'cgroup_get_controller_next(void **handle, struct cgroup_mount_point *info): api.c'],['../group__group__iterators.html#ga926b70423b6c087c21a14670cd23cd7d',1,'cgroup_get_controller_next(void **handle, struct cgroup_mount_point *info): api.c']]], + ['cgroup_5fget_5fcurrent_5fcontroller_5fpath_215',['cgroup_get_current_controller_path',['../group__group__tasks.html#ga6f2c17b99cf2526cb46df4769eb3f46e',1,'cgroup_get_current_controller_path(pid_t pid, const char *controller, char **current_path): api.c'],['../group__group__tasks.html#ga6f2c17b99cf2526cb46df4769eb3f46e',1,'cgroup_get_current_controller_path(pid_t pid, const char *controller, char **current_path): api.c']]], + ['cgroup_5fget_5flast_5ferrno_216',['cgroup_get_last_errno',['../group__group__errors.html#ga29057c4aec05bef2b6bf2855ae5d5d46',1,'cgroup_get_last_errno(void): api.c'],['../group__group__errors.html#ga29057c4aec05bef2b6bf2855ae5d5d46',1,'cgroup_get_last_errno(void): api.c']]], + ['cgroup_5fget_5fprocs_217',['cgroup_get_procs',['../group__group__groups.html#ga08a4fe913d59f61a39e61b8b02537dc2',1,'cgroup_get_procs(char *name, char *controller, pid_t **pids, int *size): api.c'],['../group__group__groups.html#ga08a4fe913d59f61a39e61b8b02537dc2',1,'cgroup_get_procs(char *name, char *controller, pid_t **pids, int *size): api.c']]], + ['cgroup_5fget_5fsubsys_5fmount_5fpoint_218',['cgroup_get_subsys_mount_point',['../group__group__init.html#ga4f061b353321b81869057970d96f09f7',1,'cgroup_get_subsys_mount_point(const char *controller, char **mount_point): api.c'],['../group__group__init.html#ga4f061b353321b81869057970d96f09f7',1,'cgroup_get_subsys_mount_point(const char *controller, char **mount_point): api.c']]], + ['cgroup_5fget_5fsubsys_5fmount_5fpoint_5fbegin_219',['cgroup_get_subsys_mount_point_begin',['../group__group__iterators.html#ga18a3c6fe7da42b9da96ce34dce1e31b8',1,'cgroup_get_subsys_mount_point_begin(const char *controller, void **handle, char *path): api.c'],['../group__group__iterators.html#ga18a3c6fe7da42b9da96ce34dce1e31b8',1,'cgroup_get_subsys_mount_point_begin(const char *controller, void **handle, char *path): api.c']]], + ['cgroup_5fget_5fsubsys_5fmount_5fpoint_5fend_220',['cgroup_get_subsys_mount_point_end',['../group__group__iterators.html#ga9c9b0f1921c205bd25bfc6c1d20486eb',1,'cgroup_get_subsys_mount_point_end(void **handle): api.c'],['../group__group__iterators.html#ga9c9b0f1921c205bd25bfc6c1d20486eb',1,'cgroup_get_subsys_mount_point_end(void **handle): api.c']]], + ['cgroup_5fget_5fsubsys_5fmount_5fpoint_5fnext_221',['cgroup_get_subsys_mount_point_next',['../group__group__iterators.html#ga3d66997158cb8a334317923ad94cc789',1,'cgroup_get_subsys_mount_point_next(void **handle, char *path): api.c'],['../group__group__iterators.html#ga3d66997158cb8a334317923ad94cc789',1,'cgroup_get_subsys_mount_point_next(void **handle, char *path): api.c']]], + ['cgroup_5fget_5ftask_5fbegin_222',['cgroup_get_task_begin',['../group__group__iterators.html#gad7218154192f733120e1025cc19d0a36',1,'cgroup_get_task_begin(const char *cgroup, const char *controller, void **handle, pid_t *pid): api.c'],['../group__group__iterators.html#gad7218154192f733120e1025cc19d0a36',1,'cgroup_get_task_begin(const char *cgroup, const char *controller, void **handle, pid_t *pid): api.c']]], + ['cgroup_5fget_5ftask_5fend_223',['cgroup_get_task_end',['../group__group__iterators.html#gaeb955e5f4da551268380b1271d478816',1,'cgroup_get_task_end(void **handle): api.c'],['../group__group__iterators.html#gaeb955e5f4da551268380b1271d478816',1,'cgroup_get_task_end(void **handle): api.c']]], + ['cgroup_5fget_5ftask_5fnext_224',['cgroup_get_task_next',['../group__group__iterators.html#gaf3a0364682b7449ddccfb0862bbb565e',1,'cgroup_get_task_next(void **handle, pid_t *pid): api.c'],['../group__group__iterators.html#gaf3a0364682b7449ddccfb0862bbb565e',1,'cgroup_get_task_next(void **handle, pid_t *pid): api.c']]], + ['cgroup_5fget_5fuid_5fgid_225',['cgroup_get_uid_gid',['../group__group__groups.html#ga007d21c304d9cc6e948dc0ae51ecfa86',1,'cgroup_get_uid_gid(struct cgroup *cgroup, uid_t *tasks_uid, gid_t *tasks_gid, uid_t *control_uid, gid_t *control_gid): wrapper.c'],['../group__group__groups.html#ga007d21c304d9cc6e948dc0ae51ecfa86',1,'cgroup_get_uid_gid(struct cgroup *cgroup, uid_t *tasks_uid, gid_t *tasks_gid, uid_t *control_uid, gid_t *control_gid): wrapper.c']]], + ['cgroup_5fget_5fvalue_5fbool_226',['cgroup_get_value_bool',['../group__group__groups.html#gab95007148eac89b7e935d93a4524787b',1,'cgroup_get_value_bool(struct cgroup_controller *controller, const char *name, bool *value): wrapper.c'],['../group__group__groups.html#gab95007148eac89b7e935d93a4524787b',1,'cgroup_get_value_bool(struct cgroup_controller *controller, const char *name, bool *value): wrapper.c']]], + ['cgroup_5fget_5fvalue_5fint64_227',['cgroup_get_value_int64',['../group__group__groups.html#ga0fe9b05f26b3cab21fc446c9a2700526',1,'cgroup_get_value_int64(struct cgroup_controller *controller, const char *name, int64_t *value): wrapper.c'],['../group__group__groups.html#ga0fe9b05f26b3cab21fc446c9a2700526',1,'cgroup_get_value_int64(struct cgroup_controller *controller, const char *name, int64_t *value): wrapper.c']]], + ['cgroup_5fget_5fvalue_5fname_228',['cgroup_get_value_name',['../group__group__groups.html#ga16ca75fd16eda7cfc642421111e9a331',1,'cgroup_get_value_name(struct cgroup_controller *controller, int index): wrapper.c'],['../group__group__groups.html#ga16ca75fd16eda7cfc642421111e9a331',1,'cgroup_get_value_name(struct cgroup_controller *controller, int index): wrapper.c']]], + ['cgroup_5fget_5fvalue_5fname_5fcount_229',['cgroup_get_value_name_count',['../group__group__groups.html#ga25115085978ce2a8d671e7876cc49c1d',1,'cgroup_get_value_name_count(struct cgroup_controller *controller): wrapper.c'],['../group__group__groups.html#ga25115085978ce2a8d671e7876cc49c1d',1,'cgroup_get_value_name_count(struct cgroup_controller *controller): wrapper.c']]], + ['cgroup_5fget_5fvalue_5fstring_230',['cgroup_get_value_string',['../group__group__groups.html#gafaa51e5ffe09f8ad05585a1d3b6f7fa9',1,'cgroup_get_value_string(struct cgroup_controller *controller, const char *name, char **value): wrapper.c'],['../group__group__groups.html#gafaa51e5ffe09f8ad05585a1d3b6f7fa9',1,'cgroup_get_value_string(struct cgroup_controller *controller, const char *name, char **value): wrapper.c']]], + ['cgroup_5fget_5fvalue_5fuint64_231',['cgroup_get_value_uint64',['../group__group__groups.html#ga951861259c0373895bfb637fce337312',1,'cgroup_get_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t *value): wrapper.c'],['../group__group__groups.html#ga951861259c0373895bfb637fce337312',1,'cgroup_get_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t *value): wrapper.c']]], + ['cgroup_5finit_232',['cgroup_init',['../group__group__init.html#ga37740e2f5f298edf13e18fcd7632b75a',1,'cgroup_init(void): api.c'],['../group__group__init.html#ga37740e2f5f298edf13e18fcd7632b75a',1,'cgroup_init(void): api.c']]], + ['cgroup_5finit_5frules_5fcache_233',['cgroup_init_rules_cache',['../group__group__tasks.html#gad7fa5a2c4db08d31da5bfbecaf482d3d',1,'cgroup_init_rules_cache(void): api.c'],['../group__group__tasks.html#gad7fa5a2c4db08d31da5bfbecaf482d3d',1,'cgroup_init_rules_cache(void): api.c']]], + ['cgroup_5finit_5ftemplates_5fcache_234',['cgroup_init_templates_cache',['../group__group__config.html#ga6f8c41bb920565e674787fe6dabaef00',1,'cgroup_init_templates_cache(char *pathname): config.c'],['../group__group__config.html#ga6f8c41bb920565e674787fe6dabaef00',1,'cgroup_init_templates_cache(char *pathname): config.c']]], + ['cgroup_5fload_5ftemplates_5fcache_5ffrom_5ffiles_235',['cgroup_load_templates_cache_from_files',['../group__group__config.html#ga924860998c37da53cababe24163fc89b',1,'cgroup_load_templates_cache_from_files(int *file_index): config.c'],['../group__group__config.html#ga924860998c37da53cababe24163fc89b',1,'cgroup_load_templates_cache_from_files(int *file_index): config.c']]], + ['cgroup_5flog_236',['cgroup_log',['../group__group__log.html#gab514ad5d83422ddfe479bdf651e80958',1,'cgroup_log(int loglevel, const char *fmt,...): log.c'],['../group__group__log.html#gab514ad5d83422ddfe479bdf651e80958',1,'cgroup_log(int level, const char *fmt,...): log.c']]], + ['cgroup_5fmodify_5fcgroup_237',['cgroup_modify_cgroup',['../group__group__groups.html#ga31ba5e865ae8d58b4453c0ef06d2c071',1,'cgroup_modify_cgroup(struct cgroup *cgroup): api.c'],['../group__group__groups.html#ga31ba5e865ae8d58b4453c0ef06d2c071',1,'cgroup_modify_cgroup(struct cgroup *cgroup): api.c']]], + ['cgroup_5fnew_5fcgroup_238',['cgroup_new_cgroup',['../group__group__groups.html#ga6cd4733e5982ac2c92ee3cb3dbd10a31',1,'cgroup_new_cgroup(const char *name): wrapper.c'],['../group__group__groups.html#ga6cd4733e5982ac2c92ee3cb3dbd10a31',1,'cgroup_new_cgroup(const char *name): wrapper.c']]], + ['cgroup_5fparse_5flog_5flevel_5fstr_239',['cgroup_parse_log_level_str',['../group__group__log.html#gaa364a06aee0e99228a1e6a26b25a9794',1,'cgroup_parse_log_level_str(const char *levelstr): log.c'],['../group__group__log.html#gaa364a06aee0e99228a1e6a26b25a9794',1,'cgroup_parse_log_level_str(const char *levelstr): log.c']]], + ['cgroup_5fprint_5frules_5fconfig_240',['cgroup_print_rules_config',['../group__group__tasks.html#gac4e3f29cfbdc3d77f08c9fe60857274a',1,'cgroup_print_rules_config(FILE *fp): api.c'],['../group__group__tasks.html#gac4e3f29cfbdc3d77f08c9fe60857274a',1,'cgroup_print_rules_config(FILE *fp): api.c']]], + ['cgroup_5fread_5fstats_5fbegin_241',['cgroup_read_stats_begin',['../group__group__iterators.html#ga1138e47f124f0f634586db5e0c4ae5de',1,'cgroup_read_stats_begin(const char *controller, const char *path, void **handle, struct cgroup_stat *stat): api.c'],['../group__group__iterators.html#ga1138e47f124f0f634586db5e0c4ae5de',1,'cgroup_read_stats_begin(const char *controller, const char *path, void **handle, struct cgroup_stat *cgroup_stat): api.c']]], + ['cgroup_5fread_5fstats_5fend_242',['cgroup_read_stats_end',['../group__group__iterators.html#gaba386d9db6cadc6ad85c2552f63447bb',1,'cgroup_read_stats_end(void **handle): api.c'],['../group__group__iterators.html#gaba386d9db6cadc6ad85c2552f63447bb',1,'cgroup_read_stats_end(void **handle): api.c']]], + ['cgroup_5fread_5fstats_5fnext_243',['cgroup_read_stats_next',['../group__group__iterators.html#gaf95587508fc15d74fd5ed0df58024be7',1,'cgroup_read_stats_next(void **handle, struct cgroup_stat *stat): api.c'],['../group__group__iterators.html#gaf95587508fc15d74fd5ed0df58024be7',1,'cgroup_read_stats_next(void **handle, struct cgroup_stat *cgroup_stat): api.c']]], + ['cgroup_5fread_5fvalue_5fbegin_244',['cgroup_read_value_begin',['../group__group__iterators.html#ga73edb115af6779644d3371b12cf09140',1,'cgroup_read_value_begin(const char *controller, const char *path, char *name, void **handle, char *buffer, int max): api.c'],['../group__group__iterators.html#ga73edb115af6779644d3371b12cf09140',1,'cgroup_read_value_begin(const char *controller, const char *path, char *name, void **handle, char *buffer, int max): api.c']]], + ['cgroup_5fread_5fvalue_5fend_245',['cgroup_read_value_end',['../group__group__iterators.html#gad348f041e283860cbf6bcea567e23a21',1,'cgroup_read_value_end(void **handle): api.c'],['../group__group__iterators.html#gad348f041e283860cbf6bcea567e23a21',1,'cgroup_read_value_end(void **handle): api.c']]], + ['cgroup_5fread_5fvalue_5fnext_246',['cgroup_read_value_next',['../group__group__iterators.html#gaced2fe331f19d599a3270db2440847cc',1,'cgroup_read_value_next(void **handle, char *buffer, int max): api.c'],['../group__group__iterators.html#gaced2fe331f19d599a3270db2440847cc',1,'cgroup_read_value_next(void **handle, char *buffer, int max): api.c']]], + ['cgroup_5fregister_5funchanged_5fprocess_247',['cgroup_register_unchanged_process',['../group__group__tasks.html#ga64f7967d6d5edfff9afddaa6a6974b1c',1,'cgroup_register_unchanged_process(pid_t pid, int flags): api.c'],['../group__group__tasks.html#ga64f7967d6d5edfff9afddaa6a6974b1c',1,'cgroup_register_unchanged_process(pid_t pid, int flags): api.c']]], + ['cgroup_5freload_5fcached_5frules_248',['cgroup_reload_cached_rules',['../group__group__tasks.html#gaf81ebd9cb5575c75b4c85f385ebda1ce',1,'cgroup_reload_cached_rules(void): api.c'],['../group__group__tasks.html#gaf81ebd9cb5575c75b4c85f385ebda1ce',1,'cgroup_reload_cached_rules(void): api.c']]], + ['cgroup_5freload_5fcached_5ftemplates_249',['cgroup_reload_cached_templates',['../group__group__config.html#ga89fe0d7943b29cc10d57b07abcdfa7b5',1,'cgroup_reload_cached_templates(char *pathname): config.c'],['../group__group__config.html#ga89fe0d7943b29cc10d57b07abcdfa7b5',1,'cgroup_reload_cached_templates(char *pathname): config.c']]], + ['cgroup_5fset_5fdefault_5flogger_250',['cgroup_set_default_logger',['../group__group__log.html#gab1457ce518dcde0b9f3c14ec9efa2de7',1,'cgroup_set_default_logger(int level): log.c'],['../group__group__log.html#gab1457ce518dcde0b9f3c14ec9efa2de7',1,'cgroup_set_default_logger(int loglevel): log.c']]], + ['cgroup_5fset_5flogger_251',['cgroup_set_logger',['../group__group__log.html#ga76d7032206f9b9d1c0be1a71a68c43d0',1,'cgroup_set_logger(cgroup_logger_callback logger, int loglevel, void *userdata): log.c'],['../group__group__log.html#ga76d7032206f9b9d1c0be1a71a68c43d0',1,'cgroup_set_logger(cgroup_logger_callback logger, int loglevel, void *userdata): log.c']]], + ['cgroup_5fset_5floglevel_252',['cgroup_set_loglevel',['../group__group__log.html#gaac5fe2352800ff62465a5abe649d5b8c',1,'cgroup_set_loglevel(int loglevel): log.c'],['../group__group__log.html#gaac5fe2352800ff62465a5abe649d5b8c',1,'cgroup_set_loglevel(int loglevel): log.c']]], + ['cgroup_5fset_5fpermissions_253',['cgroup_set_permissions',['../group__group__groups.html#gaa0400f1ff2fba7fbb6db82d97039d92b',1,'cgroup_set_permissions(struct cgroup *cgroup, mode_t control_dperm, mode_t control_fperm, mode_t task_fperm): api.c'],['../group__group__groups.html#gaa0400f1ff2fba7fbb6db82d97039d92b',1,'cgroup_set_permissions(struct cgroup *cgroup, mode_t control_dperm, mode_t control_fperm, mode_t task_fperm): api.c']]], + ['cgroup_5fset_5fuid_5fgid_254',['cgroup_set_uid_gid',['../group__group__groups.html#ga53b9e13e30660c805ab5773d69397a43',1,'cgroup_set_uid_gid(struct cgroup *cgroup, uid_t tasks_uid, gid_t tasks_gid, uid_t control_uid, gid_t control_gid): wrapper.c'],['../group__group__groups.html#ga53b9e13e30660c805ab5773d69397a43',1,'cgroup_set_uid_gid(struct cgroup *cgroup, uid_t tasks_uid, gid_t tasks_gid, uid_t control_uid, gid_t control_gid): wrapper.c']]], + ['cgroup_5fset_5fvalue_5fbool_255',['cgroup_set_value_bool',['../group__group__groups.html#gafb24892bc221cffee0f5fe07f64d54d7',1,'cgroup_set_value_bool(struct cgroup_controller *controller, const char *name, bool value): wrapper.c'],['../group__group__groups.html#gafb24892bc221cffee0f5fe07f64d54d7',1,'cgroup_set_value_bool(struct cgroup_controller *controller, const char *name, bool value): wrapper.c']]], + ['cgroup_5fset_5fvalue_5fint64_256',['cgroup_set_value_int64',['../group__group__groups.html#gaa5c39e51035cc43dd26a3c620441a956',1,'cgroup_set_value_int64(struct cgroup_controller *controller, const char *name, int64_t value): wrapper.c'],['../group__group__groups.html#gaa5c39e51035cc43dd26a3c620441a956',1,'cgroup_set_value_int64(struct cgroup_controller *controller, const char *name, int64_t value): wrapper.c']]], + ['cgroup_5fset_5fvalue_5fstring_257',['cgroup_set_value_string',['../group__group__groups.html#ga938febc02b59cbeb8e4ceb2dc7fdac82',1,'cgroup_set_value_string(struct cgroup_controller *controller, const char *name, const char *value): wrapper.c'],['../group__group__groups.html#ga938febc02b59cbeb8e4ceb2dc7fdac82',1,'cgroup_set_value_string(struct cgroup_controller *controller, const char *name, const char *value): wrapper.c']]], + ['cgroup_5fset_5fvalue_5fuint64_258',['cgroup_set_value_uint64',['../group__group__groups.html#gade01aa1fe30ccc968af9fe8a3bc821e5',1,'cgroup_set_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t value): wrapper.c'],['../group__group__groups.html#gade01aa1fe30ccc968af9fe8a3bc821e5',1,'cgroup_set_value_uint64(struct cgroup_controller *controller, const char *name, u_int64_t value): wrapper.c']]], + ['cgroup_5fstrerror_259',['cgroup_strerror',['../group__group__errors.html#gaeae1d51db8528c89d84501c745020e6b',1,'cgroup_strerror(int code): api.c'],['../group__group__errors.html#gaeae1d51db8528c89d84501c745020e6b',1,'cgroup_strerror(int code): api.c']]], + ['cgroup_5ftemplates_5fcache_5fset_5fsource_5ffiles_260',['cgroup_templates_cache_set_source_files',['../group__group__config.html#gacb09024dc469a1a1ff8cdebd8d0ab422',1,'cgroup_templates_cache_set_source_files(struct cgroup_string_list *tmpl_files): config.c'],['../group__group__config.html#gacb09024dc469a1a1ff8cdebd8d0ab422',1,'cgroup_templates_cache_set_source_files(struct cgroup_string_list *tmpl_files): config.c']]], + ['cgroup_5funload_5fcgroups_261',['cgroup_unload_cgroups',['../group__group__config.html#ga85b285712354faca495193075035938d',1,'cgroup_unload_cgroups(void): config.c'],['../group__group__config.html#ga85b285712354faca495193075035938d',1,'cgroup_unload_cgroups(void): config.c']]], + ['cgroup_5fwalk_5ftree_5fbegin_262',['cgroup_walk_tree_begin',['../group__group__iterators.html#ga7b19f10c06abb96d8c8ae88a04888a68',1,'cgroup_walk_tree_begin(const char *controller, const char *base_path, int depth, void **handle, struct cgroup_file_info *info, int *base_level): api.c'],['../group__group__iterators.html#ga7b19f10c06abb96d8c8ae88a04888a68',1,'cgroup_walk_tree_begin(const char *controller, const char *base_path, int depth, void **handle, struct cgroup_file_info *info, int *base_level): api.c']]], + ['cgroup_5fwalk_5ftree_5fend_263',['cgroup_walk_tree_end',['../group__group__iterators.html#ga09a70990837a58e506a264f8c50d4cde',1,'cgroup_walk_tree_end(void **handle): api.c'],['../group__group__iterators.html#ga09a70990837a58e506a264f8c50d4cde',1,'cgroup_walk_tree_end(void **handle): api.c']]], + ['cgroup_5fwalk_5ftree_5fnext_264',['cgroup_walk_tree_next',['../group__group__iterators.html#ga527f5499b0aa04d325074435baebdff1',1,'cgroup_walk_tree_next(int depth, void **handle, struct cgroup_file_info *info, int base_level): api.c'],['../group__group__iterators.html#ga527f5499b0aa04d325074435baebdff1',1,'cgroup_walk_tree_next(int depth, void **handle, struct cgroup_file_info *info, int base_level): api.c']]], + ['cgroup_5fwalk_5ftree_5fset_5fflags_265',['cgroup_walk_tree_set_flags',['../group__group__iterators.html#ga645ec7a6206dffb32667e7a0e148edc8',1,'cgroup_walk_tree_set_flags(void **handle, int flags): api.c'],['../group__group__iterators.html#ga645ec7a6206dffb32667e7a0e148edc8',1,'cgroup_walk_tree_set_flags(void **handle, int flags): api.c']]] +]; diff --git a/search/groups_0.html b/search/groups_0.html new file mode 100644 index 00000000..c600b497 --- /dev/null +++ b/search/groups_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_0.js b/search/groups_0.js new file mode 100644 index 00000000..98e8c7f2 --- /dev/null +++ b/search/groups_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['1_2e_20initialization_295',['1. Initialization',['../group__group__init.html',1,'']]] +]; diff --git a/search/groups_1.html b/search/groups_1.html new file mode 100644 index 00000000..2eb3550d --- /dev/null +++ b/search/groups_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_1.js b/search/groups_1.js new file mode 100644 index 00000000..f45c0268 --- /dev/null +++ b/search/groups_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['2_2e_20group_20manipulation_20api_296',['2. Group manipulation API',['../group__group__groups.html',1,'']]] +]; diff --git a/search/groups_2.html b/search/groups_2.html new file mode 100644 index 00000000..12f4af7a --- /dev/null +++ b/search/groups_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_2.js b/search/groups_2.js new file mode 100644 index 00000000..415c51c3 --- /dev/null +++ b/search/groups_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['3_2e_20iterators_297',['3. Iterators',['../group__group__iterators.html',1,'']]] +]; diff --git a/search/groups_3.html b/search/groups_3.html new file mode 100644 index 00000000..5e235b53 --- /dev/null +++ b/search/groups_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_3.js b/search/groups_3.js new file mode 100644 index 00000000..57eee473 --- /dev/null +++ b/search/groups_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['4_2e_20manipulation_20with_20tasks_298',['4. Manipulation with tasks',['../group__group__tasks.html',1,'']]] +]; diff --git a/search/groups_4.html b/search/groups_4.html new file mode 100644 index 00000000..99405e15 --- /dev/null +++ b/search/groups_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_4.js b/search/groups_4.js new file mode 100644 index 00000000..19a6d88b --- /dev/null +++ b/search/groups_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['5_2e_20configuration_299',['5. Configuration',['../group__group__config.html',1,'']]] +]; diff --git a/search/groups_5.html b/search/groups_5.html new file mode 100644 index 00000000..583f5f58 --- /dev/null +++ b/search/groups_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_5.js b/search/groups_5.js new file mode 100644 index 00000000..19f256c7 --- /dev/null +++ b/search/groups_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['6_2e_20error_20handling_300',['6. Error handling',['../group__group__errors.html',1,'']]] +]; diff --git a/search/groups_6.html b/search/groups_6.html new file mode 100644 index 00000000..df6a310f --- /dev/null +++ b/search/groups_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/groups_6.js b/search/groups_6.js new file mode 100644 index 00000000..731e9ca9 --- /dev/null +++ b/search/groups_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['7_2e_20logging_301',['7. Logging',['../group__group__log.html',1,'']]] +]; diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 00000000..03626f64 --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/search/nomatches.html b/search/nomatches.html new file mode 100644 index 00000000..2b9360b6 --- /dev/null +++ b/search/nomatches.html @@ -0,0 +1,13 @@ + + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/search/pages_0.html b/search/pages_0.html new file mode 100644 index 00000000..8517b48f --- /dev/null +++ b/search/pages_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 00000000..a633ce53 --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['how_20to_20contribute_20to_20the_20libcgroup_20project_302',['How to Contribute to the libcgroup Project',['../md_CONTRIBUTING.html',1,'']]] +]; diff --git a/search/pages_1.html b/search/pages_1.html new file mode 100644 index 00000000..a0fb6796 --- /dev/null +++ b/search/pages_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_1.js b/search/pages_1.js new file mode 100644 index 00000000..a8765e31 --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['libcgroup_303',['libcgroup',['../index.html',1,'']]] +]; diff --git a/search/pages_2.html b/search/pages_2.html new file mode 100644 index 00000000..084edfd0 --- /dev/null +++ b/search/pages_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_2.js b/search/pages_2.js new file mode 100644 index 00000000..1d641726 --- /dev/null +++ b/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['readme_304',['README',['../md_README.html',1,'']]] +]; diff --git a/search/pages_3.html b/search/pages_3.html new file mode 100644 index 00000000..c0b45b0f --- /dev/null +++ b/search/pages_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/pages_3.js b/search/pages_3.js new file mode 100644 index 00000000..e0c6178d --- /dev/null +++ b/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['todo_20list_305',['Todo List',['../todo.html',1,'']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 00000000..9074198f --- /dev/null +++ b/search/search.css @@ -0,0 +1,257 @@ +/*---------------- Search Box */ + +#MSearchBox { + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + height: 1.4em; + padding: 0 0 0 0.3em; + margin: 0; +} + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 1.1em; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial, Verdana, sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial, Verdana, sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 00000000..fb226f73 --- /dev/null +++ b/search/search.js @@ -0,0 +1,816 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e@N?(olHy`uVBq!ia0vp^B0wz6!2%?$TA$hhDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~NU84L`?eGCi_EEpJ?t}-xGu`@87+QPtK?83kxQ`TapwHK(CDaqU2h2ejD|C#+j z9%q3^WHAE+w=f7ZGR&GI0Tg5}@$_|Nf5gMiEhFgvHvB#V1EZFwi(`n!`QAxqy_^C? z+`jj!^>(R!W8j_r#qQ#gnr4kAxdU#F0+OBry$Z+ z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF- z8H=anvo~dTmJ2YA%wA6IHRv%{vxvUm|R)kgZeo zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl| z*NBpo#FA92@N?(olHy`uVBq!ia0vp^Oh7Em0U}M~ynTTbOS+@4BLl;=8&~`zjDUQ}64!{5 z;QX|b^2DN42FH~Aq*MjZ+{EvEu822WQ%mvv4FO#qs` BFGc_W literal 0 Hc-jL100001 diff --git a/search/search_r.png b/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..1af5d21ee13e070d7600f1c4657fde843b953a69 GIT binary patch literal 553 zc-rd>@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQT(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7 z-N(<(C)L?hOO?KV{>8(jC{hpKsws)#Fh zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~ z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc GLK6VEQpiUD literal 0 Hc-jL100001 diff --git a/search/searchdata.js b/search/searchdata.js new file mode 100644 index 00000000..789c86b6 --- /dev/null +++ b/search/searchdata.js @@ -0,0 +1,36 @@ +var indexSectionsWithContent = +{ + 0: "1234567abcdefhlmnprtu", + 1: "abcepu", + 2: "c", + 3: "defhmnpt", + 4: "c", + 5: "ce", + 6: "1234567", + 7: "hlrt" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "functions", + 3: "variables", + 4: "enums", + 5: "enumvalues", + 6: "groups", + 7: "pages" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Data Structures", + 2: "Functions", + 3: "Variables", + 4: "Enumerations", + 5: "Enumerator", + 6: "Modules", + 7: "Pages" +}; + diff --git a/search/variables_0.html b/search/variables_0.html new file mode 100644 index 00000000..1e477c08 --- /dev/null +++ b/search/variables_0.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_0.js b/search/variables_0.js new file mode 100644 index 00000000..f0ad03ae --- /dev/null +++ b/search/variables_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['depth_266',['depth',['../structcgroup__file__info.html#ad56dca35266f0f5f5c2666b946d72709',1,'cgroup_file_info']]] +]; diff --git a/search/variables_1.html b/search/variables_1.html new file mode 100644 index 00000000..ea73d9a4 --- /dev/null +++ b/search/variables_1.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_1.js b/search/variables_1.js new file mode 100644 index 00000000..a88aa67d --- /dev/null +++ b/search/variables_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['enabled_267',['enabled',['../structcontroller__data.html#a24be412cfb6c19f7a13a4bff9e55206e',1,'controller_data']]] +]; diff --git a/search/variables_2.html b/search/variables_2.html new file mode 100644 index 00000000..0580462e --- /dev/null +++ b/search/variables_2.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_2.js b/search/variables_2.js new file mode 100644 index 00000000..c4a69c80 --- /dev/null +++ b/search/variables_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['full_5fpath_268',['full_path',['../structcgroup__file__info.html#a4c61dc7f726ba0784ff8c71473dbc6e6',1,'cgroup_file_info']]] +]; diff --git a/search/variables_3.html b/search/variables_3.html new file mode 100644 index 00000000..0d69e761 --- /dev/null +++ b/search/variables_3.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_3.js b/search/variables_3.js new file mode 100644 index 00000000..2253547b --- /dev/null +++ b/search/variables_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hierarchy_269',['hierarchy',['../structcontroller__data.html#a25e316f55473ca2b333b0d7e0ca644b4',1,'controller_data']]] +]; diff --git a/search/variables_4.html b/search/variables_4.html new file mode 100644 index 00000000..a4b6506b --- /dev/null +++ b/search/variables_4.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_4.js b/search/variables_4.js new file mode 100644 index 00000000..5c22f904 --- /dev/null +++ b/search/variables_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mount_270',['mount',['../structcg__mount__table__s.html#a9704fa3ec3674f6d433345ea52b6aeef',1,'cg_mount_table_s']]] +]; diff --git a/search/variables_5.html b/search/variables_5.html new file mode 100644 index 00000000..7e345d16 --- /dev/null +++ b/search/variables_5.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_5.js b/search/variables_5.js new file mode 100644 index 00000000..f2f60bb0 --- /dev/null +++ b/search/variables_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['name_271',['name',['../structcgroup__mount__point.html#a849ccf1e77fffd5d45304c6adf0d2100',1,'cgroup_mount_point::name()'],['../structcontroller__data.html#a5474be4d8cc4553c94ca81c6a93f5a18',1,'controller_data::name()'],['../structcg__mount__table__s.html#aa9b2cc62fb6cb35334f3d85d660c9fa6',1,'cg_mount_table_s::name()']]], + ['num_5fcgroups_272',['num_cgroups',['../structcontroller__data.html#acd075c0bb48062bf720b68d0a30116eb',1,'controller_data']]] +]; diff --git a/search/variables_6.html b/search/variables_6.html new file mode 100644 index 00000000..7d48e75e --- /dev/null +++ b/search/variables_6.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_6.js b/search/variables_6.js new file mode 100644 index 00000000..f3affd2a --- /dev/null +++ b/search/variables_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['parent_273',['parent',['../structcgroup__file__info.html#a739c7f87593e36d8589d3ffa80b57059',1,'cgroup_file_info']]], + ['path_274',['path',['../structcgroup__file__info.html#a801424e68139c930e40ea24be4d96a68',1,'cgroup_file_info::path()'],['../structcgroup__mount__point.html#ad1e89dfc02cfd7341e2296086a4f251e',1,'cgroup_mount_point::path()']]] +]; diff --git a/search/variables_7.html b/search/variables_7.html new file mode 100644 index 00000000..5c263409 --- /dev/null +++ b/search/variables_7.html @@ -0,0 +1,37 @@ + + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/search/variables_7.js b/search/variables_7.js new file mode 100644 index 00000000..b5286ca9 --- /dev/null +++ b/search/variables_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['type_275',['type',['../structcgroup__file__info.html#a955506601f440d05cb11e4ee6b455c55',1,'cgroup_file_info']]] +]; diff --git a/splitbar.png b/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zc-rd>@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 Hc-jL100001 diff --git a/structarray__parent__info.html b/structarray__parent__info.html new file mode 100644 index 00000000..9413f57c --- /dev/null +++ b/structarray__parent__info.html @@ -0,0 +1,92 @@ + + + + + + + +libcgroup: array_parent_info Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    array_parent_info Struct Reference
    +
    +
    + + + + + + + + +

    +Data Fields

    +int index
     
    +int num_allocation
     
    +struct parent_info ** parent_info
     
    +
    The documentation for this struct was generated from the following file:
      +
    • src/daemon/cgrulesengd.c
    • +
    +
    + + + + diff --git a/structarray__unchanged.html b/structarray__unchanged.html new file mode 100644 index 00000000..78e9902b --- /dev/null +++ b/structarray__unchanged.html @@ -0,0 +1,92 @@ + + + + + + + +libcgroup: array_unchanged Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    array_unchanged Struct Reference
    +
    +
    + + + + + + + + +

    +Data Fields

    +int index
     
    +int num_allocation
     
    +struct unchanged_pidproc
     
    +
    The documentation for this struct was generated from the following file:
      +
    • src/daemon/cgrulesengd.c
    • +
    +
    + + + + diff --git a/structblack__list__type.html b/structblack__list__type.html new file mode 100644 index 00000000..ec577b6e --- /dev/null +++ b/structblack__list__type.html @@ -0,0 +1,89 @@ + + + + + + + +libcgroup: black_list_type Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    black_list_type Struct Reference
    +
    +
    + + + + + + +

    +Data Fields

    +char * name
     
    +struct black_list_typenext
     
    +
    The documentation for this struct was generated from the following file:
      +
    • src/tools/cgsnapshot.c
    • +
    +
    + + + + diff --git a/structcg__mount__point.html b/structcg__mount__point.html new file mode 100644 index 00000000..af1f52bf --- /dev/null +++ b/structcg__mount__point.html @@ -0,0 +1,89 @@ + + + + + + + +libcgroup: cg_mount_point Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cg_mount_point Struct Reference
    +
    +
    + + + + + + +

    +Data Fields

    +char path [FILENAME_MAX]
     
    +struct cg_mount_pointnext
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcg__mount__table__s.html b/structcg__mount__table__s.html new file mode 100644 index 00000000..11a8c5e5 --- /dev/null +++ b/structcg__mount__table__s.html @@ -0,0 +1,124 @@ + + + + + + + +libcgroup: cg_mount_table_s Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cg_mount_table_s Struct Reference
    +
    +
    + + + + + + + + + + +

    +Data Fields

    char name [FILENAME_MAX]
     
    struct cg_mount_point mount
     
    +int index
     
    +enum cg_version_t version
     
    +

    Field Documentation

    + +

    ◆ mount

    + +
    +
    + + + + +
    struct cg_mount_point cg_mount_table_s::mount
    +
    +

    List of mount points, at least one mount point is there for sure.

    + +
    +
    + +

    ◆ name

    + +
    +
    + + + + +
    char cg_mount_table_s::name[FILENAME_MAX]
    +
    +

    Controller name.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcgroup.html b/structcgroup.html new file mode 100644 index 00000000..dc6deef4 --- /dev/null +++ b/structcgroup.html @@ -0,0 +1,117 @@ + + + + + + + +libcgroup: cgroup Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cgroup Struct Reference
    +
    +
    + +

    #include <groups.h>

    + + + + + + + + + + + + + + + + + + + + + + +

    +Data Fields

    +char name [FILENAME_MAX]
     
    +struct cgroup_controllercontroller [CG_CONTROLLER_MAX]
     
    +int index
     
    +uid_t tasks_uid
     
    +gid_t tasks_gid
     
    +mode_t task_fperm
     
    +uid_t control_uid
     
    +gid_t control_gid
     
    +mode_t control_fperm
     
    +mode_t control_dperm
     
    +

    Detailed Description

    +

    Structure describing one or more control groups. The structure is opaque to applications.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcgroup__controller.html b/structcgroup__controller.html new file mode 100644 index 00000000..577ef6e5 --- /dev/null +++ b/structcgroup__controller.html @@ -0,0 +1,99 @@ + + + + + + + +libcgroup: cgroup_controller Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cgroup_controller Struct Reference
    +
    +
    + +

    #include <groups.h>

    + + + + + + + + + + +

    +Data Fields

    +char name [FILENAME_MAX]
     
    +struct control_valuevalues [CG_NV_MAX]
     
    +struct cgroupcgroup
     
    +int index
     
    +

    Detailed Description

    +

    Structure describing a controller attached to one struct cgroup, including parameters of the group and their values. The structure is opaque to applications.

    See also
    groups
    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcgroup__dictionary.html b/structcgroup__dictionary.html new file mode 100644 index 00000000..59f3572d --- /dev/null +++ b/structcgroup__dictionary.html @@ -0,0 +1,96 @@ + + + + + + + +libcgroup: cgroup_dictionary Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cgroup_dictionary Struct Reference
    +
    +
    + +

    #include <libcgroup-internal.h>

    + + + + + + + + +

    +Data Fields

    +struct cgroup_dictionary_itemhead
     
    +struct cgroup_dictionary_itemtail
     
    +int flags
     
    +

    Detailed Description

    +

    Dictionary of (name, value) items. The dictionary keeps its order, iterator iterates in the same order as the items were added there. It is not hash-style structure, it does not provide random access to its items nor quick search. This structure should be opaque to users of the dictionary, underlying data structure might change anytime and without warnings.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcgroup__dictionary__item.html b/structcgroup__dictionary__item.html new file mode 100644 index 00000000..0b44f5f5 --- /dev/null +++ b/structcgroup__dictionary__item.html @@ -0,0 +1,96 @@ + + + + + + + +libcgroup: cgroup_dictionary_item Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cgroup_dictionary_item Struct Reference
    +
    +
    + +

    #include <libcgroup-internal.h>

    + + + + + + + + +

    +Data Fields

    +const char * name
     
    +const char * value
     
    +struct cgroup_dictionary_itemnext
     
    +

    Detailed Description

    +

    Internal item of dictionary. Linked list is sufficient for now - we need only 'add' operation and simple iterator. In future, this might be easily rewritten to dynamic array when random access is needed, just keep in mind that the order is important and the iterator should return the items in the order they were added there.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcgroup__dictionary__iterator.html b/structcgroup__dictionary__iterator.html new file mode 100644 index 00000000..fee79a65 --- /dev/null +++ b/structcgroup__dictionary__iterator.html @@ -0,0 +1,90 @@ + + + + + + + +libcgroup: cgroup_dictionary_iterator Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cgroup_dictionary_iterator Struct Reference
    +
    +
    + +

    #include <libcgroup-internal.h>

    + + + + +

    +Data Fields

    +struct cgroup_dictionary_itemitem
     
    +

    Detailed Description

    +

    Opaque iterator of an dictionary.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcgroup__file__info.html b/structcgroup__file__info.html new file mode 100644 index 00000000..87619d3b --- /dev/null +++ b/structcgroup__file__info.html @@ -0,0 +1,173 @@ + + + + + + + +libcgroup: cgroup_file_info Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cgroup_file_info Struct Reference
    +
    +
    + +

    #include <iterators.h>

    + + + + + + + + + + + + +

    +Data Fields

    enum cgroup_file_type type
     
    const char * path
     
    const char * parent
     
    const char * full_path
     
    short depth
     
    +

    Detailed Description

    +

    Information about found directory (= a control group).

    +

    Field Documentation

    + +

    ◆ depth

    + +
    +
    + + + + +
    short cgroup_file_info::depth
    +
    +

    Depth of the entity, how many directories below the root of walk it is.

    + +
    +
    + +

    ◆ full_path

    + +
    +
    + + + + +
    const char* cgroup_file_info::full_path
    +
    +

    Full path to the entity. To get path relative to the root of the walk, you must store its full_path (or its length) and calculate the relative path by yourself.

    + +
    +
    + +

    ◆ parent

    + +
    +
    + + + + +
    const char* cgroup_file_info::parent
    +
    +

    Name of its parent.

    + +
    +
    + +

    ◆ path

    + +
    +
    + + + + +
    const char* cgroup_file_info::path
    +
    +

    Name of the entity.

    + +
    +
    + +

    ◆ type

    + +
    +
    + + + + +
    enum cgroup_file_type cgroup_file_info::type
    +
    +

    Type of the entity.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcgroup__group__spec.html b/structcgroup__group__spec.html new file mode 100644 index 00000000..ea9747ba --- /dev/null +++ b/structcgroup__group__spec.html @@ -0,0 +1,93 @@ + + + + + + + +libcgroup: cgroup_group_spec Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cgroup_group_spec Struct Reference
    +
    +
    + +

    #include <tools-common.h>

    + + + + + + +

    +Data Fields

    +char path [FILENAME_MAX]
     
    +char * controllers [CG_CONTROLLER_MAX]
     
    +

    Detailed Description

    +

    Auxiliary specifier of group, used to store parsed command line options.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcgroup__mount__point.html b/structcgroup__mount__point.html new file mode 100644 index 00000000..69e60bfb --- /dev/null +++ b/structcgroup__mount__point.html @@ -0,0 +1,122 @@ + + + + + + + +libcgroup: cgroup_mount_point Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cgroup_mount_point Struct Reference
    +
    +
    + +

    #include <iterators.h>

    + + + + + + +

    +Data Fields

    char name [FILENAME_MAX]
     
    char path [FILENAME_MAX]
     
    +

    Detailed Description

    +

    Information about mounted controller.

    +

    Field Documentation

    + +

    ◆ name

    + +
    +
    + + + + +
    char cgroup_mount_point::name[FILENAME_MAX]
    +
    +

    Name of the controller.

    + +
    +
    + +

    ◆ path

    + +
    +
    + + + + +
    char cgroup_mount_point::path[FILENAME_MAX]
    +
    +

    Mount point of the controller.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcgroup__rule.html b/structcgroup__rule.html new file mode 100644 index 00000000..fa9cd13a --- /dev/null +++ b/structcgroup__rule.html @@ -0,0 +1,107 @@ + + + + + + + +libcgroup: cgroup_rule Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cgroup_rule Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + + + +

    +Data Fields

    +uid_t uid
     
    +gid_t gid
     
    +bool is_ignore
     
    +char * procname
     
    +char username [LOGIN_NAME_MAX]
     
    +char destination [FILENAME_MAX]
     
    +char * controllers [MAX_MNT_ELEMENTS]
     
    +struct cgroup_rulenext
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcgroup__rule__list.html b/structcgroup__rule__list.html new file mode 100644 index 00000000..8c268de2 --- /dev/null +++ b/structcgroup__rule__list.html @@ -0,0 +1,92 @@ + + + + + + + +libcgroup: cgroup_rule_list Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cgroup_rule_list Struct Reference
    +
    +
    + + + + + + + + +

    +Data Fields

    +struct cgroup_rulehead
     
    +struct cgroup_ruletail
     
    +int len
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcgroup__rules__data.html b/structcgroup__rules__data.html new file mode 100644 index 00000000..03f0e703 --- /dev/null +++ b/structcgroup__rules__data.html @@ -0,0 +1,92 @@ + + + + + + + +libcgroup: cgroup_rules_data Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cgroup_rules_data Struct Reference
    +
    +
    + + + + + + + + +

    +Data Fields

    +pid_t pid
     
    +struct passwd * pw
     
    +gid_t gid
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcgroup__stat.html b/structcgroup__stat.html new file mode 100644 index 00000000..1888f641 --- /dev/null +++ b/structcgroup__stat.html @@ -0,0 +1,93 @@ + + + + + + + +libcgroup: cgroup_stat Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cgroup_stat Struct Reference
    +
    +
    + +

    #include <iterators.h>

    + + + + + + +

    +Data Fields

    +char name [FILENAME_MAX]
     
    +char value [CG_VALUE_MAX]
     
    +

    Detailed Description

    +

    One item in stats file.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcgroup__string__list.html b/structcgroup__string__list.html new file mode 100644 index 00000000..d74f9d32 --- /dev/null +++ b/structcgroup__string__list.html @@ -0,0 +1,96 @@ + + + + + + + +libcgroup: cgroup_string_list Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cgroup_string_list Struct Reference
    +
    +
    + +

    #include <tools-common.h>

    + + + + + + + + +

    +Data Fields

    +char ** items
     
    +int size
     
    +int count
     
    +

    Detailed Description

    +

    Simple dynamic array of strings.

    +

    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcgroup__tree__handle.html b/structcgroup__tree__handle.html new file mode 100644 index 00000000..0823bc7d --- /dev/null +++ b/structcgroup__tree__handle.html @@ -0,0 +1,89 @@ + + + + + + + +libcgroup: cgroup_tree_handle Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    cgroup_tree_handle Struct Reference
    +
    +
    + + + + + + +

    +Data Fields

    +FTS * fts
     
    +int flags
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcontrol__value.html b/structcontrol__value.html new file mode 100644 index 00000000..ef122e7e --- /dev/null +++ b/structcontrol__value.html @@ -0,0 +1,95 @@ + + + + + + + +libcgroup: control_value Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    control_value Struct Reference
    +
    +
    + + + + + + + + + + +

    +Data Fields

    +char name [FILENAME_MAX]
     
    +char value [CG_CONTROL_VALUE_MAX]
     
    +char * multiline_value
     
    +bool dirty
     
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structcontroller__data.html b/structcontroller__data.html new file mode 100644 index 00000000..c1e574f9 --- /dev/null +++ b/structcontroller__data.html @@ -0,0 +1,156 @@ + + + + + + + +libcgroup: controller_data Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    controller_data Struct Reference
    +
    +
    + +

    #include <iterators.h>

    + + + + + + + + + + +

    +Data Fields

    char name [FILENAME_MAX]
     
    int hierarchy
     
    int num_cgroups
     
    int enabled
     
    +

    Detailed Description

    +

    Detailed information about available controller.

    +

    Field Documentation

    + +

    ◆ enabled

    + +
    +
    + + + + +
    int controller_data::enabled
    +
    +

    Enabled flag.

    + +
    +
    + +

    ◆ hierarchy

    + +
    +
    + + + + +
    int controller_data::hierarchy
    +
    +

    Hierarchy ID. Controllers with the same hierarchy ID are mounted together as one hierarchy. Controllers with ID 0 are not currently mounted anywhere.

    + +
    +
    + +

    ◆ name

    + +
    +
    + + + + +
    char controller_data::name[FILENAME_MAX]
    +
    +

    Controller name.

    + +
    +
    + +

    ◆ num_cgroups

    + +
    +
    + + + + +
    int controller_data::num_cgroups
    +
    +

    Number of groups.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff --git a/structext__cgroup__record.html b/structext__cgroup__record.html new file mode 100644 index 00000000..51dd5503 --- /dev/null +++ b/structext__cgroup__record.html @@ -0,0 +1,92 @@ + + + + + + + +libcgroup: ext_cgroup_record Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    ext_cgroup_record Struct Reference
    +
    +
    + + + + + + + + +

    +Data Fields

    +char name [FILENAME_MAX]
     
    +char controller [FILENAME_MAX]
     
    +int h_number
     
    +
    The documentation for this struct was generated from the following file:
      +
    • src/tools/cgdelete.c
    • +
    +
    + + + + diff --git a/structparent__info.html b/structparent__info.html new file mode 100644 index 00000000..401b691e --- /dev/null +++ b/structparent__info.html @@ -0,0 +1,89 @@ + + + + + + + +libcgroup: parent_info Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    parent_info Struct Reference
    +
    +
    + + + + + + +

    +Data Fields

    +__u64 timestamp
     
    +pid_t pid
     
    +
    The documentation for this struct was generated from the following file:
      +
    • src/daemon/cgrulesengd.c
    • +
    +
    + + + + diff --git a/structunchanged__pid.html b/structunchanged__pid.html new file mode 100644 index 00000000..df206f9f --- /dev/null +++ b/structunchanged__pid.html @@ -0,0 +1,89 @@ + + + + + + + +libcgroup: unchanged_pid Struct Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    unchanged_pid Struct Reference
    +
    +
    + + + + + + +

    +Data Fields

    +pid_t pid
     
    +int flags
     
    +
    The documentation for this struct was generated from the following file:
      +
    • src/daemon/cgrulesengd.c
    • +
    +
    + + + + diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zc-jF~1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 Hc-jL100001 diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zc-jF?1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 Hc-jL100001 diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zc-rd>@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 Hc-jL100001 diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zc-rd>@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QWc&qjv*C{Z}0jF9dr@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 Hc-jL100001 diff --git a/tabs.css b/tabs.css new file mode 100644 index 00000000..85a0cd5b --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file diff --git a/tasks_8h_source.html b/tasks_8h_source.html new file mode 100644 index 00000000..212aca8f --- /dev/null +++ b/tasks_8h_source.html @@ -0,0 +1,152 @@ + + + + + + + +libcgroup: include/libcgroup/tasks.h Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    tasks.h
    +
    +
    +
    1 #ifndef _LIBCGROUP_TASKS_H
    +
    2 #define _LIBCGROUP_TASKS_H
    +
    3 
    +
    4 #ifndef _LIBCGROUP_H_INSIDE
    +
    5 #error "Only <libcgroup.h> should be included directly."
    +
    6 #endif
    +
    7 
    +
    8 #include <libcgroup/groups.h>
    +
    9 
    +
    10 #ifndef SWIG
    +
    11 #include <features.h>
    +
    12 #include <stdbool.h>
    +
    13 #endif
    +
    14 
    +
    15 #ifdef __cplusplus
    +
    16 extern "C" {
    +
    17 #endif
    +
    18 
    +
    20 enum cgflags {
    +
    22  CGFLAG_USECACHE = 0x01,
    +
    24  CGFLAG_USE_TEMPLATE_CACHE = 0x02,
    +
    25 };
    +
    26 
    +
    28 enum cgroup_daemon_type {
    +
    33  CGROUP_DAEMON_UNCHANGE_CHILDREN = 0x1,
    +
    34  CGROUP_DAEMON_CANCEL_UNCHANGE_PROCESS = 0x2,
    +
    35 };
    +
    36 
    +
    51 int cgroup_attach_task(struct cgroup *cgroup);
    +
    52 
    +
    58 int cgroup_attach_task_pid(struct cgroup *cgroup, pid_t tid);
    +
    59 
    +
    71 int cgroup_change_cgroup_path(const char *path, pid_t pid,
    +
    72  const char * const controllers[]);
    +
    73 
    +
    82 int cgroup_get_current_controller_path(pid_t pid, const char *controller,
    +
    83  char **current_path);
    +
    84 
    +
    99 int cgroup_init_rules_cache(void);
    +
    100 
    + +
    106 
    +
    113 void cgroup_print_rules_config(FILE *fp);
    +
    114 
    +
    134 int cgroup_change_all_cgroups(void);
    +
    135 
    +
    155 int cgroup_change_cgroup_flags(uid_t uid, gid_t gid,
    +
    156  const char *procname, pid_t pid, int flags);
    +
    157 
    +
    171 int cgroup_change_cgroup_uid_gid_flags(uid_t uid, gid_t gid,
    +
    172  pid_t pid, int flags);
    +
    173 
    +
    183 int cgroup_change_cgroup_uid_gid(uid_t uid, gid_t gid, pid_t pid);
    +
    184 
    +
    203 int cgroup_register_unchanged_process(pid_t pid, int flags);
    +
    204 
    +
    209 #ifdef __cplusplus
    +
    210 } /* extern "C" */
    +
    211 #endif
    +
    212 
    +
    213 #endif /* _LIBCGROUP_TASKS_H */
    +
    int cgroup_change_cgroup_path(const char *path, pid_t pid, const char *const controllers[])
    Definition: api.c:4071
    +
    int cgroup_change_cgroup_flags(uid_t uid, gid_t gid, const char *procname, pid_t pid, int flags)
    Definition: api.c:3855
    +
    int cgroup_attach_task(struct cgroup *cgroup)
    Definition: api.c:1733
    +
    int cgroup_change_cgroup_uid_gid(uid_t uid, gid_t gid, pid_t pid)
    Definition: api.c:4059
    +
    int cgroup_register_unchanged_process(pid_t pid, int flags)
    Definition: api.c:5260
    +
    int cgroup_get_current_controller_path(pid_t pid, const char *controller, char **current_path)
    Definition: api.c:4294
    +
    int cgroup_attach_task_pid(struct cgroup *cgroup, pid_t tid)
    Definition: api.c:1668
    +
    void cgroup_print_rules_config(FILE *fp)
    Definition: api.c:4186
    +
    int cgroup_init_rules_cache(void)
    Definition: api.c:4272
    +
    int cgroup_change_cgroup_uid_gid_flags(uid_t uid, gid_t gid, pid_t pid, int flags)
    Definition: api.c:4042
    +
    int cgroup_reload_cached_rules(void)
    Definition: api.c:4246
    +
    int cgroup_change_all_cgroups(void)
    Definition: api.c:4140
    +
    Definition: libcgroup-internal.h:106
    +
    + + + + diff --git a/todo.html b/todo.html new file mode 100644 index 00000000..0c64eb02 --- /dev/null +++ b/todo.html @@ -0,0 +1,113 @@ + + + + + + + +libcgroup: Todo List + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    +
    +
    Todo List
    +
    +
    +
    +
    Module Basic infrastructure
    +
    add some propaganda what's so great on this approach... I personally think it is broken and confusing (see TODOs below).
    +
    Global cgroup_change_cgroup_flags (uid_t uid, gid_t gid, const char *procname, pid_t pid, int flags)
    +
    Determine thread-safeness and fix of not safe.
    +
    Global cgroup_change_cgroup_path (const char *path, pid_t pid, const char *const controllers[])
    +
    should this function be really public?
    +
    Global cgroup_change_cgroup_uid_gid_flags (uid_t uid, gid_t gid, pid_t pid, int flags)
    +
    Determine thread-safeness and fix if not safe.
    +
    Global cgroup_create_cgroup (struct cgroup *cgroup, int ignore_ownership)
    +
    what is ignore_ownership good for?
    +
    Global cgroup_create_cgroup_from_parent (struct cgroup *cgroup, int ignore_ownership)
    +

    what is this good for? Why the list of controllers added by cgroup_add_controller() is not used, like in cgroup_create_cgroup()? I can't crate subgroup of root group in just one hierarchy with this function!

    +

    what is ignore_ownership good for?

    +
    +
    Global cgroup_delete_cgroup (struct cgroup *cgroup, int ignore_migration)
    +
    what is ignore_migration good for? rmdir() will fail if tasks were not moved.
    +
    Global CGROUP_FILE_TYPE_OTHER
    +
    really?
    +
    Global cgroup_free_controllers (struct cgroup *cgroup)
    +
    should this function be public???
    +
    Global cgroup_get_cgroup (struct cgroup *cgroup)
    +
    what is this function good for? Why is not considered only the list of controllers attached by cgroup_add_controller()? What owners will return cgroup_get_uid_gid() if the group is in multiple hierarchies, each with different owner of tasks file?
    +
    Global cgroup_get_value_string (struct cgroup_controller *controller, const char *name, char **value)
    +
    rephrase, it's too vague... How big is the buffer actually?
    +
    Global cgroup_init_rules_cache (void)
    +
    add parameter with the filename?
    +
    Global cgroup_new_cgroup (const char *name)
    +
    suggest one preferred way, either "/foo" or "foo".
    +
    Global cgroup_walk_tree_begin (const char *controller, const char *base_path, int depth, void **handle, struct cgroup_file_info *info, int *base_level)
    +
    why base_level is not hidden in **handle?
    +
    Module Configuration file
    +
    add this description?: These functions are mostly intended to be used by internal libcgroup tools, however they are fully supported and applications can benefit from them.
    +
    Module group_iterators
    +
    not all iterators follow this pattern, e.g. cgroup_walk_tree_begin() can result both in a state that cgroup_walk_tree_end() is not needed and will sigsegv and in a state that cgroup_walk_tree_end() is needed to free allocated memory. Complete review is needed!
    +
    Module Initialization
    +
    this is very bad... There should be at least way how to refresh the cache and/or an option to refresh it automatically (does kernel provide any indication, when a filesystem is mounted/unmounted?). Dtto the cleanup on exit.
    +
    +
    +
    + + + + diff --git a/tools-common_8h_source.html b/tools-common_8h_source.html new file mode 100644 index 00000000..3058dcbb --- /dev/null +++ b/tools-common_8h_source.html @@ -0,0 +1,161 @@ + + + + + + + +libcgroup: src/tools/tools-common.h Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    libcgroup +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    tools-common.h
    +
    +
    +
    1 /*
    +
    2  * Copyright Red Hat, Inc. 2009
    +
    3  *
    +
    4  * Author: Vivek Goyal <vgoyal@redhat.com>
    +
    5  * Jan Safranek <jsafrane@redhat.com>
    +
    6  *
    +
    7  * This program is free software; you can redistribute it and/or modify it
    +
    8  * under the terms of version 2.1 of the GNU Lesser General Public License
    +
    9  * as published by the Free Software Foundation.
    +
    10  *
    +
    11  * This program is distributed in the hope that it would be useful, but
    +
    12  * WITHOUT ANY WARRANTY; without even the implied warranty of
    +
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    +
    14  *
    +
    15  */
    +
    16 
    +
    17 #ifndef __TOOLS_COMMON
    +
    18 
    +
    19 #define __TOOLS_COMMON
    +
    20 
    +
    21 #ifdef __cplusplus
    +
    22 extern "C" {
    +
    23 #endif
    +
    24 #include "config.h"
    +
    25 #include <libcgroup.h>
    +
    26 #include "../libcgroup-internal.h"
    +
    27 
    +
    28 #define cgroup_err(x...) cgroup_log(CGROUP_LOG_ERROR, x)
    +
    29 #define cgroup_warn(x...) cgroup_log(CGROUP_LOG_WARNING, x)
    +
    30 #define cgroup_info(x...) cgroup_log(CGROUP_LOG_INFO, x)
    +
    31 #define cgroup_dbg(x...) cgroup_log(CGROUP_LOG_DEBUG, x)
    +
    32 
    + +
    37  char path[FILENAME_MAX];
    +
    38  char *controllers[CG_CONTROLLER_MAX];
    +
    39 };
    +
    40 
    +
    41 
    + +
    46  char **items;
    +
    47  int size;
    +
    48  int count;
    +
    49 };
    +
    50 
    +
    64 int parse_cgroup_spec(struct cgroup_group_spec **cdptr, char *optarg,
    +
    65  int capacity);
    +
    66 
    +
    71 void cgroup_free_group_spec(struct cgroup_group_spec *cl);
    +
    72 
    +
    73 
    +
    79 int cgroup_string_list_init(struct cgroup_string_list *list,
    +
    80  int initial_size);
    +
    81 
    +
    86 void cgroup_string_list_free(struct cgroup_string_list *list);
    +
    87 
    +
    94 int cgroup_string_list_add_item(struct cgroup_string_list *list,
    +
    95  const char *item);
    +
    96 
    +
    106 int cgroup_string_list_add_directory(struct cgroup_string_list *list,
    +
    107  char *dirname, char *program_name);
    +
    108 
    +
    109 
    +
    116 int parse_mode(char *string, mode_t *pmode, const char *program_name);
    +
    117 
    +
    125 int parse_uid_gid(char *string, uid_t *uid, gid_t *gid,
    +
    126  const char *program_name);
    +
    127 
    +
    133 #ifdef UNIT_TEST
    +
    134 
    +
    135 int parse_r_flag(const char * const program_name,
    +
    136  const char * const name_value_str,
    +
    137  struct control_value * const name_value);
    +
    138 
    +
    139 #endif /* UNIT_TEST */
    +
    140 
    +
    141 #ifdef __cplusplus
    +
    142 } /* extern "C" */
    +
    143 #endif
    +
    144 
    +
    145 #endif /* TOOLS_COMMON */
    +
    Definition: tools-common.h:36
    +
    Definition: tools-common.h:45
    +
    Definition: libcgroup-internal.h:90
    +
    + + + + -- 2.47.2