+++ /dev/null
-/*
- * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v. 2.0, which is available at
- * http://www.eclipse.org/legal/epl-2.0.
- *
- * This Source Code may also be made available under the following Secondary
- * Licenses when the conditions for such availability set forth in the
- * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
- * version 2 with the GNU Classpath Exception, which is available at
- * https://www.gnu.org/software/classpath/license.html.
- *
- * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
- */
-
-package com.sun.mail.mbox;
-
-import java.io.*;
-
-public class UNIXInbox extends UNIXFolder implements InboxFile {
- private final String user;
-
- private static final long serialVersionUID = 651261842162777620L;
-
- /*
- * Superclass UNIXFile loads the library containing all the
- * native code and sets the "loaded" flag if successful.
- */
-
- public UNIXInbox(String user, String name) {
- super(name);
- this.user = user;
- if (user == null)
- throw new NullPointerException("user name is null in UNIXInbox");
- }
-
- public boolean lock(String mode) {
- if (lockType == NATIVE) {
- if (!loaded)
- return false;
- if (!maillock(user, 5))
- return false;
- }
- if (!super.lock(mode)) {
- if (loaded)
- mailunlock();
- return false;
- }
- return true;
- }
-
- public void unlock() {
- super.unlock();
- if (loaded)
- mailunlock();
- }
-
- public void touchlock() {
- if (loaded)
- touchlock0();
- }
-
- private transient RandomAccessFile lockfile; // the user's ~/.Maillock file
- private transient String lockfileName; // its name
-
- public boolean openLock(String mode) {
- if (mode.equals("r"))
- return true;
- if (lockfileName == null) {
- String home = System.getProperty("user.home");
- lockfileName = home + File.separator + ".Maillock";
- }
- try {
- lockfile = new RandomAccessFile(lockfileName, mode);
- boolean ret;
- switch (lockType) {
- case NONE:
- ret = true;
- break;
- case NATIVE:
- default:
- ret = UNIXFile.lock(lockfile.getFD(), mode);
- break;
- case JAVA:
- ret = lockfile.getChannel().
- tryLock(0L, Long.MAX_VALUE, !mode.equals("rw")) != null;
- break;
- }
- if (!ret)
- closeLock();
- return ret;
- } catch (IOException ex) {
- }
- return false;
- }
-
- public void closeLock() {
- if (lockfile == null)
- return;
- try {
- lockfile.close();
- } catch (IOException ex) {
- } finally {
- lockfile = null;
- }
- }
-
- public boolean equals(Object o) {
- if (!(o instanceof UNIXInbox))
- return false;
- UNIXInbox other = (UNIXInbox)o;
- return user.equals(other.user) && super.equals(other);
- }
-
- public int hashCode() {
- return super.hashCode() + user.hashCode();
- }
-
- private native boolean maillock(String user, int retryCount);
- private native void mailunlock();
- private native void touchlock0();
-}