Skip to content

Commit

Permalink
update some sources and their READMEs for TL24; move wtestopenfiles t…
Browse files Browse the repository at this point in the history
…o windows_wrapper; freeglut.dll no longer needed for asy

git-svn-id: svn://tug.org/texlive/trunk/Build/source@70384 c570f23f-e606-0410-a88d-b1316a301751
  • Loading branch information
kberry committed Mar 3, 2024
1 parent 57bb92f commit 23b7f5f
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 0 deletions.
13 changes: 13 additions & 0 deletions texk/texlive/windows_wrapper/wtestopenfiles.README
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
This program can be used to prevent doomed TeX Live update attempts
on windows by testing whether all files concerned can be opened with
exclusive read/write access.

It reads a list of absolute filepaths from stdin and errors out if
any of them cannot be opened with exclusive read/write access.

A -v option also produces status output on stdout.

Cross-compiling under linux:

i686-w64-mingw32-gcc -o wtestopenfiles.exe wtestopenfiles.c
i686-w64-mingw32-strip wtestopenfiles.exe
72 changes: 72 additions & 0 deletions texk/texlive/windows_wrapper/wtestopenfiles.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
/***********************************************************
This program tries to prevent doomed update attempts on windows by testing
whether all files concerned can be opened with exclusive read/write access.
This file is written in 2022 by Siep Kroonenberg and is placed
in the Public Domain.
***********************************************************/

#include <windows.h>
#include <stdio.h>

int main( int argc, char *argv[] ) {
HANDLE hf;
char buf[MAX_PATH];
int ok = 1;
int chatty = 0;
int i;

if( argc > 1 ) {
for( i=1;i<argc;i++ ) {
if( argv[i][1] == 'v' ) {
chatty = 1;
} else {
puts( "This program reads a list of absolute filepaths from stdin" );
puts( "and errors out if any of them cannot be opened with" );
puts( "exclusive read/write access." );
puts( "A -v option produces status output on stdout." );
exit( 1 );
}
}
}

while ( fgets( buf, MAX_PATH, stdin )) {
buf[strlen(buf)-1] = '\0';
if (buf[0] != '\0') {
// buf represents a filepath
hf = CreateFile(
buf,
GENERIC_READ | GENERIC_WRITE,
0, // not shared
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
// OPEN_ALWAYS: creates missing file
// OPEN_EXISTING: can fail with ERROR_FILE_NOT_FOUND
if( hf == INVALID_HANDLE_VALUE ) {
if( GetLastError() == ERROR_FILE_NOT_FOUND ) {
if( chatty ) printf( "%s not present, is ok\n", buf );
continue;
} else {
ok = 0;
if( chatty ) printf( "%s present, but cannot be opened\n", buf );
break;
}
} else {
if( chatty ) printf( "%s can be exclusively opened, is ok\n", buf );
CloseHandle( hf );
}
}
}
if( ok ) {
if( chatty ) puts( "ok" );
exit(0);
} else {
if( chatty ) puts( "not ok" );
exit( 1 );
}
}

0 comments on commit 23b7f5f

Please sign in to comment.