# HG changeset patch # User Matt Mackall # Date 1191887234 18000 # Node ID e5f238a8b0d2e3ff81ea6d71c789c60ed5b89c15 # Parent a3ba7ef98c94392e2e7daefa92c23f1ef3be3ff4 osutil: more cleanups - eliminate a level of nesting - untab targets of gotos diff --git a/mercurial/osutil.c b/mercurial/osutil.c --- a/mercurial/osutil.c +++ b/mercurial/osutil.c @@ -215,94 +215,94 @@ static PyObject *listdir(PyObject *self, dfd = dirfd(dir); #endif - if (do_stat || !all_kinds) { - for (i = 0; i < size; i++) { - PyObject *elt = PyList_GetItem(list, i); - char *name = PyString_AsString(PyTuple_GET_ITEM(elt, 0)); - PyObject *py_st = NULL; - PyObject *py_kind = PyTuple_GET_ITEM(elt, 1); - int kind; - - kind = py_kind == Py_None ? -1 : PyInt_AsLong(py_kind); - - if (kind != -1 && !do_stat) - continue; + if (!(do_stat || !all_kinds)) + goto done; - strncat(full_path + path_len + 1, name, - PATH_MAX - path_len); - full_path[PATH_MAX] = 0; - - if (do_stat) { - struct listdir_stat *st; + for (i = 0; i < size; i++) { + PyObject *elt = PyList_GetItem(list, i); + char *name = PyString_AsString(PyTuple_GET_ITEM(elt, 0)); + PyObject *py_st = NULL; + PyObject *py_kind = PyTuple_GET_ITEM(elt, 1); + int kind; - if (!ctor_args) { - ctor_args = PyTuple_New(0); - if (!ctor_args) - goto bail; - } - - st = (struct listdir_stat *) - PyObject_CallObject((PyObject *)&listdir_stat_type, - ctor_args); + kind = py_kind == Py_None ? -1 : PyInt_AsLong(py_kind); - if (!st) - goto bail; -#ifdef AT_SYMLINK_NOFOLLOW - ret = fstatat(dfd, name, &st->st, AT_SYMLINK_NOFOLLOW); -#else - ret = lstat(full_path, &st->st); -#endif - if (ret == -1) { - list = PyErr_SetFromErrnoWithFilename(PyExc_OSError, - full_path); + if (kind != -1 && !do_stat) + continue; + + strncat(full_path + path_len + 1, name, PATH_MAX - path_len); + full_path[PATH_MAX] = 0; + + if (do_stat) { + struct listdir_stat *st; + + if (!ctor_args) { + ctor_args = PyTuple_New(0); + if (!ctor_args) goto bail; - } - if (kind == -1) - kind = mode_to_kind(st->st.st_mode); - py_st = (PyObject *)st; - } else { - struct stat buf; -#ifdef AT_SYMLINK_NOFOLLOW - ret = fstatat(dfd, ent->d_name, &buf, AT_SYMLINK_NOFOLLOW); -#else - ret = lstat(full_path, &buf); -#endif - if (ret == -1) { - list = PyErr_SetFromErrnoWithFilename(PyExc_OSError, - full_path); - goto bail; - } - if (kind == -1) - kind = mode_to_kind(buf.st_mode); } - if (py_kind == Py_None && kind != -1) { - py_kind = PyInt_FromLong(kind); - if (!py_kind) - goto bail; - Py_XDECREF(Py_None); - PyTuple_SET_ITEM(elt, 1, py_kind); - } + st = (struct listdir_stat *) + PyObject_CallObject((PyObject *)&listdir_stat_type, + ctor_args); - if (do_stat) { - if (!py_st) { - py_st = Py_None; - Py_INCREF(Py_None); - } - PyTuple_SET_ITEM(elt, 2, py_st); + if (!st) + goto bail; +#ifdef AT_SYMLINK_NOFOLLOW + ret = fstatat(dfd, name, &st->st, AT_SYMLINK_NOFOLLOW); +#else + ret = lstat(full_path, &st->st); +#endif + if (ret == -1) { + list = PyErr_SetFromErrnoWithFilename(PyExc_OSError, + full_path); + goto bail; } + if (kind == -1) + kind = mode_to_kind(st->st.st_mode); + py_st = (PyObject *)st; + } else { + struct stat buf; +#ifdef AT_SYMLINK_NOFOLLOW + ret = fstatat(dfd, ent->d_name, &buf, AT_SYMLINK_NOFOLLOW); +#else + ret = lstat(full_path, &buf); +#endif + if (ret == -1) { + list = PyErr_SetFromErrnoWithFilename(PyExc_OSError, + full_path); + goto bail; + } + if (kind == -1) + kind = mode_to_kind(buf.st_mode); + } + + if (py_kind == Py_None && kind != -1) { + py_kind = PyInt_FromLong(kind); + if (!py_kind) + goto bail; + Py_XDECREF(Py_None); + PyTuple_SET_ITEM(elt, 1, py_kind); + } + + if (do_stat) { + if (!py_st) { + py_st = Py_None; + Py_INCREF(Py_None); + } + PyTuple_SET_ITEM(elt, 2, py_st); } } goto done; - bail: - Py_XDECREF(list); + bail: + Py_XDECREF(list); - done: - Py_XDECREF(ctor_args); - if (dir) - closedir(dir); + done: + Py_XDECREF(ctor_args); + if (dir) + closedir(dir); return list; }