]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Merged revisions 59239-59244 via svnmerge from
authorChristian Heimes <christian@cheimes.de>
Fri, 30 Nov 2007 22:12:06 +0000 (22:12 +0000)
committerChristian Heimes <christian@cheimes.de>
Fri, 30 Nov 2007 22:12:06 +0000 (22:12 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r59240 | amaury.forgeotdarc | 2007-11-30 21:37:22 +0100 (Fri, 30 Nov 2007) | 2 lines

  Add a NEWS entry for r59231
........
  r59241 | amaury.forgeotdarc | 2007-11-30 21:51:40 +0100 (Fri, 30 Nov 2007) | 5 lines

  Issue #1521: on 64bit platforms, str.decode fails on very long strings.
  The t# and w# formats were not correctly handled.

  Will backport.
........
  r59242 | christian.heimes | 2007-11-30 22:11:28 +0100 (Fri, 30 Nov 2007) | 3 lines

  Fix for feature request #1528 Add os.fchmod
  Georg Brandl has added fchmod() and fchown(). I've contributed lchown but I'm not able to test it on Linux. However it should be available on Mac and some other flavors of Unix.
  I've made a quick test of fchmod() and fchown() on my system. They are working as expected.
........

Doc/library/os.rst
Lib/test/test_bigmem.py
Modules/posixmodule.c
Python/getargs.c
configure
configure.in
pyconfig.h.in

index 043624451afcd09d43dfa7b738622b4ae009e13b..bd8480c416787e83e8f69a6846ad24d1e3d592ec 100644 (file)
@@ -417,6 +417,19 @@ by file descriptors.
    Availability: Macintosh, Unix, Windows.
 
 
+.. function:: fchmod(fd, mode)
+
+   Change the mode of the file given by *fd* to the numeric *mode*.  See the docs
+   for :func:`chmod` for possible values of *mode*.  Availability: Unix.
+
+
+.. function:: fchown(fd, uid, gid)
+
+   Change the owner and group id of the file given by *fd* to the numeric *uid*
+   and *gid*.  To leave one of the ids unchanged, set it to -1.
+   Availability: Unix.
+
+
 .. function:: fdatasync(fd)
 
    Force write of file with filedescriptor *fd* to disk. Does not force update of
@@ -475,6 +488,13 @@ by file descriptors.
    tty(-like) device, else ``False``. Availability: Macintosh, Unix.
 
 
+.. function:: lchmod(path, mode)
+
+   Change the mode of *path* to the numeric *mode*. If path is a symlink, this
+   affects the symlink rather than the target. See the docs for :func:`chmod`
+   for possible values of *mode*.  Availability: Unix.
+
+
 .. function:: lseek(fd, pos, how)
 
    Set the current position of file descriptor *fd* to position *pos*, modified by
index 7244e1be1412c9f48f698ed88a956e4167d8c650..652a523716709691d4224fa8314ae8df62a02ff3 100644 (file)
@@ -64,13 +64,15 @@ class StrTest(unittest.TestCase):
         self.assertEquals(s.count('i'), 1)
         self.assertEquals(s.count('j'), 0)
 
-    @bigmemtest(minsize=0, memuse=1)
+    @bigmemtest(minsize=_2G + 2, memuse=3)
     def test_decode(self, size):
-        pass
+        s = '.' * size
+        self.assertEquals(len(s.decode('utf-8')), size)
 
-    @bigmemtest(minsize=0, memuse=1)
+    @bigmemtest(minsize=_2G + 2, memuse=3)
     def test_encode(self, size):
-        pass
+        s = u'.' * size
+        self.assertEquals(len(s.encode('utf-8')), size)
 
     @bigmemtest(minsize=_2G, memuse=2)
     def test_endswith(self, size):
index 018d68ceb2db3b3b857dad1146685858931b2edf..f183d868327e867d232859aad77d36e78d107615 100644 (file)
@@ -186,6 +186,12 @@ extern int chmod(const char *, int);
 #else
 extern int chmod(const char *, mode_t);
 #endif
+/*#ifdef HAVE_FCHMOD
+extern int fchmod(int, mode_t);
+#endif*/
+/*#ifdef HAVE_LCHMOD
+extern int lchmod(const char *, mode_t);
+#endif*/
 extern int chown(const char *, uid_t, gid_t);
 extern char *getcwd(char *, int);
 extern char *strerror(int);
@@ -1747,6 +1753,52 @@ posix_chmod(PyObject *self, PyObject *args)
 #endif
 }
 
