Esempio n. 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;
}
Esempio n. 2
0
File: qutil.c Progetto: Piro77/qupl
/* get a map of the cookie */
CBMAP *getcookie(void){
  CBMAP *params;
  CBLIST *pairs;
  char *rbuf, *buf, *key, *val, *dkey, *dval;
  int i;
  params = cbmapopen();
  rbuf = NULL;
  buf = NULL;
  buf = getenv("HTTP_COOKIE");
  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);
  }
  else {
    return NULL;
  }
  return params;
}
Esempio n. 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;
}
Esempio n. 4
0
/* search */
JNIEXPORT jobject JNICALL
Java_estraier_Database_search(JNIEnv *env, jobject obj, jobject cond){
  jclass cls;
  jfieldID fid;
  jmethodID mid;
  jlong coreptr, condptr;
  jintArray resary;
  jint *resaryptr;
  jobject hintsobj, resobj;
  jboolean icresary;
  CBMAP *hints;
  int i, *res, rnum;
  cls = (*env)->GetObjectClass(env, obj);
  fid = (*env)->GetFieldID(env, cls, "coreptr", "J");
  coreptr = (*env)->GetLongField(env, obj, fid);
  if(coreptr == 0 || !cond || !isinstanceof(env, cond, CLSCOND)){
    throwillarg(env);
    return NULL;
  }
  cls = (*env)->GetObjectClass(env, cond);
  fid = (*env)->GetFieldID(env, cls, "coreptr", "J");
  condptr = (*env)->GetLongField(env, cond, fid);
  hints = cbmapopen();
  res = est_mtdb_search((ESTMTDB *)(PTRNUM)coreptr, (ESTCOND *)(PTRNUM)condptr, &rnum, hints);
  if(!(resary = (*env)->NewIntArray(env, rnum))){
    throwoutmem(env);
    return NULL;
  }
  resaryptr = (*env)->GetIntArrayElements(env, resary, &icresary);
  for(i = 0; i < rnum; i++){
    resaryptr[i] = res[i];
  }
  if(icresary == JNI_TRUE) (*env)->ReleaseIntArrayElements(env, resary, resaryptr, 0);
  cls = (*env)->FindClass(env, CLSRES);
  mid = (*env)->GetMethodID(env, cls, "<init>", "([IL" CLSMAP ";J)V");
  hintsobj = cbmaptoobj(env, hints);
  if(!(resobj = (*env)->NewObject(env, cls, mid, resary, hintsobj,
                                  (PTRNUM)est_cond_dup((ESTCOND *)(PTRNUM)condptr)))){
    throwoutmem(env);
    return NULL;
  }
  free(res);
  cbmapclose(hints);
  return resobj;
}
Esempio n. 5
0
File: qutil.c Progetto: Piro77/qupl
/* 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;
}
Esempio n. 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;
}