void TestEmanualCmd::initTestCase()
{
    
    remove(Config::Instance()->getTestDbName().c_str());
    initdb();
    dummy_db();
}
Beispiel #2
0
END_TEST

START_TEST(rebuilddbtotal_rebuilds_total)
{
	int i;

	initdb();
	suppress_output();
	disable_logprints();
	cfg.flock = 1;
	strcpy(data.interface, "ethtest");
	strcpy(data.nick, "ethtest");
	data.totalrx = 1234;
	data.totaltx = 1234;
	for (i=0; i<12; i++) {
		data.month[i].rx = 1;
		data.month[i].tx = 2;
		data.month[i].used = 1;
	}

	ck_assert_int_eq(clean_testdbdir(), 1);
	ck_assert_int_eq(writedb("ethtest", TESTDBDIR, 1), 1);

	rebuilddbtotal("ethtest", TESTDBDIR);

	ck_assert_int_eq(check_dbfile_exists("ethtest", sizeof(DATA)), 1);
	ck_assert_int_eq(check_dbfile_exists(".ethtest", sizeof(DATA)), 1);
	ck_assert_int_eq(data.totalrx, 12);
	ck_assert_int_eq(data.totaltx, 24);
}
Beispiel #3
0
END_TEST

START_TEST(rotatemonths_really_rotates_months)
{
	int i;
	initdb();
	for (i=0; i<12; i++) {
		ck_assert_int_eq(data.month[i].rx, 0);
		ck_assert_int_eq(data.month[i].tx, 0);
		ck_assert_int_eq(data.month[i].rxk, 0);
		ck_assert_int_eq(data.month[i].txk, 0);
	}
	data.month[0].rx = data.month[0].tx = 1;
	data.month[0].rxk = data.month[0].txk = 1;
	data.month[0].month = 1;
	data.month[0].used = 1;

	rotatemonths();

	ck_assert_int_eq(data.month[0].rx, 0);
	ck_assert_int_eq(data.month[0].tx, 0);
	ck_assert_int_eq(data.month[0].rxk, 0);
	ck_assert_int_eq(data.month[0].txk, 0);
	ck_assert_int_ne(data.month[0].month, 0);

	ck_assert_int_eq(data.month[1].rx, 1);
	ck_assert_int_eq(data.month[1].tx, 1);
	ck_assert_int_eq(data.month[1].rxk, 1);
	ck_assert_int_eq(data.month[1].txk, 1);
	ck_assert_int_eq(data.month[1].month, 1);
	ck_assert_int_eq(data.month[1].used, 1);
}
Beispiel #4
0
END_TEST

START_TEST(cacheflush_flushes_cache)
{
	initdb();
	disable_logprints();
	ck_assert_int_eq(clean_testdbdir(), 1);
	ck_assert_int_eq(create_zerosize_dbfile("name1"), 1);
	ck_assert_int_eq(create_zerosize_dbfile("name2"), 1);
	ck_assert_int_eq(check_dbfile_exists("name1", 0), 1);
	ck_assert_int_eq(check_dbfile_exists(".name1", 0), 0);
	ck_assert_int_eq(check_dbfile_exists("name2", 0), 1);
	ck_assert_int_eq(check_dbfile_exists(".name2", 0), 0);

	ck_assert_int_eq(cachecount(), 0);
	strcpy(data.interface, "name1");
	ck_assert_int_eq(cacheupdate(), 1);
	strcpy(data.interface, "name2");
	ck_assert_int_eq(cacheupdate(), 1);
	ck_assert_int_eq(cacheadd("notfilled", 0), 1);
	ck_assert_int_eq(cachecount(), 3);
	ck_assert_int_eq(cacheactivecount(), 3);

	cacheflush(TESTDBDIR);

	ck_assert_int_eq(cachecount(), 0);
	ck_assert_int_eq(cacheactivecount(), 0);
	ck_assert_int_eq(check_dbfile_exists("name1", sizeof(DATA)), 1);
	ck_assert_int_eq(check_dbfile_exists(".name1", 0), 1);
	ck_assert_int_eq(check_dbfile_exists("name2", sizeof(DATA)), 1);
	ck_assert_int_eq(check_dbfile_exists(".name2", 0), 1);
	ck_assert_int_eq(check_dbfile_exists("notfilled", 0), 0);
	ck_assert_int_eq(check_dbfile_exists(".notfilled", 0), 0);
}
Beispiel #5
0
END_TEST