+#ifdef HAVE_FCHMOD
+PyDoc_STRVAR(posix_fchmod__doc__,
+"fchmod(fd, mode)\n\n\
+Change the access permissions of the file given by file\n\
+descriptor fd.");
+
+static PyObject *
+posix_fchmod(PyObject *self, PyObject *args)
+{
+       int fd, mode, res;
+       if (!PyArg_ParseTuple(args, "ii:fchmod", &fd, &mode))
+               return NULL;
+       Py_BEGIN_ALLOW_THREADS
+       res = fchmod(fd, mode);
+       Py_END_ALLOW_THREADS
+       if (res < 0)
+               return posix_error();
+       Py_RETURN_NONE;
+}
+#endif /* HAVE_FCHMOD */
+
+#ifdef HAVE_LCHMOD
+PyDoc_STRVAR(posix_lchmod__doc__,
+"lchmod(path, mode)\n\n\
+Change the access permissions of a file. If path is a symlink, this\n\
+affects the link itself rather than the target.");
+
+static PyObject *
+posix_lchmod(PyObject *self, PyObject *args)
+{
+       char *path = NULL;
+       int i;
+       int res;
+       if (!PyArg_ParseTuple(args, "eti:lchmod", Py_FileSystemDefaultEncoding,
+                             &path, &i))
+               return NULL;
+       Py_BEGIN_ALLOW_THREADS
+       res = lchmod(path, i);
+       Py_END_ALLOW_THREADS
+       if (res < 0)
+               return posix_error_with_allocated_filename(path);
+       PyMem_Free(path);
+       Py_RETURN_NONE;
+}
+#endif /* HAVE_LCHMOD */
+
 
 #ifdef HAVE_CHFLAGS
 PyDoc_STRVAR(posix_chflags__doc__,
@@ -1868,6 +1920,28 @@ posix_chown(PyObject *self, PyObject *args)
 }
 #endif /* HAVE_CHOWN */
 
