blob: 09f5fe21fe35bc78210bf65a9482e315aa3a7fcb (
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
/*
* bitmask-launcher.c
*
* part of the bitmask bundle.
* execute main entrypoint in a child folder inside the bundle.
*
* (c) LEAP Encryption Access Project, 2016-2018.
* License: GPL.
*
*/
#include <unistd.h>
#include <stdlib.h>
#include <libgen.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#define MAXBUFSIZE 1024
char* const lib = "/lib";
char* const entrypoint = "bitmask";
char* const linkname = "/proc/self/exe";
int main(int argc, char *argv[])
{
char buf[MAXBUFSIZE];
char pth[MAXBUFSIZE];
char *dirc, *dname;
argv[0] = entrypoint;
buf[0] = 0;
pth[0] = 0;
readlink(linkname, buf, MAXBUFSIZE);
dirc = strdup(buf);
dname = dirname(dirc);
strncat(pth, dname, strlen(dname));
strncat(pth, lib, strlen(lib));
if (chdir(pth) < 0)
{
fprintf(stderr, "error: %s\n", strerror(errno));
}
execv(entrypoint, argv);
}
|