diff options
author | Jeroen Vermeulen <jtv@kursk> | 2015-03-23 16:49:17 +0300 |
---|---|---|
committer | Jeroen Vermeulen <jtv@kursk> | 2015-03-23 16:49:17 +0300 |
commit | faa3ae8afc7d0d1f8d4d60abb06d81ec35dc7c82 (patch) | |
tree | 5f29ac8d28c8667571da0901a26a3718a7d60318 | |
parent | c4af7d28b5fd5c06dcc44d6c67dfe8d22aaac6ea (diff) |
Remove unused code for reading "ar" archives.
The Jam code had inherited a function for enumerating "ar" archives.
This wasn't used anywhere at all in the codebase, but it depended on a
platform-specific "ar.h" header. Windows doesn't have that header, so
this change removes one small obstacle to portability.
-rw-r--r-- | jam-files/engine/filent.c | 124 | ||||
-rw-r--r-- | jam-files/engine/filesys.h | 1 | ||||
-rw-r--r-- | jam-files/engine/fileunix.c | 289 |
3 files changed, 0 insertions, 414 deletions
diff --git a/jam-files/engine/filent.c b/jam-files/engine/filent.c index e4ac3319b..53bb60d52 100644 --- a/jam-files/engine/filent.c +++ b/jam-files/engine/filent.c @@ -16,7 +16,6 @@ * filent.c - scan directories and archives on NT * * External routines: - * file_archscan() - scan an archive for files * file_mkdir() - create a directory * file_supported_fmt_resolution() - file modification timestamp resolution * @@ -309,127 +308,4 @@ void file_supported_fmt_resolution( timestamp * const t ) timestamp_init( t, 0, 0 ); } - -/* - * file_archscan() - scan an archive for files - */ - -/* Straight from SunOS */ - -#define ARMAG "!<arch>\n" -#define SARMAG 8 - -#define ARFMAG "`\n" - -struct ar_hdr -{ - char ar_name[ 16 ]; - char ar_date[ 12 ]; - char ar_uid[ 6 ]; - char ar_gid[ 6 ]; - char ar_mode[ 8 ]; - char ar_size[ 10 ]; - char ar_fmag[ 2 ]; -}; - -#define SARFMAG 2 -#define SARHDR sizeof( struct ar_hdr ) - -void file_archscan( char const * archive, scanback func, void * closure ) -{ - struct ar_hdr ar_hdr; - char * string_table = 0; - char buf[ MAXJPATH ]; - long offset; - int const fd = open( archive, O_RDONLY | O_BINARY, 0 ); - - if ( fd < 0 ) - return; - - if ( read( fd, buf, SARMAG ) != SARMAG || strncmp( ARMAG, buf, SARMAG ) ) - { - close( fd ); - return; - } - - offset = SARMAG; - - if ( DEBUG_BINDSCAN ) - printf( "scan archive %s\n", archive ); - - while ( ( read( fd, &ar_hdr, SARHDR ) == SARHDR ) && - !memcmp( ar_hdr.ar_fmag, ARFMAG, SARFMAG ) ) - { - long lar_date; - long lar_size; - char * name = 0; - char * endname; - - sscanf( ar_hdr.ar_date, "%ld", &lar_date ); - sscanf( ar_hdr.ar_size, "%ld", &lar_size ); - - lar_size = ( lar_size + 1 ) & ~1; - - if ( ar_hdr.ar_name[ 0 ] == '/' && ar_hdr.ar_name[ 1 ] == '/' ) - { - /* This is the "string table" entry of the symbol table, holding - * filename strings longer than 15 characters, i.e. those that do - * not fit into ar_name. - */ - string_table = BJAM_MALLOC_ATOMIC( lar_size + 1 ); - if ( read( fd, string_table, lar_size ) != lar_size ) - printf( "error reading string table\n" ); - string_table[ lar_size ] = '\0'; - offset += SARHDR + lar_size; - continue; - } - else if ( ar_hdr.ar_name[ 0 ] == '/' && ar_hdr.ar_name[ 1 ] != ' ' ) - { - /* Long filenames are recognized by "/nnnn" where nnnn is the - * string's offset in the string table represented in ASCII - * decimals. - */ - name = string_table + atoi( ar_hdr.ar_name + 1 ); - for ( endname = name; *endname && *endname != '\n'; ++endname ); - } - else - { - /* normal name */ - name = ar_hdr.ar_name; - endname = name + sizeof( ar_hdr.ar_name ); - } - - /* strip trailing white-space, slashes, and backslashes */ - - while ( endname-- > name ) - if ( !isspace( *endname ) && ( *endname != '\\' ) && ( *endname != - '/' ) ) - break; - *++endname = 0; - - /* strip leading directory names, an NT specialty */ - { - char * c; - if ( c = strrchr( name, '/' ) ) - name = c + 1; - if ( c = strrchr( name, '\\' ) ) - name = c + 1; - } - - sprintf( buf, "%s(%.*s)", archive, endname - name, name ); - { - OBJECT * const member = object_new( buf ); - timestamp time; - timestamp_init( &time, (time_t)lar_date, 0 ); - (*func)( closure, member, 1 /* time valid */, &time ); - object_free( member ); - } - - offset += SARHDR + lar_size; - lseek( fd, offset, 0 ); - } - - close( fd ); -} - #endif /* OS_NT */ diff --git a/jam-files/engine/filesys.h b/jam-files/engine/filesys.h index 74fa3958f..f7469bece 100644 --- a/jam-files/engine/filesys.h +++ b/jam-files/engine/filesys.h @@ -38,7 +38,6 @@ typedef void (*scanback)( void * closure, OBJECT * path, int found, timestamp const * const ); -void file_archscan( char const * arch, scanback func, void * closure ); void file_build1( PATHNAME * const f, string * file ) ; void file_dirscan( OBJECT * dir, scanback func, void * closure ); file_info_t * file_info( OBJECT * const path, int * found ); diff --git a/jam-files/engine/fileunix.c b/jam-files/engine/fileunix.c index bff3a42f5..6c675c10a 100644 --- a/jam-files/engine/fileunix.c +++ b/jam-files/engine/fileunix.c @@ -15,7 +15,6 @@ * fileunix.c - manipulate file names and scan directories on UNIX/AmigaOS * * External routines: - * file_archscan() - scan an archive for files * file_mkdir() - create a directory * file_supported_fmt_resolution() - file modification timestamp resolution * @@ -57,46 +56,6 @@ # define STRUCT_DIRENT struct dirent #endif -#ifdef OS_COHERENT -# include <arcoff.h> -# define HAVE_AR -#endif - -#if defined( OS_MVS ) || defined( OS_INTERIX ) -#define ARMAG "!<arch>\n" -#define SARMAG 8 -#define ARFMAG "`\n" -#define HAVE_AR - -struct ar_hdr /* archive file member header - printable ascii */ -{ - char ar_name[ 16 ]; /* file member name - `/' terminated */ - char ar_date[ 12 ]; /* file member date - decimal */ - char ar_uid[ 6 ]; /* file member user id - decimal */ - char ar_gid[ 6 ]; /* file member group id - decimal */ - char ar_mode[ 8 ]; /* file member mode - octal */ - char ar_size[ 10 ]; /* file member size - decimal */ - char ar_fmag[ 2 ]; /* ARFMAG - string to end header */ -}; -#endif - -#if defined( OS_QNX ) || defined( OS_BEOS ) || defined( OS_MPEIX ) -# define NO_AR -# define HAVE_AR -#endif - -#ifndef HAVE_AR -# ifdef OS_AIX -/* Define these for AIX to get the definitions for both small and big archive - * file format variants. - */ -# define __AR_SMALL__ -# define __AR_BIG__ -# endif -# include <ar.h> -#endif - - /* * file_collect_dir_content_() - collects directory content information */ @@ -213,252 +172,4 @@ void file_supported_fmt_resolution( timestamp * const t ) timestamp_init( t, 1, 0 ); } - -/* - * file_archscan() - scan an archive for files - */ - -#ifndef AIAMAG /* God-fearing UNIX */ - -#define SARFMAG 2 -#define SARHDR sizeof( struct ar_hdr ) - -void file_archscan( char const * archive, scanback func, void * closure ) -{ -#ifndef NO_AR - struct ar_hdr ar_hdr; - char * string_table = 0; - char buf[ MAXJPATH ]; - long offset; - int fd; - - if ( ( fd = open( archive, O_RDONLY, 0 ) ) < 0 ) - return; - - if ( read( fd, buf, SARMAG ) != SARMAG || - strncmp( ARMAG, buf, SARMAG ) ) - { - close( fd ); - return; - } - - offset = SARMAG; - - if ( DEBUG_BINDSCAN ) - printf( "scan archive %s\n", archive ); - - while ( ( read( fd, &ar_hdr, SARHDR ) == SARHDR ) && - !( memcmp( ar_hdr.ar_fmag, ARFMAG, SARFMAG ) -#ifdef ARFZMAG - /* OSF also has a compressed format */ - && memcmp( ar_hdr.ar_fmag, ARFZMAG, SARFMAG ) -#endif - ) ) - { - char lar_name_[ 257 ]; - char * lar_name = lar_name_ + 1; - long lar_date; - long lar_size; - long lar_offset; - char * c; - char * src; - char * dest; - - strncpy( lar_name, ar_hdr.ar_name, sizeof( ar_hdr.ar_name ) ); - - sscanf( ar_hdr.ar_date, "%ld", &lar_date ); - sscanf( ar_hdr.ar_size, "%ld", &lar_size ); - - if ( ar_hdr.ar_name[ 0 ] == '/' ) - { - if ( ar_hdr.ar_name[ 1 ] == '/' ) - { - /* This is the "string table" entry of the symbol table, holding - * filename strings longer than 15 characters, i.e. those that - * do not fit into ar_name. - */ - string_table = (char *)BJAM_MALLOC_ATOMIC( lar_size ); - lseek( fd, offset + SARHDR, 0 ); - if ( read( fd, string_table, lar_size ) != lar_size ) - printf("error reading string table\n"); - } - else if ( string_table && ar_hdr.ar_name[ 1 ] != ' ' ) - { - /* Long filenames are recognized by "/nnnn" where nnnn is the - * offset of the string in the string table represented in ASCII - * decimals. - */ - dest = lar_name; - lar_offset = atoi( lar_name + 1 ); - src = &string_table[ lar_offset ]; - while ( *src != '/' ) - *dest++ = *src++; - *dest = '/'; - } - } - - c = lar_name - 1; - while ( ( *++c != ' ' ) && ( *c != '/' ) ); - *c = '\0'; - - if ( DEBUG_BINDSCAN ) - printf( "archive name %s found\n", lar_name ); - - sprintf( buf, "%s(%s)", archive, lar_name ); - - { - OBJECT * const member = object_new( buf ); - timestamp time; - timestamp_init( &time, (time_t)lar_date, 0 ); - (*func)( closure, member, 1 /* time valid */, &time ); - object_free( member ); - } - - offset += SARHDR + ( ( lar_size + 1 ) & ~1 ); - lseek( fd, offset, 0 ); - } - - if ( string_table ) - BJAM_FREE( string_table ); - - close( fd ); -#endif /* NO_AR */ -} - -#else /* AIAMAG - RS6000 AIX */ - -static void file_archscan_small( int fd, char const * archive, scanback func, - void * closure ) -{ - struct fl_hdr fl_hdr; - - struct { - struct ar_hdr hdr; - char pad[ 256 ]; - } ar_hdr ; - - char buf[ MAXJPATH ]; - long offset; - - if ( read( fd, (char *)&fl_hdr, FL_HSZ ) != FL_HSZ ) - return; - - sscanf( fl_hdr.fl_fstmoff, "%ld", &offset ); - - if ( DEBUG_BINDSCAN ) - printf( "scan archive %s\n", archive ); - - while ( offset > 0 && lseek( fd, offset, 0 ) >= 0 && - read( fd, &ar_hdr, sizeof( ar_hdr ) ) >= (int)sizeof( ar_hdr.hdr ) ) - { - long lar_date; - int lar_namlen; - - sscanf( ar_hdr.hdr.ar_namlen, "%d" , &lar_namlen ); - sscanf( ar_hdr.hdr.ar_date , "%ld", &lar_date ); - sscanf( ar_hdr.hdr.ar_nxtmem, "%ld", &offset ); - - if ( !lar_namlen ) - continue; - - ar_hdr.hdr._ar_name.ar_name[ lar_namlen ] = '\0'; - - sprintf( buf, "%s(%s)", archive, ar_hdr.hdr._ar_name.ar_name ); - - { - OBJECT * const member = object_new( buf ); - timestamp time; - timestamp_init( &time, (time_t)lar_date, 0 ); - (*func)( closure, member, 1 /* time valid */, &time ); - object_free( member ); - } - } -} - -/* Check for OS versions supporting the big variant. */ -#ifdef AR_HSZ_BIG - -static void file_archscan_big( int fd, char const * archive, scanback func, - void * closure ) -{ - struct fl_hdr_big fl_hdr; - - struct { - struct ar_hdr_big hdr; - char pad[ 256 ]; - } ar_hdr ; - - char buf[ MAXJPATH ]; - long long offset; - - if ( read( fd, (char *)&fl_hdr, FL_HSZ_BIG ) != FL_HSZ_BIG ) - return; - - sscanf( fl_hdr.fl_fstmoff, "%lld", &offset ); - - if ( DEBUG_BINDSCAN ) - printf( "scan archive %s\n", archive ); - - while ( offset > 0 && lseek( fd, offset, 0 ) >= 0 && - read( fd, &ar_hdr, sizeof( ar_hdr ) ) >= sizeof( ar_hdr.hdr ) ) - { - long lar_date; - int lar_namlen; - - sscanf( ar_hdr.hdr.ar_namlen, "%d" , &lar_namlen ); - sscanf( ar_hdr.hdr.ar_date , "%ld" , &lar_date ); - sscanf( ar_hdr.hdr.ar_nxtmem, "%lld", &offset ); - - if ( !lar_namlen ) - continue; - - ar_hdr.hdr._ar_name.ar_name[ lar_namlen ] = '\0'; - - sprintf( buf, "%s(%s)", archive, ar_hdr.hdr._ar_name.ar_name ); - - { - OBJECT * const member = object_new( buf ); - timestamp time; - timestamp_init( &time, (time_t)lar_date, 0 ); - (*func)( closure, member, 1 /* time valid */, &time ); - object_free( member ); - } - } -} - -#endif /* AR_HSZ_BIG */ - -void file_archscan( char const * archive, scanback func, void * closure ) -{ - int fd; - char fl_magic[ SAIAMAG ]; - - if ( ( fd = open( archive, O_RDONLY, 0 ) ) < 0 ) - return; - - if ( read( fd, fl_magic, SAIAMAG ) != SAIAMAG || - lseek( fd, 0, SEEK_SET ) == -1 ) - { - close( fd ); - return; - } - - if ( !strncmp( AIAMAG, fl_magic, SAIAMAG ) ) - { - /* read small variant */ - file_archscan_small( fd, archive, func, closure ); - } -#ifdef AR_HSZ_BIG - else if ( !strncmp( AIAMAGBIG, fl_magic, SAIAMAG ) ) - { - /* read big variant */ - file_archscan_big( fd, archive, func, closure ); - } -#endif - - close( fd ); -} - -#endif /* AIAMAG - RS6000 AIX */ - #endif /* USE_FILEUNIX */ |