| Ticket Hash: | 127ac40147407d703ee7ccd70c865c6a87c53c56 | |||
| Title: | Output C89 data from dir2c.tcl | |||
| Status: | Open | Type: | Code Defect | |
| Severity: | Minor | Priority: | Low | |
| Subsystem: | KitDLL (The libTclkit Core) | Resolution: | Open | |
| Last Modified: | 2020-05-11 16:42:39 | |||
| Version Found In: | trunk | |||
| Description: | ||||
|
Dear Sean, thank you for great C-VFS. I am trying to get it working by little steps. There might be a wiki recipe on success for the medium programmer of this wizard program. Just a note. TCL and Metakit is normally C89 clean. The output of dir2c.tcl is not, as it uses this style of initialization: <verbatim> static struct cvfs_data cvfs_tcl_data[] = { { /* Index 0 cannot be used because we use the value 0 to represent failure */ .name = NULL, .index = 0, .type = 0, .size = 0, .data = NULL, .free = 0, }, </verbatim> Unfortunately, C89 does not allow to name the structure items. The patch below transforms this output into: <verbatim> static struct cvfs_data cvfs_tcl_data[] = { { /* Index 0 cannot be used because we use the value 0 to represent failure */ /* name */ NULL, /* index */ 0, /* type */ 0, /* size */ 0, /* data */ NULL, /* free */ 0, }, </verbatim> Here is the patch: <verbatim> --- C:/oehhar/elmicron/projekte/el1005_scanlink_dll/source/c-vfs/dir2c_ori.tcl Wed Jan 22 20:53:52 2020 +++ C:/oehhar/elmicron/projekte/el1005_scanlink_dll/source/c-vfs/dir2c.tcl Fri Apr 17 10:20:20 2020 @@ -306,20 +306,20 @@ # endif /* !LOADED_CVFS_COMMON */} puts "" puts "static struct cvfs_data ${code_tag}_data\[\] = {" puts "\t{" puts "\t\t/* Index 0 cannot be used because we use the value 0 to represent failure */" -puts "\t\t.name = NULL," -puts "\t\t.index = 0," -puts "\t\t.type = 0," -puts "\t\t.size = 0," -puts "\t\t.data = NULL," -puts "\t\t.free = 0," +puts "\t\t/* name */ NULL," +puts "\t\t/* index */ 0," +puts "\t\t/* type */ 0," +puts "\t\t/* size */ 0," +puts "\t\t/* data */ NULL," +puts "\t\t/* free */ 0," puts "\t}," for {set idx 1} {$idx < [llength $files]} {incr idx} { set file [lindex $files $idx] set shortfile [shorten_file $startdir $file] unset -nocomplain finfo type file stat $file finfo @@ -345,20 +345,20 @@ set type "CVFS_FILETYPE_DIR" set data "NULL" set size 0 } } puts "\t{" - puts "\t\t.name = \"$shortfile\"," - puts "\t\t.index = $idx," - puts "\t\t.type = $type," - puts "\t\t.size = $size," - puts "\t\t.data = $data," - puts "\t\t.free = 0," + puts "\t\t/* name */ \"$shortfile\"," + puts "\t\t/* index */ $idx," + puts "\t\t/* type */ $type," + puts "\t\t/* size */ $size," + puts "\t\t/* data */ $data," + puts "\t\t/* free */ 0," puts "\t}," } puts "};" puts "" puts "static unsigned long ${code_tag}_lookup_index(const char *path) {" puts "\tswitch (cvfs_hash((unsigned char *) path)) {"</verbatim> Thank you and best regards, Harald
| ||||
| User Comments: | ||||
|
anonymous (claiming to be oehhar) added on 2020-05-11 16:33:18:
Sorry, the patch has the issue, that the two members "type" and "size" are mixed up. Here is a corrected patch:
--- C:/oehhar/elmicron/projekte/el1005_scanlink_dll/source/c-vfs/dir2c_ori.tcl Wed Jan 22 20:53:52 2020
+++ C:/oehhar/elmicron/projekte/el1005_scanlink_dll/source/c-vfs/dir2c.tcl Fri Apr 17 10:20:20 2020
@@ -306,20 +306,20 @@
# endif /* !LOADED_CVFS_COMMON */}
puts ""
puts "static struct cvfs_data ${code_tag}_data\[\] = {"
puts "\t{"
puts "\t\t/* Index 0 cannot be used because we use the value 0 to represent failure */"
-puts "\t\t.name = NULL,"
-puts "\t\t.index = 0,"
-puts "\t\t.type = 0,"
-puts "\t\t.size = 0,"
-puts "\t\t.data = NULL,"
-puts "\t\t.free = 0,"
+puts "\t\t/* name */ NULL,"
+puts "\t\t/* index */ 0,"
+puts "\t\t/* size */ 0,"
+puts "\t\t/* type */ 0,"
+puts "\t\t/* data */ NULL,"
+puts "\t\t/* free */ 0,"
puts "\t},"
for {set idx 1} {$idx < [llength $files]} {incr idx} {
set file [lindex $files $idx]
set shortfile [shorten_file $startdir $file]
unset -nocomplain finfo type
file stat $file finfo
@@ -345,20 +345,20 @@
set type "CVFS_FILETYPE_DIR"
set data "NULL"
set size 0
}
}
puts "\t{"
- puts "\t\t.name = \"$shortfile\","
- puts "\t\t.index = $idx,"
- puts "\t\t.type = $type,"
- puts "\t\t.size = $size,"
- puts "\t\t.data = $data,"
- puts "\t\t.free = 0,"
+ puts "\t\t/* name */ \"$shortfile\","
+ puts "\t\t/* index */ $idx,"
+ puts "\t\t/* size */ $size,"
+ puts "\t\t/* type */ $type,"
+ puts "\t\t/* data */ $data,"
+ puts "\t\t/* free */ 0,"
puts "\t},"
}
puts "};"
puts ""
puts "static unsigned long ${code_tag}_lookup_index(const char *path) {"
puts "\tswitch (cvfs_hash((unsigned char *) path)) {"
rkeene added on 2020-05-11 16:42:39: Thanks ! The replacement for C-VFS is called XVFS by the way: https://chiselapp.com/user/rkeene/repository/xvfs/ | ||||