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