long cg_read_long(const char *cgroup, const char *control) { char buf[128]; if (cg_read(cgroup, control, buf, sizeof(buf))) return -1; return atol(buf); }
int cg_read_strstr(const char *cgroup, const char *control, const char *needle) { char buf[PAGE_SIZE]; if (cg_read(cgroup, control, buf, sizeof(buf))) return -1; return strstr(buf, needle) ? 0 : -1; }
long cg_read_key_long(const char *cgroup, const char *control, const char *key) { char buf[PAGE_SIZE]; char *ptr; if (cg_read(cgroup, control, buf, sizeof(buf))) return -1; ptr = strstr(buf, key); if (!ptr) return -1; return atol(ptr + strlen(key)); }
int cg_read_strcmp(const char *cgroup, const char *control, const char *expected) { size_t size = strlen(expected) + 1; char *buf; buf = malloc(size); if (!buf) return -1; if (cg_read(cgroup, control, buf, size)) return -1; return strcmp(expected, buf); }
static int do_cg_read(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi) { int (*cg_read)(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *fi); char *error; dlerror(); /* Clear any existing error */ cg_read = (int (*)(const char *, char *, size_t, off_t, struct fuse_file_info *)) dlsym(dlopen_handle, "cg_read"); error = dlerror(); if (error != NULL) { fprintf(stderr, "cg_read: %s\n", error); return -1; } return cg_read(path, buf, size, offset, fi); }
static PyObject * cc_read (PyObject *self, PyObject *args) { CCLibTicker ticker("cc_read"); char *data = (char*)xbuffer; int w = 0, l = 0, ret = 0; int e, nw = 0; char *cmd ; if (!PyArg_ParseTuple(args, "|i", &nw)) { return NULL; } log_list.clear() ; cc_logmod = 1 ; Py_BEGIN_ALLOW_THREADS ret = cg_read (&e, &w, &l, data, nw) ; Py_END_ALLOW_THREADS if (ret > MAX_PACKET_SIZE) { assert(ret <= MAX_PACKET_SIZE); fprintf(stderr, "F**K SIZE\n"); printf("size=%d\n", ret); abort(); } cc_logmod = 0; for (; log_list.begin() != log_list.end(); ) { cmd = *(log_list.begin()) ; log_list.pop_front() ; PyRun_SimpleString(cmd) ; delete cmd ; } if (ret < 0) { return Py_BuildValue("iiis#", -1, w, l, "", 0); } else if (ret == 0 && e < 0) { return Py_BuildValue("iiis#", 99, w, l, "", 0); } // return format: (len of payload, event, wparam, lparam, payload) return Py_BuildValue("iiis#", e, w, l, data, ret); }
static int cg_killall(const char *cgroup) { char buf[PAGE_SIZE]; char *ptr = buf; if (cg_read(cgroup, "cgroup.procs", buf, sizeof(buf))) return -1; while (ptr < buf + sizeof(buf)) { int pid = strtol(ptr, &ptr, 10); if (pid == 0) break; if (*ptr) ptr++; else break; if (kill(pid, SIGKILL)) return -1; } return 0; }