View | Details | Raw Unified | Return to bug 170317 | Differences between
and this patch

Collapse All | Expand All

(-)natives/localfile.h (-2 / +17 lines)
Lines 1-9 Link Here
1
/*
1
/*
2
 * Copyright (c) 2000, 2005 IBM Corporation and others.
2
 * Copyright (c) 2000, 2007 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 * Martin Oberhuber (Wind River) - [170317] add symbolic link support to API
7
 */
11
 */
8
/* DO NOT EDIT THIS FILE - it is machine generated */
12
/* DO NOT EDIT THIS FILE - it is machine generated */
9
#include <jni.h>
13
#include <jni.h>
Lines 15-21 Link Here
15
extern "C" {
19
extern "C" {
16
#endif
20
#endif
17
21
18
//values from IFileStoreConstants
22
//values from EFS
19
#undef ATTRIBUTE_DIRECTORY
23
#undef ATTRIBUTE_DIRECTORY
20
#define ATTRIBUTE_DIRECTORY 0x01l
24
#define ATTRIBUTE_DIRECTORY 0x01l
21
#undef ATTRIBUTE_READ_ONLY
25
#undef ATTRIBUTE_READ_ONLY
Lines 26-31 Link Here
26
#define ATTRIBUTE_ARCHIVE 0x08l
30
#define ATTRIBUTE_ARCHIVE 0x08l
27
#undef ATTRIBUTE_HIDDEN
31
#undef ATTRIBUTE_HIDDEN
28
#define ATTRIBUTE_HIDDEN 0x10l
32
#define ATTRIBUTE_HIDDEN 0x10l
33
#undef ATTRIBUTE_SYMLINK
34
#define ATTRIBUTE_SYMLINK 0x20l
29
#undef SET_ATTRIBUTES
35
#undef SET_ATTRIBUTES
30
#define SET_ATTRIBUTES 0x01l
36
#define SET_ATTRIBUTES 0x01l
31
#undef SET_LAST_MODIFIED
37
#undef SET_LAST_MODIFIED
Lines 87-92 Link Here
87
JNIEXPORT jboolean JNICALL Java_org_eclipse_core_internal_filesystem_local_LocalFileNatives_internalSetFileInfoW
93
JNIEXPORT jboolean JNICALL Java_org_eclipse_core_internal_filesystem_local_LocalFileNatives_internalSetFileInfoW
88
  (JNIEnv *env, jclass clazz, jcharArray target, jobject obj, jint options);   
94
  (JNIEnv *env, jclass clazz, jcharArray target, jobject obj, jint options);   
89
95
96
/*
97
 * Class:     org_eclipse_core_internal_filesystem_local_LocalFileNatives
98
 * Method:    internalReadlink
99
 * Signature: ([B)[B
100
 */
101
JNIEXPORT jbyteArray JNICALL Java_org_eclipse_core_internal_filesystem_local_LocalFileNatives_internalReadlink
102
   (JNIEnv *env, jclass clazz, jbyteArray fileName);
103
   
104
90
#ifdef __cplusplus
105
#ifdef __cplusplus
91
}
106
}
92
#endif
107
#endif
(-)natives/macosx/localfile.c (-1 / +14 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2005 IBM Corporation and others.
2
 * Copyright (c) 2000, 2007 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials 
3
 * All rights reserved. This program and the accompanying materials 
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 8-13 Link Here
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 * 	  Andre Weinand (OTI Labs)
10
 * 	  Andre Weinand (OTI Labs)
11
 * Martin Oberhuber (Wind River) - [170317] add symbolic link support to API
11
 *******************************************************************************/
12
 *******************************************************************************/
12
13
13
#include <jni.h>
14
#include <jni.h>
Lines 284-286 Link Here
284
	free(name);
285
	free(name);
285
	return result == 0;
286
	return result == 0;
286
}
287
}
288
289
/*
290
 * Class:     org_eclipse_core_internal_filesystem_local_LocalFileNatives
291
 * Method:    internalReadlink
292
 * Signature: ([B)[B
293
 */
