annotate Python/dup2.c @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents cd73917f2478
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1449
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /*
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 * Public domain dup2() lookalike
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 * by Curtis Jackson @ AT&T Technologies, Burlington, NC
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 * electronic address: burl!rcj
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 *
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 * dup2 performs the following functions:
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 *
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 * Check to make sure that fd1 is a valid open file descriptor.
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 * Check to see if fd2 is already open; if so, close it.
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 * Duplicate fd1 onto fd2; checking to make sure fd2 is a valid fd.
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 * Return fd2 if all went well; return BADEXIT otherwise.
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 */
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
13
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 #include <fcntl.h>
65103
cd73917f2478 Merged revisions 85236 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 13658
diff changeset
15 #include <unistd.h>
1449
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 #define BADEXIT -1
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 int
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 1825
diff changeset
20 dup2(int fd1, int fd2)
1449
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 {
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 if (fd1 != fd2) {
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 if (fcntl(fd1, F_GETFL) < 0)
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 return BADEXIT;
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 if (fcntl(fd2, F_GETFL) >= 0)
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 close(fd2);
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 if (fcntl(fd1, F_DUPFD, fd2) < 0)
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 return BADEXIT;
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 }
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 return fd2;
ae93ec4dd556 New files.
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 }