Changeset 99


Ignore:
Timestamp:
10/11/02 15:30:21 (21 years ago)
Author:
piso
Message:

load(): write locking.

File:
1 edited

Legend:

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

    r93 r99  
    33 *
    44 * Copyright (C) 2000-2002 Peter Graves
    5  * $Id: Man.java,v 1.2 2002-10-11 01:42:37 piso Exp $
     5 * $Id: Man.java,v 1.3 2002-10-11 15:30:21 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    6060    {
    6161        if (!isLoaded()) {
    62             final File toBeLoaded = getFile();
    63             if (toBeLoaded.isFile()) {
    64                 try {
    65                     load(toBeLoaded.getInputStream());
     62            try {
     63                lockWrite();
     64            }
     65            catch (InterruptedException e) {
     66                Log.debug(e);
     67                return LOAD_FAILED;
     68            }
     69            try {
     70                final File toBeLoaded = getFile();
     71                if (toBeLoaded.isFile()) {
     72                    try {
     73                        _load(toBeLoaded.getInputStream());
     74                    }
     75                    catch (IOException e) {
     76                        Log.error(e);
     77                    }
     78                    // Handle zero length files.
     79                    if (getFirstLine() == null) {
     80                        appendLine("");
     81                        lineSeparator = System.getProperty("line.separator");
     82                    }
     83                    setLastModified(toBeLoaded.lastModified());
     84                    renumber();
     85                    formatter.parseBuffer();
    6686                }
    67                 catch (IOException e) {
    68                     Log.error(e);
     87                Line line = getFirstLine();
     88                while (line != null && line.isBlank()) {
     89                    line = line.next();
     90                    setFirstLine(line);
    6991                }
    70                 // Handle zero length files.
    71                 if (getFirstLine() == null) {
     92                final Line firstLine = getFirstLine();
     93                if (firstLine == null) {
    7294                    appendLine("");
    73                     lineSeparator = System.getProperty("line.separator");
     95                    setLoaded(true);
     96                    return LOAD_FAILED;
    7497                }
    75                 setLastModified(toBeLoaded.lastModified());
     98                firstLine.setPrevious(null);
     99                String header = firstLine.getText();
     100                for (line = firstLine.next(); line != null; line = line.next()) {
     101                    if (line.isBlank() && line.previous() != null && line.previous().isBlank())
     102                        remove(line);
     103                    else if (line.getText().equals(header))
     104                        remove(line);
     105                }
    76106                renumber();
    77                 formatter.parseBuffer();
     107                setLoaded(true);
    78108            }
    79             setLoaded(true);
     109            finally {
     110                unlockWrite();
     111            }
    80112        }
    81         Line line = getFirstLine();
    82         while (line != null && line.isBlank()) {
    83             line = line.next();
    84             setFirstLine(line);
    85         }
    86         if (getFirstLine() == null)
    87             return LOAD_FAILED;
    88         getFirstLine().setPrevious(null);
    89         String header = getFirstLine().getText();
    90         for (line = getFirstLine().next(); line != null; line = line.next()) {
    91             if (line.isBlank() && line.previous() != null && line.previous().isBlank())
    92                 remove(line);
    93             else if (line.getText().equals(header))
    94                 remove(line);
    95         }
    96         renumber();
    97113        return LOAD_COMPLETED;
    98114    }
    99115
    100     public void load(InputStream istream)
     116    private void _load(InputStream istream)
    101117    {
    102118        byte[] buf = new byte[4096];
Note: See TracChangeset for help on using the changeset viewer.