Пример #1
0
static inline
void check_free(alarm_handle_t h) {
    if (h->live == FALSE &&
	h->count == 0) {    
	record_free(h) ;
    }
}
Пример #2
0
int dbf_scan_next(DBF_SCAN *scan)
{
  DBF     *dbf     = scan->dbf;
  COMPARE *compare = scan->compare;
  RECORD *rec;
  int next_match = -1;

  DBUG_ENTER("dbf_scan_next");

  while(1)
  {
    if(!(rec = dbf_read_next(dbf)))
    {
      DBUG_PRINT("info", ("DBF Scan: End of file reached."));
      goto no_match;
    }
    if(!compare) goto match;
    if(compare->func(dbf_record_field(rec, scan->key), scan->value))
    {
      DBUG_PRINT("info", ("DBF Scan: Found match at record %i, %s %s %s.",
			  dbf->position-1,
			  scan->key, compare->oper, scan->value));
      goto match;
    }
    DBUG_PRINT("info", ("DBF Scan: No match at record %i.",
			dbf->position-1));
  }

 match:
  next_match = dbf->position-1;
  record_free(rec);

 no_match:
  DBUG_RETURN(scan->last = next_match);
}
Пример #3
0
int main(int argc, char **argv)
{
  FIXED *fixed;
  RECORD *record;

  DBUG_ENTER("main");
  DBUG_PROCESS(argv[0]);
  DBUG_PUSH("d:t");

  if(!(fixed = fixed_init(0)))
  {
    fprintf(stderr, "Couldn't allocate FIXED\n");
    exit(1);
  }

  fixed_options(fixed)->gap = 1;

  fixed_file_def(fixed, usps_state, 36);

  fixed_dump(fixed);

  fixed_open(fixed, argv[1], 'r');
  while(record = fixed_read_next(fixed))
  {
    record_dump(record);
    record_free(record);
  }

  fixed_close(fixed);

  fixed_free(fixed);

  DBUG_RETURN(0);
}
Пример #4
0
void free_record(void *ptr)
{
  record_free(ptr);

  /* it is not an error if we do not find the ptr in our list; we only
   * store the last N_RECORDS allocations
   */
  free(ptr);
}
Пример #5
0
void *realloc_record(void *ptr, size_t size,
		     const char *file, const char *func, int line)
{
  record_free(ptr);
  ptr = realloc(ptr, size);
  record_alloc(ptr, size, file, func, line);

  return ptr;
}
Пример #6
0
void free(void *ptr) {
  if (!ptr) return;
  struct bucket_header *header = util_ptr_to_header(ptr);
  if (header->type == BUCKET_TYPE_BLOB) {
    blob_free(header);
  } else {
    size_t index = bucket_get_index(header, ptr);
    record_free(header, index);
  }
}
Пример #7
0
void refbuf_free_help(refbuf_t rbuf) {
    refbuf_free_t rfree = rbuf->free ;
    env_t env = rbuf->env ;
    buf_t buf = rbuf->buf ;
    assert(rbuf->count == 1) ;
    assert(rbuf != &zero_rbuf) ;
    record_free(rbuf) ;
    nactive -- ;
    if (rfree) {
	rfree(env, buf) ;
    } else {
	sys_free(buf) ;
    }
}
Пример #8
0
static void free_handler(state_t s) {
    array_free(s->failed) ;
    while (!priq_empty(s->priq)) {
	item_t item ;
	priq_get(s->priq, NULL, (void**)&item) ;
	switch(item->type) {
	case DROP_UP:
	    event_free(item->u.up.event) ;
	    unmarsh_free(item->u.up.abv) ;
	    break ;
	    
	case DROP_UPNM:
	    event_free(item->u.upnm.event) ;
	    break ;
	    
	OTHERWISE_ABORT() ;
	} 
	record_free(item) ;
    }
    priq_free(s->priq) ;
}
Пример #9
0
void
database_free(database_t *database) {
  size_t i;

  if(!database) {
    return;
  }

  for(i = 0; i < array_size(database->records); i++) {
    record_free((record_t *) array_get(database->records, i));
  }

  for(i = 0; i < database->num_fields; i++) {
    free(database->fields[i]);
  }

  free(database->filename);
  free(database->fields);
  array_free(database->records);

  free(database);
}
Пример #10
0
void
test_record() {
  record_t *record;
  char fields[] = "ab\0abc\0abcd\0abcde\0ab\0c";
  uint8_t *sizes;
  size_t num_fields = 6;

  sizes = malloc(sizeof(uint8_t) * 6);

  sizes[0] = 3;
  sizes[1] = 4;
  sizes[2] = 5;
  sizes[3] = 6;
  sizes[4] = 3;
  sizes[5] = 2;

  record = record_new(num_fields, fields, sizes);

  assert_string_equal("ab", record_get_field(record, 0));
  assert_string_equal("abc", record_get_field(record, 1));
  assert_string_equal("abcd", record_get_field(record, 2));
  assert_string_equal("abcde", record_get_field(record, 3));
  assert_string_equal("ab", record_get_field(record, 4));
  assert_string_equal("c", record_get_field(record, 5));

  assert_string_equal("ab", record_get_id(record));

  assert_int_equal(2, record_field_size(record, 0));
  assert_int_equal(3, record_field_size(record, 1));
  assert_int_equal(4, record_field_size(record, 2));
  assert_int_equal(5, record_field_size(record, 3));
  assert_int_equal(2, record_field_size(record, 4));
  assert_int_equal(1, record_field_size(record, 5));

  record_free(record);
}
Пример #11
0
static void upnm_handler(state_t s, event_t e) {
    switch(event_type(e)) {
    case EVENT_FAIL:
	assert(bool_array_super(event_failures(e), s->failed, s->vs->nmembers)) ;
	bool_array_copy_into(s->failed, event_failures(e), s->vs->nmembers) ;
	upnm(s, e) ;
	break ;
	
    case EVENT_INIT:
	dnnm(s, event_timer_time(time_zero())) ;
	upnm(s, e) ;
	break ;

    case EVENT_TIMER: {
	etime_t time = event_time(e) ;
	item_t item ;
	while (priq_get_upto(s->priq, time, NULL, (void**)&item)) {
	    s->acct_delivered ++ ;
	    switch(item->type) {
	    case DROP_UP: {
		rank_t origin = event_peer(item->u.up.event) ;
		if (origin >= 0 &&
		    array_get(s->failed, origin)) {
		    up_free(item->u.up.event, item->u.up.abv) ;
		} else {
		    up(s, item->u.up.event, item->u.up.abv) ;
		}
	    } break ;

	    case DROP_UPNM:
		upnm(s, item->u.upnm.event) ;
		break ;

	    OTHERWISE_ABORT() ;
	    }
	    record_free(item) ;
	}

	if (time_ge(time, s->next_sweep)) {
	    if (!time_is_zero(s->next_sweep) &&
		sys_random(5) == 1) {
		rank_t i ;
		bool_array_t suspects = bool_array_create_init(s->vs->nmembers, FALSE) ;

		for(i=0;i<s->vs->nmembers;i++) {
		    if (i == s->ls->rank) {
			continue ;
		    }
		    if (sys_random(4) == 0) {
			array_set(suspects, i, TRUE) ;
		    }
		}
		if (bool_array_exists(suspects, s->vs->nmembers)) {
		    dnnm(s, event_suspect_reason_create(suspects, name)) ;
		} else {
		    array_free(suspects) ;
		}
	    }

#if 0
	    /* Suspicions are randomly generated every 0-8 seconds.
	     */
	    s->next_sweep = time_add(time, time_of_usecs(sys_random(1<<23/*8M*/))) ;
#else
	    s->next_sweep = time_add(time, time_of_usecs(sys_random(1<<20/*1M*/))) ;
#endif
	    dnnm(s, event_timer_time(s->next_sweep)) ; /* request next sweep */
	}
	upnm(s, e) ;
    } break ; 
	
    case EVENT_GOSSIP_EXT: {
	/*endpt_id_t origin = NULL ;*/
	etime_t delay ;
/*
	let origin =
      	getExtender (function
	  | HealGos(_,(_,endpt),_,_) -> Some (Some endpt)
	  | SwitchGos(_,(_,endpt),_) -> Some (Some endpt)
	  | _ -> None
        ) None ev 
      in
*/
	if (1 /*!origin*/) {
	    upnm(s, e) ;
	} else if (s->partition) {
	    sys_abort() ;
	} else if (!distrib(s, &delay)) {
	    event_free(e) ;
	} else {
	    /* Deliver after a certain delay....
	     */
	    etime_t when = time_add(alarm_gettime(s->alarm), delay) ;
	    item_t item = record_create(item_t, item) ;
	    item->type = DROP_UPNM ;
	    item->u.upnm.event = e ;
	    priq_add(s->priq, when, item) ;
	    dnnm(s, event_timer_time(when)) ;
	}
    } break ;

    case EVENT_ACCOUNT:
	log(("delivered=%d dropped=%d", s->acct_delivered, s->acct_dropped)) ;
	upnm(s, e) ;
	break ;

    EVENT_DUMP_HANDLE() ;

    default:
	upnm(s, e) ;
	break ;
    }
}
Пример #12
0
    int
