printf("Shows the version of DataWorks.\n");
padleft(16, ".tables");
printf("Shows the table list.\n");
- } else if(__dw_strcaseequ(buf, ".tables")){
+ } else if(__dw_strcaseequ(buf, ".tables")) {
char** list = dataworks_database_get_table_list(db);
- if(list != NULL){
+ if(list != NULL) {
int i;
- for(i = 0; list[i] != NULL; i++);
+ for(i = 0; list[i] != NULL; i++)
+ ;
printf("%d tables found.\n", i);
- for(i = 0; list[i] != NULL; i++){
+ for(i = 0; list[i] != NULL; i++) {
printf(" %s\n", list[i]);
free(list[i]);
}
free(list);
- }else{
+ } else {
printf("Failed to get the list.\n");
}
} else {
uint64_t dataworks_database_get_mtime(struct dataworks_db* db) { return db->mtime; }
#define buffer_to_db_v1_indexentry(buf, index) \
- memcpy(&index.flag, buf, 1); \
- uint64_t be_count; \
- memcpy(&be_count, buf + 1, 8); \
- __dw_native_endian(be_count, uint64_t, index.count = __converted); \
- memcpy(&index.dbname_len, buf + 1 + 8, 1); \
- memcpy(index.dbname, buf + 1 + 8 + 1, 256); \
- memcpy(index.fields, buf + 1 + 8 + 1 + 256, 4096);
+ memcpy(&index.flag, buf, 1); \
+ uint64_t be_count; \
+ memcpy(&be_count, buf + 1, 8); \
+ __dw_native_endian(be_count, uint64_t, index.count = __converted); \
+ memcpy(&index.dbname_len, buf + 1 + 8, 1); \
+ memcpy(index.dbname, buf + 1 + 8 + 1, 256); \
+ memcpy(index.fields, buf + 1 + 8 + 1 + 256, 4096);
-char** dataworks_database_get_table_list(struct dataworks_db* db){
- if(db->version == 1){
+char** dataworks_database_get_table_list(struct dataworks_db* db) {
+ if(db->version == 1) {
__dw_lockfile(db->fp);
fseek(db->fp, sizeof(sig) + 10, SEEK_SET);
int i;
struct dataworks_db_v1_indexentry index;
char* buf = malloc(1 + 8 + 1 + 256 + 4096);
- for(i = 0; i < 256; i++){
+ int c = 0;
+ for(i = 0; i < 256; i++) {
fread(buf, 1, 1 + 8 + 1 + 256 + 4096, db->fp);
buffer_to_db_v1_indexentry(buf, index);
+ if(index.flag & DATAWORKS_V1_INDEXENTRY_USED) {
+ c++;
+ }
}
+ char** list = malloc(sizeof(*list) * (c + 1));
fseek(db->fp, sizeof(sig) + 10, SEEK_SET);
- for(i = 0; i < 256; i++){
+ c = 0;
+ for(i = 0; i < 256; i++) {
fread(buf, 1, 1 + 8 + 1 + 256 + 4096, db->fp);
buffer_to_db_v1_indexentry(buf, index);
- if(index.flag & DATAWORKS_V1_INDEXENTRY_USED){
- printf("%d\n", index.dbname_len);
- printf("[");
- fflush(stdout);
- fwrite(index.dbname, 1, index.dbname_len, stdout);
- printf("]\n");
+ if(index.flag & DATAWORKS_V1_INDEXENTRY_USED) {
+ list[c] = malloc(index.dbname_len + 1);
+ memcpy(list[c], index.dbname, index.dbname_len);
+ list[c][index.dbname_len] = 0;
+ c++;
}
}
+ list[c] = NULL;
free(buf);
__dw_unlockfile(db->fp);
- }else{
+ return list;
+ } else {
/* Not implemented for the version */
return NULL;
}