2009-11-22 12:43 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbwin/win_prn2.c
+ PRINTFILERAW(): Changed to use Harbour File I/O API instead
of Windows one to read from a disk file.
* More variable name / macro usage cleanup.
! TOFIX: PRINTFILERAW() has suspicious code aiming to delete
Chr( 26 ) from input files. In current implementation it can
strip Chr( 26 ) even from inside the file if the file is
larger than read buffer, which means it will corrupt input
and may cause wrong output to be printed (f.e. if that Chr( 26 )
is part of a printer control char sequence).
* INSTALL
+ Added linux/clang to the target mix.
This commit is contained in:
@@ -17,6 +17,22 @@
|
||||
past entries belonging to author(s): Viktor Szakats.
|
||||
*/
|
||||
|
||||
2009-11-22 12:43 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* contrib/hbwin/win_prn2.c
|
||||
+ PRINTFILERAW(): Changed to use Harbour File I/O API instead
|
||||
of Windows one to read from a disk file.
|
||||
* More variable name / macro usage cleanup.
|
||||
|
||||
! TOFIX: PRINTFILERAW() has suspicious code aiming to delete
|
||||
Chr( 26 ) from input files. In current implementation it can
|
||||
strip Chr( 26 ) even from inside the file if the file is
|
||||
larger than read buffer, which means it will corrupt input
|
||||
and may cause wrong output to be printed (f.e. if that Chr( 26 )
|
||||
is part of a printer control char sequence).
|
||||
|
||||
* INSTALL
|
||||
+ Added linux/clang to the target mix.
|
||||
|
||||
2009-11-22 12:38 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
+ harbour/config/linux/clang.mk
|
||||
+ added support for CLANG in LINUX builds
|
||||
@@ -33,12 +49,11 @@
|
||||
TOFIX: now it compiles in Linux and OS2 builds but it still does not
|
||||
work
|
||||
|
||||
|
||||
2009-11-22 12:29 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* contrib/hbwin/win_prn2.c
|
||||
* Variables renamed to reflect their types.
|
||||
* Further cleanups.
|
||||
+ Added TOFIX to use Harbour IO instead of win to read a disk file.
|
||||
+ Added TOFIX to use Harbour IO instead of win to read a disk file. [DONE]
|
||||
* Changed to use HB_SIZE instead of ULONG for string lengths/sizes.
|
||||
+ Added HB_SIZE casts to silence 64-bit warnings (to two places).
|
||||
|
||||
|
||||
@@ -413,6 +413,7 @@ HARBOUR
|
||||
linux
|
||||
-----
|
||||
gcc - GNU C
|
||||
clang - Clang compiler frontend
|
||||
watcom - Open Watcom C++
|
||||
icc - Intel(R) C/C++
|
||||
sunpro - Sun Studio C/C++
|
||||
@@ -420,8 +421,8 @@ HARBOUR
|
||||
darwin
|
||||
------
|
||||
gcc - GNU C
|
||||
icc - Intel(R) C/C++
|
||||
clang - Clang compiler frontend
|
||||
icc - Intel(R) C/C++
|
||||
|
||||
bsd
|
||||
---
|
||||
@@ -1138,6 +1139,7 @@ HARBOUR
|
||||
x os2 -> dos/watcom x86
|
||||
x os2 -> linux/watcom x86
|
||||
linux -> linux/gcc (CPU cross-builds possible)
|
||||
linux -> linux/clang (CPU cross-builds possible)
|
||||
linux -> linux/icc (CPU cross-builds possible: x86, x86-64, ia64)
|
||||
linux -> linux/sunpro (CPU cross-builds possible: x86, x86-64)
|
||||
x linux -> wce/mingwarm arm
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
#define HB_OS_WIN_USED
|
||||
|
||||
#include "hbapi.h"
|
||||
#include "hbapifs.h"
|
||||
#include "hbapiitm.h"
|
||||
|
||||
#define _ENUMPRN_FLAGS_ ( PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS )
|
||||
@@ -192,7 +193,6 @@ static BOOL hb_GetDefaultPrinter( char * pszPrinterName, HB_SIZE * pulBufferSize
|
||||
{
|
||||
/*
|
||||
This option should never be required but is included because of this article
|
||||
|
||||
http://support.microsoft.com/kb/246772/en-us
|
||||
|
||||
This option will not enumerate any network printers.
|
||||
@@ -210,20 +210,20 @@ static BOOL hb_GetDefaultPrinter( char * pszPrinterName, HB_SIZE * pulBufferSize
|
||||
{
|
||||
if( dwNeeded )
|
||||
{
|
||||
PRINTER_INFO_2 * ppi2 = ( PRINTER_INFO_2 * ) hb_xgrab( dwNeeded );
|
||||
PRINTER_INFO_2 * pPrinterInfo = ( PRINTER_INFO_2 * ) hb_xgrab( dwNeeded );
|
||||
|
||||
if( EnumPrinters( PRINTER_ENUM_DEFAULT, NULL, 2, ( LPBYTE ) ppi2, dwNeeded, &dwNeeded, &dwReturned ) && dwReturned )
|
||||
if( EnumPrinters( PRINTER_ENUM_DEFAULT, NULL, 2, ( LPBYTE ) pPrinterInfo, dwNeeded, &dwNeeded, &dwReturned ) && dwReturned )
|
||||
{
|
||||
DWORD dwSize = ( DWORD ) lstrlen( ppi2->pPrinterName );
|
||||
DWORD dwSize = ( DWORD ) lstrlen( pPrinterInfo->pPrinterName );
|
||||
|
||||
if( dwSize && dwSize < *pulBufferSize )
|
||||
{
|
||||
HB_TCHAR_GETFROM( pszPrinterName, ppi2->pPrinterName, lstrlen( ppi2->pPrinterName ) );
|
||||
HB_TCHAR_GETFROM( pszPrinterName, pPrinterInfo->pPrinterName, lstrlen( pPrinterInfo->pPrinterName ) );
|
||||
*pulBufferSize = dwSize + 1;
|
||||
bResult = TRUE;
|
||||
}
|
||||
}
|
||||
hb_xfree( ppi2 );
|
||||
hb_xfree( pPrinterInfo );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -425,8 +425,6 @@ HB_FUNC( PRINTERPORTTONAME )
|
||||
hb_retc_null();
|
||||
}
|
||||
|
||||
#define BIG_PRINT_BUFFER ( 1024 * 32 )
|
||||
|
||||
static int hb_PrintFileRaw( const char * pszPrinterName, const char * pszFileName, const char * pszDocName )
|
||||
{
|
||||
HANDLE hPrinter;
|
||||
@@ -444,26 +442,27 @@ static int hb_PrintFileRaw( const char * pszPrinterName, const char * pszFileNam
|
||||
{
|
||||
if( StartPagePrinter( hPrinter ) != 0 )
|
||||
{
|
||||
LPTSTR lpFileName = HB_TCHAR_CONVTO( pszFileName );
|
||||
/* TOFIX: Use Harbour FS API */
|
||||
HANDLE hFile = CreateFile( lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
|
||||
HB_FHANDLE fhnd = hb_fsOpen( pszFileName, FO_READ | FO_SHARED );
|
||||
|
||||
HB_TCHAR_FREE( lpFileName );
|
||||
|
||||
if( hFile != INVALID_HANDLE_VALUE )
|
||||
if( fhnd != FS_ERROR )
|
||||
{
|
||||
BYTE printBuffer[ BIG_PRINT_BUFFER ];
|
||||
DWORD nRead, nWritten = 0;
|
||||
BYTE pbyBuffer[ 32 * 1024 ];
|
||||
DWORD nWritten = 0;
|
||||
USHORT nRead;
|
||||
|
||||
while( ReadFile( hFile, printBuffer, sizeof( printBuffer ), &nRead, NULL ) && nRead > 0 )
|
||||
while( ( nRead = hb_fsRead( fhnd, pbyBuffer, sizeof( pbyBuffer ) ) ) > 0 )
|
||||
{
|
||||
if( printBuffer[ nRead - 1 ] == 26 )
|
||||
/* TOFIX: This check seems wrong for any input files
|
||||
larger than our read buffer, in such case it
|
||||
will strip Chr( 26 ) from inside the file, which
|
||||
means it will corrupt it. [vszakats] */
|
||||
if( pbyBuffer[ nRead - 1 ] == 26 )
|
||||
nRead--; /* Skip the EOF() character */
|
||||
|
||||
WritePrinter( hPrinter, printBuffer, nRead, &nWritten );
|
||||
WritePrinter( hPrinter, pbyBuffer, nRead, &nWritten );
|
||||
}
|
||||
iResult = 1;
|
||||
CloseHandle( hFile );
|
||||
hb_fsClose( fhnd );
|
||||
}
|
||||
else
|
||||
iResult = -6;
|
||||
|
||||
Reference in New Issue
Block a user