/* * (c) Bernd 'Aard' Wachter, * You may use and redistribute this file under the terms and conditions * of the GNU GPL v2 * * Install: * - Compile with cc sus.c -o sus * - Copy sus into some directory in your searchpath (e.g. /usr/bin) * - Create links named sus_disk, sus_foo, ... or disk, foo, ... to sus * * Usage: * - call `sus disk' or sus_disk or disk or sus_foo, [...] * */ #include #include #include #define STATE_PATH "/sys/power/state" void msg(char *msg){ write(1,msg,strlen(msg)); } int wrstate(char *gov){ int fd; if ((fd=open(STATE_PATH, O_WRONLY))==-1){ msg("Cannot open state file\n"); return -1; } write(fd,gov,strlen(gov)); if (close(fd)==-1) { msg("Problem closing state file\n"); return -1; } return 0; } int main(int argc, char** argv) { setuid(geteuid()); sync(); if (!strncmp(argv[0],"sus_", 4)) { msg("Suspending to "); msg(argv[0]+4); msg("\n"); if (wrstate(argv[0]+4)==-1) return -1; } else if (argv[1]!=0){ msg("Suspending to "); msg(argv[1]); msg("\n"); if (wrstate(argv[1])==-1) return -1; } else { msg("Suspending to "); msg(argv[0]); msg("\n"); if (wrstate(argv[0])==-1) return -1; } return 0; }