119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/*
219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Copyright 1987, 1988 by MIT Student Information Processing Board
319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project *
419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Permission to use, copy, modify, and distribute this software and
519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * its documentation for any purpose is hereby granted, provided that
619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * the names of M.I.T. and the M.I.T. S.I.P.B. not be used in
719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * advertising or publicity pertaining to distribution of the software
819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * without specific, written prior permission.  M.I.T. and the
919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * M.I.T. S.I.P.B. make no representations about the suitability of
1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * this software for any purpose.  It is provided "as is" without
1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * express or implied warranty.
1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */
1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef HAVE_ERRNO_H
1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <errno.h>
1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif
1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "ss_internal.h"
1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define ssrt ss_request_table	/* for some readable code... */
2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid ss_add_request_table(sci_idx, rqtbl_ptr, position, code_ptr)
2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	int sci_idx;
2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	ssrt *rqtbl_ptr;
2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	int position;		/* 1 -> becomes second... */
2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	int *code_ptr;
2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	register ss_data *info;
2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	register int i, size;
303984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt	ssrt **t;
3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	info = ss_info(sci_idx);
3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	for (size=0; info->rqt_tables[size] != (ssrt *)NULL; size++)
3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		;
3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	/* size == C subscript of NULL == #elements */
3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	size += 2;		/* new element, and NULL */
373984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt	t = (ssrt **)realloc(info->rqt_tables, (unsigned)size*sizeof(ssrt));
383984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt	if (t == (ssrt **)NULL) {
3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		*code_ptr = errno;
4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		return;
4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
423984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt	info->rqt_tables = t;
4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (position > size - 2)
4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		position = size - 2;
4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (size > 1)
4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		for (i = size - 2; i >= position; i--)
4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			info->rqt_tables[i+1] = info->rqt_tables[i];
4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	info->rqt_tables[position] = rqtbl_ptr;
5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	info->rqt_tables[size-1] = (ssrt *)NULL;
5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	*code_ptr = 0;
5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectvoid ss_delete_request_table(sci_idx, rqtbl_ptr, code_ptr)
5619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     int sci_idx;
5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     ssrt *rqtbl_ptr;
5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     int *code_ptr;
5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     register ss_data *info;
6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     register ssrt **rt1, **rt2;
6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     *code_ptr = SS_ET_TABLE_NOT_FOUND;
6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     info = ss_info(sci_idx);
6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     rt1 = info->rqt_tables;
6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     for (rt2 = rt1; *rt1; rt1++) {
6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	  if (*rt1 != rqtbl_ptr) {
6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	       *rt2++ = *rt1;
6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	       *code_ptr = 0;
7019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	  }
7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     }
7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     *rt2 = (ssrt *)NULL;
7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project     return;
7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
75