Changeset 9983


Ignore:
Timestamp:
09/18/05 17:52:06 (16 years ago)
Author:
piso
Message:

Work in progress (tested).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/lisp/Pathname.java

    r9974 r9983  
    33 *
    44 * Copyright (C) 2003-2005 Peter Graves
    5  * $Id: Pathname.java,v 1.89 2005-09-14 19:58:25 piso Exp $
     5 * $Id: Pathname.java,v 1.90 2005-09-18 17:52:06 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    798798        }
    799799        if (device != NIL) {
    800             if (logical && device instanceof AbstractString)
    801                 p.device = new SimpleString(device.getStringValue().toUpperCase());
    802             else
     800            if (logical) {
     801                // "The device component of a logical pathname is always :UNSPECIFIC."
     802                if (device != Keyword.UNSPECIFIC)
     803                    signal(new LispError("The device component of a logical pathname must be :UNSPECIFIC."));
     804            } else
    803805                p.device = device;
    804806        }
    805807        if (directory != NIL) {
    806             if (logical && directory.listp()) {
    807                 LispObject d = NIL;
    808                 while (d != NIL) {
    809                     LispObject component = directory.car();
    810                     if (component instanceof AbstractString)
    811                         d = d.push(new SimpleString(component.getStringValue().toUpperCase()));
    812                     else
    813                         d = d.push(component);
    814                     directory = directory.cdr();
    815                 }
    816                 p.directory = d.nreverse();
     808            if (logical) {
     809                if (directory.listp()) {
     810                    LispObject d = NIL;
     811                    while (directory != NIL) {
     812                        LispObject component = directory.car();
     813                        if (component instanceof AbstractString)
     814                            d = d.push(LogicalPathname.canonicalizeStringComponent((AbstractString)component));
     815                        else
     816                            d = d.push(component);
     817                        directory = directory.cdr();
     818                    }
     819                    p.directory = d.nreverse();
     820                } else if (directory == Keyword.WILD || directory == Keyword.WILD_INFERIORS)
     821                    p.directory = directory;
     822                else
     823                    signal(new LispError("Invalid directory component for logical pathname: " + directory.writeToString()));
    817824            } else
    818825                p.directory = directory;
     
    820827        if (name != NIL) {
    821828            if (logical && name instanceof AbstractString)
    822                 p.name = new SimpleString(name.getStringValue().toUpperCase());
     829                p.name = LogicalPathname.canonicalizeStringComponent((AbstractString)name);
    823830            else
    824831                p.name = name;
     
    826833        if (type != NIL) {
    827834            if (logical && type instanceof AbstractString)
    828                 p.type = new SimpleString(type.getStringValue().toUpperCase());
     835                p.type = LogicalPathname.canonicalizeStringComponent((AbstractString)type);
    829836            else
    830837                p.type = type;
Note: See TracChangeset for help on using the changeset viewer.