~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/_readdir_pyx.pyx

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-03-06 06:48:25 UTC
  • mfrom: (4070.8.6 debug-config)
  • Revision ID: pqm@pqm.ubuntu.com-20090306064825-kbpwggw21dygeix6
(mbp) debug_flags configuration option

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006, 2008, 2009 Canonical Ltd
 
1
# Copyright (C) 2006, 2008 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
"""Wrapper for readdir which returns files ordered by inode."""
18
18
 
298
298
        # passing full paths every time.
299
299
        orig_dir_fd = open(".", O_RDONLY, 0)
300
300
        if orig_dir_fd == -1:
301
 
            raise OSError(errno, "open: " + strerror(errno), ".")
 
301
            raise OSError(errno, strerror(errno))
302
302
        if -1 == chdir(path):
303
 
            raise OSError(errno, "chdir: " + strerror(errno), path)
 
303
            raise OSError(errno, strerror(errno))
304
304
    else:
305
305
        orig_dir_fd = -1
306
306
 
307
307
    try:
308
308
        the_dir = opendir(".")
309
309
        if NULL == the_dir:
310
 
            raise OSError(errno, "opendir: " + strerror(errno), path)
 
310
            raise OSError(errno, strerror(errno))
311
311
        try:
312
312
            result = []
313
313
            entry = &sentinel
330
330
                        # we consider ENOTDIR to be 'no error'.
331
331
                        continue
332
332
                    else:
333
 
                        raise OSError(errno, "readdir: " + strerror(errno), path)
 
333
                        raise OSError(errno, strerror(errno))
334
334
                name = entry.d_name
335
335
                if not (name[0] == c"." and (
336
336
                    (name[1] == 0) or 
340
340
                    stat_result = lstat(entry.d_name, &statvalue._st)
341
341
                    if stat_result != 0:
342
342
                        if errno != ENOENT:
343
 
                            raise OSError(errno, "lstat: " + strerror(errno),
344
 
                                path + "/" + entry.d_name)
 
343
                            raise OSError(errno, strerror(errno))
345
344
                        else:
346
345
                            kind = _missing
347
346
                            statvalue = None
356
355
                        statvalue, None))
357
356
        finally:
358
357
            if -1 == closedir(the_dir):
359
 
                raise OSError(errno, "closedir: " + strerror(errno), path)
 
358
                raise OSError(errno, strerror(errno))
360
359
    finally:
361
360
        if -1 != orig_dir_fd:
362
361
            failed = False
364
363
                # try to close the original directory anyhow
365
364
                failed = True
366
365
            if -1 == close(orig_dir_fd) or failed:
367
 
                raise OSError(errno, "return to orig_dir: " + strerror(errno))
 
366
                raise OSError(errno, strerror(errno))
368
367
 
369
368
    return result
370
369