| Index: utils/archive/dart_archive.c
|
| diff --git a/utils/archive/dart_archive.c b/utils/archive/dart_archive.c
|
| deleted file mode 100644
|
| index da284a6cb3fa9a7e5182947e15bededdae5fc4a8..0000000000000000000000000000000000000000
|
| --- a/utils/archive/dart_archive.c
|
| +++ /dev/null
|
| @@ -1,415 +0,0 @@
|
| -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -#include <assert.h>
|
| -#include <errno.h>
|
| -#include <stdlib.h>
|
| -#include <string.h>
|
| -
|
| -#include "dart_archive.h"
|
| -#include "entry.h"
|
| -#include "messaging.h"
|
| -#include "reader.h"
|
| -
|
| -/** The enumeration of request types for communicating with Dart. */
|
| -enum RequestType {
|
| - kArchiveReadNew = 0,
|
| - kArchiveReadSupportFilterAll,
|
| - kArchiveReadSupportFilterBzip2,
|
| - kArchiveReadSupportFilterCompress,
|
| - kArchiveReadSupportFilterGzip,
|
| - kArchiveReadSupportFilterLzma,
|
| - kArchiveReadSupportFilterXz,
|
| - kArchiveReadSupportFilterProgram,
|
| - kArchiveReadSupportFilterProgramSignature,
|
| - kArchiveReadSupportFormatAll,
|
| - kArchiveReadSupportFormatAr,
|
| - kArchiveReadSupportFormatCpio,
|
| - kArchiveReadSupportFormatEmpty,
|
| - kArchiveReadSupportFormatIso9660,
|
| - kArchiveReadSupportFormatMtree,
|
| - kArchiveReadSupportFormatRaw,
|
| - kArchiveReadSupportFormatTar,
|
| - kArchiveReadSupportFormatZip,
|
| - kArchiveReadSetFilterOption,
|
| - kArchiveReadSetFormatOption,
|
| - kArchiveReadSetOption,
|
| - kArchiveReadOpenFilename,
|
| - kArchiveReadOpenMemory,
|
| - kArchiveReadNextHeader,
|
| - kArchiveReadDataBlock,
|
| - kArchiveReadDataSkip,
|
| - kArchiveReadClose,
|
| - kArchiveReadFree,
|
| - kArchiveEntryClone,
|
| - kArchiveEntryFree,
|
| - kArchiveEntryNew,
|
| - kArchiveEntrySetHardlink,
|
| - kArchiveEntrySetPathname,
|
| - kArchiveEntrySetSymlink,
|
| - kArchiveEntrySetGid,
|
| - kArchiveEntrySetUid,
|
| - kArchiveEntrySetPerm,
|
| - kArchiveEntrySetGname,
|
| - kArchiveEntrySetUname,
|
| - kArchiveEntrySetFflagsSet,
|
| - kArchiveEntrySetFflagsClear,
|
| - kArchiveEntrySetFflagsText,
|
| - kArchiveEntrySetFiletype,
|
| - kArchiveEntrySetMode,
|
| - kArchiveEntrySetSize,
|
| - kArchiveEntrySetDev,
|
| - kArchiveEntrySetDevmajor,
|
| - kArchiveEntrySetDevminor,
|
| - kArchiveEntrySetIno,
|
| - kArchiveEntrySetNlink,
|
| - kArchiveEntrySetRdev,
|
| - kArchiveEntrySetRdevmajor,
|
| - kArchiveEntrySetRdevminor,
|
| - kArchiveEntrySetAtime,
|
| - kArchiveEntrySetBirthtime,
|
| - kArchiveEntrySetCtime,
|
| - kArchiveEntrySetMtime,
|
| - kNumberOfRequestTypes
|
| -};
|
| -
|
| -/**
|
| - * Dispatches a message from Dart to its native function equivalent.
|
| - *
|
| - * In addition to matching up a message with its respective function, this
|
| - * parses out the standard archive struct argument from the message and resolves
|
| - * it to an actual pointer to an archive struct.
|
| - */
|
| -static void archiveDispatch(Dart_Port dest_port_id,
|
| - Dart_Port reply_port_id,
|
| - Dart_CObject* message) {
|
| - if (message->type != kArray) {
|
| - postInvalidArgument(reply_port_id, "Message was not an array.");
|
| - return;
|
| - } else if (message->value.as_array.length < 2) {
|
| - postInvalidArgument(reply_port_id, "Message array had %d elements, " \
|
| - "expected at least 2.", message->value.as_array.length);
|
| - return;
|
| - }
|
| -
|
| - Dart_CObject* wrapped_request_type = message->value.as_array.values[0];
|
| - if (wrapped_request_type->type != kInt32) {
|
| - postInvalidArgument(reply_port_id, "Invalid request type %d.",
|
| - wrapped_request_type->type);
|
| - return;
|
| - }
|
| - enum RequestType request_type = wrapped_request_type->value.as_int32;
|
| -
|
| - Dart_CObject* id = message->value.as_array.values[1];
|
| - void* ptr;
|
| - if (id->type == kNull) {
|
| - ptr = NULL;
|
| - } else if (id->type == kInt64 || id->type == kInt32) {
|
| - ptr = (void*) (intptr_t) getInteger(id);
|
| - } else {
|
| - postInvalidArgument(reply_port_id, "Invalid id type %d.", id->type);
|
| - return;
|
| - }
|
| -
|
| - switch (request_type) {
|
| - case kArchiveReadNew:
|
| - archiveReadNew(reply_port_id);
|
| - break;
|
| - case kArchiveReadSupportFilterAll:
|
| - archiveReadSupportFilterAll(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSupportFilterBzip2:
|
| - archiveReadSupportFilterBzip2(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSupportFilterCompress:
|
| - archiveReadSupportFilterCompress(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSupportFilterGzip:
|
| - archiveReadSupportFilterGzip(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSupportFilterLzma:
|
| - archiveReadSupportFilterLzma(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSupportFilterXz:
|
| - archiveReadSupportFilterXz(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSupportFilterProgram:
|
| - archiveReadSupportFilterProgram(
|
| - reply_port_id, (struct archive*) ptr, message);
|
| - break;
|
| - case kArchiveReadSupportFilterProgramSignature:
|
| - archiveReadSupportFilterProgramSignature(
|
| - reply_port_id, (struct archive*) ptr, message);
|
| - break;
|
| - case kArchiveReadSupportFormatAll:
|
| - archiveReadSupportFormatAll(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSupportFormatAr:
|
| - archiveReadSupportFormatAr(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSupportFormatCpio:
|
| - archiveReadSupportFormatCpio(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSupportFormatEmpty:
|
| - archiveReadSupportFormatEmpty(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSupportFormatIso9660:
|
| - archiveReadSupportFormatIso9660(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSupportFormatMtree:
|
| - archiveReadSupportFormatMtree(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSupportFormatRaw:
|
| - archiveReadSupportFormatRaw(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSupportFormatTar:
|
| - archiveReadSupportFormatTar(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSupportFormatZip:
|
| - archiveReadSupportFormatZip(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadSetFilterOption:
|
| - archiveReadSetFilterOption(reply_port_id, (struct archive*) ptr, message);
|
| - break;
|
| - case kArchiveReadSetFormatOption:
|
| - archiveReadSetFormatOption(reply_port_id, (struct archive*) ptr, message);
|
| - break;
|
| - case kArchiveReadSetOption:
|
| - archiveReadSetOption(reply_port_id, (struct archive*) ptr, message);
|
| - break;
|
| - case kArchiveReadOpenFilename:
|
| - archiveReadOpenFilename(reply_port_id, (struct archive*) ptr, message);
|
| - break;
|
| - case kArchiveReadOpenMemory:
|
| - archiveReadOpenMemory(reply_port_id, (struct archive*) ptr, message);
|
| - break;
|
| - case kArchiveReadNextHeader:
|
| - archiveReadNextHeader(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadDataBlock:
|
| - archiveReadDataBlock(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadDataSkip:
|
| - archiveReadDataSkip(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadClose:
|
| - archiveReadClose(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveReadFree:
|
| - archiveReadFree(reply_port_id, (struct archive*) ptr);
|
| - break;
|
| - case kArchiveEntryClone:
|
| - archiveEntryClone(reply_port_id, (struct archive_entry*) ptr);
|
| - break;
|
| - case kArchiveEntryFree:
|
| - archiveEntryFree(reply_port_id, (struct archive_entry*) ptr);
|
| - break;
|
| - case kArchiveEntryNew:
|
| - archiveEntryNew(reply_port_id);
|
| - break;
|
| - case kArchiveEntrySetHardlink:
|
| - archiveEntrySetHardlink(
|
| - reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetPathname:
|
| - archiveEntrySetPathname(
|
| - reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetSymlink:
|
| - archiveEntrySetSymlink(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetGid:
|
| - archiveEntrySetGid(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetUid:
|
| - archiveEntrySetUid(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetPerm:
|
| - archiveEntrySetPerm(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetGname:
|
| - archiveEntrySetGname(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetUname:
|
| - archiveEntrySetUname(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetFflagsSet:
|
| - archiveEntrySetFflagsSet(
|
| - reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetFflagsClear:
|
| - archiveEntrySetFflagsClear(
|
| - reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetFiletype:
|
| - archiveEntrySetFiletype(
|
| - reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetMode:
|
| - archiveEntrySetMode(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetSize:
|
| - archiveEntrySetSize(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetDev:
|
| - archiveEntrySetDev(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetDevmajor:
|
| - archiveEntrySetDevmajor(
|
| - reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetDevminor:
|
| - archiveEntrySetDevminor(
|
| - reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetIno:
|
| - archiveEntrySetIno(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetNlink:
|
| - archiveEntrySetNlink(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetRdev:
|
| - archiveEntrySetRdev(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetRdevmajor:
|
| - archiveEntrySetRdevmajor(
|
| - reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetRdevminor:
|
| - archiveEntrySetRdevminor(
|
| - reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetAtime:
|
| - archiveEntrySetAtime(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetBirthtime:
|
| - archiveEntrySetBirthtime(
|
| - reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetCtime:
|
| - archiveEntrySetCtime(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - case kArchiveEntrySetMtime:
|
| - archiveEntrySetMtime(reply_port_id, (struct archive_entry*) ptr, message);
|
| - break;
|
| - default:
|
| - postInvalidArgument(reply_port_id, "Invalid request id %d.", request_type);
|
| - break;
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Checks if [handle] represents an error and, if so, propagates it to Dart.
|
| - * Otherwise, returns [handle].
|
| - */
|
| -static Dart_Handle handleError(Dart_Handle handle) {
|
| - if (Dart_IsError(handle)) Dart_PropagateError(handle);
|
| - return handle;
|
| -}
|
| -
|
| -/**
|
| - * A function exposed to Dart that creates a [ServicePort] for two-way
|
| - * communication between Dart and C.
|
| - *
|
| - * Takes no arguments and returns a [ServicePort].
|
| - */
|
| -static void archiveServicePort(Dart_NativeArguments arguments) {
|
| - Dart_EnterScope();
|
| - Dart_SetReturnValue(arguments, Dart_Null());
|
| - Dart_Port service_port =
|
| - Dart_NewNativePort("ArchiveService", archiveDispatch, false);
|
| - if (service_port != ILLEGAL_PORT) {
|
| - Dart_Handle send_port = handleError(Dart_NewSendPort(service_port));
|
| - Dart_SetReturnValue(arguments, send_port);
|
| - }
|
| - Dart_ExitScope();
|
| -}
|
| -
|
| -/**
|
| - * The C callback that runs the Dart finalizer for an object. Set up by
|
| - * [attachDartFinalizer]. [handle] is the object that's been collected, and
|
| - * [peerPtr] is a Dart list containing the callback and its argument.
|
| - */
|
| -static void runDartFinalizer(Dart_Handle handle, void* peerPtr) {
|
| - Dart_EnterScope();
|
| - Dart_Handle wrappedPeer = (Dart_Handle) peerPtr;
|
| - Dart_Handle callback = handleError(Dart_ListGetAt(wrappedPeer, 0));
|
| - Dart_Handle peer = handleError(Dart_ListGetAt(wrappedPeer, 1));
|
| -
|
| - handleError(Dart_InvokeClosure(callback, 1, &peer));
|
| - Dart_DeletePersistentHandle(wrappedPeer);
|
| - Dart_ExitScope();
|
| -}
|
| -
|
| -/**
|
| - * Attaches a finalizer callback to a Dart object.
|
| - *
|
| - * This takes a Dart object, a callback function, and an argument to pass to the
|
| - * callback function. The callback will be called with the given argument some
|
| - * time after the object has been garbage collected.
|
| - */
|
| -static void attachDartFinalizer(Dart_NativeArguments arguments) {
|
| - Dart_EnterScope();
|
| - Dart_SetReturnValue(arguments, Dart_Null());
|
| - Dart_Handle object = handleError(Dart_GetNativeArgument(arguments, 0));
|
| - Dart_Handle callback = handleError(Dart_GetNativeArgument(arguments, 1));
|
| - Dart_Handle peer = handleError(Dart_GetNativeArgument(arguments, 2));
|
| -
|
| - Dart_Handle wrappedPeer = handleError(Dart_NewList(2));
|
| - handleError(Dart_ListSetAt(wrappedPeer, 0, callback));
|
| - handleError(Dart_ListSetAt(wrappedPeer, 1, peer));
|
| - wrappedPeer = handleError(Dart_NewPersistentHandle(wrappedPeer));
|
| -
|
| - handleError(Dart_NewWeakPersistentHandle(
|
| - object, wrappedPeer, runDartFinalizer));
|
| - Dart_ExitScope();
|
| -}
|
| -
|
| -/**
|
| - * A struct representing a function exposed to Dart and the name under which it
|
| - * can be looked up.
|
| - */
|
| -struct FunctionLookup {
|
| - const char* name;
|
| - Dart_NativeFunction function;
|
| -};
|
| -
|
| -/** The list of functions exposed to Dart. */
|
| -struct FunctionLookup function_list[] = {
|
| - {"Archive_ServicePort", archiveServicePort},
|
| - {"Archive_AttachFinalizer", attachDartFinalizer},
|
| - {NULL, NULL}
|
| -};
|
| -
|
| -/**
|
| - * Resolves a Dart name as provided in a `native` declaration and returns the
|
| - * C function that should be invoked for that name.
|
| - */
|
| -static Dart_NativeFunction resolveName(Dart_Handle name, int argc) {
|
| - if (!Dart_IsString8(name)) return NULL;
|
| - Dart_EnterScope();
|
| - const char* cname;
|
| - handleError(Dart_StringToCString(name, &cname));
|
| -
|
| - Dart_NativeFunction result = NULL;
|
| - int i;
|
| - for (i = 0; function_list[i].name != NULL; ++i) {
|
| - if (strcmp(function_list[i].name, cname) == 0) {
|
| - result = function_list[i].function;
|
| - break;
|
| - }
|
| - }
|
| - Dart_ExitScope();
|
| - return result;
|
| -}
|
| -
|
| -/** Initializes the C extension. */
|
| -DART_EXPORT Dart_Handle dart_archive_Init(Dart_Handle parent_library) {
|
| - if (Dart_IsError(parent_library)) return parent_library;
|
| -
|
| - Dart_Handle result_code = Dart_SetNativeResolver(parent_library, resolveName);
|
| - if (Dart_IsError(result_code)) return result_code;
|
| -
|
| - return Dart_Null();
|
| -}
|
|
|