294
JNIEXPORT jbyteArray JNICALL Java_org_eclipse_core_internal_filesystem_local_LocalFileNatives_internalReadlink
295
   (JNIEnv *env, jclass clazz, jbyteArray fileName) {
296
	// shouldn't ever be called - there is currently no symlink support on Mac
297
	  jbyteArray jb = (*env)->NewByteArray(env, 0);
298
	  return jb;
299
}
(-)natives/win32/localfile.c (-1 / +14 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
* Copyright (c) 2000, 2005 IBM Corporation and others.
2
* Copyright (c) 2000, 2007 IBM Corporation and others.
3
* All rights reserved. This program and the accompanying materials
3
* All rights reserved. This program and the accompanying materials
4
* are made available under the terms of the Eclipse Public License v1.0
4
* are made available under the terms of the Eclipse Public License v1.0
5
* which accompanies this distribution, and is available at
5
* which accompanies this distribution, and is available at
Lines 7-12 Link Here
7
*
7
*
8
* Contributors:
8
* Contributors:
9
*     IBM Corporation - initial API and implementation
9
*     IBM Corporation - initial API and implementation
10
* Martin Oberhuber (Wind River) - [170317] add symbolic link support to API
10
*******************************************************************************/
11
*******************************************************************************/
11
#include <jni.h>
12
#include <jni.h>
12
#include <io.h>
13
#include <io.h>
Lines 486-488 Link Here
486
	free(targetFile);
487
	free(targetFile);
487
	return success;
488
	return success;
488
}
489
}
490
491
/*
492
 * Class:     org_eclipse_core_internal_filesystem_local_LocalFileNatives
493
 * Method:    internalReadlink
494
 * Signature: ([B)[B
495
 */
