home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 December (Special) / PCWorld_2005-12_Special_cd.bin / Bezpecnost / lsti / lsti.exe / framework-2.5.exe / rebaseall < prev    next >
Text File  |  2005-07-28  |  3KB  |  123 lines

  1. #!/bin/ash
  2.  
  3. #
  4. # Copyright (c) 2003, 2005 Jason Tishler
  5. #
  6. # This program is free software; you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation; either version 2 of the License, or
  9. # (at your option) any later version.
  10. #
  11. # A copy of the GNU General Public License can be found at
  12. # http://www.gnu.org/
  13. #
  14. # Written by Jason Tishler <jason@tishler.net>
  15. #
  16. # $Id: rebaseall,v 1.18 2005/07/28 13:26:00 jt Exp $
  17. #
  18.  
  19. # Define constants
  20. PATH=/bin
  21. ProgramName=`basename $0`
  22. ProgramOptions='b:o:s:T:v'
  23. DefaultBaseAddress=0x70000000
  24. DefaultOffset=0x10000
  25. DefaultVerbose=
  26. DefaultFileList=
  27. DefaultSuffixes='dll|so'
  28.  
  29. # Define functions
  30. usage()
  31. {
  32.     echo "usage: $ProgramName [-b BaseAddress] [-o Offset] [-s DllSuffix] [-T FileList | -] [-v]"
  33.     exit 1
  34. }
  35.  
  36. cleanup()
  37. {
  38.     rm -f "$TmpFile"
  39.     exit $ExitCode
  40. }
  41.  
  42. # Set traps
  43. trap cleanup 1 2 15
  44.  
  45. # Set defaults
  46. BaseAddress=$DefaultBaseAddress
  47. Offset=$DefaultOffset
  48. Verbose=$DefaultVerbose
  49. FileList=$DefaultFileList
  50. Suffixes=$DefaultSuffixes
  51.  
  52. # Verify only ash processes are running
  53. grep -q -i -v '/ash$' /proc/[0-9]*/exename
  54. if [ $? -eq 0 -a -z "$RebaseDebug" ]
  55. then
  56.     echo "$ProgramName: only ash processes are allowed during rebasing"
  57.     echo "    Exit all Cygwin processes and stop all Cygwin services."
  58.     echo "    Execute ash from Start/Run... or a cmd or command window."
  59.     echo "    Execute '/bin/rebaseall' from ash."
  60.     exit 2
  61. fi
  62.  
  63. # Parse command line arguments
  64. while getopts $ProgramOptions Option "$@"
  65. do
  66.     case $Option in
  67.     b)
  68.     BaseAddress=$OPTARG;;
  69.     o)
  70.     Offset=$OPTARG;;
  71.     s)
  72.     Suffixes="$Suffixes|$OPTARG";;
  73.     T)
  74.     FileList="$OPTARG";;
  75.     v)
  76.     Verbose=-v;;
  77.     \?)
  78.     usage;;
  79.     esac
  80. done
  81.  
  82. # Set temp directory
  83. TmpDir="${TMP:-${TEMP:-/tmp}}"
  84.  
  85. # Validate temp directory
  86. if [ ! -d "$TmpDir" ]
  87. then
  88.     echo "$ProgramName: '$TmpDir' is not a directory"
  89.     exit 2
  90. fi
  91. if [ ! -w "$TmpDir" ]
  92. then
  93.     echo "$ProgramName: '$TmpDir' is not writable"
  94.     exit 2
  95. fi
  96.  
  97. # Validate user supplied file list, if necessary
  98. if [ -n "$FileList" -a ! -r "$FileList" -a "$FileList" != - ]
  99. then
  100.     echo "$ProgramName: '$FileList' is not readable"
  101.     exit 2
  102. fi
  103.  
  104. # Set temp file
  105. TmpFile="$TmpDir/rebase.lst"
  106.  
  107. # Create rebase list
  108. gzip -d -c /etc/setup/*.lst.gz | grep -E "($Suffixes)\$" |
  109.     sed -e '/cygwin1.dll$/d' -e 's/^/\//' >"$TmpFile"
  110.  
  111. # Append user supplied file list, if any
  112. if [ -n "$FileList" ]
  113. then
  114.     cat "$FileList" >>"$TmpFile"
  115. fi
  116.  
  117. # Rebase files
  118. rebase $Verbose -d -b $BaseAddress -o $Offset -T "$TmpFile"
  119. ExitCode=$?
  120.  
  121. # Clean up
  122. cleanup
  123.