main(int argc, const char *argv[])
{
    int             i;
    Record*         rec;
    int             code_return;
    int             tags_type = 0;
    int             db_type = 0;

    /* zero global */
    memset(&global, 0, sizeof(global));

    i = 0;
    global.tags_type_infos[i].name = "ctags";
    global.tags_type_infos[i].func_read_one_record =
        tags_ctags_read_one_record;
    ++ i;
#ifdef ENABLED_GCCXML
    global.tags_type_infos[i].name = "gccxml";
    global.tags_type_infos[i].func_read_one_record =
        tags_gccxml_read_one_record;
#endif

    global.db_type_infos[0].name = "sqlite3";
    global.db_type_infos[0].func_initialize = db_sqlite3_initialize;
    global.db_type_infos[0].func_write_one_record =
        db_sqlite3_write_one_record;
    global.db_type_infos[0].func_finalize = db_sqlite3_finalize;

    /* default field name prefix is "tags2db_" */
    global.output_db_object.field_prefix = "tags2db_";

    /* parse argument */
    {
        bool     tags_file_name_flag = false; /* indicates it's "-f" switch */
        /* indicates tags file name has already been specified */
        bool     tags_file_name_already_specified_flag = false;
        bool     tags_type_flag = false;
        bool     db_type_flag = false;
        bool     db_field_prefix_flag = false; /* -p or --prefix */

        for(i = 1; i < argc; ++i)
        {
            if(tags_file_name_flag)
            {
                tags_file_name_flag = false;

                if(!strcmp(argv[i], "-"))
                    global.input_tag_object.input_tag_file = stdin;
                else
                {
                    global.input_tag_object.input_tag_file = fopen(
                            argv[i], "r");
                    
                    if(!global.input_tag_object.input_tag_file)
                    {
                        perror("Unable to open the tag file");
                        exit(1);
                    }
                }

                tags_file_name_already_specified_flag = true;

            }
            else if(tags_type_flag)
            {
                int     j;

                tags_type_flag = false;

                /* 
                 * Check whether the specified tags type is available. If not
                 * available, print an error message and exit.
                 */
                tags_type = -1;

                for(j = 0; j < TAGS_TYPE_INFO_COUNT; ++ j)
                {
                    if(!strcmp(global.tags_type_infos[j].name, argv[i]))
                    {
                        tags_type = j;
                        break;
                    }
                }

                if(tags_type == -1)
                {
                    fprintf(stderr, "Tags type \"");
                    fprintf(stderr, argv[i]);
                    fprintf(stderr, "\" is not available.\n");
                    exit(5);
                }
            }
            else if(db_type_flag)
            {
                int     j;

                db_type_flag = false;

                /* 
                 * Check whether the specified tags type is available. If not
                 * available, print an error message and exit.
                 */
                db_type = -1;

                for(j = 0; j < DB_TYPE_INFO_COUNT; ++ j)
                {
                    if(!strcmp(global.db_type_infos[j].name, argv[i]))
                    {
                        db_type = j;
                        break;
                    }
                }

                if(db_type == -1)
                {
                    fprintf(stderr, "Database type \"");
                    fprintf(stderr, argv[i]);
                    fprintf(stderr, "\" is not available.\n");
                    exit(6);
                }
            }
            else if(db_field_prefix_flag)
            {
                db_field_prefix_flag = false;

                global.output_db_object.field_prefix = argv[i];
            }
            else if(!strcmp(argv[i], "-t"))
                tags_type_flag = true;
            else if(!strcmp(argv[i], "-d"))
                db_type_flag = true;
            else if(!strcmp(argv[i], "-f"))
                tags_file_name_flag = true;
            else if((!strcmp(argv[i], "-p")) ||
                    (!strcmp(argv[i], "--prefix")))
            {
                db_field_prefix_flag = true;
            }
            else if((!strcmp(argv[i], "-h")) || (!strcmp(argv[i], "--help")))
            {
                print_help_string();
                exit(0);
            }
            else if(!strcmp(argv[i], "--version"))
            {
                fprintf(stdout, get_version_string());
                exit(0);
            }
            else if(strlen(argv[i]) > 0 && argv[i][0] == '-')
            {
                fprintf(stderr, "Uknown option \"");
                fprintf(stderr, argv[i]);
                fprintf(stderr, "\"\n");
                exit(7);
            }
            else /* when no "-" siwtch is specified */
            {
                if(tags_file_name_already_specified_flag)
                    global.output_db_object.connection_string = strdup(
                            argv[i]);
                else
                {
                    -- i;
                    tags_file_name_flag = true;
                }
            }
        }
    }

    if(!global.input_tag_object.input_tag_file)
    {
        fprintf(stderr, "Input tag file is not specified.\n");
        exit(2);
    }

    if(!global.output_db_object.connection_string)
    {
        fprintf(stderr, "Out file path is not specified.\n");
        exit(3);
    }

    if((code_return = (*global.db_type_infos[db_type].func_initialize) (
                    &global.output_db_object)) != 0)
    {
        fprintf(stderr, "Failed to initialize sqlite3: %d\n", code_return);
        exit(4);
    }

    rec = (*global.tags_type_infos[tags_type].func_read_one_record) (
            &global.input_tag_object);

    while(rec)
    {
        if((code_return =
                    (*global.db_type_infos[db_type].func_write_one_record) (
                        &global.output_db_object, rec)) != 0)
        {
            fprintf(stderr, "Failed to write to sqlite3 database: %d\n",
                    code_return);
            break;
        }
        record_free(rec);
        rec = (*global.tags_type_infos[tags_type].func_read_one_record) (
                &global.input_tag_object);
    }

    if((code_return = (*global.db_type_infos[db_type].func_finalize) (
                    &global.output_db_object)) != 0)
    {
        fprintf(stderr, "Failed to finalize the sqlite3 database: %d\n",
                code_return);
    }
    /* close the tag file */
    fclose(global.input_tag_object.input_tag_file);

    return 0;
}
Пример #13
0
void iq_free(iq_t iq) {
    iq_set_lo(iq, iq->hi) ;
    sys_free(iq->arr) ;
    record_free(iq) ;
}
Пример #14
0
void equeue_free(equeue_t q) {
    sys_free(q->arr) ;
    record_free(q) ;
}