X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libustcmd%2Fustcmd.c;h=223280cc238201130166b94f3399e447913b21c4;hb=772030fed323e388da467735cf4b5e8781acb710;hp=3f09c5036627cddffcb932bcbe90a05cca2a44af;hpb=ab33e65c8f105124ed19855105ed7196845616f6;p=ust.git diff --git a/libustcmd/ustcmd.c b/libustcmd/ustcmd.c index 3f09c50..223280c 100644 --- a/libustcmd/ustcmd.c +++ b/libustcmd/ustcmd.c @@ -15,6 +15,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#define _GNU_SOURCE #include #include #include @@ -22,27 +23,26 @@ #include #include #include -# #include "ustcomm.h" #include "ustcmd.h" #define _GNU_SOURCE -pid_t* ustcmd_get_online_pids(void) { +pid_t* ustcmd_get_online_pids(void) +{ struct dirent* dirent; DIR* dir; - char* ping_res; + unsigned int ret_size = 1 * sizeof(pid_t), i = 0; dir = opendir(SOCK_DIR); if (!dir) { return NULL; } - unsigned int ret_size = 1 * sizeof(pid_t), i = 0; pid_t* ret = (pid_t*) malloc(ret_size); - while (dirent = readdir(dir)) { + while ((dirent = readdir(dir))) { if (!strcmp(dirent->d_name, ".") || !strcmp(dirent->d_name, "..")) { @@ -61,9 +61,9 @@ pid_t* ustcmd_get_online_pids(void) { } } - ret[i] = 0; // Array end + ret[i] = 0; /* Array end */ - if (ret[0] == 0) { // No PID at all.. + if (ret[0] == 0) { /* No PID at all.. */ free(ret); return NULL; } @@ -80,17 +80,20 @@ pid_t* ustcmd_get_online_pids(void) { * @param pid Traced process ID * @return 0 if successful, or errors {USTCMD_ERR_GEN, USTCMD_ERR_ARG} */ -int ustcmd_set_marker_state(const char* mn, int state, pid_t pid) { +int ustcmd_set_marker_state(const char* mn, int state, pid_t pid) +{ + char* cmd_str [] = {"disable_marker", "enable_marker"}; + char* cmd; + int result; + if (mn == NULL) { return USTCMD_ERR_ARG; } - char* cmd_str [] = {"disable_marker", "enable_marker"}; - char* cmd; asprintf(&cmd, "%s %s", cmd_str[state], mn); - int tres; - if (tres = ustcmd_shoot(cmd, pid, NULL)) { + result = ustcmd_shoot(cmd, pid, NULL); + if (result) { free(cmd); return USTCMD_ERR_GEN; } @@ -105,10 +108,12 @@ int ustcmd_set_marker_state(const char* mn, int state, pid_t pid) { * @param pid Traced process ID * @return 0 if successful, or error USTCMD_ERR_GEN */ -int ustcmd_destroy_trace(pid_t pid) { - int tres; +int ustcmd_destroy_trace(pid_t pid) +{ + int result; - if (tres = ustcmd_shoot("destroy", pid, NULL)) { + result = ustcmd_shoot("destroy", pid, NULL); + if (result) { return USTCMD_ERR_GEN; } @@ -121,10 +126,12 @@ int ustcmd_destroy_trace(pid_t pid) { * @param pid Traced process ID * @return 0 if successful, or error USTCMD_ERR_GEN */ -int ustcmd_setup_and_start(pid_t pid) { - int tres; +int ustcmd_setup_and_start(pid_t pid) +{ + int result; - if (tres = ustcmd_shoot("start", pid, NULL)) { + result = ustcmd_shoot("start", pid, NULL); + if (result) { return USTCMD_ERR_GEN; } @@ -137,10 +144,12 @@ int ustcmd_setup_and_start(pid_t pid) { * @param pid Traced process ID * @return 0 if successful, or error USTCMD_ERR_GEN */ -int ustcmd_start_trace(pid_t pid) { - int tres; +int ustcmd_start_trace(pid_t pid) +{ + int result; - if (tres = ustcmd_shoot("trace_start", pid, NULL)) { + result = ustcmd_shoot("trace_start", pid, NULL); + if (result) { return USTCMD_ERR_GEN; } @@ -153,10 +162,12 @@ int ustcmd_start_trace(pid_t pid) { * @param pid Traced process ID * @return 0 if successful, or error USTCMD_ERR_GEN */ -int ustcmd_stop_trace(pid_t pid) { - int tres; +int ustcmd_stop_trace(pid_t pid) +{ + int result; - if (tres = ustcmd_shoot("trace_stop", pid, NULL)) { + result = ustcmd_shoot("trace_stop", pid, NULL); + if (result) { return USTCMD_ERR_GEN; } @@ -169,7 +180,8 @@ int ustcmd_stop_trace(pid_t pid) { * @param str String to search in * @return Total newlines count */ -unsigned int ustcmd_count_nl(const char* str) { +unsigned int ustcmd_count_nl(const char* str) +{ unsigned int i = 0, tot = 0; while (str[i] != '\0') { @@ -188,7 +200,8 @@ unsigned int ustcmd_count_nl(const char* str) { * @param cmsf CMSF array to free * @return 0 if successful, or error USTCMD_ERR_ARG */ -int ustcmd_free_cmsf(struct USTcmd_cmsf* cmsf) { +int ustcmd_free_cmsf(struct USTcmd_cmsf* cmsf) +{ if (cmsf == NULL) { return USTCMD_ERR_ARG; } @@ -213,14 +226,18 @@ int ustcmd_free_cmsf(struct USTcmd_cmsf* cmsf) { * @param pid Targeted PID * @return 0 if successful, or errors {USTCMD_ERR_ARG, USTCMD_ERR_GEN} */ -int ustcmd_get_cmsf(struct USTcmd_cmsf** cmsf, const pid_t pid) { +int ustcmd_get_cmsf(struct USTcmd_cmsf** cmsf, const pid_t pid) +{ + char* big_str = NULL; + int result; + struct USTcmd_cmsf* tmp_cmsf = NULL; + unsigned int i = 0, cmsf_ind = 0; + if (cmsf == NULL) { return USTCMD_ERR_ARG; } - char* big_str = NULL; - int tres; - - if (tres = ustcmd_shoot("list_markers", pid, &big_str)) { + result = ustcmd_shoot("list_markers", pid, &big_str); + if (result) { return USTCMD_ERR_GEN; } @@ -229,58 +246,28 @@ int ustcmd_get_cmsf(struct USTcmd_cmsf** cmsf, const pid_t pid) { return USTCMD_ERR_GEN; } - struct USTcmd_cmsf* tmp_cmsf = NULL; tmp_cmsf = (struct USTcmd_cmsf*) malloc(sizeof(struct USTcmd_cmsf) * (ustcmd_count_nl(big_str) + 1)); if (tmp_cmsf == NULL) { return USTCMD_ERR_GEN; } - // Parse received reply string (format: "[chan]/[mark] [st] [fs]"): - unsigned int i = 0, cur_st, cmsf_ind = 0; + /* Parse received reply string (format: "[chan]/[mark] [st] [fs]"): */ while (big_str[i] != '\0') { - /* RAW METHOD (REPLACED BY SSCANF): - cur_st = i; // Set current start at beginning of current line - while (big_str[i] != '/') { - ++i; // Go to next '/' - } - tmp_cmsf[cmsf_ind].channel = - strndup(big_str + cur_st, i - cur_st); - - ++i; // Go after '/' - cur_st = i; // Set current start at beginning of marker name - while (big_str[i] != ' ') { - ++i; // Go to next ' ' - } - tmp_cmsf[cmsf_ind].marker = - strndup(big_str + cur_st, i - cur_st); - - ++i; // Go after ' ' - tmp_cmsf[cmsf_ind].state = (big_str[i] == USTCMD_MS_CHR_ON ? - USTCMD_MS_ON : USTCMD_MS_OFF); // Marker state - - i += 2; // Go to format string (after state and another ' ') - cur_st = i; // Set current start at beginning of format string - while (big_str[i] != '\n') { - ++i; // Go to next '\n' - } - tmp_cmsf[cmsf_ind].fs = - strndup(big_str + cur_st, i - cur_st); - */ - char state; + sscanf(big_str + i, "%a[^/]/%a[^ ] %c %a[^\n]", &tmp_cmsf[cmsf_ind].channel, &tmp_cmsf[cmsf_ind].marker, &state, &tmp_cmsf[cmsf_ind].fs); tmp_cmsf[cmsf_ind].state = (state == USTCMD_MS_CHR_ON ? - USTCMD_MS_ON : USTCMD_MS_OFF); // Marker state + USTCMD_MS_ON : USTCMD_MS_OFF); /* Marker state */ while (big_str[i] != '\n') { - ++i; // Go to next '\n' + ++i; /* Go to next '\n' */ } - ++i; // Skip current pointed '\n' + ++i; /* Skip current pointed '\n' */ ++cmsf_ind; } tmp_cmsf[cmsf_ind].channel = NULL; @@ -302,12 +289,15 @@ int ustcmd_get_cmsf(struct USTcmd_cmsf** cmsf, const pid_t pid) { * be NULL if no reply is needed for the given command). * @return 0 if successful, or errors {USTCMD_ERR_ARG, USTCMD_ERR_CONN} */ -int ustcmd_shoot(const char* cmd, const pid_t pid, char** reply) { + +int ustcmd_shoot(const char* cmd, const pid_t pid, char** reply) +{ + struct ustcomm_connection conn; + if (cmd == NULL) { return USTCMD_ERR_ARG; } - struct ustcomm_connection conn; if (ustcomm_connect_app(pid, &conn)) { fprintf(stderr, "ustcmd_shoot: could not connect to PID %u\n", (unsigned int) pid); @@ -318,4 +308,3 @@ int ustcmd_shoot(const char* cmd, const pid_t pid, char** reply) { return 0; } -