8000 WIP tools/mprepl: Change listdir to ilistdir. · micropython/micropython@fad6a0c · GitHub
[go: up one dir, main page]

Skip to content

Commit fad6a0c

Browse files
committed
WIP tools/mprepl: Change listdir to ilistdir.
1 parent 9e94aa5 commit fad6a0c

File tree

1 file changed

+31
-24
lines changed

1 file changed

+31
-24
lines changed

tools/mprepl.py

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
import pyboard
2222

2323
CMD_STAT = 1
24-
CMD_LISTDIR_START = 2
25-
CMD_LISTDIR_NEXT = 3
24+
CMD_ILISTDIR_START = 2
25+
CMD_ILISTDIR_NEXT = 3
2626
CMD_OPEN = 4
2727
CMD_CLOSE = 5
2828
CMD_READ = 6
@@ -31,8 +31,8 @@
3131
fs_hook_code = """\
3232
import os, io, select, ustruct as struct, micropython
3333
CMD_STAT = 1
34-
CMD_LISTDIR_START = 2
35-
CMD_LISTDIR_NEXT = 3
34+
CMD_ILISTDIR_START = 2
35+
CMD_ILISTDIR_NEXT = 3
3636
CMD_OPEN = 4
3737
CMD_CLOSE = 5
3838
CMD_READ = 6
@@ -153,19 +153,23 @@ def stat(self, path):
153153
if res < 0:
154154
raise OSError(-res)
155155
return tuple(self.cmd.rd_uint32() for _ in range(10))
156-
def listdir(self, path):
157-
l = []
158-
self.cmd.begin(CMD_LISTDIR_START)
156+
def ilistdir(self, path):
157+
self.cmd.begin(CMD_ILISTDIR_START)
159158
self.cmd.wr_str(self.path + path)
160-
while True:
161-
self.cmd.begin(CMD_LISTDIR_NEXT)
162-
entry = self.cmd.rd_str()
163-
if entry:
164-
l.append(entry)
165-
else:
166-
break
167159
self.cmd.end()
168-
return l
160+
def ilistdir_next():
161+
while True:
162+
self.cmd.begin(CMD_ILISTDIR_NEXT)
163+
name = self.cmd.rd_str()
164+
if name:
165+
type = self.cmd.rd_uint32()
166+
inode = self.cmd.rd_uint32()
167+
self.cmd.end()
168+
yield (name, type, inode)
169+
else:
170+
self.cmd.end()
171+
break
172+
return ilistdir_next()
169173
def open(self, path, mode):
170174
self.cmd.begin(CMD_OPEN)
171175
self.cmd.wr_str(self.path + path)
@@ -239,7 +243,7 @@ def wr_str(self, s):
239243
self.fout.write(bytearray([l]) + b)
240244

241245
root = './'
242-
data_listdir = []
246+
data_ilistdir = []
243247
data_files = []
244248

245249
def do_stat(cmd):
@@ -254,15 +258,18 @@ def do_stat(cmd):
254258
for val in stat:
255259
cmd.wr_uint32(val) # TODO will all values always fit in 32 bits?
256260

257-
def do_listdir_start(cmd):
258-
global data_listdir
261+
def do_ilistdir_start(cmd):
262+
global data_ilistdir
259263
path = root + cmd.rd_str()
260-
data_listdir = os.listdir(path)
264+
data_ilistdir = os.listdir(path)
261265

262-
def do_listdir_next(cmd):
263-
if data_listdir:
264-
entry = data_listdir.pop(0)
266+
def do_ilistdir_next(cmd):
267+
if data_ilistdir:
268+
entry = data_ilistdir.pop(0)
269+
stat = os.stat(entry)
265270
cmd.wr_str(entry)
271+
cmd.wr_uint32(stat.st_mode & 0xc000)
272+
cmd.wr_uint32(stat.st_ino)
266273
else:
267274
cmd.wr_str('')
268275

@@ -306,8 +313,8 @@ def do_write(cmd):
306313

307314
cmd_table = {
308315
CMD_STAT: do_stat,
309-
CMD_LISTDIR_START: do_listdir_start,
310-
CMD_LISTDIR_NEXT: do_listdir_next,
316+
CMD_ILISTDIR_START: do_ilistdir_start,
317+
CMD_ILISTDIR_NEXT: do_ilistdir_next,
311318
CMD_OPEN: do_open,
312319
CMD_CLOSE: do_close,
313320
CMD_READ: do_read,

0 commit comments

Comments
 (0)
0