コード例 #1
0
ファイル: strings.c プロジェクト: DmitrySigaev/ncbi
int main(void)
{
	char *buf = (char *) malloc(10);

	/* test tds_strlcpy */
	memset(buf, 0xff, 10);
	tds_strlcpy(buf, "test", 10);
	assert(strcmp(buf, "test") == 0);

	memset(buf, 0xff, 10);
	tds_strlcpy(buf, "TESTTEST", 10);
	assert(strcmp(buf, "TESTTEST") == 0);

	memset(buf, 0xff, 10);
	tds_strlcpy(buf, "abcdefghi", 10);
	assert(strcmp(buf, "abcdefghi") == 0);

	memset(buf, 0xff, 10);
	tds_strlcpy(buf, "1234567890", 10);
	assert(strcmp(buf, "123456789") == 0);

	memset(buf, 0xff, 10);
	tds_strlcpy(buf, "xyzabc1234567890", 10);
	assert(strcmp(buf, "xyzabc123") == 0);

	/* test tds_strlcat */
	strcpy(buf, "xyz");
	tds_strlcat(buf, "test", 10);
	assert(strcmp(buf, "xyztest") == 0);

	strcpy(buf, "xyz");
	tds_strlcat(buf, "TESTAB", 10);
	assert(strcmp(buf, "xyzTESTAB") == 0);

	strcpy(buf, "xyz");
	tds_strlcat(buf, "TESTabc", 10);
	assert(strcmp(buf, "xyzTESTab") == 0);

	strcpy(buf, "xyz");
	tds_strlcat(buf, "123456789012345", 10);
	assert(strcmp(buf, "xyz123456") == 0);

	strcpy(buf, "123456789");
	tds_strlcat(buf, "test", 4);
	assert(strcmp(buf, "123456789") == 0);

	free(buf);
	return 0;
}
コード例 #2
0
ファイル: strings.c プロジェクト: DavidRueter/freetds
int main(void)
{
	char *buf = (char *) malloc(10);

	/* test tds_strlcpy */
	memset(buf, 0xff, 10);
	assert(tds_strlcpy(buf, "test", 10) == 4);
	assert(strcmp(buf, "test") == 0);

	memset(buf, 0xff, 10);
	assert(tds_strlcpy(buf, "TESTTEST", 10) == 8);
	assert(strcmp(buf, "TESTTEST") == 0);

	memset(buf, 0xff, 10);
	assert(tds_strlcpy(buf, "abcdefghi", 10) == 9);
	assert(strcmp(buf, "abcdefghi") == 0);

	memset(buf, 0xff, 10);
	assert(tds_strlcpy(buf, "1234567890", 10) == 10);
	assert(strcmp(buf, "123456789") == 0);

	memset(buf, 0xff, 10);
	assert(tds_strlcpy(buf, "xyzabc1234567890", 10) == 16);
	assert(strcmp(buf, "xyzabc123") == 0);

	/* test tds_strlcat */
	strcpy(buf, "xyz");
	assert(tds_strlcat(buf, "test", 10) == 7);
	assert(strcmp(buf, "xyztest") == 0);

	strcpy(buf, "xyz");
	assert(tds_strlcat(buf, "TESTAB", 10) == 9);
	assert(strcmp(buf, "xyzTESTAB") == 0);

	strcpy(buf, "xyz");
	assert(tds_strlcat(buf, "TESTabc", 10) == 10);
	assert(strcmp(buf, "xyzTESTab") == 0);

	strcpy(buf, "xyz");
	assert(tds_strlcat(buf, "123456789012345", 10) == 18);
	assert(strcmp(buf, "xyz123456") == 0);

	strcpy(buf, "123456789");
	assert(tds_strlcat(buf, "test", 4) == 13);
	assert(strcmp(buf, "123456789") == 0);

	/* test length == 0 */
	assert(tds_strlcpy(buf + 10, "test", 0) == 4);

	strcpy(buf, "123");
	assert(tds_strlcat(buf, "456", 0) == 6);
	assert(strcmp(buf, "123") == 0);

	free(buf);
	return 0;
}
コード例 #3
0
ファイル: datacopy.c プロジェクト: RQZeng/freetds
static int
create_target_table(char *sobjname, char *owner, char *dobjname, DBPROCESS * dbsrc, DBPROCESS * dbdest)
{
	char ls_command[2048];
	int i;
	const char *sep;

	DBINT num_cols;
	DBCHAR column_type[33];
	DBCOL colinfo;
#define strcat(d, s) tds_strlcat(d, s, sizeof(d))


	sprintf(ls_command, "SET FMTONLY ON select * from %s SET FMTONLY OFF", sobjname);

	if (dbcmd(dbsrc, ls_command) == FAIL) {
		printf("dbcmd failed\n");
		return FALSE;
	}

	if (dbsqlexec(dbsrc) == FAIL) {
		printf("table %s not found on SOURCE\n", sobjname);
		return FALSE;
	}

	while (NO_MORE_RESULTS != dbresults(dbsrc));

	sprintf(ls_command, "CREATE TABLE %s.%s ", owner, dobjname);

	num_cols = dbnumcols(dbsrc);

	sep = "( ";
	for (i = 1; i <= num_cols; i++) {

		colinfo.SizeOfStruct = sizeof(colinfo);
		if (dbtablecolinfo(dbsrc, i, &colinfo) != SUCCEED)
			return FALSE;

		strcat(ls_command, sep);
		sep = ", ";

		strcat(ls_command, colinfo.Name);
		strcat(ls_command, " ");

		switch (colinfo.Type) {
		case SYBINT1:
			strcat(ls_command, "tinyint");
			break;
		case SYBBIT:
			strcat(ls_command, "bit");
			break;
		case SYBINT2:
			strcat(ls_command, "smallint");
			break;
		case SYBINT4:
			strcat(ls_command, "int");
			break;
		case SYBDATETIME:
			strcat(ls_command, "datetime");
			break;
		case SYBDATETIME4:
			strcat(ls_command, "smalldatetime");
			break;
		case SYBREAL:
			strcat(ls_command, "real");
			break;
		case SYBMONEY:
			strcat(ls_command, "money");
			break;
		case SYBMONEY4:
			strcat(ls_command, "smallmoney");
			break;
		case SYBFLT8:
			strcat(ls_command, "float");
			break;
		case SYBDECIMAL:
			sprintf(column_type, "decimal(%d,%d)", colinfo.Precision, colinfo.Scale);
			strcat(ls_command, column_type);
			break;
		case SYBNUMERIC:
			sprintf(column_type, "numeric(%d,%d)", colinfo.Precision, colinfo.Scale);
			strcat(ls_command, column_type);
			break;
		case SYBCHAR:
			sprintf(column_type, "char(%d)", colinfo.MaxLength);
			strcat(ls_command, column_type);
			break;
		case SYBVARCHAR:
			sprintf(column_type, "varchar(%d)", colinfo.MaxLength);
			strcat(ls_command, column_type);
			break;
		case SYBTEXT:
			strcat(ls_command, "text");
			break;
		case SYBIMAGE:
			strcat(ls_command, "image");
			break;
		default:
			fprintf(stderr, "type not handled\n");
			return FALSE;
		}

		if (colinfo.Null == TRUE) {
			strcat(ls_command, " NULL");
		} else {
			strcat(ls_command, " NOT NULL");
		}
	}
#undef strcat
	if (tds_strlcat(ls_command, " )", sizeof(ls_command)) >= sizeof(ls_command)) {
		fprintf(stderr, "Buffer overflow building command to create table\n");
		return FALSE;
	}

	if (dbcmd(dbdest, ls_command) == FAIL) {
		printf("dbcmd failed\n");
		return FALSE;
	}

	if (dbsqlexec(dbdest) == FAIL) {
		printf("create table on DESTINATION failed\n");
		return FALSE;
	}

	while (NO_MORE_RESULTS != dbresults(dbdest))
		continue;

	return TRUE;
}