ruby ptql_re_impl
This commit is contained in:
parent
026d560a09
commit
f7b590cf27
|
@ -17,6 +17,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ruby.h>
|
#include <ruby.h>
|
||||||
|
#include <regex.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "sigar.h"
|
#include "sigar.h"
|
||||||
#include "sigar_fileinfo.h"
|
#include "sigar_fileinfo.h"
|
||||||
|
@ -42,6 +43,28 @@ static sigar_t *rb_sigar_get(VALUE obj)
|
||||||
return sigar;
|
return sigar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int rbsigar_ptql_re_impl(void *data,
|
||||||
|
char *haystack, char *needle)
|
||||||
|
{
|
||||||
|
struct re_pattern_buffer *regex;
|
||||||
|
int len = strlen(haystack);
|
||||||
|
int retval;
|
||||||
|
const char *err;
|
||||||
|
|
||||||
|
regex = ALLOC(struct re_pattern_buffer);
|
||||||
|
MEMZERO((char *)regex, struct re_pattern_buffer, 1);
|
||||||
|
/* XXX cache */
|
||||||
|
if ((err = re_compile_pattern(needle, strlen(needle), regex))) {
|
||||||
|
re_free_pattern(regex);
|
||||||
|
rb_raise(rb_eRegexpError, "%s", err);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
retval = re_match(regex, haystack, len, 0, NULL);
|
||||||
|
re_free_pattern(regex);
|
||||||
|
return retval > 0;
|
||||||
|
}
|
||||||
|
|
||||||
#define sigar_isdigit(c) \
|
#define sigar_isdigit(c) \
|
||||||
(isdigit(((unsigned char)(c))))
|
(isdigit(((unsigned char)(c))))
|
||||||
|
|
||||||
|
@ -69,7 +92,9 @@ static sigar_pid_t rb_sigar_pid_get(sigar_t *sigar, VALUE obj)
|
||||||
if (status == SIGAR_OK) {
|
if (status == SIGAR_OK) {
|
||||||
sigar_pid_t qpid;
|
sigar_pid_t qpid;
|
||||||
|
|
||||||
|
sigar_ptql_re_impl_set(sigar, NULL, rbsigar_ptql_re_impl);
|
||||||
status = sigar_ptql_query_find_process(sigar, query, &qpid);
|
status = sigar_ptql_query_find_process(sigar, query, &qpid);
|
||||||
|
sigar_ptql_re_impl_set(sigar, NULL, NULL);
|
||||||
sigar_ptql_query_destroy(query);
|
sigar_ptql_query_destroy(query);
|
||||||
if (status == SIGAR_OK) {
|
if (status == SIGAR_OK) {
|
||||||
return qpid;
|
return qpid;
|
||||||
|
@ -424,7 +449,9 @@ static VALUE rb_sigar_proc_list(int argc, VALUE *argv, VALUE obj)
|
||||||
if (status != SIGAR_OK) {
|
if (status != SIGAR_OK) {
|
||||||
RB_SIGAR_RAISE(error.message);
|
RB_SIGAR_RAISE(error.message);
|
||||||
}
|
}
|
||||||
|
sigar_ptql_re_impl_set(sigar, NULL, rbsigar_ptql_re_impl);
|
||||||
status = sigar_ptql_query_find(sigar, query, &list);
|
status = sigar_ptql_query_find(sigar, query, &list);
|
||||||
|
sigar_ptql_re_impl_set(sigar, NULL, NULL);
|
||||||
sigar_ptql_query_destroy(query);
|
sigar_ptql_query_destroy(query);
|
||||||
if (status != SIGAR_OK) {
|
if (status != SIGAR_OK) {
|
||||||
RB_SIGAR_RAISE(sigar_strerror(sigar, status));
|
RB_SIGAR_RAISE(sigar_strerror(sigar, status));
|
||||||
|
|
Loading…
Reference in New Issue