START_TEST(dbcheck_with_filled_cache)
{
	int forcesave = 0;

	linuxonly;

	initdb();
	defaultcfg();
	disable_logprints();
	ck_assert_int_eq(remove_directory(TESTDIR), 1);

	ck_assert_int_eq(cachecount(), 0);
	strcpy(data.interface, "ethbasic");
	ck_assert_int_eq(cacheupdate(), 1);
	strcpy(data.interface, "ethactive");
	ck_assert_int_eq(cacheupdate(), 1);
	strcpy(data.interface, "ethnotactive");
	data.active = 0;
	ck_assert_int_eq(cacheupdate(), 1);
	ck_assert_int_eq(cachecount(), 3);
	ck_assert_int_eq(cacheactivecount(), 2);

	fake_proc_net_dev("w", "ethbasic", 1, 2, 3, 4);
	fake_proc_net_dev("a", "ethnotactive", 5, 6, 7, 8);

	ck_assert_int_ne(dbcheck(0, &forcesave), 0);
	ck_assert_int_eq(forcesave, 1);
}
Beispiel #6
0
END_TEST

START_TEST(cacheremove_when_filled)
{
	initdb();
	ck_assert_int_eq(cachecount(), 0);
	ck_assert_int_eq(cacheadd("name4", 0), 1);
	ck_assert_int_eq(cacheadd("name3", 0), 1);
	ck_assert_int_eq(cacheadd("name2", 0), 1);
	ck_assert_int_eq(cacheadd("name1", 0), 1);
	ck_assert_int_eq(cachecount(), 4);

	ck_assert(cacheremove("does_not_exist")==NULL);
	ck_assert_int_eq(cachecount(), 4);

	ck_assert(cacheremove("name1")!=NULL);
	ck_assert_int_eq(cachecount(), 3);

	ck_assert(cacheremove("name1")==NULL);
	ck_assert_int_eq(cachecount(), 3);

	ck_assert(cacheremove("name3")!=NULL);
	ck_assert_int_eq(cachecount(), 2);

	ck_assert(cacheremove("name4")==NULL);
	ck_assert_int_eq(cachecount(), 1);

	ck_assert(cacheremove("name2")==NULL);
	ck_assert_int_eq(cachecount(), 0);
}
Beispiel #7
0
int deletedb(char* key){
  int n;
  struct db *temp;
  if(dbcounter==0){
    initdb();
    dbcounter=1;
  }
  temp=head;
  if(strlen(key)>strlen(temp->record)) n=strlen(key);
  else n=strlen(temp->record);
  if(strncmp(key,temp->record,n)==0){
    head=temp->next;
    cprintf("record:%s deleted.\n",key);
    return 1;
  }else{
    while(temp->next!=first){
      if(strncmp(key,temp->next->record,n)==0){
	temp->next=temp->next->next;
	cprintf("record:%s deleted.\n",key);
	return 1;
      }
      temp=temp->next;
    }
  }
  cprintf("can't found %s\n",key);
  return -1;
}
Beispiel #8
0
END_TEST

START_TEST(cleartop10_clears_top10)
{
	int i;

	initdb();
	suppress_output();
	disable_logprints();
	cfg.flock = 1;
	strcpy(data.interface, "ethtest");
	strcpy(data.nick, "ethtest");
	for (i=0; i<10; i++) {
		data.top10[i].rx = 1;
		data.top10[i].tx = 1;
		data.top10[i].used = 1;
	}
	ck_assert_int_eq(clean_testdbdir(), 1);
	ck_assert_int_eq(writedb("ethtest", TESTDBDIR, 1), 1);

	cleartop10("ethtest", TESTDBDIR);

	ck_assert_int_eq(check_dbfile_exists("ethtest", sizeof(DATA)), 1);
	ck_assert_int_eq(check_dbfile_exists(".ethtest", sizeof(DATA)), 1);
	for (i=0; i<10; i++) {
		ck_assert_int_eq(data.top10[i].rx, 0);
		ck_assert_int_eq(data.top10[i].tx, 0);
		ck_assert_int_eq(data.top10[i].rxk, 0);
		ck_assert_int_eq(data.top10[i].txk, 0);
		ck_assert_int_eq(data.top10[i].used, 0);
	}
}
Beispiel #9
0
END_TEST

