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; }
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; }
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; }