Version 1 of Accessing C library functions using Critcl

Updated 2004-04-05 08:16:58

I had the need to access some C library functions that weren't available via standard Tcl or TclX, so I wrote a simple wrapper using Critcl.

These are wrappers for some of the set/get uid functions in Unix, but you could use the same approach for most functions - stevel April 5 2004

Compile using ==== $ critcl -pkg uid.tcl ====

==== package require critcl package provide uid 1.0

if {!critcl::compiling} {

    puts stderr "This extension cannot be compiled without critcl enabled"
    exit 1

}

critcl::ccode {

    #include <sys/types.h>
    #include <unistd.h>
    #include <pwd.h>

}

critcl::cproc setusergroup {char* name} int {

    struct passwd *pwd = getpwnam(name);
    if (pwd == NULL) {
            return 0;
    }
    initgroups(name,pwd->pw_gid);
    setgid(pwd->pw_gid);
    setuid(pwd->pw_uid);
    return 1;

}

critcl::cproc setuid {char* name} int {

    struct passwd *pwd = getpwnam(name);
    if (pwd == NULL) {
            return 0;
    }
    setuid(pwd->pw_uid);
    return 1;

}

critcl::cproc seteuid {char* name} int {

    struct passwd *pwd = getpwnam(name);
    if (pwd == NULL) {
    }
    seteuid(pwd->pw_uid);
    return 1;

}

critcl::cproc getuid {} int {

    return getuid();

}

critcl::cproc geteuid {} int {

    return geteuid();

}

critcl::cproc setsid {} int {

    return setsid();

} ====