On 29 August 2012 14:35, Cedric Blancher <cedric.blanc...@googlemail.com> wrote: > On 29 August 2012 10:01, Roland Mainz <roland.ma...@nrubsig.org> wrote: >> [Forwarding email since somehow the ast-developers@ list has issues >> with postings from Olga's address... ;-( ] >> ---------- Forwarded message ---------- >> From: ольга крыжановская <olga.kryzhanov...@gmail.com> >> Date: Wed, Aug 29, 2012 at 7:36 AM >> Subject: Fwd: Per thread open(), stat(), rename() and so on, and *at() API >> To: Roland Mainz <roland.ma...@nrubsig.org> >> >> >> Wenn du wach bist schick es bitte nochmal an >> ast-developers@research.att.com. Meine mail ist im spam-filter >> hangengeblieben. >> ---------- Forwarded message ---------- >> From: ольга крыжановская <olga.kryzhanov...@gmail.com> >> Date: Wed, Aug 29, 2012 at 6:54 AM >> Subject: Per thread open(), stat(), rename() and so on, and *at() API >> To: Glenn Fowler <g...@research.att.com>, David Korn >> <d...@research.att.com>, Phong Vo <k...@research.att.com> >> Cc: ast-developers@research.att.com >> >> >> Glenn, I have an alternative for your per thread open(), stat(), >> rename() and so on API plans: >> >> Instead of creating AST wrapper code for open(), stat(), rename() and >> so we could use the following macros, defined in <ast/fcntl.h>: >> >> ------------------cutme------------------------ >> #define unlink(path) >> unlinkat(AST_GET_CURRENT_THREAD_CWD_FD(), (path), 0) >> #define rmdir(path) >> unlinkat(AST_GET_CURRENT_THREAD_CWD_FD(), >> (path), AT_REMOVEDIR) >> #define chown(path, uid, >> gid) fchownat(AST_GET_CURRENT_THREAD_CWD_FD(), (path), (uid), >> (gid), >> 0) >> #define lchown(path, uid, gid) >> fchownat(AST_GET_CURRENT_THREAD_CWD_FD(), (path), (uid), (gid), >> AT_SYMLINK_NOFOLLOW) >> #define stat(path, sb) >> fstatat(AST_GET_CURRENT_THREAD_CWD_FD(), >> (path), (sb), 0) >> #define lstat(path, sb) >> fstatat(AST_GET_CURRENT_THREAD_CWD_FD(), >> (path), (sb), AT_SYMLINK_NOFOLLOW) >> #define rename(oldname, >> newname) renameat(AST_GET_CURRENT_THREAD_CWD_FD(), (oldname), >> AST_GET_CURRENT_THREAD_CWD_FD(), (newname)) >> #define access(path, >> amode) faccessat(AST_GET_CURRENT_THREAD_CWD_FD(), (path), (amode), >> 0) >> #define eaccess(path, >> amode) faccessat(AST_GET_CURRENT_THREAD_CWD_FD(), (path), (amode), >> AT_EACCESS) >> #define mkdir(path, amode) >> mkdirat(AST_GET_CURRENT_THREAD_CWD_FD(), >> (path), (amode)) >> #define mkfifo(path, amode) >> mkfifoat(AST_GET_CURRENT_THREAD_CWD_FD(), >> (path), (amode)) >> #define mknod(path, amode, >> adev) mknodat(AST_GET_CURRENT_THREAD_CWD_FD(), (path), (amode), >> (adev)) >> #define readlink(path, buf, >> bufsize) readlinkat(AST_GET_CURRENT_THREAD_CWD_FD(), (path), (buf), >> (bufsize)) >> #define symlink(oldpath, newpath) symlinkat((oldpath), >> AST_GET_CURRENT_THREAD_CWD_FD(), (newpath)) >> ------------------cutme------------------------ >> >> AST_GET_CURRENT_THREAD_CWD_FD() would be defined to be a preprocessor >> macro, which will be a function returning the current thread's cwd fd; >> if there is none allocated for this thread yet it will be done by >> within that function, using open(".", O_search). >> >> However, consumers of the <ast/fcntl.h> header are _free_ to redefine >> this macro, for example src/cmd/ksh93/include/defs.h could define >> AST_GET_CURRENT_THREAD_CWD_FD() as >> #define AST_GET_CURRENT_THREAD_CWD_FD() (shp->pwdfd) >> This would, at least, save the function call overhead, and finally >> make use of (shp->pwdfd) as it was intended. >> >> What do you think? It would make things easier for you to implement, >> i.e. you only have to implement the per thread >> AST_GET_CURRENT_THREAD_CWD_FD(), and applications are free to use the >> *at() API if they wish to. > > What do you intend to do for platforms which do not have the POSIX > openat() and friends API? Old Solaris, old Linux comes in mind (not > that I care about any OS older than four years)...
Search your inbox for emails with the title "[ast-developers] |*at()|-emulation, 3rd prototype...". It contains emulation functions for all *at() calls, using the old POSIX functions to emulate them. Lionel _______________________________________________ ast-developers mailing list ast-developers@research.att.com https://mailman.research.att.com/mailman/listinfo/ast-developers