aud.diff
| src/libaudcore/vfs.c | ||
|---|---|---|
| 411 | 411 |
return FALSE; /* only local files are handled */ |
| 412 | 412 | |
| 413 | 413 |
char * path2 = uri_to_filename (path); |
| 414 |
if (! path2) |
|
| 415 |
return FALSE; |
|
| 416 |
|
|
| 417 |
if (test & VFS_IS_SYMLINK) |
|
| 418 |
{
|
|
| 419 |
struct stat st; |
|
| 420 |
if (lstat (path2, & st) < 0) |
|
| 421 |
return FALSE; |
|
| 422 |
|
|
| 423 |
if (S_ISLNK (st.st_mode)) |
|
| 424 |
test &= ~VFS_IS_SYMLINK; |
|
| 425 |
} |
|
| 426 |
|
|
| 427 |
if (test & (VFS_IS_REGULAR | VFS_IS_DIR | VFS_IS_EXECUTABLE | VFS_EXISTS)) |
|
| 428 |
{
|
|
| 429 |
struct stat st; |
|
| 430 |
if (stat (path2, & st) < 0) |
|
| 431 |
return FALSE; |
|
| 432 |
|
|
| 433 |
if (S_ISREG (st.st_mode)) |
|
| 434 |
test &= ~VFS_IS_REGULAR; |
|
| 435 |
if (S_ISDIR (st.st_mode)) |
|
| 436 |
test &= ~VFS_IS_DIR; |
|
| 437 |
if (st.st_mode & S_IXUSR) |
|
| 438 |
test &= ~VFS_IS_EXECUTABLE; |
|
| 439 |
|
|
| 440 |
test &= ~VFS_EXISTS; |
|
| 441 |
} |
|
| 414 | 442 | |
| 415 |
if (path2 == NULL) |
|
| 416 |
path2 = g_strdup(path); |
|
| 417 | ||
| 418 |
bool_t ret = g_file_test (path2, test); |
|
| 419 | ||
| 420 |
g_free(path2); |
|
| 443 |
g_free (path2); |
|
| 421 | 444 | |
| 422 |
return ret;
|
|
| 445 |
return ! test;
|
|
| 423 | 446 |
} |
| 424 | 447 | |
| 425 | 448 |
/** |
