comparison dmd/root/root.c @ 1195:e961851fb8be

Merged DMD 1.042.
author Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
date Fri, 03 Apr 2009 17:59:34 +0200
parents 1853dcd9b944
children 7af860e4f403
comparison
equal deleted inserted replaced
1194:1853dcd9b944 1195:e961851fb8be
581 581
582 case '/': 582 case '/':
583 return e + 1; 583 return e + 1;
584 584
585 #if _WIN32 585 #if _WIN32
586 case '/':
586 case '\\': 587 case '\\':
588 return e + 1;
587 case ':': 589 case ':':
588 return e + 1; 590 /* The ':' is a drive letter only if it is the second
591 * character or the last character,
592 * otherwise it is an ADS (Alternate Data Stream) separator.
593 * Consider ADS separators as part of the file name.
594 */
595 if (e == str + 1 || e == str + len - 1)
596 return e + 1;
589 #endif 597 #endif
590 default: 598 default:
591 if (e == str) 599 if (e == str)
592 break; 600 break;
593 e--; 601 e--;
618 626
619 if (n[-1] == '/') 627 if (n[-1] == '/')
620 n--; 628 n--;
621 629
622 #if _WIN32 630 #if _WIN32
623 if (n[-1] == '\\') 631 if (n[-1] == '\\' || n[-1] == '/')
624 n--; 632 n--;
625 #endif 633 #endif
626 } 634 }
627 pathlen = n - str; 635 pathlen = n - str;
628 path = (char *)mem.malloc(pathlen + 1); 636 path = (char *)mem.malloc(pathlen + 1);
820 { 828 {
821 char *p = FileName::path(path); 829 char *p = FileName::path(path);
822 if (*p) 830 if (*p)
823 { 831 {
824 #if _WIN32 832 #if _WIN32
825 size_t len = strlen(p); 833 size_t len = strlen(path);
826 if (len > 2 && p[-1] == ':') 834 if (len > 2 && p[-1] == ':' && path + 2 == p)
827 { mem.free(p); 835 { mem.free(p);
828 return; 836 return;
829 } 837 }
830 #endif 838 #endif
831 ensurePathExists(p); 839 ensurePathExists(p);