START_TEST(rotatedays_really_rotates_days)
{
	int i;
	initdb();
	for (i=0; i<30; i++) {
		ck_assert_int_eq(data.day[i].rx, 0);
		ck_assert_int_eq(data.day[i].tx, 0);
		ck_assert_int_eq(data.day[i].rxk, 0);
		ck_assert_int_eq(data.day[i].txk, 0);
	}
	data.day[0].rx = data.day[0].tx = 1;
	data.day[0].rxk = data.day[0].txk = 1;
	data.day[0].date = 1;
	data.day[0].used = 1;

	rotatedays();

	ck_assert_int_eq(data.day[0].rx, 0);
	ck_assert_int_eq(data.day[0].tx, 0);
	ck_assert_int_eq(data.day[0].rxk, 0);
	ck_assert_int_eq(data.day[0].txk, 0);
	ck_assert_int_ne(data.day[0].date, 0);

	ck_assert_int_eq(data.day[1].rx, 1);
	ck_assert_int_eq(data.day[1].tx, 1);
	ck_assert_int_eq(data.day[1].rxk, 1);
	ck_assert_int_eq(data.day[1].txk, 1);
	ck_assert_int_eq(data.day[1].date, 1);
	ck_assert_int_eq(data.day[1].used, 1);
}
Beispiel #10
0
END_TEST

START_TEST(validatedb_with_initdb)
{
	initdb();
	strcpy(data.interface, "ethtest");
	ck_assert_int_eq(validatedb(), 1);
}
Beispiel #11
0
END_TEST

START_TEST(database_outputs_do_not_crash)
{
	int i;

	initdb();
	defaultcfg();
	strcpy(data.interface, "something");
	strcpy(data.nick, "nothing");
	data.totalrx = 1;
	data.totaltx = 2;
	data.currx = 3;
	data.curtx = 4;
	data.totalrxk = 5;
	data.totaltxk = 6;
	data.btime = 7;

	for (i=0; i<30; i++) {
		data.day[i].date = i+1;
		data.day[i].rx = data.day[i].tx = i*100;
		data.day[i].rxk = data.day[i].txk = i;
		data.day[i].used = 1;
	}

	for (i=0; i<10; i++) {
		data.top10[i].date = i+1;
		data.top10[i].rx = data.top10[i].tx = i*100;
		data.top10[i].rxk = data.top10[i].txk = i;
		data.top10[i].used = 1;
	}

	for (i=0; i<12; i++) {
		data.month[i].month = i+1;
		data.month[i].rx = data.month[i].tx = i*100;
		data.month[i].rxk = data.month[i].txk = i;
		data.month[i].used = 1;
	}

	for (i=0; i<24; i++) {
		data.hour[i].date = i+1;
		data.hour[i].rx = data.hour[i].tx = i*100;
	}

	suppress_output();

	showdb(0);
	showdb(1);
	showdb(2);
	showdb(3);
	showdb(4);
	showdb(5);
	showdb(6);
	showdb(7);
	showdb(8);
	showdb(9);
}
Beispiel #12
0
END_TEST

START_TEST(cacheupdate_when_empty)
{
	initdb();
	strcpy(data.interface, "name1");
	ck_assert_int_eq(cacheupdate(), 1);
	ck_assert_int_eq(cachecount(), 1);
	ck_assert_int_eq(cacheactivecount(), 1);
}
Beispiel #13
0
END_TEST

START_TEST(validatedb_with_invalid_totals)
{
	initdb();
	suppress_output();
	strcpy(data.interface, "ethtest");
	data.day[0].rx++;
	ck_assert_int_eq(validatedb(), 0);
}
Beispiel #14
0
END_TEST

START_TEST(cacheget_when_filled)
{
	initdb();
	ck_assert_int_eq(cachecount(), 0);
	strcpy(data.interface, "name1");
	ck_assert_int_eq(cacheupdate(), 1);
	ck_assert_int_eq(cachecount(), 1);
	strcpy(data.interface, "empty");
	ck_assert_int_eq(cacheget(dataptr), 1);
	ck_assert_str_eq(data.interface, "name1");
}
Beispiel #15
0
END_TEST

