4.1cBSD/usr/src/ucb/ingres/source/support/osys.c

Compare this file to the similar file:
Show the results in this format:































typedef char	bool;		


















 












































































































extern short	*tT;













































struct relation
{
		char	relid[	12		];	
		char	relowner[2];	
		char	relspec;	
				
				
				
				
				
				
		char	relindxd;	
		short	relstat2;	
		short	relstat;	
		long	relsave;	
		long	reltups;	
		short	relatts;	
		short	relwid;		
		long	relprim;	
		long	relfree;	
		long	relstamp;	
};

















struct attribute
{
		char 	attrelid[	12		];	
		char	attowner[2];	
		short	attid;		
		char	attname[	12		];	
		short	attoff;		
		char	attfrmt;	
		char	attfrml;	
		char	attxtra;	
};









struct tup_id
{

		char	line_id, pg2, pg1, pg0;

};

typedef struct tup_id	TID;

typedef union
{
	long	ltid;
	TID	s_tupid;
} tid_type;


























struct descriptor
{
	struct relation	reldum;
		




	char	relvname[	12		];	
		short	relfp;		
		short	relopn;		
	tid_type reltid;	


		long	reladds;	
		short	reloff[	50		];	
		char	relfrmt[	50		]; 

		char	relfrml[	50		]; 


		char	relxtra[	50		]; 

		char	relgiven[	50		]; 


};

typedef struct descriptor	DESC;


typedef struct
{
	DESC	*rngvdesc;	
	bool	rngvmark;	
}  RANGEV;
















union anytype
{
	char		i1type;
	short		i2type;
	long		i4type;
	float		f4type;
	double		f8type;
	char		c0type[1];	


	char		*cptype;
	char		**cpptype;
};

typedef union anytype	ANYTYPE;



























struct accessparam
{
	short	mode;		
	short	sec_index;	
	char	keydno[	50		 + 1];
};










struct desxx
{
	char	*cach_relname;	
	DESC	*cach_desc;	
	DESC	*cach_alias;	
};











































































extern char	*Usercode;
extern char	*Pathname;

















struct out_arg
{
	int	c0width;	
	int	i1width;	
	int	i2width;	
	int	i4width;	
	int	f4width;	
	int	f8width;	
	int	f4prec;		
	int	f8prec;		
	char	f4style;	
	char	f8style;	
	int	linesperpage;	
	char	coldelim;	
};













































struct lockreq
{
	char	lract;			





	char	lrtype;			





	char	lrmod;			



					
	char	dbnode[4];		
	char	lrel[4];		
	char	lpage[4];		
};

extern char	Acclock;		
extern int	Alockdes;		
extern int	Lockrel;		






















































struct accbuf
{
	
	long		mainpg;		
	long		ovflopg;	
	short		nxtlino;	
	char		firstup[	1024		 - 12];	
	short		linetab[1];	
					



	
	long		rel_tupid;	
	long		thispage;	
	int		filedesc;	
	struct accbuf	*modf;		
	struct accbuf	*modb;		
	int		bufstatus;	
};







struct
{
	char	acc_buf[3		];
};


extern struct accbuf	*Acc_head;	
extern struct accbuf	*Acc_tail;	
extern struct accbuf	Acc_buf[3		];	












struct adminhdr
{
	char	adowner[2];	
	short	adflags;	
	short	adlength;	
	short	adversion;	
	short	adreldsz;	
	short	adattdsz;	
};

struct admin
{
	struct adminhdr		adhdr;
	struct descriptor	adreld;
	struct descriptor	adattd;
};














extern struct admin		Admin;





struct pgtuple
{
	struct tup_id	childtid;		
	char		childtup[	1010		];
};






extern long	Accuread, Accuwrite;





extern char	*Acctuple;		
extern		Accerror;		
extern char	Accanon[	1010		];	
















struct batchbuf
{
	char	file_id[	6	];	
	char	bbuf[506	];	
};


struct si_doms
{
	short	rel_off;	
	short	tupo_off;	
	short	dom_size;	
				
};
struct batchhd
{
	char	db_name[15];	
	char	rel_name[13];	
	char	userid[2];	
	long	num_updts;	
	short	mode_up;	
	short	tido_size;	
	short	tupo_size;	
	short	tupn_size;	
	short	tidn_size;	
	short	si_dcount;	
	struct si_doms	si[	50		+1];	
};



short	Batch_fp;	
short	Batch_cnt;	
short	Batch_dirty;	
short	Batch_lread;	
short	Batch_recovery;	

extern char	*Fileset;	
struct batchbuf	Batchbuf;
struct batchhd	Batchhd;





















typedef struct
{
	short	pv_type;	
	short	pv_len;		
	union
	{
		short			pv_int;		
		struct querytree	*pv_qtree;	
		char			*pv_str;	
		char			*pv_tuple;	
	} pv_val;
}  PARM;













 static char Sccsid[] = "@(#)sysmod.c	7.1	2/5/81";

extern int	Status;
short		tTdbu[100];


char	*Fileset;
char	Noupdt		= 	0	;
char	*Dummy;
char	**Xparams	= &Dummy;

struct modtabl
{
	char	*rname;
	char	**parvec;
	int	goahead;
	int	normgo;
	int	optn;
};

char	*Relpar[] =
{
	"relation",	"hash",		"name",
	"relid",		0	
};

char	*Attpar[] =
{
	"attribute",	"hash",		"name",
	"attrelid",	"attowner",	"#attid",
		0	
};

