cmcmanis@sun.UUCP (02/13/87)
Recently someone asked how to get the volume name that a given file resided
on. The following code will do just that in a supported and nice kind of
way. It only needs the FileLock to work.
--Chuck
----snip here-----
/* GetVolume.c -- Written 02/13/87 by Chuck McManis feel free to use it
*
* This simple Program can be used to get the Volume name for a given file.
* Works on any device, even the RAM: device.
*
* Note: The BADDR macro is in the dos.h file
*/
#include <exec/types.h>
#include <libraries/dos.h>
#include <libraries/dosextens.h>
#include <stdio.h>
void main()
{
char VolumeName[40], FileName[80], *MyVolume;
struct FileLock *MyLock;
printf("Enter a file name :");
gets(FileName);
/* Simultaneous get a lock and convert BPTR to a C pointer */
MyLock = (struct FileLock *)BADDR(Lock(FileName,ACCESS_READ));
if (MyLock == NULL) {
printf("File could not be found!\n");
exit(20); /* Die appropriately on failure */
}
/* This next statement chases the BCPL pointers thru a FileLock and *
* DeviceList structures */
MyVolume = (char *)
BADDR(((struct DeviceList *)BADDR(MyLock->fl_Volume))->dl_Name);
/* Lattice V3.10 function to copy a string and Null terminate it */
stccpy(VolumeName,MyVolume+1,MyVolume[0]+1);
printf("That file resides on Volume '%s' \n",VolumeName);
UnLock(((long)MyLock) >> 2); /* You must UnLock or the GURU visits */
exit(0);
}
--
--Chuck McManis
uucp: {anywhere}!sun!cmcmanis BIX: cmcmanis ARPAnet: cmcmanis@sun.com
These opinions are my own and no one elses, but you knew that didn't you.