START_TEST(validatedb_with_top10_use)
{
	initdb();
	suppress_output();
	strcpy(data.interface, "ethtest");
	data.top10[0].used = 1;
	data.top10[1].used = 1;
	data.top10[2].used = 1;
	data.top10[5].used = 1;
	ck_assert_int_eq(validatedb(), 0);
}
Beispiel #16
0
rt_shared void initstk(void)
{
	/* Initialize both the local stack and the hector stack. Those two stacks
	 * may have their context saved and restored in an Eiffel routine, so they
	 * need to be correctly initialized.
	 * In workbench mode, the debugger stack is also created here.
	 */

	EIF_GET_CONTEXT
#ifdef ISE_GC
	char **top;
#endif


#ifdef EIF_ASSERTIONS
#if defined(EIF_WINDOWS) && defined(_DEBUG)

	int tmpDbgFlag = 0;
	_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
	_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
	_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
	_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT);
	_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
	_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT);

	tmpDbgFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
	tmpDbgFlag |= _CRTDBG_DELAY_FREE_MEM_DF;
	tmpDbgFlag |= _CRTDBG_LEAK_CHECK_DF;
	tmpDbgFlag |= _CRTDBG_CHECK_ALWAYS_DF;
	_CrtSetDbgFlag(tmpDbgFlag);
#endif
#endif

#if defined(EIF_WINDOWS) && defined(_MSC_VER)
		/* This is to catch CRT raised exception when passing incorrect arguments to CRT routines. */
	_set_invalid_parameter_handler(eif_invalid_paramter_handler);
#endif

#ifdef ISE_GC
	top = st_alloc(&loc_set, eif_stack_chunk);
	if (top != (char **) 0)
		top = st_alloc(&hec_stack, eif_stack_chunk);

	if (top == (char **) 0)
		eif_panic(MTC "can't create runtime stacks");
#endif

#ifdef WORKBENCH
	initdb();				/* Initialize debugger stack */
#endif
}
Beispiel #17
0
END_TEST

START_TEST(cacheshow_filled)
{
	initdb();
	ck_assert_int_eq(cachecount(), 0);
	ck_assert_int_eq(cacheadd("name4", 0), 1);
	ck_assert_int_eq(cacheadd("name3", 0), 1);
	ck_assert_int_eq(cacheadd("name2", 0), 1);
	ck_assert_int_eq(cacheadd("name1", 0), 1);
	ck_assert_int_eq(cachecount(), 4);
	suppress_output();
	cacheshow();
}
Beispiel #18
0
END_TEST

START_TEST(cachestatus_filled)
{
	initdb();
	disable_logprints();
	ck_assert_int_eq(cachecount(), 0);
	ck_assert_int_eq(cacheadd("name4", 0), 1);
	ck_assert_int_eq(cacheadd("name3", 0), 1);
	ck_assert_int_eq(cacheadd("name2", 0), 1);
	ck_assert_int_eq(cacheadd("name1", 0), 1);
	ck_assert_int_eq(cachecount(), 4);
	cachestatus();
}
Beispiel #19
0
END_TEST

START_TEST(readdb_with_existing_dbfile_and_max_name_length)
{
	initdb();
	disable_logprints();
	cfg.flock = 1;
	strcpy(data.interface, "1234567890123456789012345678901");
	ck_assert_int_eq(clean_testdbdir(), 1);
	ck_assert_int_eq(writedb("1234567890123456789012345678901", TESTDBDIR, 1), 1);
	ck_assert_int_eq(check_dbfile_exists("1234567890123456789012345678901", sizeof(DATA)), 1);

	strcpy(data.interface, "none");
	ck_assert_int_eq(readdb("1234567890123456789012345678901", TESTDBDIR), 0);
	ck_assert_str_eq(data.interface, "1234567890123456789012345678901");
}
Beispiel #20
0
void cduck_db_open ()
{
	FILE* fp = NULL;
	mkdir("/var/cduck", 0700);
	lockFD = open("/var/cduck/cduck.db.lock", O_RDWR | O_CREAT | O_EXLOCK);
	if (fp = fopen("/var/cduck/cduck.db", "r"))
	{
		fclose(fp);
	}
	sqlite3_open("/var/cduck/cduck.db", &db);
	assert(db);
	sqlite3_extended_result_codes(db, 1);
	if (fp == NULL) // this means we didn't open it earlier
	{
		initdb();
	}
	initgroups();
}
Beispiel #21
0
END_TEST

START_TEST(cachestatus_full)
{
	int i;
	char buffer[8];
	initdb();
	defaultcfg();
	disable_logprints();
	ck_assert_int_eq(cachecount(), 0);
	for (i=1; i<=50; i++) {
		snprintf(buffer, 8, "name%d", i);
		ck_assert_int_eq(cacheadd(buffer, 0), 1);
		ck_assert_int_eq(ibwadd(buffer, 50-i), 1);
	}
	ck_assert_int_eq(cachecount(), 50);
	cachestatus();
}
Beispiel #22
0
END_TEST

