/* * Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc. * * This file is part of Jam - see jam.c for Copyright information. */ /* * filemac.c - manipulate file names and scan directories on macintosh * * External routines: * * file_dirscan() - scan a directory for files * file_time() - get timestamp of file, if not done by file_dirscan() * file_archscan() - scan an archive for files * * File_dirscan() and file_archscan() call back a caller provided function * for each file found. A flag to this callback function lets file_dirscan() * and file_archscan() indicate that a timestamp is being provided with the * file. If file_dirscan() or file_archscan() do not provide the file's * timestamp, interested parties may later call file_time(). * * 04/08/94 (seiwald) - Coherent/386 support added. * 12/19/94 (mikem) - solaris string table insanity support * 02/14/95 (seiwald) - parse and build /xxx properly * 05/03/96 (seiwald) - split into pathunix.c * 11/21/96 (peterk) - BEOS does not have Unix-style archives * 01/21/00 (malyn) - divorced from GUSI * 01/08/01 (seiwald) - closure param for file_dirscan/file_archscan * 11/04/02 (seiwald) - const-ing for string literals */ # include "jam.h" # include "filesys.h" # include "pathsys.h" # ifdef OS_MAC #include <Files.h> #include <Folders.h> # include <:sys:stat.h> void CopyC2PStr(const char * cstr, StringPtr pstr) { int len; for (len = 0; *cstr && len<255; pstr[++len] = *cstr++) ; pstr[0] = len; } /* * file_dirscan() - scan a directory for files */ void file_dirscan( const char *dir, scanback func, void *closure ) { PATHNAME f; char filename[ MAXJPATH ]; unsigned char fullPath[ 512 ]; FSSpec spec; WDPBRec vol; Str63 volName; CInfoPBRec lastInfo; int index = 1; /* First enter directory itself */ memset( (char *)&f, '\0', sizeof( f ) ); f.f_dir.ptr = dir; f.f_dir.len = strlen(dir); if( DEBUG_BINDSCAN ) printf( "scan directory %s\n", dir ); /* Special case ":" - enter it */ if( f.f_dir.len == 1 && f.f_dir.ptr[0] == ':' ) (*func)( closure, dir, 0 /* not stat()'ed */, (time_t)0 ); /* Now enter contents of directory */ vol.ioNamePtr = volName; if( PBHGetVolSync( &vol ) ) return; CopyC2PStr( dir, fullPath ); if( FSMakeFSSpec( vol.ioWDVRefNum, vol.ioWDDirID, fullPath, &spec ) ) return; lastInfo.dirInfo.ioVRefNum = spec.vRefNum; lastInfo.dirInfo.ioDrDirID = spec.parID; lastInfo.dirInfo.ioNamePtr = spec.name; lastInfo.dirInfo.ioFDirIndex = 0; lastInfo.dirInfo.ioACUser = 0; if( PBGetCatInfoSync(&lastInfo) ) return; if (!(lastInfo.dirInfo.ioFlAttrib & 0x10)) return; // ioDrDirID must be reset each time. spec.parID = lastInfo.dirInfo.ioDrDirID; for( ;; ) { lastInfo.dirInfo.ioVRefNum = spec.vRefNum; lastInfo.dirInfo.ioDrDirID = spec.parID; lastInfo.dirInfo.ioNamePtr = fullPath; lastInfo.dirInfo.ioFDirIndex = index++; if( PBGetCatInfoSync(&lastInfo) ) return; f.f_base.ptr = (char *)fullPath + 1; f.f_base.len = *fullPath; path_build( &f, filename, 0 ); (*func)( closure, filename, 0 /* not stat()'ed */, (time_t)0 ); } } /* * file_time() - get timestamp of file, if not done by file_dirscan() */ int file_time( const char *filename, time_t *time ) { struct stat statbuf; if( stat( filename, &statbuf ) < 0 ) return -1; *time = statbuf.st_mtime; return 0; } /* * file_archscan() - scan an archive for files */ void file_archscan( const char *archive, scanback func, void *closure ) { } # endif /* macintosh */
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#2 | 2631 | Jan Mikkelsen |
Integrate changes from mainline in preparation for adding my changes (at last). |
||
#1 | 1723 | Jan Mikkelsen | Integrate Jam 2.4 | ||
//guest/perforce_software/jam/src/filemac.c | |||||
#5 | 1352 | rmg |
Integrates Change 350 by grant_glouser Change 352 by grant_glouser Resolved -ay, since the changes were already present in Jam 2.3 from other sources. (This change is for the benefit of the integration history, only.) |
||
#4 | 1319 | rmg |
Jam 2.3 + Perforce's internal changes. This change is a drop of the Perforce internal Jam changes since the 2.3 public release. The individual changes represented herein are preserved in the //guest/richard_geiger/intjam/ branch. The intent of this drop is to provide a base, from which other contributors' Jam branches may be integrated into. It is not intended to become a packaged release in this state. We will be integrating changes from other users prior to creating the next packaged release. Please refer to the src/RELNOTES file for an overview of the changes present in this integration. - Richard Geiger Open Source Engineer at Perforce |
||
#3 | 486 | Perforce staff |
Jam 2.3. See RELNOTES for a list of changes from 2.2.x. Just about every source file was touched when jam got ANSI-fied. |
||
#2 | 213 | Perforce staff | Peter Glasscock's MPW port. | ||
#1 | 2 | laura | Add Jam/MR 2.2 source |