blob: 0598f78c3a905192b5503a0bd42754db7376175b (
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
|
/* A safer version of chdir, which returns back to the
initial working directory when the program exits. */
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
static char *initial_wd;
static void
restore_wd (void)
{
chdir (initial_wd);
}
int
chdir_safer (char const *dir)
{
if (! initial_wd)
{
size_t s;
for (s = 256; ! (initial_wd = getcwd (0, s)); s *= 2)
if (errno != ERANGE)
return -1;
if (atexit (restore_wd) != 0)
{
free (initial_wd);
initial_wd = 0;
return -1;
}
}
return chdir (dir);
}
|