wineboot - initial version
Shachar Shemesh
wine-patches at sun.consumer.org.il
Thu Jan 2 12:40:25 CST 2003
Hi all,
Initial version, cleaned up and with all files in a single diff.
Changelog:
Shachar Shemesh <winecode at sun.consumer.org.il>
configure.ac and programs/Makefile.in
* Added the new directory (programs/wineboot) to the list of
makefiles to create
programs/wineboot/*
* Initial implementation
Bugs:
* At this stage only wininit.ini processing has been written. Lots
more work to do.
-------------- next part --------------
Index: configure.ac
===================================================================
RCS file: /home/sun/sources/cvs/wine/configure.ac,v
retrieving revision 1.114
diff -u -r1.114 configure.ac
--- configure.ac 24 Dec 2002 02:39:47 -0000 1.114
+++ configure.ac 28 Dec 2002 21:01:43 -0000
@@ -1499,6 +1499,7 @@
programs/uninstaller/Makefile
programs/view/Makefile
programs/wcmd/Makefile
+programs/wineboot/Makefile
programs/wineconsole/Makefile
programs/winedbg/Makefile
programs/winefile/Makefile
Index: programs/Makefile.in
===================================================================
RCS file: /home/sun/sources/cvs/wine/programs/Makefile.in,v
retrieving revision 1.32
diff -u -r1.32 Makefile.in
--- programs/Makefile.in 2 Dec 2002 21:17:05 -0000 1.32
+++ programs/Makefile.in 28 Dec 2002 21:02:18 -0000
@@ -22,6 +22,7 @@
uninstaller \
view \
wcmd \
+ wineboot \
wineconsole \
winedbg \
winefile \
--- /dev/null 2002-12-28 16:16:18.000000000 +0200
+++ programs/wineboot/wineboot.c 2003-01-02 20:31:17.000000000 +0200
@@ -0,0 +1,161 @@
+#include <stdio.h>
+#include "winbase.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(wineboot);
+
+const char * const RENAME_FILE="wininit.ini";
+const char * const RENAME_FILE_SECTION="[rename]";
+#define MAX_LINE_LENGTH (2*MAX_PATH+2)
+
+static BOOL GetLine( HANDLE hFile, char *buf, size_t buflen )
+{
+ int i=0;
+ buf[0]='\0';
+
+ do
+ {
+ DWORD read;
+ if( !ReadFile( hFile, buf, 1, &read, NULL ) || read!=1 )
+ {
+ return FALSE;
+ }
+
+ } while( isspace( *buf ) );
+
+ while( buf[i]!='\n' && i<=buflen &&
+ ReadFile( hFile, buf+i+1, 1, NULL, NULL ) )
+ {
+ ++i;
+ }
+
+
+ if( buf[i]!='\n' )
+ {
+ return FALSE;
+ }
+
+ if( i>0 && buf[i-1]=='\r' )
+ --i;
+
+ buf[i]='\0';
+
+ return TRUE;
+}
+
+/* Performs the rename operations dictated in %SystemRoot%\Wininit.ini.
+ * Returns FALSE if there was an error, or otherwise if all is ok.
+ */
+static BOOL wininit()
+{
+ char buffer[MAX_LINE_LENGTH];
+ char ini_path[MAX_PATH];
+ HANDLE hFile;
+ DWORD res;
+
+ res=GetWindowsDirectoryA( ini_path, sizeof(ini_path) );
+
+ if( res==0 )
+ {
+ WINE_ERR("Couldn't get the windows directory - error %ld\n",
+ GetLastError() );
+
+ return FALSE;
+ }
+
+ if( res>=sizeof(ini_path) )
+ {
+ WINE_ERR("Windows path too long (%ld)\n", res );
+
+ return FALSE;
+ }
+
+ sprintf( ini_path+res, "\\%s", RENAME_FILE );
+
+ hFile=CreateFileA(ini_path, GENERIC_READ,
+ FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
+ NULL );
+
+ if( hFile==INVALID_HANDLE_VALUE )
+ {
+ DWORD err=GetLastError();
+
+ if( err==ERROR_FILE_NOT_FOUND )
+ {
+ /* No file - nothing to do. Great! */
+ WINE_TRACE("Wininit.ini not present - no renaming to do\n");
+
+ return TRUE;
+ }
+
+ WINE_ERR("There was an error in reading wininit.ini file - %ld\n",
+ GetLastError() );
+
+ return FALSE;
+ }
+
+ printf("Wine is finalizing your software installation. This may take a few minutes,\n");
+ printf("though it never actually does.\n");
+
+ while( GetLine( hFile, buffer, sizeof(buffer) ) &&
+ lstrcmpiA(buffer,RENAME_FILE_SECTION)!=0 )
+ ; /* Read the lines until we match the rename section */
+
+ while( GetLine( hFile, buffer, sizeof(buffer) ) && buffer[0]!='[' )
+ {
+ /* First, make sure this is not a comment */
+ if( buffer[0]!=';' && buffer[0]!='\0' )
+ {
+ char * value;
+
+ value=strchr(buffer, '=');
+
+ if( value==NULL )
+ {
+ WINE_WARN("Line with no \"=\" in it in wininit.ini - %s\n",
+ buffer);
+ } else
+ {
+ /* split the line into key and value */
+ *(value++)='\0';
+
+ if( lstrcmpiA( "NUL", buffer )==0 )
+ {
+ WINE_TRACE("Deleting file \"%s\"\n", value );
+ /* A file to delete */
+ if( !DeleteFileA( value ) )
+ WINE_WARN("Error deleting file \"%s\"\n", value);
+ } else
+ {
+ WINE_TRACE("Renaming file \"%s\" to \"%s\"\n", value,
+ buffer );
+
+ if( !MoveFileExA(value, buffer, MOVEFILE_COPY_ALLOWED|
+ MOVEFILE_REPLACE_EXISTING) )
+ {
+ WINE_WARN("Error renaming \"%s\" to \"%s\"\n", value,
+ buffer );
+ }
+ }
+ }
+ }
+ }
+
+ CloseHandle( hFile );
+
+ if( !DeleteFileA( ini_path ) )
+ {
+ WINE_ERR("Couldn't erase %s, error %ld\n", ini_path, GetLastError() );
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+int main( int argc, char *argv[] )
+{
+ wininit();
+
+ return 0;
+}
--- /dev/null 2002-12-28 16:16:18.000000000 +0200
+++ programs/wineboot/Makefile.in 2003-01-02 20:30:02.000000000 +0200
@@ -0,0 +1,19 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR = @srcdir@
+VPATH = @srcdir@
+MODULE = wineboot.exe
+#EXTRALIBS = @CURSESLIBS@
+APPMODE = cui
+#IMPORTS = msvcrt
+#DELAYIMPORTS = comctl32 user32 gdi32
+
+C_SRCS = \
+ wineboot.c
+
+#RC_SRCS = wineboot_res.rc
+
+ at MAKE_PROG_RULES@
+
+
+### Dependencies:
--- /dev/null 2002-12-28 16:16:18.000000000 +0200
+++ programs/wineboot/.cvsignore 2003-01-01 19:38:55.000000000 +0200
@@ -0,0 +1,8 @@
+Makefile
+wineboot
+wineboot.exe.dbg.c
+wineboot.exe.dbg.o
+wineboot.exe.so
+wineboot.exe.spec.c
+wineboot.exe.spec.o
+wineboot.o
More information about the wine-patches
mailing list