+#ifdef HAVE_FCHOWN
+PyDoc_STRVAR(posix_fchown__doc__,
+"fchown(fd, uid, gid)\n\n\
+Change the owner and group id of the file given by file descriptor\n\
+fd to the numeric uid and gid.");
+
+static PyObject *
+posix_fchown(PyObject *self, PyObject *args)
+{
+       int fd, uid, gid;
+       int res;
+       if (!PyArg_ParseTuple(args, "iii:chown", &fd, &uid, &gid))
+               return NULL;
+       Py_BEGIN_ALLOW_THREADS
+       res = fchown(fd, (uid_t) uid, (gid_t) gid);
+       Py_END_ALLOW_THREADS
+       if (res < 0)
+               return posix_error();
+       Py_RETURN_NONE;
+}
+#endif /* HAVE_FCHOWN */
+
 #ifdef HAVE_LCHOWN
 PyDoc_STRVAR(posix_lchown__doc__,
 "lchown(path, uid, gid)\n\n\
@@ -6664,9 +6738,18 @@ static PyMethodDef posix_methods[] = {
        {"chflags",     posix_chflags, METH_VARARGS, posix_chflags__doc__},
 #endif /* HAVE_CHFLAGS */
        {"chmod",       posix_chmod, METH_VARARGS, posix_chmod__doc__},
+#ifdef HAVE_FCHMOD
+       {"fchmod",      posix_fchmod, METH_VARARGS, posix_fchmod__doc__},
+#endif /* HAVE_FCHMOD */
 #ifdef HAVE_CHOWN
        {"chown",       posix_chown, METH_VARARGS, posix_chown__doc__},
 #endif /* HAVE_CHOWN */
+#ifdef HAVE_LCHMOD
+       {"lchmod",      posix_lchmod, METH_VARARGS, posix_lchmod__doc__},
+#endif /* HAVE_LCHMOD */
+#ifdef HAVE_FCHOWN
+       {"fchown",      posix_fchown, METH_VARARGS, posix_fchown__doc__},
+#endif /* HAVE_FCHOWN */
 #ifdef HAVE_LCHFLAGS
        {"lchflags",    posix_lchflags, METH_VARARGS, posix_lchflags__doc__},
 #endif /* HAVE_LCHFLAGS */
index 584805e25e601b1d92acbde63c0bb51242f404c4..f6cdd7c0f4aca61eead22ae8460d3536d1b01c18 100644 (file)
@@ -1182,7 +1182,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
        case 'w': { /* memory buffer, read-write access */
                void **p = va_arg(*p_va, void **);
                PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
-               int count;
+               Py_ssize_t count;
                 int temp=-1;
                 Py_buffer view;
 
@@ -1216,7 +1216,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
        case 't': { /* 8-bit character buffer, read-only access */
                char **p = va_arg(*p_va, char **);
                PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
-               int count;
+               Py_ssize_t count;
                 Py_buffer view;
 
                if (*format++ != '#')
index 53c1ec56cac586f9200d679beab12e0b0a902a7f..c5b22a4cec624bce2efbc1bf4c4dc3e6c3470d3e 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.in Revision: 58054 .
+# From configure.in Revision: 58817 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.61 for python 3.0.
 #
@@ -15436,15 +15436,18 @@ echo "${ECHO_T}MACHDEP_OBJS" >&6; }
 
 
 
+
+
+
 
 
 
 
 for ac_func in alarm bind_textdomain_codeset chflags chown clock confstr \
- ctermid execv fork fpathconf ftime ftruncate \
+ ctermid execv fchmod fchown fork fpathconf ftime ftruncate \
  gai_strerror getgroups getlogin getloadavg getpeername getpgid getpid \
  getpriority getpwent getspnam getspent getsid getwd \
- kill killpg lchflags lchown lstat mkfifo mknod mktime \
+ kill killpg lchflags lchmod lchown lstat mkfifo mknod mktime \
  mremap nice pathconf pause plock poll pthread_init \
  putenv readlink realpath \
  select setegid seteuid setgid \
index 059d184749e65c8d791480746b9721b7a6b7c7bd..608d6ae43c1bd362a83995c95f9cb9525cb37a4a 100644 (file)
@@ -2275,10 +2275,10 @@ AC_MSG_RESULT(MACHDEP_OBJS)
 
 # checks for library functions
 AC_CHECK_FUNCS(alarm bind_textdomain_codeset chflags chown clock confstr \
- ctermid execv fork fpathconf ftime ftruncate \
+ ctermid execv fchmod fchown fork fpathconf ftime ftruncate \
  gai_strerror getgroups getlogin getloadavg getpeername getpgid getpid \
  getpriority getpwent getspnam getspent getsid getwd \
- kill killpg lchflags lchown lstat mkfifo mknod mktime \
+ kill killpg lchflags lchmod lchown lstat mkfifo mknod mktime \
  mremap nice pathconf pause plock poll pthread_init \
  putenv readlink realpath \
  select setegid seteuid setgid \
index 11ea4a0d24a22b4b7e103fe1b7f2acf90d40ffd6..4f45cb96aa9f8b9cc781a30194567e7ab4583266 100644 (file)
 /* Define if you have the 'fchdir' function. */
 #undef HAVE_FCHDIR
 
+/* Define to 1 if you have the `fchmod' function. */
+#undef HAVE_FCHMOD
+
+/* Define to 1 if you have the `fchown' function. */
+#undef HAVE_FCHOWN
+
 /* Define to 1 if you have the <fcntl.h> header file. */
 #undef HAVE_FCNTL_H
 
 /* Define to 1 if you have the `lchflags' function. */
 #undef HAVE_LCHFLAGS
 
+/* Define to 1 if you have the `lchmod' function. */
+#undef HAVE_LCHMOD
+
 /* Define to 1 if you have the `lchown' function. */
 #undef HAVE_LCHOWN