/* convert a hash dictionary encoding to a dictionary array encoding */ robj *cowHashCopy(robj *val) { robj *newval = createHashObject(); if (val->encoding == REDIS_ENCODING_ZIPMAP) { size_t bytes; redisLog(REDIS_NOTICE, "cowHashCopy REDIS_ENCODING_ZIPMAP"); /* do raw memory copy */ bytes = zipmapBlobLen(val->ptr); newval->ptr = zrealloc(newval->ptr, bytes); memcpy(newval->ptr, val->ptr, bytes); return newval; } else if (val->encoding == REDIS_ENCODING_HT) { dict *olddict = (dict *)val->ptr; cowDictArray *dar; redisLog(REDIS_NOTICE, "cowHashCopy REDIS_ENCODING_HT"); dar = cowConvertDictToArray(olddict); newval = createObject(REDIS_HASH, dar); newval->encoding = REDIS_ENCODING_HTARRAY; return newval; } else { /* error. unexpected encoding */ return NULL; } return NULL; }
robj* hashTypeLookupWriteElseCreate(caller_t *c, robj *key) { robj *o = lookupKeyWrite(c->db,key); if (o == NULL) { o = createHashObject(); dbAdd(c->db,key,o); } else { if (o->type != REDIS_HASH) { caller_set_err(c, ERR_TYPE); return NULL; } } return o; }
robj *createCollectionObject(int type) { switch(type) { case OBJ_HASH: return createHashObject(); case OBJ_HEAPQ: return createHeapqObject(); case OBJ_FTS: return createFTSObject(); default: rr_log(RR_LOG_ERROR, "Wrong type"); return NULL; break; } }
FILE* uploadAndRunFile() { FILE *fp; char * input = (char*)malloc(sizeof(char)*MAX_INPUT_LENGTH); char * line = (char*)malloc(sizeof(char)*MAX_INPUT_LENGTH); char * token; HashObjectPtr extraJob; char delims[] = ",.;:\"&!? -_\n\t\r@()#$%^*+={}[]|<>/~`"; printf("%s\n", "Please enter the path to the file\n\n"); fgets(input, MAX_INPUT_LENGTH, stdin); int j = 0; for (; j < strlen(input); j++) { if (input[j] == '\n') { input[j] = '\0'; break; } } fp = fopen(input, "r+"); if (fp != NULL) { while(!feof(fp)) { fgets(line, MAX_INPUT_LENGTH, fp); if (strtok(line, delims) != NULL) { token = strtok(line, delims); extraJob = createHashObject(token); HashInsert(table, extraJob); while (token != NULL) { token = strtok(NULL, delims); if (token != NULL) { token = strtok(NULL, delims); if (table->maxChainReached) { HashTablePtr oldTable = table; table = resizeHashTable(table); FreeHashTable(oldTable); } HashObjectPtr job = createHashObject(token); HashInsert(table, job); } } } } fclose(fp); free(input); free(line); return fp; } else { printf("%s\n", "That path was invalid, please try again\n\n"); printOptions(); free(input); free(line); return NULL; } }