diff --git a/vfs/fish.c b/vfs/fish.c
index 2a2deb6..905aba3 100644
a
|
b
|
fish_dir_load(struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path) |
369 | 369 | "#LIST /%s\n" |
370 | 370 | "if ls -1 /%s >/dev/null 2>&1 ;\n" |
371 | 371 | "then\n" |
372 | | "ls -lLan /%s 2>/dev/null | grep '^[^cbt]' | (\n" |
| 372 | "ls -lan /%s 2>/dev/null | grep '^[^cbt]' | (\n" |
373 | 373 | "while read p l u g s m d y n; do\n" |
374 | 374 | "echo \"P$p $u.$g\nS$s\nd$m $d $y\n:$n\n\"\n" |
375 | 375 | "done\n" |
… |
… |
fish_dir_load(struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path) |
412 | 412 | |
413 | 413 | switch(buffer[0]) { |
414 | 414 | case ':': { |
415 | | if (!strcmp(buffer+1, ".") || !strcmp(buffer+1, "..")) |
416 | | break; /* We'll do . and .. ourself */ |
417 | | ent->name = g_strdup(buffer+1); |
418 | | break; |
419 | | } |
| 415 | char *copy_buffer = buffer+1; |
| 416 | char *filename = buffer+1; |
| 417 | char *linkname = buffer+1; |
| 418 | if (!strcmp(buffer+1, ".") || !strcmp(buffer+1, "..")) |
| 419 | break; /* We'll do . and .. ourself */ |
| 420 | while (*copy_buffer){ |
| 421 | if (strncmp(copy_buffer," -> ",4)==0){ |
| 422 | filename = copy_buffer; |
| 423 | break; |
| 424 | } |
| 425 | copy_buffer++; |
| 426 | } |
| 427 | if (filename != linkname) { |
| 428 | int f_size = filename - linkname; |
| 429 | ent->name = malloc(f_size+1); |
| 430 | strncpy(ent->name,linkname,f_size); |
| 431 | ent->name[f_size] = '\0'; |
| 432 | ent->ino->linkname = strdup(filename + 4); |
| 433 | } else { |
| 434 | ent->name = g_strdup(buffer+1); |
| 435 | } |
| 436 | break; |
| 437 | } |
420 | 438 | case 'S': |
421 | 439 | #ifdef HAVE_ATOLL |
422 | 440 | ST.st_size = (off_t) atoll (buffer+1); |
… |
… |
fish_dir_load(struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path) |
426 | 444 | break; |
427 | 445 | case 'P': { |
428 | 446 | size_t skipped; |
429 | | |
430 | | if (vfs_parse_filemode (buffer + 1, &skipped, &ST.st_mode)) { |
431 | | if (S_ISLNK(ST.st_mode)) |
432 | | ST.st_mode = 0; |
433 | | } |
| 447 | vfs_parse_filemode (buffer + 1, &skipped, &ST.st_mode); |
434 | 448 | break; |
435 | 449 | } |
436 | 450 | case 'd': { |