The change in nsec() not to cache fds broke cpp. The problem is in cpp, not in nsec. Because it checks if fd <= 0 and, somehow, it's called with 0 closed from the ape framework. Now that we don't have hidden open fds, open returns 0 and ape thinks a file does not exist. I think this fixes the problem. Reference: /n/patches.lsub.org/patch/cppnsec Date: Thu Apr 19 11:51:16 CES 2012 Signed-off-by: nemo@lsub.org --- /sys/src/cmd/cpp/nlist.c Thu Apr 12 12:25:27 2012 +++ /sys/src/cmd/cpp/nlist.c Thu Apr 19 11:44:22 2012 @@ -170,7 +170,7 @@ dp[len] = '\0'; } fp = (char*)newstring((uchar*)argv[0], strlen(argv[0]), 0); - if ((fd = open(fp, 0)) <= 0) + if ((fd = open(fp, 0)) < 0) error(FATAL, "Can't open input file %s", fp); } if (argc > 1) {