496
JNIEXPORT jbyteArray JNICALL Java_org_eclipse_core_internal_filesystem_local_LocalFileNatives_internalReadlink
497
   (JNIEnv *env, jclass clazz, jbyteArray fileName) {
498
	// shouldn't ever be called - there is currently no symlink support on Windows
499
	  jbyteArray jb = (*env)->NewByteArray(env, 0);
500
	  return jb;
501
}
(-)src/org/eclipse/core/filesystem/EFS.java (-1 / +19 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2005, 2006 IBM Corporation and others.
2
 * Copyright (c) 2005, 2007 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 7-12 Link Here
7
 *
7
 *
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 * Martin Oberhuber (Wind River) - [170317] add symbolic link support to API
10
 *******************************************************************************/
11
 *******************************************************************************/
11
package org.eclipse.core.filesystem;
12
package org.eclipse.core.filesystem;
12
13
Lines 146-151 Link Here
146
	public static final int ATTRIBUTE_HIDDEN = 1 << 4;
147
	public static final int ATTRIBUTE_HIDDEN = 1 << 4;
147
148
148
	/**
149
	/**
150
	 * Attribute constant (value 1 &lt;&lt;5) indicating that a
151
	 * file is a symbolic link.
152
	 * 
153
	 * If this attribute is <code>true</code> for a given {@link IFileInfo}
154
	 * instance, a String value may be associated with the attribute
155
	 * holding the symbolic link target. This link target can be
156
	 * retrieved with {@link IFileInfo#getStringAttribute(int)}.
157
	 * 
158
	 * @see IFileStore#fetchInfo()
159
	 * @see IFileStore#putInfo(IFileInfo, int, IProgressMonitor)
160
	 * @see IFileInfo#getAttribute(int)
161
	 * @see IFileInfo#setAttribute(int, boolean)
162
	 * @since org.eclipse.core.filesystem 1.1
163
	 */
164
	public static final int ATTRIBUTE_SYMLINK = 1 << 5;
165
166
	/**
149
	 * Scheme constant (value "file") indicating the local file system scheme.
167
	 * Scheme constant (value "file") indicating the local file system scheme.
150
	 * @see EFS#getLocalFileSystem()
168
	 * @see EFS#getLocalFileSystem()
151
	 */
169
	 */
(-)src/org/eclipse/core/filesystem/IFileInfo.java (-1 / +16 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2005 IBM Corporation and others.
2
 * Copyright (c) 2005, 2007 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 7-12 Link Here
7
 * 
7
 * 
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 * Martin Oberhuber (Wind River) - [170317] add symbolic link support to API
10
 *******************************************************************************/
11
 *******************************************************************************/
11
package org.eclipse.core.filesystem;
12
package org.eclipse.core.filesystem;
12
13
Lines 51-56 Link Here
51
	public abstract boolean getAttribute(int attribute);
52
	public abstract boolean getAttribute(int attribute);
52
53
53
	/**
54
	/**
55
	 * Returns the String value of the specified attribute for this file. The attribute
56
	 * must be one of the <code>EFS#ATTRIBUTE_*</code>
57
	 * constants. Returns <code>null</code> if the given attribute does not have
58
	 * a String value on this file, the attribute could not be accessed, or the
59
	 * provided attribute does not apply to this file system.
60
	 * 
61
	 * @param attribute The attribute to retrieve the value for
62
	 * @return the value of the specified attribute for this file.
63
	 * @see IFileSystem#attributes()
64
	 * @since org.eclipse.core.filesystem 1.1
65
	 */
66
	public abstract String getStringAttribute(int attribute);
67
68
	/**
54
	 * Returns the last modified time for this file, or {@link EFS#NONE}
69
	 * Returns the last modified time for this file, or {@link EFS#NONE}
55
	 * if the file does not exist or the last modified time could not be computed.
70
	 * if the file does not exist or the last modified time could not be computed.
56
	 * <p>
71
	 * <p>
(-)natives/unix/localfile.c (-6 / +42 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2005 IBM Corporation and others.
2
 * Copyright (c) 2000, 2007 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials 
3
 * All rights reserved. This program and the accompanying materials 
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 8-13 Link Here
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 *     Red Hat Incorporated - get/setResourceAttribute code
10
 *     Red Hat Incorporated - get/setResourceAttribute code
11
 * Martin Oberhuber (Wind River) - [170317] add symbolic link support to API
11
 *******************************************************************************/
12
 *******************************************************************************/
12
#include <jni.h>
13
#include <jni.h>
13
#include <sys/types.h>
14
#include <sys/types.h>
Lines 17-22 Link Here
17
#include <string.h>
18
#include <string.h>
18
#include "../localfile.h"
19
#include "../localfile.h"
19
#include <os_custom.h>
20
#include <os_custom.h>
21
#ifdef LINUX
22
#include <unistd.h>
23
#endif
20
24
21
/*
25
/*
22
 * Get a null-terminated byte array from a java byte array.
26
 * Get a null-terminated byte array from a java byte array.
Lines 94-105 Link Here
94
	    (*env)->CallVoidMethod(env, fileInfo, mid, ATTRIBUTE_EXECUTABLE, JNI_TRUE);
98
	    (*env)->CallVoidMethod(env, fileInfo, mid, ATTRIBUTE_EXECUTABLE, JNI_TRUE);
95
    }
99
    }
96
100
101
#ifdef LINUX
97
	// sym link?
102
	// sym link?
98
//    if ((info.st_mode & S_IFLNK) == S_IFLNK) {
103
    if ((info.st_mode & S_IFLNK) == S_IFLNK) {
99
//	    mid = (*env)->GetMethodID(env, cls, "setAttribute", "(IZ)V");
104
	    mid = (*env)->GetMethodID(env, cls, "setAttribute", "(IZ)V");
100
//	    if (mid == 0) return JNI_FALSE;
105
	    if (mid == 0) return JNI_FALSE;
101
//	    (*env)->CallVoidMethod(env, fileInfo, mid, ATTRIBUTE_LINK, JNI_TRUE);
106
	    (*env)->CallVoidMethod(env, fileInfo, mid, ATTRIBUTE_SYMLINK, JNI_TRUE);
102
//    }
107
    }
108
#endif
103
	return JNI_TRUE;
109
	return JNI_TRUE;
104
}
110
}
105
111
Lines 246-248 Link Here
246
	// shouldn't ever be called - there is no Unicode-specific calls on *nix
252
	// shouldn't ever be called - there is no Unicode-specific calls on *nix
247
	return JNI_FALSE;
253
	return JNI_FALSE;
248
}
254
}
255
256
/*
257
 * Class:     org_eclipse_core_internal_filesystem_local_LocalFileNatives
258
 * Method:    internalReadlink
259
 * Signature: ([B)[B
260
 */
261
JNIEXPORT jbyteArray JNICALL Java_org_eclipse_core_internal_filesystem_local_LocalFileNatives_internalReadlink
262
   (JNIEnv *env, jclass clazz, jbyteArray fileName) {
263
	  jbyteArray jb;
264
#ifdef LINUX
265
	  int len;
266
	  jbyte *sourceFile;
267
	  char buf[256];
268
269
	  len = 0;
270
	  sourceFile = getByteArray(env, fileName);
271
	  len = readlink((const char*)sourceFile, buf, 256);
272
	  if (len>0) {
273
		  jb=(*env)->NewByteArray(env, len);
274
		  (*env)->SetByteArrayRegion(env, jb, 0, len, (jbyte *)buf);
275
	  } else {
276
		  jb=(*env)->NewByteArray(env, 0);
277
	  }
278
279
	  free(sourceFile);
280
#else
281
	  jb=(*env)->NewByteArray(env, 0);
282
#endif
283
	  return jb;
284
}
(-)src/org/eclipse/core/internal/filesystem/local/LocalFileNatives.java (-1 / +17 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2000, 2006 IBM Corporation and others.
2
 * Copyright (c) 2000, 2007 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 7-15 Link Here
7
 *
7
 *
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 * Martin Oberhuber (Wind River) - [170317] add symbolic link support to API
10
 *******************************************************************************/
11
 *******************************************************************************/
11
package org.eclipse.core.internal.filesystem.local;
12
package org.eclipse.core.internal.filesystem.local;
12
13
14
import org.eclipse.core.filesystem.EFS;
13
import org.eclipse.core.filesystem.IFileInfo;
15
import org.eclipse.core.filesystem.IFileInfo;
14
import org.eclipse.core.filesystem.provider.FileInfo;
16
import org.eclipse.core.filesystem.provider.FileInfo;
15
import org.eclipse.core.internal.filesystem.Messages;
17
import org.eclipse.core.internal.filesystem.Messages;
Lines 60-65 Link Here
60
			internalGetFileInfoW(Convert.toPlatformChars(fileName), info);
62
			internalGetFileInfoW(Convert.toPlatformChars(fileName), info);
61
		else
63
		else
62
			internalGetFileInfo(Convert.toPlatformBytes(fileName), info);
64
			internalGetFileInfo(Convert.toPlatformBytes(fileName), info);
65
		//symbolic link?
66
		if (info.getAttribute(EFS.ATTRIBUTE_SYMLINK)) {
67
			byte[] linkTarget = internalReadlink(Convert.toPlatformBytes(fileName));
68
			if (linkTarget.length > 0) {
69
				info = new FileInfoSymlink(info, new String(linkTarget));
70
			}
71
		}
63
		return info;
72
		return info;
64
	}
73
	}
65
74
Lines 104-109 Link Here
104
	 * be called if <code>isUnicode</code> is <code>false</code>). */
