[47049] trunk/base/src/pextlib1.0/Pextlib.c
blb at macports.org
blb at macports.org
Fri Feb 20 17:12:55 PST 2009
Revision: 47049
http://trac.macports.org/changeset/47049
Author: blb at macports.org
Date: 2009-02-20 17:12:52 -0800 (Fri, 20 Feb 2009)
Log Message:
-----------
pextlib1.0/Pextlib.c - add lchown command
Modified Paths:
--------------
trunk/base/src/pextlib1.0/Pextlib.c
Modified: trunk/base/src/pextlib1.0/Pextlib.c
===================================================================
--- trunk/base/src/pextlib1.0/Pextlib.c 2009-02-20 22:06:01 UTC (rev 47048)
+++ trunk/base/src/pextlib1.0/Pextlib.c 2009-02-21 01:12:52 UTC (rev 47049)
@@ -1225,6 +1225,53 @@
return TCL_OK;
}
+/**
+ *
+ * Tcl wrapper around lchown() to allow changing ownership of symlinks
+ * ('file attributes' follows the symlink).
+ *
+ * Synopsis: lchown filename user ?group?
+ */
+int lchownCmd(ClientData clientData UNUSED, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
+{
+ CONST char *path;
+ long user;
+ long group = -1;
+
+ if (objc != 3 && objc != 4) {
+ Tcl_WrongNumArgs(interp, 1, objv, "filename user ?group?");
+ return TCL_ERROR;
+ }
+
+ path = Tcl_GetString(objv[1]);
+ if (Tcl_GetLongFromObj(NULL, objv[2], &user) != TCL_OK) {
+ CONST char *userString = Tcl_GetString(objv[2]);
+ struct passwd *pwent = getpwnam(userString);
+ if (pwent == NULL) {
+ Tcl_SetResult(interp, "Unknown user given", TCL_STATIC);
+ return TCL_ERROR;
+ }
+ user = pwent->pw_uid;
+ }
+ if (objc == 4) {
+ if (Tcl_GetLongFromObj(NULL, objv[3], &group) != TCL_OK) {
+ CONST char *groupString = Tcl_GetString(objv[3]);
+ struct group *grent = getgrnam(groupString);
+ if (grent == NULL) {
+ Tcl_SetResult(interp, "Unknown group given", TCL_STATIC);
+ return TCL_ERROR;
+ }
+ group = grent->gr_gid;
+ }
+ }
+ if (lchown(path, (uid_t) user, (gid_t) group) != 0) {
+ Tcl_SetResult(interp, (char *)Tcl_PosixError(interp), TCL_STATIC);
+ return TCL_ERROR;
+ }
+
+ return TCL_OK;
+}
+
int Pextlib_Init(Tcl_Interp *interp)
{
if (Tcl_InitStubs(interp, "8.3", 0) == NULL)
@@ -1258,6 +1305,7 @@
Tcl_CreateObjCommand(interp, "curl", CurlCmd, NULL, NULL);
Tcl_CreateObjCommand(interp, "symlink", CreateSymlinkCmd, NULL, NULL);
Tcl_CreateObjCommand(interp, "unsetenv", UnsetEnvCmd, NULL, NULL);
+ Tcl_CreateObjCommand(interp, "lchown", lchownCmd, NULL, NULL);
Tcl_CreateObjCommand(interp, "readline", ReadlineCmd, NULL, NULL);
Tcl_CreateObjCommand(interp, "rl_history", RLHistoryCmd, NULL, NULL);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20090220/1d27883f/attachment.html>
More information about the macports-changes
mailing list