summaryrefslogtreecommitdiff
path: root/42sh/src/builtins/exit.c
blob: 943c22f9c66046e8aa710badfc70e7ca6e29f2b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "builtins.h"

int my_exit(struct string **args)
{
    unsigned int res = 0;
    if (args[0] != NULL)
    {
        char *c;
        long status = strtol(args[0]->data, &c, 10);
        if (*c != '\0' || status < 0 || status > 255)
        {
            fprintf(stderr, "exit: %s: numeric argument required\n",
                    args[0]->data);
            res = 2;
        }
        else
        {
            res = (unsigned int)status;
        }
    }
    fflush(stdout);
    exit(res);
}