diff --git a/maintainer-scripts/ChangeLog b/maintainer-scripts/ChangeLog
index de0ecd87abe73b3332410924bb211d0e28de5633..4d93cf58b3ec1966d7e16fdbe8ce6c3b4d8c69b1 100644
--- a/maintainer-scripts/ChangeLog
+++ b/maintainer-scripts/ChangeLog
@@ -1,3 +1,9 @@
+2002-02-23  Joseph S. Myers  <jsm28@cam.ac.uk>
+
+	* gcc_release: Revert change to -p interface.  Allow for local and
+	remote cases in creating directories.  Give an error if -p
+	argument names a directory.
+
 2002-02-21  Mark Mitchell  <mark@codesourcery.com>
 
 	* gcc_release: Correct handling of diff-generation.  Add
diff --git a/maintainer-scripts/gcc_release b/maintainer-scripts/gcc_release
index bfe7fab709e8d520c3765744daa1add2726adaf8..7e487e0c2b58931d9fa60f20f8b96863affb48f0 100755
--- a/maintainer-scripts/gcc_release
+++ b/maintainer-scripts/gcc_release
@@ -294,7 +294,7 @@ build_tarfiles() {
 
 # Build diffs against an old release.
 build_diffs() {
-  old_dir=${1%/}
+  old_dir=${1%/*}
   old_file=${1##*/}
   old_vers=${old_file%.tar.gz}
   old_vers=${old_vers#gcc-}
@@ -334,13 +334,14 @@ upload_files() {
 
   changedir "${WORKING_DIRECTORY}"
 
-  if [ $LOCAL -ne 0 ]; then
+  # Make sure the directory exists on the server.
+  if [ $LOCAL -eq 0 ]; then
+    ${SSH} -l ${GCC_USERNAME} ${GCC_HOSTNAME} mkdir ${FTP_PATH}
+  else
     mkdir -p "${FTP_PATH}" \
       || error "Could not create \`${FTP_PATH}'"
   fi
 
-  # Make sure the directory exists on the server.
-  ${SSH} -l ${GCC_USERNAME} ${GCC_HOSTNAME} mkdir ${FTP_PATH}
   for x in gcc*.gz gcc*.bz2; do
     if [ -e ${x} ]; then
       # Make sure the file will be readable on the server.
@@ -463,7 +464,10 @@ while getopts "d:fr:u:t:p:sl" ARG; do
 	  SCP=cp
 	  FTP_PATH=~ftp/pub/gcc
 	  PATH=~:/usr/local/bin:$PATH;;
-    p)    OLD_TARS="${OLD_TARS} ${OPTARG}";;
+    p)    OLD_TARS="${OLD_TARS} ${OPTARG}"
+          if [ -d ${OPTARG} ]; then
+	    error "-p argument must name a tarball"
+	  fi;;
     \?)   usage;;
     esac
 done