@@ -404,12 +404,13 @@ def umount_local(self):
404
404
"CMD_OPEN" : 4 ,
405
405
"CMD_CLOSE" : 5 ,
406
406
"CMD_READ" : 6 ,
407
- "CMD_WRITE" : 7 ,
408
- "CMD_SEEK" : 8 ,
409
- "CMD_REMOVE" : 9 ,
410
- "CMD_RENAME" : 10 ,
411
- "CMD_MKDIR" : 11 ,
412
- "CMD_RMDIR" : 12 ,
407
+ "CMD_READLINE" : 7 ,
408
+ "CMD_WRITE" : 8 ,
409
+ "CMD_SEEK" : 9 ,
410
+ "CMD_REMOVE" : 10 ,
411
+ "CMD_RENAME" : 11 ,
412
+ "CMD_MKDIR" : 12 ,
413
+ "CMD_RMDIR" : 13 ,
413
414
}
414
415
415
416
fs_hook_code = """\
@@ -592,12 +593,16 @@ def readinto(self, buf):
592
593
return n
593
594
594
595
def readline(self):
595
- l = ''
596
- while 1:
597
- c = self.read(1)
598
- l += c
599
- if c == '\\ n' or c == '':
600
- return l
596
+ c = self.cmd
597
+ c.begin(CMD_READLINE)
598
+ c.wr_s8(self.fd)
599
+ data = c.rd_bytes(None)
600
+ c.end()
601
+ if self.is_text:
602
+ data = str(data, 'utf8')
603
+ else:
604
+ data = bytes(data)
605
+ return data
601
606
602
607
def readlines(self):
603
608
ls = []
@@ -746,8 +751,7 @@ def __mount():
746
751
"""
747
752
748
753
# Apply basic compression on hook code.
749
- for key , value in fs_hook_cmds .items ():
750
- fs_hook_code = re .sub (key , str (value ), fs_hook_code )
754
+ fs_hook_code = re .sub (r"CMD_[A-Z_]+" , lambda m : str (fs_hook_cmds [m .group (0 )]), fs_hook_code )
751
755
fs_hook_code = re .sub (" *#.*$" , "" , fs_hook_code , flags = re .MULTILINE )
752
756
fs_hook_code = re .sub ("\n \n +" , "\n " , fs_hook_code )
753
757
fs_hook_code = re .sub (" " , " " , fs_hook_code )
@@ -887,6 +891,14 @@ def do_read(self):
887
891
self .wr_bytes (buf )
888
892
# self.log_cmd(f"read {fd} {n} -> {len(buf)}")
889
893
894
+ def do_readline (self ):
895
+ fd = self .rd_s8 ()
896
+ buf = self .data_files [fd ][0 ].readline ()
897
+ if self .data_files [fd ][1 ]:
898
+ buf = bytes (buf , "utf8" )
899
+ self .wr_bytes (buf )
900
+ # self.log_cmd(f"readline {fd} -> {len(buf)}")
901
+
890
902
def do_seek (self ):
891
903
fd = self .rd_s8 ()
892
904
n = self .rd_s32 ()
@@ -960,6 +972,7 @@ def do_rmdir(self):
960
972
fs_hook_cmds ["CMD_OPEN" ]: do_open ,
961
973
fs_hook_cmds ["CMD_CLOSE" ]: do_close ,
962
974
fs_hook_cmds ["CMD_READ" ]: do_read ,
975
+ fs_hook_cmds ["CMD_READLINE" ]: do_readline ,
963
976
fs_hook_cmds ["CMD_WRITE" ]: do_write ,
964
977
fs_hook_cmds ["CMD_SEEK" ]: do_seek ,
965
978
fs_hook_cmds ["CMD_REMOVE" ]: do_remove ,
0 commit comments