Closed
Description
The source code:
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
char* join_path(const char* path1, const char* path2) {
int len1 = strlen(path1);
int len2 = strlen(path2);
char* result = malloc(len1 + len2 + 2);
memcpy(result, path1, len1);
result[len1] = '/';
memcpy(result + len1 + 1, path2, len2);
return result;
}
int main() {
char template[] = "/tmp/tmpdir.XXXXXX";
char *tmpdir = mkdtemp(template);
char* p1 = join_path(tmpdir, "test");
char* p2 = join_path(tmpdir, "test2");
int res = symlink(p2, p1);
printf("link result: %d\n", res);
res = open(p1, O_CREAT);
printf("open result: %d, errno: %d %s\n", res, errno, strerror(errno));
free(p1);
free(p2);
}
Run it:
$ gcc broken_symlink.c && ./a.out
link result: 0
open result: 3, errno: 0 Success
$ emcc broken_symlink.c && node a.out.js
link result: 0
open result: -1, errno: 20 File exists
Metadata
Metadata
Assignees
Labels
No labels