c0c79a3f09914f35651895ffc111883455b7f62dtz# CDDL HEADER START
c0c79a3f09914f35651895ffc111883455b7f62dtz# The contents of this file are subject to the terms of the
c0c79a3f09914f35651895ffc111883455b7f62dtz# Common Development and Distribution License (the "License").
c0c79a3f09914f35651895ffc111883455b7f62dtz# You may not use this file except in compliance with the License.
c0c79a3f09914f35651895ffc111883455b7f62dtz# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c0c79a3f09914f35651895ffc111883455b7f62dtz# See the License for the specific language governing permissions
c0c79a3f09914f35651895ffc111883455b7f62dtz# and limitations under the License.
c0c79a3f09914f35651895ffc111883455b7f62dtz# When distributing Covered Code, include this CDDL HEADER in each
c0c79a3f09914f35651895ffc111883455b7f62dtz# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c0c79a3f09914f35651895ffc111883455b7f62dtz# If applicable, add the following below this CDDL HEADER, with the
c0c79a3f09914f35651895ffc111883455b7f62dtz# fields enclosed by brackets "[]" replaced with your own identifying
c0c79a3f09914f35651895ffc111883455b7f62dtz# information: Portions Copyright [yyyy] [name of copyright owner]
c0c79a3f09914f35651895ffc111883455b7f62dtz# CDDL HEADER END
cd3e933325e68e23516a196a8fea7f49b1e497c3Ali Bahrami# Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
c0c79a3f09914f35651895ffc111883455b7f62dtz# auditxml_jni [-d] <xml input file>
c0c79a3f09914f35651895ffc111883455b7f62dtz# auditxml takes the audit record description (.xml file) and
c0c79a3f09914f35651895ffc111883455b7f62dtz# generates the files needed for the Java
c0c79a3f09914f35651895ffc111883455b7f62dtzour $debug = 0; # normal use is to set via the file being parsed.
c0c79a3f09914f35651895ffc111883455b7f62dtz # <debug set="on"/> or <debug set="off"/> or <debug/>
c0c79a3f09914f35651895ffc111883455b7f62dtz # if the set attribute is omitted, debug state is toggled
c0c79a3f09914f35651895ffc111883455b7f62dtz # Override with appDebug, but toggle won't do what you
c0c79a3f09914f35651895ffc111883455b7f62dtzmy $appDebug = 0; # used after return from "new auditxml";
c0c79a3f09914f35651895ffc111883455b7f62dtzDO NOT EDIT. This file is auto generated by the Solaris Audit
c0c79a3f09914f35651895ffc111883455b7f62dtzsystem from adt.xml.
c0c79a3f09914f35651895ffc111883455b7f62dtz# trim leading/trailing newlines
c0c79a3f09914f35651895ffc111883455b7f62dtz$genNotice =~ s/^\n//s;
c0c79a3f09914f35651895ffc111883455b7f62dtz$genNotice =~ s/\n$//s;
c0c79a3f09914f35651895ffc111883455b7f62dtz# where everything comes from and where it goes:
c0c79a3f09914f35651895ffc111883455b7f62dtz generateTableC($event, $eventId, $eventType, undef, $omit);
c0c79a3f09914f35651895ffc111883455b7f62dtzprintJavaFiles($jniC, $auditEventJ, $buildPathJ, $mapFile);
c0c79a3f09914f35651895ffc111883455b7f62dtz my $jniFile = shift;
c0c79a3f09914f35651895ffc111883455b7f62dtz my $javaFile = shift;
c0c79a3f09914f35651895ffc111883455b7f62dtz my $mapFile = shift;
c0c79a3f09914f35651895ffc111883455b7f62dtz# ADT_PRIVSTAR omitted -- not implemented and the audit records that
c0c79a3f09914f35651895ffc111883455b7f62dtz# use it must be coded to emit no java. We'll cross that bridge
c0c79a3f09914f35651895ffc111883455b7f62dtz# when someone in Java land needs to generate a priv token.
c0c79a3f09914f35651895ffc111883455b7f62dtz 'ADT_TERMIDSTAR' => ['String', 'jstring'], # hostname -> termid
c0c79a3f09914f35651895ffc111883455b7f62dtz# ADT_UINT32ARRAY omitted; no Java implementation yet
c0c79a3f09914f35651895ffc111883455b7f62dtz $notice =~ s/\n/\n * /gs;
c0c79a3f09914f35651895ffc111883455b7f62dtz $notice =~ s/\s+\n/\n/gs;
c0c79a3f09914f35651895ffc111883455b7f62dtz#include "../../libbsm/common/adt_xlate.h"
c0c79a3f09914f35651895ffc111883455b7f62dtz#include <jni.h>
c0c79a3f09914f35651895ffc111883455b7f62dtz#include "../com/sun/audit/AuditSession.h" /* javah output */
c0c79a3f09914f35651895ffc111883455b7f62dtz#include "adt_jni.h"
c0c79a3f09914f35651895ffc111883455b7f62dtz#include <stdlib.h>
c0c79a3f09914f35651895ffc111883455b7f62dtz#include <string.h>
c0c79a3f09914f35651895ffc111883455b7f62dtzstatic char *except_class = "java/lang/Exception";
c0c79a3f09914f35651895ffc111883455b7f62dtzpackage com.sun.audit;
c0c79a3f09914f35651895ffc111883455b7f62dtzpublic class AuditEvent {
c0c79a3f09914f35651895ffc111883455b7f62dtz protected AuditSession sh; // associated session object
c0c79a3f09914f35651895ffc111883455b7f62dtz public AuditEvent(AuditSession auSession)
c0c79a3f09914f35651895ffc111883455b7f62dtz throws Error
c0c79a3f09914f35651895ffc111883455b7f62dtz sh = auSession;
0bd81b6f8fb7804214192b87b0aa3f03fcf87c45gww // Manifest values: keep them in sync with generated <bsm/adt_event.h>.
0bd81b6f8fb7804214192b87b0aa3f03fcf87c45gww // It is generated by \$SRC/lib/libbsm/auditxml
0bd81b6f8fb7804214192b87b0aa3f03fcf87c45gww public static final int ADT_SUCCESS = 0; // generated
0bd81b6f8fb7804214192b87b0aa3f03fcf87c45gww public static final int ADT_FAILURE = -1; // generated
c0c79a3f09914f35651895ffc111883455b7f62dtz // See the subclasses of AuditEvent for mapping message codes
c0c79a3f09914f35651895ffc111883455b7f62dtz // to events
c0c79a3f09914f35651895ffc111883455b7f62dtz $notice_map =~ s/\s+\n/\n/gs;
c0c79a3f09914f35651895ffc111883455b7f62dtz# $notice_map
cd3e933325e68e23516a196a8fea7f49b1e497c3Ali Bahrami\$mapfile_version 2
cd3e933325e68e23516a196a8fea7f49b1e497c3Ali BahramiSYMBOL_VERSION SUNWprivate_1.1 {
c0c79a3f09914f35651895ffc111883455b7f62dtz c2j_pointer;
c0c79a3f09914f35651895ffc111883455b7f62dtz j2c_pointer;
c0c79a3f09914f35651895ffc111883455b7f62dtz Java_com_sun_audit_AuditSession_bsmAuditOn;
c0c79a3f09914f35651895ffc111883455b7f62dtz Java_com_sun_audit_AuditSession_startSession;
c0c79a3f09914f35651895ffc111883455b7f62dtz Java_com_sun_audit_AuditSession_endSession;
c0c79a3f09914f35651895ffc111883455b7f62dtz Java_com_sun_audit_AuditSession_dupSession;
c0c79a3f09914f35651895ffc111883455b7f62dtz Java_com_sun_audit_AuditSession_getSessionId;
c0c79a3f09914f35651895ffc111883455b7f62dtz Java_com_sun_audit_AuditSession_exportSessionData;
57b598f5829606393ded70b44d927a5a004392b8tz Java_com_sun_audit_AuditSession_sessionAttr;
c0c79a3f09914f35651895ffc111883455b7f62dtz# One subclass of AuditEvent per audit record...
c0c79a3f09914f35651895ffc111883455b7f62dtz # generate java final int classes to line up with string/enums
c0c79a3f09914f35651895ffc111883455b7f62dtz my ($header, $enumValue, $public, $deprecated) = @$headref;
c0c79a3f09914f35651895ffc111883455b7f62dtz print Jfile "\t// Deprecated message list\n" if $deprecated;
c0c79a3f09914f35651895ffc111883455b7f62dtz my ($ref1, $eventType, $allowedIds, $header) = @{$jniEventTable{$eventId}};
c0c79a3f09914f35651895ffc111883455b7f62dtz my $jniPutEvent = "Java_com_sun_audit_AuditEvent$putMethod" . "_$javaPutEvent";
c0c79a3f09914f35651895ffc111883455b7f62dtz # the subclass file template isn't used; it may be needed to get
c0c79a3f09914f35651895ffc111883455b7f62dtz # the right file header stuff in place. The subclassPath is
c0c79a3f09914f35651895ffc111883455b7f62dtz unless (open(Sfile, ">$subclassPath/AuditEvent_$root.java")) {
c0c79a3f09914f35651895ffc111883455b7f62dtz print STDERR "can't open class file AuditEvent_$root.java: $!\n";
c0c79a3f09914f35651895ffc111883455b7f62dtzpackage com.sun.audit;
c0c79a3f09914f35651895ffc111883455b7f62dtz// audit event: $eventId = $eventCode{"AUE_$root"}
c0c79a3f09914f35651895ffc111883455b7f62dtzpublic class AuditEvent_$root extends AuditEvent {
c0c79a3f09914f35651895ffc111883455b7f62dtz print STDERR "no event code for $eventId. Is audit_event current?\n";
c0c79a3f09914f35651895ffc111883455b7f62dtz $jniADTalloc = '(union union_of_events *)adt_alloc_event';
c0c79a3f09914f35651895ffc111883455b7f62dtz length = (*env)->GetArrayLength(env, $id);
c0c79a3f09914f35651895ffc111883455b7f62dtz $p_event =
c0c79a3f09914f35651895ffc111883455b7f62dtz (int *)malloc(length * sizeof (int));
c0c79a3f09914f35651895ffc111883455b7f62dtz if ($p_event == NULL) {
c0c79a3f09914f35651895ffc111883455b7f62dtz locale = I18N_SETUP;
c0c79a3f09914f35651895ffc111883455b7f62dtz local_throw(env, except_class,
c0c79a3f09914f35651895ffc111883455b7f62dtz $noMemory);
c0c79a3f09914f35651895ffc111883455b7f62dtz (void) setlocale(LC_MESSAGES, locale);
c0c79a3f09914f35651895ffc111883455b7f62dtz goto cleanup;
c0c79a3f09914f35651895ffc111883455b7f62dtz (*env)->GetIntArrayRegion(env, $id, 0, length,
c0c79a3f09914f35651895ffc111883455b7f62dtz (int *)$p_event);
c0c79a3f09914f35651895ffc111883455b7f62dtz length = (*env)->GetArrayLength(env, $id);
c0c79a3f09914f35651895ffc111883455b7f62dtz $p_event =
c0c79a3f09914f35651895ffc111883455b7f62dtz ($cType *)malloc(length * sizeof ($cType));
c0c79a3f09914f35651895ffc111883455b7f62dtz if ($p_event == NULL) {
c0c79a3f09914f35651895ffc111883455b7f62dtz locale = I18N_SETUP;
c0c79a3f09914f35651895ffc111883455b7f62dtz local_throw(env, except_class,
c0c79a3f09914f35651895ffc111883455b7f62dtz $noMemory);
c0c79a3f09914f35651895ffc111883455b7f62dtz (void) setlocale(LC_MESSAGES, locale);
c0c79a3f09914f35651895ffc111883455b7f62dtz goto cleanup;
c0c79a3f09914f35651895ffc111883455b7f62dtz (*env)->GetIntArrayRegion(env, $id, 0, length,
c0c79a3f09914f35651895ffc111883455b7f62dtz (int *)$p_event);
c0c79a3f09914f35651895ffc111883455b7f62dtz length = (*env)->GetArrayLength(env, $id);
c0c79a3f09914f35651895ffc111883455b7f62dtz $p_event =
c0c79a3f09914f35651895ffc111883455b7f62dtz (long *)malloc(length * sizeof (long long));
c0c79a3f09914f35651895ffc111883455b7f62dtz if ($p_event == NULL) {
c0c79a3f09914f35651895ffc111883455b7f62dtz locale = I18N_SETUP;
c0c79a3f09914f35651895ffc111883455b7f62dtz local_throw(env, except_class,
c0c79a3f09914f35651895ffc111883455b7f62dtz $noMemory);
c0c79a3f09914f35651895ffc111883455b7f62dtz (void) setlocale(LC_MESSAGES, locale);
c0c79a3f09914f35651895ffc111883455b7f62dtz goto cleanup;
c0c79a3f09914f35651895ffc111883455b7f62dtz (*env)->GetLongArrayRegion(env, $id, 0, length,
c0c79a3f09914f35651895ffc111883455b7f62dtz $p_event);
c0c79a3f09914f35651895ffc111883455b7f62dtz } elsif ($type eq 'ADT_CHAR') { # string in Java, char in C
c0c79a3f09914f35651895ffc111883455b7f62dtz c = (char *)(*env)->GetStringUTFChars(env, $id, NULL);
c0c79a3f09914f35651895ffc111883455b7f62dtz if (c == NULL)
c0c79a3f09914f35651895ffc111883455b7f62dtz goto cleanup; /* exception thrown */
c0c79a3f09914f35651895ffc111883455b7f62dtz $p_event = *c;
c0c79a3f09914f35651895ffc111883455b7f62dtz (*env)->ReleaseStringUTFChars(env, $id, c);
c0c79a3f09914f35651895ffc111883455b7f62dtz if ($id != NULL) {
c0c79a3f09914f35651895ffc111883455b7f62dtz string = (char *)(*env)->GetStringUTFChars(
c0c79a3f09914f35651895ffc111883455b7f62dtz env, $id, NULL);
c0c79a3f09914f35651895ffc111883455b7f62dtz if (string == NULL)
c0c79a3f09914f35651895ffc111883455b7f62dtz goto cleanup; /* exception thrown */
c0c79a3f09914f35651895ffc111883455b7f62dtz $p_event = strdup(string);
c0c79a3f09914f35651895ffc111883455b7f62dtz (*env)->ReleaseStringUTFChars(env, $id, string);
c0c79a3f09914f35651895ffc111883455b7f62dtz if ($p_event == NULL) {
c0c79a3f09914f35651895ffc111883455b7f62dtz locale = I18N_SETUP;
c0c79a3f09914f35651895ffc111883455b7f62dtz local_throw(env, except_class,
c0c79a3f09914f35651895ffc111883455b7f62dtz $noMemory);
c0c79a3f09914f35651895ffc111883455b7f62dtz (void) setlocale(LC_MESSAGES, locale);
c0c79a3f09914f35651895ffc111883455b7f62dtz goto cleanup;
c0c79a3f09914f35651895ffc111883455b7f62dtz length = (*env)->GetArrayLength(env, $id);
c0c79a3f09914f35651895ffc111883455b7f62dtz $p_event = (char **)malloc(length
c0c79a3f09914f35651895ffc111883455b7f62dtz * sizeof (char *));
c0c79a3f09914f35651895ffc111883455b7f62dtz if ($p_event == NULL) {
c0c79a3f09914f35651895ffc111883455b7f62dtz locale = I18N_SETUP;
c0c79a3f09914f35651895ffc111883455b7f62dtz local_throw(env, except_class,
c0c79a3f09914f35651895ffc111883455b7f62dtz $noMemory);
c0c79a3f09914f35651895ffc111883455b7f62dtz (void) setlocale(LC_MESSAGES, locale);
c0c79a3f09914f35651895ffc111883455b7f62dtz goto cleanup;
c0c79a3f09914f35651895ffc111883455b7f62dtz p = $p_event;
c0c79a3f09914f35651895ffc111883455b7f62dtz for (i = 0; i < length; i++) {
c0c79a3f09914f35651895ffc111883455b7f62dtz jString = (*env)->GetObjectArrayElement(env, $id, i);
c0c79a3f09914f35651895ffc111883455b7f62dtz string = (char *)(*env)->GetStringUTFChars(
c0c79a3f09914f35651895ffc111883455b7f62dtz env, jString, NULL);
c0c79a3f09914f35651895ffc111883455b7f62dtz if (string == NULL)
c0c79a3f09914f35651895ffc111883455b7f62dtz goto cleanup; /* exception thrown */
c0c79a3f09914f35651895ffc111883455b7f62dtz *p = strdup(string);
c0c79a3f09914f35651895ffc111883455b7f62dtz (*env)->ReleaseStringUTFChars(env, jString, string);
c0c79a3f09914f35651895ffc111883455b7f62dtz if (*p == NULL) {
c0c79a3f09914f35651895ffc111883455b7f62dtz locale = I18N_SETUP;
c0c79a3f09914f35651895ffc111883455b7f62dtz local_throw(env, except_class,
c0c79a3f09914f35651895ffc111883455b7f62dtz $noMemory);
c0c79a3f09914f35651895ffc111883455b7f62dtz (void) setlocale(LC_MESSAGES, locale);
c0c79a3f09914f35651895ffc111883455b7f62dtz while (p >= $p_event)
c0c79a3f09914f35651895ffc111883455b7f62dtz free(*p--);
c0c79a3f09914f35651895ffc111883455b7f62dtz goto cleanup;
c0c79a3f09914f35651895ffc111883455b7f62dtz char *string;
c0c79a3f09914f35651895ffc111883455b7f62dtz int length;
c0c79a3f09914f35651895ffc111883455b7f62dtz jstring jString;
c0c79a3f09914f35651895ffc111883455b7f62dtz hostname$cntTermidDef = (char *)(*env)->GetStringUTFChars(env, $id, NULL);
c0c79a3f09914f35651895ffc111883455b7f62dtz if (adt_load_hostname((const char *)hostname$cntTermidDef, &termid$cntTermidDef)) {
c0c79a3f09914f35651895ffc111883455b7f62dtz local_throw(env, except_class,
c0c79a3f09914f35651895ffc111883455b7f62dtz gettext("hostname lookup failed"));
c0c79a3f09914f35651895ffc111883455b7f62dtz $p_event = termid$cntTermidDef;
c0c79a3f09914f35651895ffc111883455b7f62dtz (*env)->ReleaseStringUTFChars(env, $id, hostname$cntTermidDef);
c0c79a3f09914f35651895ffc111883455b7f62dtz $jniFreeList .= "\n\tif (hostname$cntTermidDef != NULL)\n" .
c0c79a3f09914f35651895ffc111883455b7f62dtz $jniFreeList .= "\n\tif (termid$cntTermidDef != NULL)\n" .
c0c79a3f09914f35651895ffc111883455b7f62dtz $jniDefine .= "\tadt_termid_t\t\t*termid$cntTermidDef;\n"; #djdj
c0c79a3f09914f35651895ffc111883455b7f62dtz my ($nativeParameter, $jniParameter) = @{$java_jni{$type}};
c0c79a3f09914f35651895ffc111883455b7f62dtz my ($nativeParameter, $jniParameter) = @{$java_jni{$type}};
c0c79a3f09914f35651895ffc111883455b7f62dtz char *locale;
c0c79a3f09914f35651895ffc111883455b7f62dtz $jniFreeList = "\tcleanup:\n" . $jniFreeList if $needCleanupTarget;
c0c79a3f09914f35651895ffc111883455b7f62dtz print Cfile qq{/* ARGSUSED */
c0c79a3f09914f35651895ffc111883455b7f62dtz (void) adt_put_event((adt_event_data_t *)event, status, ret_val);
c0c79a3f09914f35651895ffc111883455b7f62dtz print Sfile "\t// Allowed values for eventId in putEvent:\n";
c0c79a3f09914f35651895ffc111883455b7f62dtz print STDERR "Generic event with no allowed instances: $eventId\n";
c0c79a3f09914f35651895ffc111883455b7f62dtz private native void $javaPutEvent(byte[]session, $overrideParameter
c0c79a3f09914f35651895ffc111883455b7f62dtz int status, int ret_val$nativeParameterList);
c0c79a3f09914f35651895ffc111883455b7f62dtz public AuditEvent_$root(AuditSession session)
c0c79a3f09914f35651895ffc111883455b7f62dtz throws Exception
c0c79a3f09914f35651895ffc111883455b7f62dtz super(session);
c0c79a3f09914f35651895ffc111883455b7f62dtz my $jParam = @{$java_jni{$type}}[0];
c0c79a3f09914f35651895ffc111883455b7f62dtz $enumUsage = "\n\t// See $jComment in AuditEvent.java for valid values"
c0c79a3f09914f35651895ffc111883455b7f62dtz private $storage;$comment
c0c79a3f09914f35651895ffc111883455b7f62dtz public void $javaMethodName($jParam setTo)
c0c79a3f09914f35651895ffc111883455b7f62dtz $javaStorageName = setTo;
c0c79a3f09914f35651895ffc111883455b7f62dtz public void putEvent(int status, int ret_val, int eventId)
c0c79a3f09914f35651895ffc111883455b7f62dtz byte[] session = super.sh.getSession();
c0c79a3f09914f35651895ffc111883455b7f62dtz if ((super.sh.AuditIsOn) && (super.sh.ValidSession))
c0c79a3f09914f35651895ffc111883455b7f62dtz $javaPutEvent(session, eventId,
c0c79a3f09914f35651895ffc111883455b7f62dtz status, ret_val$javaParameterList);
c0c79a3f09914f35651895ffc111883455b7f62dtz public void putEvent(int status, int ret_val)
c0c79a3f09914f35651895ffc111883455b7f62dtz byte[] session = super.sh.getSession();
c0c79a3f09914f35651895ffc111883455b7f62dtz if ((super.sh.AuditIsOn) && (super.sh.ValidSession))
c0c79a3f09914f35651895ffc111883455b7f62dtz $javaPutEvent(session, status, ret_val$javaParameterList);
c0c79a3f09914f35651895ffc111883455b7f62dtz # write trailers
c0c79a3f09914f35651895ffc111883455b7f62dtz my $event = shift;
c0c79a3f09914f35651895ffc111883455b7f62dtz my $eventId = shift;
c0c79a3f09914f35651895ffc111883455b7f62dtz my $eventType = shift;
c0c79a3f09914f35651895ffc111883455b7f62dtz my $omit = shift;
c0c79a3f09914f35651895ffc111883455b7f62dtz print STDERR "No external object captured for event $eventId\n";
c0c79a3f09914f35651895ffc111883455b7f62dtz print STDERR "No internal object captured for event $eventId\n";
c0c79a3f09914f35651895ffc111883455b7f62dtz if ($internal->isReorder()) { # prescan the entry list to get the token order
c0c79a3f09914f35651895ffc111883455b7f62dtz my $j = $i + 1;
c0c79a3f09914f35651895ffc111883455b7f62dtz formatTableEntry ('', $tokenId, $eventId, '', 0, 0, $tokenOrder[$sequence],
c0c79a3f09914f35651895ffc111883455b7f62dtz $enumGroup =~ s/^msg\s*//i;
c0c79a3f09914f35651895ffc111883455b7f62dtz "$tokenId is an unimplemented token ($entryId in $eventId)\n";
c0c79a3f09914f35651895ffc111883455b7f62dtz formatTableEntry($entryId, $tokenName, $eventId, $dataType, $required,
c0c79a3f09914f35651895ffc111883455b7f62dtz my ($id, $token, $eventId, $type, $required, $tsol, $sequence, $format, $enumGroup,
c0c79a3f09914f35651895ffc111883455b7f62dtz # does this map belong in the xml source? (at least the defaults?)
c0c79a3f09914f35651895ffc111883455b7f62dtz # fill in the default value only if it is other than zero.
c0c79a3f09914f35651895ffc111883455b7f62dtz # the list handling should be a simple loop with a loop of one
c0c79a3f09914f35651895ffc111883455b7f62dtz unless ($type =~ /,/) { # if list, then generate sequence of entries
c0c79a3f09914f35651895ffc111883455b7f62dtz $type =~ s/\[\]//;
c0c79a3f09914f35651895ffc111883455b7f62dtz push (@jniLine, [$id, $dataType, $format, $enumGroup, $required]);
c0c79a3f09914f35651895ffc111883455b7f62dtz push (@jniLine, [$id, $dataType, $format, $enumGroup, $required]);
c0c79a3f09914f35651895ffc111883455b7f62dtz push (@jniLine, [$id, $dataType, $format, $enumGroup, $required]);
c0c79a3f09914f35651895ffc111883455b7f62dtz push (@jniLine, [$id, $dataType, $format, $enumGroup, $required]);
c0c79a3f09914f35651895ffc111883455b7f62dtz $xlateLine = "{$token,\t1,\t$xlateLabelRef,\t$sequence,\n" .
c0c79a3f09914f35651895ffc111883455b7f62dtz my $jniId = shift @jniId;
c0c79a3f09914f35651895ffc111883455b7f62dtz my $id = shift @id;
c0c79a3f09914f35651895ffc111883455b7f62dtz $type =~ s/\[\]//;
c0c79a3f09914f35651895ffc111883455b7f62dtz $sizeString = "$arraySize * " . $sizeString if $arraySize;
c0c79a3f09914f35651895ffc111883455b7f62dtz push (@xlateType, "\{$entryType, $sizeString ($type)\}");
c0c79a3f09914f35651895ffc111883455b7f62dtz push (@jniLine, [$jniId, $entryType, $format, $enumGroup, $required]);
c0c79a3f09914f35651895ffc111883455b7f62dtz push (@jniLine, [$jniId, $dataType, $format, $enumGroup, $required]);
c0c79a3f09914f35651895ffc111883455b7f62dtz push (@jniLine, [$jniId, $entryType, $format, $enumGroup, $required]);
c0c79a3f09914f35651895ffc111883455b7f62dtz push (@xlateType, "\{$dataType, sizeof (au_tid_addr_t *)\}");
c0c79a3f09914f35651895ffc111883455b7f62dtz push (@jniLine, [$jniId, $dataType, $format, $enumGroup, $required]);
c0c79a3f09914f35651895ffc111883455b7f62dtz my $xlateArray = "\[$typeCount\] =\t{" . join(",\n\t\t\t\t", @xlateType) . "};";
c0c79a3f09914f35651895ffc111883455b7f62dtz "{$token,\t$typeCount,\t&$xlateLabel\[0\],\t$sequence,\n" .
c0c79a3f09914f35651895ffc111883455b7f62dtz my $textList = shift;
c0c79a3f09914f35651895ffc111883455b7f62dtz next if /^\s*$/;
c0c79a3f09914f35651895ffc111883455b7f62dtz next if $value < 6000;