diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/slack.c | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/src/slack.c b/src/slack.c index bd9e6b1..31330db 100644 --- a/src/slack.c +++ b/src/slack.c @@ -15,9 +15,6 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ - - - #include <stdio.h> #include <string.h> #include <stdlib.h> @@ -25,6 +22,13 @@ #include <sys/prctl.h> + +#define NS (1L) +#define US (1000L) +#define MS (1000L * 1000L) +#define S (1000L * 1000L * 1000L) + + static void usage(void) { printf("USAGE: slack (get | GET | (reset | <interval> <options..> [--fatal] [--] <command..>))\n"); @@ -48,14 +52,6 @@ static void usage(void) } - -#define NS (1L) -#define US (1000L) -#define MS (1000L * 1000L) -#define S (1000L * 1000L * 1000L) - - - int main(int argc, char** argv) { long slackvalue, r; @@ -114,7 +110,7 @@ int main(int argc, char** argv) slackvalue = strtol(argv[1], &end, 10); if (end == argv[1]) - return fprintf(stderr, "No slack value specified."), 1; + return fprintf(stderr, "No slack value specified."), free(exec_argv), 1; if (!strcmp(end, "n") || !strcmp(end, "ns") || !strcmp(end, "")) slackvalue *= NS; else if (!strcmp(end, "µ") || !strcmp(end, "µs")) slackvalue *= US; @@ -122,18 +118,19 @@ int main(int argc, char** argv) else if (!strcmp(end, "m") || !strcmp(end, "ms")) slackvalue *= MS; else if (!strcmp(end, "s")) slackvalue *= S; else - return fprintf(stderr, "Unrecognised suffix for slack value."), 1; + return fprintf(stderr, "Unrecognised suffix for slack value."), free(exec_argv), 1; if (slackvalue <= 0) - return fprintf(stderr, "Invalid slack value: %lins", slackvalue), 1; + return fprintf(stderr, "Invalid slack value: %lins", slackvalue), free(exec_argv), 1; } if (r = prctl(PR_SET_TIMERSLACK, slackvalue), r < 0) if (perror(*argv), fatal) - return 2; + return free(exec_argv), 2; execvp(*exec_argv, exec_argv); perror(*argv); + free(exec_argv); return 2; } |