char	*Indpar[] =
{
	"indexes",	"hash",		"name",
	"irelidp",	"iownerp",	"",
	"minpages",	"5",			0	
};

char	*Trepar[] =
{
	"tree",		"hash",		"name",
	"treerelid",	"treeowner",	"treetype",
		0	
};

char	*Propar[] =
{
	"protect",	"hash",		"name",
	"prorelid",	"prorelown",		0	
};

char	*Intpar[] =
{
	"integrities",	"hash",		"name",
	"intrelid",	"intrelowner",		0	
};

struct modtabl  Modtabl[] =
{
	"relation",	&Relpar[0],		0	,		1	,		0	,
	"attribute",	&Attpar[0],		0	,		1	,		0	,
	"indexes",	&Indpar[0],		0	,		1	,		0	,
	"tree",		&Trepar[0],		0	,		1	,		1	,
	"protect",	&Propar[0],		0	,		1	,		1	,
	"integrities",	&Intpar[0],		0	,		1	,		1	,
	0
};







main(argc, argv)
int	argc;
char	*argv[];
{
	register int	i;
	register int	j;
	register char	**av;
	PARM		newpvec[40];
	char		*p;
	int		retval;
	char		fileset[10], proctab[100];
	extern char	*Parmvect[];
	extern char	*Flagvect[];
	extern char	*Dbpath;
	int		superuser;

	argv[argc] = 	0	;


	tTrace(argv, 'T', tTdbu, 100);


	itoa(getpid(), fileset);
	Fileset = fileset;
	i = initucode(argc, argv, 	1	, 	0	, 	1);
	switch (i)
	{
	  case 0:
	  case 5:
		break;

	  case 1:
	  case 6:
		printf("Database %s does not exist\n", Parmvect[0]);
		exit(-1);

	  case 2:
		printf("You are not authorized for database %s\n", Parmvect[0]);
		exit(-1);

	  case 3:
		printf("You are not a valid INGRES user\n");
		exit(-1);

	  case 4:
		printf("No database name specified\n");
	usage:
		printf("Usage: sysmod [-s] [+-w] dbname [relation ...]\n");
		exit(-1);

	  default:
		syserr("initucode %d", i);
	}

	concat(Pathname, "/bin/ksort", proctab);
	Dummy = proctab;

	superuser = 	0	;
	for (av = Flagvect; (p = *av) != 	0	; av++)
	{
		if (p[0] != '-')
		{
		badflag:
			printf("Bad flag: %s\n", p);
			goto usage;
		}
		switch (p[1])
		{
		  case 's':
			if ((Status & 	0100000		) == 0)
			{
				printf("Only INGRES can use the -s flag\n");
				exit(-1);
			}
			superuser = 	1	;
			break;

		  case 'T':
			break;

		  default:
			goto badflag;
		}
	}
	if (chdir(Dbpath) < 0)
	{
		printf("data base %s does not exist\n", Parmvect[0]);
		exit(1);
	}
	if (superuser)
		bmove(Admin.adhdr.adowner, Usercode, 2);
	if (!bequal(Usercode, Admin.adhdr.adowner, 2))
	{
		printf("you are not the dba for %s\n", Parmvect[0]);
		exit(1);
	}






	if (Parmvect[1] != 	0	)
		if ((Parmvect[2] == 	0	) && sequal(Parmvect[1], "all"))
			for (i = 0; Modtabl[i].rname; i++)
				Modtabl[i].goahead = 	1	;
		else
			for (av = &Parmvect[1]; (p = *av) != 	0	; av++)
			{
				for (j = 0; Modtabl[j].rname; j++)
				{
					if (sequal(p, Modtabl[j].rname))
					{
						if (Modtabl[j].goahead)
						{
							printf("%s duplicate relation name\n", p);
							exit(1);
						}
						Modtabl[j].goahead = 	1	;
						break;
					}
				}
				if (!Modtabl[j].rname)
				{
					printf("%s is not a system relation\n", p);
					exit(1);
				}
			}
	else
		for (i = 0; Modtabl[i].rname; i++)
			Modtabl[i].goahead = Modtabl[i].normgo;
	for (i = 0; Modtabl[i].rname; i++)
	{
		if (Modtabl[i].goahead == 0 || optn_rel(&Modtabl[i]))
			continue;
		printf("modifying %s\n", Modtabl[i].rname);
		av = Modtabl[i].parvec;
		j = 0;
		while (*av != 	0	)
		{
			newpvec[j].pv_type = 	2	;
			newpvec[j].pv_val.pv_str = *av;
			newpvec[j].pv_len = length(*av) + 1;
			j++;
			av++;
		}
		newpvec[j].pv_type = 	0	;
		smove(Fileset, Batchbuf.file_id);

		if (	(( 0 < 0) ? tT[1] : (tT[1] & (1 <<  0))))
		{
			prvect(j, newpvec);
		}

		if (retval = modify(j, newpvec))
		{
			printf("Error %d on %s\n", retval, Modtabl[i].rname);
			exit(1);
		}
	}
	printf("sysmod done\n");
	exit(0);
}


optn_rel(mx)
struct modtabl	*mx;
{
	register struct modtabl	*m;
	register int		ret;

	struct descriptor	des;

	m = mx;
	ret = 	0	;

	if (m->optn)
	{
		if (openr(&des, -1, m->rname))
		{
			ret = 	1	;
		}
	}
	return (ret);
}

rubproc()
{
	printf("sysmod interrupted\n");
	exit(1);
}