Пример #1
0
/* Create a result map object. */
RESMAP *resmap_new(void){
  RESMAP *resmap;
  resmap = cbmalloc(sizeof(RESMAP));
  resmap->uris = cbmapopen();
  pthread_mutex_init(&(resmap->mutex), NULL);
  return resmap;
}
Пример #2
0
/* Create a read-write lock object. */
RWLOCK *rwlock_new(void){
  RWLOCK *rwlock;
  rwlock = cbmalloc(sizeof(RWLOCK));
  rwlock->readers = 0;
  rwlock->writers = 0;
  pthread_mutex_init(&(rwlock->mutex), NULL);
  pthread_cond_init(&(rwlock->cond), NULL);
  return rwlock;
}
Пример #3
0
/* Create a user manager object. */
UMGR *umgr_new(const char *rootdir){
  UMGR *umgr;
  assert(rootdir);
  log_print(LL_INFO, "starting the user manager");
  umgr = cbmalloc(sizeof(UMGR));
  umgr->rootdir = cbmemdup(rootdir, -1);
  umgr->users = cbmapopen();
  return umgr;
}
Пример #4
0
/* Create a node manager object. */
NMGR *nmgr_new(const char *rootdir){
  NMGR *nmgr;
  assert(rootdir);
  log_print(LL_INFO, "starting the node manager");
  nmgr = cbmalloc(sizeof(NMGR));
  nmgr->rootdir = cbmemdup(rootdir, -1);
  nmgr->nodes = cbmapopenex(MINIBNUM);
  nmgr->aidxs = cbmapopenex(MINIBNUM);
  return nmgr;
}
Пример #5
0
/* get a map of the CGI parameters */
CBMAP *getparams(void){
  CBMAP *params;
  CBLIST *pairs;
  char *rbuf, *buf, *key, *val, *dkey, *dval;
  const char *tmp;
  int i, len, c;
  params = cbmapopen();
  rbuf = NULL;
  buf = NULL;
  if((tmp = getenv("CONTENT_LENGTH")) != NULL && (len = atoi(tmp)) > 0 && len <= RDATAMAX){
    rbuf = cbmalloc(len + 1);
    for(i = 0; i < len && (c = getchar()) != EOF; i++){
      rbuf[i] = c;
    }
    rbuf[i] = '\0';
    if(i == len) buf = rbuf;
  } else {
    buf = getenv("QUERY_STRING");
  }
  if(buf != NULL){
    buf = cbmemdup(buf, -1);
    pairs = cbsplit(buf, -1, "&");
    for(i = 0; i < cblistnum(pairs); i++){
      key = cbmemdup(cblistval(pairs, i, NULL), -1);
      if((val = strchr(key, '=')) != NULL){
        *(val++) = '\0';
        dkey = cburldecode(key, NULL);
        dval = cburldecode(val, NULL);
        cbmapput(params, dkey, -1, dval, -1, FALSE);
        free(dval);
        free(dkey);
      }
      free(key);
    }
    cblistclose(pairs);
    free(buf);
  }
  free(rbuf);
  return params;
}
Пример #6
0
/* search_meta */
JNIEXPORT jobject JNICALL
Java_estraier_Database_search_1meta(JNIEnv *env, jclass cls, jobjectArray dbary, jobject cond){
  jfieldID fid;
  jmethodID mid;
  jobject dbobj, hintsobj, resobj;
  jlong coreptr, condptr;
  jintArray resary, idxary;
  jint *resaryptr, *idxaryptr;
  jboolean icresary, icidxary;
  ESTMTDB **dbs;
  CBMAP *hints;
  int i, dbnum, *res, rnum;
  fid = (*env)->GetFieldID(env, cls, "coreptr", "J");
  if(!dbary || !cond || !isinstanceof(env, cond, CLSCOND)){
    throwillarg(env);
    return NULL;
  }
  dbnum = (int)((*env)->GetArrayLength(env, dbary));
  dbs = cbmalloc(dbnum * sizeof(ESTMTDB) + 1);
  for(i = 0; i < dbnum; i++){
    dbobj = (*env)->GetObjectArrayElement(env, dbary, i);
    if(!dbobj || !isinstanceof(env, dbobj, CLSDB)){
      throwillarg(env);
      return NULL;
    }
    coreptr = (*env)->GetLongField(env, dbobj, fid);
    if(coreptr == 0){
      throwillarg(env);
      return NULL;
    }
    dbs[i] = (ESTMTDB *)(PTRNUM)coreptr;
  }
  cls = (*env)->GetObjectClass(env, cond);
  fid = (*env)->GetFieldID(env, cls, "coreptr", "J");
  condptr = (*env)->GetLongField(env, cond, fid);
  hints = cbmapopen();
  res = est_mtdb_search_meta(dbs, dbnum, (ESTCOND *)(PTRNUM)condptr, &rnum, hints);
  if(!(resary = (*env)->NewIntArray(env, rnum / 2))){
    throwoutmem(env);
    return NULL;
  }
  resaryptr = (*env)->GetIntArrayElements(env, resary, &icresary);
  for(i = 0; i < rnum; i += 2){
    resaryptr[i/2] = res[i+1];
  }
  if(icresary == JNI_TRUE) (*env)->ReleaseIntArrayElements(env, resary, resaryptr, 0);
  if(!(idxary = (*env)->NewIntArray(env, rnum / 2))){
    throwoutmem(env);
    return NULL;
  }
  idxaryptr = (*env)->GetIntArrayElements(env, idxary, &icidxary);
  for(i = 0; i < rnum; i += 2){
    idxaryptr[i/2] = res[i];
  }
  if(icidxary == JNI_TRUE) (*env)->ReleaseIntArrayElements(env, idxary, idxaryptr, 0);
  cls = (*env)->FindClass(env, CLSRES);
  mid = (*env)->GetMethodID(env, cls, "<init>", "([I[IL" CLSMAP ";J)V");
  hintsobj = cbmaptoobj(env, hints);
  if(!(resobj = (*env)->NewObject(env, cls, mid, resary, idxary, hintsobj,
                                  (PTRNUM)est_cond_dup((ESTCOND *)(PTRNUM)condptr)))){
    throwoutmem(env);
    return NULL;
  }
  free(res);
  cbmapclose(hints);
  return resobj;
}