mirror of
https://github.com/open-simh/simtools.git
synced 2026-01-13 15:27:18 +00:00
Too much to list all, but includes (in no particular order): - Cleanup for 64-bit builds, MSVC warnings. - Structured help - Help file compiler. - Supports volsets, writes/create work. - Support for I18n in messages, help. - Makefiles. - Initialize volume/volset - Command line editing/history Builds and works on Linux and Windows (VS). Not recently built or tested on other platforms, but not intentinonally broken.
184 lines
5.4 KiB
C
184 lines
5.4 KiB
C
/* This is part of ODS2 written by Paul Nankervis,
|
|
* email address: Paulnank@au1.ibm.com
|
|
|
|
* ODS2 is distributed freely for all members of the
|
|
* VMS community to use. However all derived works
|
|
* must maintain comments in their source to acknowledge
|
|
* the contributions of the original author and
|
|
* subsequent contributors. This is free software; no
|
|
* warranty is offered, and while we believe it to be useful,
|
|
* you use it at your own risk.
|
|
*/
|
|
|
|
#if !defined( DEBUG ) && defined( DEBUG_MOUNTCMD )
|
|
#define DEBUG DEBUG_MOUNTCMD
|
|
#else
|
|
#ifndef DEBUG
|
|
#define DEBUG 0
|
|
#endif
|
|
#endif
|
|
|
|
#include "compat.h"
|
|
#include "cmddef.h"
|
|
|
|
#include "access.h"
|
|
#include "device.h"
|
|
#include "phyio.h"
|
|
#include "phyvirt.h"
|
|
|
|
#ifdef USE_VHD
|
|
#include "phyvhd.h"
|
|
|
|
static char *parents = NULL;
|
|
#endif
|
|
|
|
void mounthelp(void);
|
|
|
|
#define mou_snapshot OPT_GENERIC_1
|
|
#define mou_dtype OPT_GENERIC_2
|
|
|
|
qual_t
|
|
mouquals[] = { {DT_NAME, 0, MOU_DEVTYPE, CV(NULL),
|
|
"commands mount qual_media"},
|
|
{"image", mou_dtype | MOU_VIRTUAL,
|
|
0, NV,
|
|
"commands mount qual_image"},
|
|
{"log", MOU_LOG, 0, NV,
|
|
"-commands mount qual_log"},
|
|
{"nolog", 0, MOU_LOG, NV, NULL},
|
|
{"readonly", 0, MOU_WRITE, NV,
|
|
"commands mount qual_readonly"},
|
|
#ifdef USE_VHD
|
|
{"snapshots_of",
|
|
MOU_VIRTUAL | MOU_WRITE | mou_snapshot,
|
|
PHY_CREATE, SV(&parents),
|
|
"commands mount qual_snapshot"},
|
|
#endif
|
|
{"device", mou_dtype, MOU_VIRTUAL, NV,
|
|
"commands mount qual_device"},
|
|
{"virtual", mou_dtype | MOU_VIRTUAL, 0,
|
|
NV, NULL},
|
|
{"write", MOU_WRITE, 0, NV,
|
|
"-commands mount qual_write"},
|
|
{"nowrite" , 0, MOU_WRITE, NV, NULL},
|
|
|
|
{NULL, 0, 0, NV, NULL} };
|
|
|
|
param_t
|
|
moupars[] = { {"volumes", REQ, LIST, NOPA, "commands mount volumes"},
|
|
{"labels", OPT, LIST, NOPA, "commands mount labels"},
|
|
|
|
{ NULL, 0, 0, NOPA, NULL }
|
|
};
|
|
|
|
/******************************************************************* domount() */
|
|
|
|
DECL_CMD(mount) {
|
|
vmscond_t sts = 1;
|
|
int devices = 0;
|
|
size_t i;
|
|
char **devs = NULL, **labs = NULL;
|
|
options_t options;
|
|
|
|
#ifdef USE_VHD
|
|
int nparents = 0;
|
|
char **parfiles = NULL;
|
|
#endif
|
|
|
|
UNUSED(argc);
|
|
|
|
if( $FAILS(sts = checkquals( &options, MOU_LOG, mouquals, qualc, qualv )) ) {
|
|
return sts;
|
|
}
|
|
|
|
if( $FAILS(sts = parselist( &devices, &devs, 0, argv[1])) )
|
|
return sts;
|
|
if( $FAILS(sts = parselist( NULL, &labs, devices, argv[2])) ) {
|
|
free( devs );
|
|
return sts;
|
|
}
|
|
|
|
if( !(options & mou_dtype) ) {
|
|
for( i = 0; i < (unsigned)devices; i++ ) {
|
|
size_t len;
|
|
char *p;
|
|
|
|
if( (p = strchr( devs[i], '.' )) != NULL ) {
|
|
len = strlen( p+1 );
|
|
if( len >= 1 && len == strspn( p+1, "0123456789" ".;-_"
|
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
"abcdefghijklmnopqrstuvwxyz" ) )
|
|
options |= MOU_VIRTUAL;
|
|
}
|
|
}
|
|
}
|
|
|
|
#ifdef USE_VHD
|
|
if( options & mou_snapshot ) {
|
|
if( $FAILS(sts = parselist( &nparents, &parfiles, devices, parents )) ) {
|
|
free( devs );
|
|
free( labs );
|
|
return sts;
|
|
}
|
|
if( nparents != devices ) {
|
|
sts = printmsg( MOUNT_NOTSAME, 0, nparents, qstyle_c, devices );
|
|
free( parfiles );
|
|
free( devs );
|
|
free( labs );
|
|
return sts;
|
|
}
|
|
for( i = 0; i < (size_t)nparents; i++ ) {
|
|
sts = phyvhd_snapshot( devs[i], parfiles[i] );
|
|
if( $FAILS(sts = phyvhd_snapshot( devs[i], parfiles[i] )) ) {
|
|
if( !$MATCHCOND(sts, SS$_DUPFILENAME) ) {
|
|
(void) Unlink( devs[i] );
|
|
}
|
|
while( i > 0 ) {
|
|
--i;
|
|
(void) Unlink( devs[i] );
|
|
}
|
|
free( parfiles );
|
|
free( devs );
|
|
free( labs );
|
|
return sts;
|
|
}
|
|
}
|
|
if( options & MOU_LOG ) {
|
|
for( i = 0; i < (size_t)nparents; i++ )
|
|
sts = printmsg( MOUNT_SNAPOK, 0, devs[i], parfiles[i] );
|
|
}
|
|
options |= MOU_WRITE;
|
|
free( parfiles );
|
|
parfiles = NULL;
|
|
}
|
|
#endif
|
|
|
|
if( devices > 0 )
|
|
sts = mount( options, devices, devs, labs );
|
|
|
|
free( devs );
|
|
free( labs );
|
|
return sts;
|
|
}
|
|
|
|
/*************************************************************** domounthelp() */
|
|
|
|
DECL_CMD(mounthelp) {
|
|
UNUSED( argc );
|
|
UNUSED( argv );
|
|
UNUSED( qualc );
|
|
UNUSED( qualv );
|
|
|
|
(void) helptopic( 0, "MOUNT", qstyle_s, qstyle_s );
|
|
|
|
phyio_help();
|
|
|
|
(void) helptopic( 0, "MOUNT VOLSET" );
|
|
|
|
#ifdef USE_VHD
|
|
(void) helptopic( 0, "MOUNT VHD", qstyle_s, qstyle_s );
|
|
#endif
|
|
|
|
return SS$_NORMAL;
|
|
}
|