START_TEST(readdb_with_existing_dbfile_with_rename)
{
	initdb();
	disable_logprints();
	cfg.flock = 1;
	strcpy(data.interface, "ethtest");
	strcpy(data.nick, "ethtest");
	ck_assert_int_eq(clean_testdbdir(), 1);
	ck_assert_int_eq(writedb("ethtest2", TESTDBDIR, 1), 1);
	ck_assert_int_eq(check_dbfile_exists("ethtest2", sizeof(DATA)), 1);

	strcpy(data.interface, "none");
	strcpy(data.nick, "none");
	ck_assert_int_eq(readdb("ethtest2", TESTDBDIR), 0);
	ck_assert_str_eq(data.interface, "ethtest2");
	ck_assert_str_eq(data.nick, "ethtest2");
}
Beispiel #23
0
END_TEST

START_TEST(parseifinfo_1kb_change)
{
	initdb();
	data.btime = getbtime();
	data.lastupdated -= 100;
	data.currx = 1024;
	data.curtx = 1024;

	strcpy(data.interface, "eth0");
	ck_assert_int_eq(ibwadd("eth0", 10), 1);

	strcpy(ifinfo.name, "eth0");
	ifinfo.filled = 1;
	ifinfo.rx = 2048;
	ifinfo.tx = 2048;
	ifinfo.rxp = ifinfo.txp = 0;

	parseifinfo(0);

	ck_assert_int_eq(ifinfo.rx, 2048);
	ck_assert_int_eq(ifinfo.tx, 2048);
	ck_assert_int_eq(ifinfo.rxp, 0);
	ck_assert_int_eq(ifinfo.txp, 0);

	ck_assert_int_eq(data.day[0].rx, 0);
	ck_assert_int_eq(data.day[0].tx, 0);
	ck_assert_int_eq(data.day[0].rxk, 1);
	ck_assert_int_eq(data.day[0].txk, 1);

	ck_assert_int_eq(data.month[0].rx, 0);
	ck_assert_int_eq(data.month[0].tx, 0);
	ck_assert_int_eq(data.month[0].rxk, 1);
	ck_assert_int_eq(data.month[0].txk, 1);

	ck_assert_int_eq(data.totalrx, 0);
	ck_assert_int_eq(data.totaltx, 0);
	ck_assert_int_eq(data.totalrxk, 1);
	ck_assert_int_eq(data.totaltxk, 1);
	ck_assert_int_eq(data.currx, 2048);
	ck_assert_int_eq(data.curtx, 2048);
}
Beispiel #24
0
int serchdb(char* key){
  if(dbcounter==0){
    initdb();
    dbcounter=1;
  }
  int n;
  struct db *temp;
  temp=head;
  while(temp!=first){
    if(strlen(key)>strlen(temp->record)) n=strlen(key);
    else n=strlen(temp->record);
    if(strncmp(temp->record,key,n)==0){
      cprintf("data:%s\n",temp->data);
      return 1;
    }
    temp=temp->next;
  }
  cprintf("can't found record:%s\n",key);
  return -1;
}
Beispiel #25
0
END_TEST

START_TEST(cleanhours_does_not_remove_current_data)
{
	int i;
	initdb();
	for (i=0; i<24; i++) {
		ck_assert_int_eq(data.hour[i].rx, 0);
		ck_assert_int_eq(data.hour[i].tx, 0);
	}
	for (i=0; i<24; i++) {
		data.hour[i].rx = data.hour[i].tx = i+1;
		data.hour[i].date = time(NULL);
	}
	cleanhours();
	for (i=0; i<24; i++) {
		ck_assert_int_ne(data.hour[i].rx, 0);
		ck_assert_int_ne(data.hour[i].tx, 0);
	}
}
Beispiel #26
0
END_TEST

START_TEST(cleanhours_really_cleans_hours)
{
	int i;
	initdb();
	for (i=0; i<24; i++) {
		ck_assert_int_eq(data.hour[i].rx, 0);
		ck_assert_int_eq(data.hour[i].tx, 0);
	}
	for (i=0; i<24; i++) {
		data.hour[i].rx = data.hour[i].tx = i+1;
		data.hour[i].date = 1;
	}
	cleanhours();
	for (i=0; i<24; i++) {
		ck_assert_int_eq(data.hour[i].rx, 0);
		ck_assert_int_eq(data.hour[i].tx, 0);
	}
}
Beispiel #27
0
END_TEST

