fixed magic vars for symlinks

This commit is contained in:
Roberto De Ioris
2012-11-08 07:33:43 +01:00
parent b041fe4473
commit 2f901f08cb
3 changed files with 30 additions and 9 deletions
+11
View File
@@ -1822,6 +1822,17 @@ int uwsgi_is_dir(char *filename) {
return 0;
}
int uwsgi_is_link(char *filename) {
struct stat st;
if (lstat(filename, &st)) {
return 0;
}
if (S_ISLNK(st.st_mode))
return 1;
return 0;
}
int uwsgi_logic_opt_if_opt(char *key, char *value) {
// check for env-value syntax
+18 -9
View File
@@ -669,18 +669,27 @@ restart:
void config_magic_table_fill(char *filename, char **magic_table) {
char *tmp = NULL;
char *fullname = filename;
char *fullname = uwsgi_expand_path(filename, strlen(filename), NULL);
if (!fullname) {
fullname = filename;
// we have a special case for symlinks
if (uwsgi_is_link(filename)) {
if (filename[0] != '/') {
fullname = uwsgi_concat3(uwsgi.cwd, "/", filename);
}
}
// free unused memory
else {
char *minimal_name = uwsgi_malloc(strlen(fullname) + 1);
memcpy(minimal_name, fullname, strlen(fullname));
minimal_name[strlen(fullname)] = 0;
free(fullname);
fullname = minimal_name;
fullname = uwsgi_expand_path(filename, strlen(filename), NULL);
if (fullname) {
char *minimal_name = uwsgi_malloc(strlen(fullname) + 1);
memcpy(minimal_name, fullname, strlen(fullname));
minimal_name[strlen(fullname)] = 0;
free(fullname);
fullname = minimal_name;
}
else {
fullname = filename;
}
}
magic_table['o'] = filename;
+1
View File
@@ -3139,6 +3139,7 @@ int uwsgi_try_autoload(char *);
uint64_t uwsgi_micros(void);
int uwsgi_is_file(char *);
int uwsgi_is_link(char *);
void uwsgi_receive_signal(int, char *, int);
void uwsgi_exec_atexit(void);