summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2008-04-07 14:09:22 +0000
committerCorinna Vinschen <corinna@vinschen.de>2008-04-07 14:09:22 +0000
commit6c74e7d7fcd17febed2b3f41e0cf0840191d63ef (patch)
tree93d16d0b1828cd8a9ea2f3672b3c1821b899c5e5 /winsup/cygwin
parent999fa990441aa4b01fe79dce0f7aa52b04cd76ff (diff)
downloadcygnal-6c74e7d7fcd17febed2b3f41e0cf0840191d63ef.tar.gz
cygnal-6c74e7d7fcd17febed2b3f41e0cf0840191d63ef.tar.bz2
cygnal-6c74e7d7fcd17febed2b3f41e0cf0840191d63ef.zip
* postinstall: Set IFS to LF only. Change while loop in subshell to
for loop in parent shell. Add code to read system mount points and system cygdrive prefix from registry and append them to /etc/fstab.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog6
-rwxr-xr-xwinsup/cygwin/postinstall84
2 files changed, 72 insertions, 18 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 2699ad949..abbf9da82 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,9 @@
+2008-04-07 Corinna Vinschen <corinna@vinschen.de>
+
+ * postinstall: Set IFS to LF only. Change while loop in subshell to
+ for loop in parent shell. Add code to read system mount points and
+ system cygdrive prefix from registry and append them to /etc/fstab.
+
2008-04-06 Corinna Vinschen <corinna@vinschen.de>
* path.cc (struct opt): Rename "system" to "nouser".
diff --git a/winsup/cygwin/postinstall b/winsup/cygwin/postinstall
index 894a7c0c3..bdcc033bf 100755
--- a/winsup/cygwin/postinstall
+++ b/winsup/cygwin/postinstall
@@ -29,19 +29,21 @@ fi
if [ ! -e "/etc/fstab" ]
then
- mount |
- (
- while read -r line
- do
- [[ "$line" =~ ([^ ]*)\ on\ ([^ ]*)\ type\ ([^ ]*)\ .* ]]
- if [ "${BASH_REMATCH[2]}" = "/" ]
- then
- CYGROOT="${BASH_REMATCH[1]}"
- FS_TYPE="${BASH_REMATCH[3]}"
- break
- fi
- done
- cat > /etc/fstab << EOF
+ # Set IFS to just a LF
+ _OLD_IFS="$IFS"
+ IFS="
+"
+ for line in $(mount)
+ do
+ [[ "$line" =~ ([^ ]*)\ on\ ([^ ]*)\ type\ ([^ ]*)\ .* ]]
+ if [ "${BASH_REMATCH[2]}" = "/" ]
+ then
+ CYGROOT="${BASH_REMATCH[1]}"
+ FS_TYPE="${BASH_REMATCH[3]}"
+ break
+ fi
+ done
+ cat > /etc/fstab << EOF
# The file fstab contains descriptive information about the various file
# systems. fstab is only read by programs, and not written; it is the
# duty of the system administrator to properly create and maintain this
@@ -111,12 +113,58 @@ then
# none /mnt cygdrive binary 0 0
#
-${CYGROOT//\\//}/bin /usr/bin ${FS_TYPE} binary 0 0
-${CYGROOT//\\//}/lib /usr/lib ${FS_TYPE} binary 0 0
-# This is default anyway:
-# none /cygdrive cygdrive binary,user 0 0
EOF
- )
+
+ usr_bin=""
+ usr_lib=""
+ key='\HKLM\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2'
+ for subkey in $(regtool -q list "$key")
+ do
+ if [[ "$subkey" =~ /.* ]]
+ then
+ [ "$subkey" = "/usr/bin" ] && usr_bin="1"
+ [ "$subkey" = "/usr/lib" ] && usr_lib="1"
+ nat=$(regtool -q get "$key\\$subkey\native")
+ nat="${nat//\\//}"
+ nat="${nat// /\\040}"
+ psx="${subkey// /\\040}"
+ flags=$(regtool -q get "$key\\$subkey\flags")
+ echo -n "${nat} ${psx} some_fs "
+ (( $flags & 0x0002 )) && echo -n "binary" || echo -n "text"
+ (( $flags & 0x0010 )) && echo -n ",exec"
+ (( $flags & 0x0040 )) && echo -n ",cygexec"
+ (( $flags & 0x0100 )) && echo -n ",notexec"
+ (( $flags & 0x0800 )) && echo -n ",managed"
+ echo " 0 0"
+ fi >> /etc/fstab
+ done
+ [ -z "$usr_bin" ] &&
+ echo "${CYGROOT//\\//}/bin /usr/bin ${FS_TYPE} binary 0 0" >> /etc/fstab
+ [ -z "$usr_lib" ] &&
+ echo "${CYGROOT//\\//}/lib /usr/lib ${FS_TYPE} binary 0 0" >> /etc/fstab
+
+ cygd=""
+ prefix=$(regtool -q get "$key\cygdrive prefix")
+ flags=$(regtool -q get "$key\cygdrive flags")
+ if [ -n "$prefix" -a \( "$prefix" != "/cygdrive" -o "$flags" -ne 42 \) ]
+ then
+ cygd="1"
+ psx="${prefix// /\\040}"
+ echo -n "none ${psx} cygdrive "
+ (( $flags & 0x0002 )) && echo -n "binary" || echo -n "text"
+ (( $flags & 0x0010 )) && echo -n ",exec"
+ (( $flags & 0x0040 )) && echo -n ",cygexec"
+ (( $flags & 0x0100 )) && echo -n ",notexec"
+ (( $flags & 0x0800 )) && echo -n ",managed"
+ echo ",user 0 0"
+ fi >> /etc/fstab
+
+ if [ -z "$cygd" ]
+ then
+ echo "# This is default anyway:" >> /etc/fstab
+ echo "# none /cygdrive cygdrive binary,user 0 0" >> /etc/fstab
+ fi
+ IFS="$_OLD_IFS"
fi
# Check for ${DEVDIR} directory