113
	 * be called if <code>isUnicode</code> is <code>false</code>). */
105
	private static final native boolean internalSetFileInfoW(char[] fileName, IFileInfo attribute, int options);
114
	private static final native boolean internalSetFileInfoW(char[] fileName, IFileInfo attribute, int options);
106
115
116
	/**
117
	 * Reads the link target of a symbolic link.
118
	 * @param fileName symbolic link to read
119
	 * @return link target, or empty array in case of an error
120
	 */
121
	private static final native byte[] internalReadlink(byte[] fileName);
122
107
	private static void logMissingNativeLibrary(UnsatisfiedLinkError e) {
123
	private static void logMissingNativeLibrary(UnsatisfiedLinkError e) {
108
		String libName = System.mapLibraryName(LIBRARY_NAME);
124
		String libName = System.mapLibraryName(LIBRARY_NAME);
109
		String message = NLS.bind(Messages.couldNotLoadLibrary, libName);
125
		String message = NLS.bind(Messages.couldNotLoadLibrary, libName);
(-)src/org/eclipse/core/filesystem/provider/FileInfo.java (-2 / +28 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2005 IBM Corporation and others.
2
 * Copyright (c) 2007 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 7-12 Link Here
7
 * 
7
 * 
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 * Martin Oberhuber (Wind River) - [170317] add symbolic link support to API
10
 *******************************************************************************/
11
 *******************************************************************************/
11
package org.eclipse.core.filesystem.provider;
12
package org.eclipse.core.filesystem.provider;
12
13
Lines 17-23 Link Here
17
 * This class should be used by file system providers in their implementation
18
 * This class should be used by file system providers in their implementation
18
 * of API methods that return {@link IFileInfo} objects.
19
 * of API methods that return {@link IFileInfo} objects.
19
 * <p>
20
 * <p>
20
 * This class is not intended to be subclassed.
21
 * This class is not intended to be subclassed by clients.
21
 * </p>
22
 * </p>
22
 * @since org.eclipse.core.filesystem 1.0
23
 * @since org.eclipse.core.filesystem 1.0
23
 */
24
 */
Lines 71-76 Link Here
71
	}
72
	}
72
73
73
	/**
74
	/**
75
	 * Creates a new file information object as a clone of an existing one.
76
	 * All values are filled in with the settings from the template.
77
	 * 
78
	 * @param template A FileInfo object to be cloned.
79
	 * @since org.eclipse.core.filesystem 1.1
80
	 */
81
	public FileInfo(FileInfo template) {
82
		super();
83
		this.name = template.name;
84
		this.attributes = template.attributes;
85
		this.lastModified = template.lastModified;
86
		this.length = template.length;
87
	}
88
89
	/**
74
	 * Convenience method to clear a masked region of the attributes bit field.
90
	 * Convenience method to clear a masked region of the attributes bit field.
75
	 * 
91
	 * 
76
	 * @param mask The mask to be cleared
92
	 * @param mask The mask to be cleared
Lines 111-116 Link Here
111
		return isSet(attribute);
127
		return isSet(attribute);
112
	}
128
	}
113
129
130
	/*
131
	 * Get extended attribute information.
132
	 * Implemented in subclasses only for special kinds of file nodes,
133
	 * in order to save memory in the normal case.
134
	 * @see org.eclipse.core.filesystem.IFileInfo#getStringAttribute(int)
135
	 */
136
	public String getStringAttribute(int attribute) {
137
		return null;
138
	}
139
114
	/* (non-Javadoc)
140
	/* (non-Javadoc)
115
	 * @see org.eclipse.core.filesystem.IFileInfo#lastModified()
141
	 * @see org.eclipse.core.filesystem.IFileInfo#lastModified()
116
	 */
142
	 */
(-)src/org/eclipse/core/internal/filesystem/local/FileInfoSymlink.java (+54 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2007 Wind River Systems, Inc. and others.
3
 * All rights reserved. This program and the accompanying materials 
4
 * are made available under the terms of the Eclipse Public License v1.0 
5
 * which accompanies this distribution, and is available at 
6
 * http://www.eclipse.org/legal/epl-v10.html 
7
 * 
8
 * Contributors: 
9
 * Martin Oberhuber (Wind River) - initial API and implementation
10
 *******************************************************************************/
11
12
package org.eclipse.core.internal.filesystem.local;
13
14
import org.eclipse.core.filesystem.EFS;
15
import org.eclipse.core.filesystem.provider.FileInfo;
16
17
/**
18
 * Special case of FileInfo that adds an extended attribute for 
19
 * holding symbolic link information.
20
 * 
21
 * @since org.eclipse.core.filesystem 1.1
22
 */
23
public class FileInfoSymlink extends FileInfo {
24
25
	private String linkTarget = null;
26
27
	/**
28
	 * Creates a new symlink file information object based on an 
29
	 * existing IFileInfo object, adding the link target information.
30
	 */
31
	public FileInfoSymlink(FileInfo fileInfo, String linkTarget) {
32
		super(fileInfo);
33
		this.linkTarget = linkTarget;
34
	}
35
36
	/* (non-Javadoc)
37
	 * @see org.eclipse.core.filesystem.provider.FileInfo#getStringAttribute(int)
38
	 */
39
	public String getStringAttribute(int attribute) {
40
		if (attribute == EFS.ATTRIBUTE_SYMLINK) {
41
			return linkTarget;
42
		}
43
		return null;
44
	}
45
46
	/**
47
	 * Set the symlink target.
48
	 * @param linkTarget the link target.
49
	 */
50
	public void setLinkTarget(String linkTarget) {
51
		this.linkTarget = linkTarget;
52
	}
53
54
}

Return to bug 170317