]>
git.saurik.com Git - cydia.git/blob - cydo.cpp
10 #include <Menes/Function.h>
12 typedef Function
<void, const char *, launch_data_t
> LaunchDataIterator
;
14 void launch_data_dict_iterate(launch_data_t data
, LaunchDataIterator code
) {
15 launch_data_dict_iterate(data
, [](launch_data_t value
, const char *name
, void *baton
) {
16 (*static_cast<LaunchDataIterator
*>(baton
))(name
, value
);
20 int main(int argc
, char *argv
[]) {
21 FILE *log(fopen("/tmp/cydia.log", "a+"));
22 fprintf(log
, "cydo:");
23 for (int arg(1); arg
< argc
; ++arg
)
24 fprintf(log
, " %s", argv
[arg
]);
27 auto request(launch_data_new_string(LAUNCH_KEY_GETJOBS
));
28 auto response(launch_msg(request
));
29 launch_data_free(request
);
31 _assert(response
!= NULL
);
32 _assert(launch_data_get_type(response
) == LAUNCH_DATA_DICTIONARY
);
34 int parent(getppid());
38 launch_data_dict_iterate(response
, [=, &cydia
](const char *name
, launch_data_t value
) {
39 if (launch_data_get_type(response
) != LAUNCH_DATA_DICTIONARY
)
42 auto integer(launch_data_dict_lookup(value
, LAUNCH_JOBKEY_PID
));
43 if (integer
== NULL
|| launch_data_get_type(integer
) != LAUNCH_DATA_INTEGER
)
46 auto pid(launch_data_get_integer(integer
));
50 auto string(launch_data_dict_lookup(value
, LAUNCH_JOBKEY_PROGRAM
));
51 if (string
== NULL
|| launch_data_get_type(string
) != LAUNCH_DATA_STRING
)
54 auto program(launch_data_get_string(string
));
58 fprintf(log
, "%lld %s\n", pid
, program
);
59 if (strcmp(program
, "/Applications/Cydia.app/Cydia") == 0)
64 fprintf(stderr
, "thou shalt not pass\n");
74 if (argc
< 2 || argv
[1][0] != '/')
75 argv
[0] = "/usr/bin/dpkg";
82 return EX_UNAVAILABLE
;