/* * Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
jbyte
outStream_command(PacketOutputStream *stream)
{ /* Only makes sense for commands */
JDI_ASSERT(!(stream->packet.type.cmd.flags & JDWPTRANSPORT_FLAGS_REPLY)); return stream->packet.type.cmd.cmd;
}
if (val == NULL) {
id = NULL_OBJECT_ID;
} else { /* Convert the object to an object id */
id = commonRef_refToID(env, val); if (id == NULL_OBJECT_ID) {
stream->error = JDWP_ERROR(OUT_OF_MEMORY); return stream->error;
}
/* Track the common ref in case we need to release it on a future error */
idPtr = bagAdd(stream->ids); if (idPtr == NULL) {
commonRef_release(env, id);
stream->error = JDWP_ERROR(OUT_OF_MEMORY); return stream->error;
} else {
*idPtr = id;
}
/* Add the encoded object id to the stream */
id = HOST_TO_JAVA_LONG(id);
}
return writeBytes(stream, &id, sizeof(id));
}
jdwpError
outStream_writeFrameID(PacketOutputStream *stream, FrameID val)
{ /* * Not good - we're writing a pointer as a jint. Need * to write as a jlong if sizeof(FrameID) == 8.
*/ if (sizeof(FrameID) == 8) { /*LINTED*/ return outStream_writeLong(stream, (jlong)val);
} else { /*LINTED*/ return outStream_writeInt(stream, (jint)val);
}
}
jdwpError
outStream_writeMethodID(PacketOutputStream *stream, jmethodID val)
{ /* * Not good - we're writing a pointer as a jint. Need * to write as a jlong if sizeof(jmethodID) == 8.
*/ if (sizeof(jmethodID) == 8) { /*LINTED*/ return outStream_writeLong(stream, (jlong)(intptr_t)val);
} else { /*LINTED*/ return outStream_writeInt(stream, (jint)(intptr_t)val);
}
}
jdwpError
outStream_writeFieldID(PacketOutputStream *stream, jfieldID val)
{ /* * Not good - we're writing a pointer as a jint. Need * to write as a jlong if sizeof(jfieldID) == 8.
*/ if (sizeof(jfieldID) == 8) { /*LINTED*/ return outStream_writeLong(stream, (jlong)(intptr_t)val);
} else { /*LINTED*/ return outStream_writeInt(stream, (jint)(intptr_t)val);
}
}
/* * If there's only 1 segment then we just send the * packet.
*/ if (stream->firstSegment.next == NULL) {
stream->packet.type.cmd.len = JDWP_HEADER_SIZE + stream->firstSegment.length;
stream->packet.type.cmd.data = stream->firstSegment.data;
rc = transport_sendPacket(&stream->packet); return rc;
}
/* * Multiple segments
*/
len = 0;
segment = (PacketData *)&(stream->firstSegment); do {
len += segment->length;
segment = segment->next;
} while (segment != NULL);
data = jvmtiAllocate(len); if (data == NULL) { return JDWP_ERROR(OUT_OF_MEMORY);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.