Esempio n. 1
0
/*
 * List all groups known by the system.
 */
JNIEXPORT jobjectArray JNICALL GEN_FUNCNAME(Context_NativeListReaderGroups)
(JNIEnv *env, jobject _this)
{
    jobjectArray result;
    SCARDCONTEXT ctx;
    char *mszGroups;
    LONG rv;
    DWORD sz;

    ctx = (SCARDCONTEXT) (*env)->GetLongField(env, _this, CtxField);
    rv = SCardListReaderGroups(ctx, NULL, &sz);
    if (rv != SCARD_S_SUCCESS) {
        pcscex_throw(env, "SCardListGroups", rv);
        return NULL;
    }

    mszGroups = (char *)malloc(sz);
    assert(mszGroups);

    rv = SCardListReaderGroups(ctx, mszGroups, &sz);

    if (rv != SCARD_S_SUCCESS) {
        free(mszGroups);
        pcscex_throw(env, "SCardListGroups()", rv);
        return NULL;
    }

    result = pcsc_multi2jstring(env, mszGroups, "SCardListReaderGroups(): too many reader groups");
    free(mszGroups);
    return result;
}
Esempio n. 2
0
File: pcsc.c Progetto: lmsf/jdk9-dev
JNIEXPORT jobjectArray JNICALL Java_sun_security_smartcardio_PCSC_SCardListReaders
    (JNIEnv *env, jclass thisClass, jlong jContext)
{
    SCARDCONTEXT context = (SCARDCONTEXT)jContext;
    LONG rv;
    LPTSTR mszReaders = NULL;
    DWORD size = 0;
    jobjectArray result;

    dprintf1("-context: %x\n", context);
    rv = CALL_SCardListReaders(context, NULL, NULL, &size);
    if (handleRV(env, rv)) {
        return NULL;
    }
    dprintf1("-size: %d\n", size);

    if (size) {
        mszReaders = malloc(size);
        if (mszReaders == NULL) {
            throwOutOfMemoryError(env, NULL);
            return NULL;
        }

        rv = CALL_SCardListReaders(context, NULL, mszReaders, &size);
        if (handleRV(env, rv)) {
            free(mszReaders);
            return NULL;
        }
        dprintf1("-String: %s\n", mszReaders);
    }

    result = pcsc_multi2jstring(env, mszReaders);
    free(mszReaders);
    return result;
}
Esempio n. 3
0
/**
 * Return reader list. Given group spec may be null.
 */
jobjectArray pcsc_list_readers(JNIEnv *env, jobject _this, const char *groupSpec) {
    jobjectArray result;
    SCARDCONTEXT ctx;
    char *mszReaders;
    LONG rv;
    DWORD sz;

    ctx = (SCARDCONTEXT) (*env)->GetLongField(env, _this, CtxField);
    rv = SCardListReaders(ctx, groupSpec, NULL, &sz);
    if (rv != SCARD_S_SUCCESS) {
        pcscex_throw(env, "SCardListReaders", rv);
        return NULL;
    }

    mszReaders = (char *)malloc(sz);
    assert(mszReaders);

    rv = SCardListReaders(ctx, groupSpec, mszReaders, &sz);
    if (rv != SCARD_S_SUCCESS) {
        free(mszReaders);
        pcscex_throw(env, "SCardListReaders()", rv);
        return NULL;
    }

    result = pcsc_multi2jstring(env, mszReaders, "SCardListReaders(): too many physical readers");
    free(mszReaders);
    return result;
}