START_TEST(cacheupdate_when_filled)
{
	initdb();
	strcpy(data.interface, "name1");
	ck_assert_int_eq(cacheupdate(), 1);
	ck_assert_int_eq(cachecount(), 1);
	ck_assert_int_eq(cacheactivecount(), 1);

	strcpy(data.interface, "name2");
	ck_assert_int_eq(cacheupdate(), 1);
	ck_assert_int_eq(cachecount(), 2);
	ck_assert_int_eq(cacheactivecount(), 2);

	strcpy(data.interface, "name1");
	data.active = 0;
	ck_assert_int_eq(cacheupdate(), 1);
	ck_assert_int_eq(cachecount(), 2);
	ck_assert_int_eq(cacheactivecount(), 1);
}
Beispiel #28
0
END_TEST

START_TEST(parseifinfo_hitting_maxbw_limit_causes_sync)
{
	initdb();
	data.btime = getbtime();
	data.lastupdated -= 1;
	data.currx = 1024;
	data.curtx = 1024;

	strcpy(data.interface, "eth0");
	ck_assert_int_eq(ibwadd("eth0", 10), 1);

	strcpy(ifinfo.name, "eth0");
	ifinfo.filled = 1;
	ifinfo.rx = 123456789;
	ifinfo.tx = 123456789;
	ifinfo.rxp = ifinfo.txp = 0;

	debug = 1;
	suppress_output();
	parseifinfo(0);

	ck_assert_int_eq(ifinfo.rx, 123456789);
	ck_assert_int_eq(ifinfo.tx, 123456789);
	ck_assert_int_eq(ifinfo.rxp, 0);
	ck_assert_int_eq(ifinfo.txp, 0);

	ck_assert_int_eq(data.day[0].rx, 0);
	ck_assert_int_eq(data.day[0].tx, 0);
	ck_assert_int_eq(data.day[0].rxk, 0);
	ck_assert_int_eq(data.day[0].txk, 0);

	ck_assert_int_eq(data.totalrx, 0);
	ck_assert_int_eq(data.totaltx, 0);
	ck_assert_int_eq(data.totalrxk, 0);
	ck_assert_int_eq(data.totaltxk, 0);
	ck_assert_int_eq(data.currx, 123456789);
	ck_assert_int_eq(data.curtx, 123456789);
}
Beispiel #29
0
int insdb(char* key,char* apple){
  struct db *p=kalloc();
  struct db *temp;
  int buff;
  int i=0,n;
  if(dbcounter == 0){
    initdb();
    dbcounter=1;
  }
  p->record=kalloc();
  p->data=kalloc();
  while(key[i]!='\0'){
    buff=key[i];
    p->record[i]=buff;
    i++;
  }
  p->record[i]='\0';
  i=0;
  while(apple[i]!='\0'){
    buff=apple[i];
    p->data[i]=buff;
    i++;
  }
  p->data[i]='\0';
  temp=head;
  while(temp!=first){
    if(strlen(key)>strlen(temp->record)) n=strlen(key);
    else n=strlen(temp->record);
    if(strncmp(key,temp->record,n)==0) {
		cprintf("already set:%s\n",temp->record);
		return -1;
	}
    temp=temp->next;
  }
  p->next=head;
  head=p;
  return 1;
}
Beispiel #30
0
sqlite3 *
getdb ()
{
	char *workdir = getworkdir();
	char *dbfile = pathjoin(workdir, DBFILE);
	free(workdir);

	int notfound = 0;
	int rc;

	struct stat st;
	rc = stat(dbfile, &st);
	if (rc == -1) {
		if (errno == ENOENT) {
			notfound = 1;
		}
		else {
			fprintf(stderr, "Error stating %s: %d\n", dbfile, errno);
			exit(EXIT_FAILURE);
		}
	}

	sqlite3 *db;
	rc = sqlite3_open(dbfile, &db);
	if (rc != SQLITE_OK) {
		fprintf(stderr, "Can't open database %s.\n", sqlite3_errmsg(db));
		sqlite3_close(db);
		exit(EXIT_FAILURE);
	}

	if (notfound) {
		fprintf(stderr, "Initializing database.\n");
		initdb(db);
	}

	return db;
}