1/* vi: set sw=4 ts=4: */ 2/* 3 * usleep implementation for busybox 4 * 5 * Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org> 6 * 7 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 8 */ 9//config:config USLEEP 10//config: bool "usleep (1.1 kb)" 11//config: default y 12//config: help 13//config: usleep is used to pause for a specified number of microseconds. 14 15//applet:IF_USLEEP(APPLET_NOFORK(usleep, usleep, BB_DIR_BIN, BB_SUID_DROP, usleep)) 16 17//kbuild:lib-$(CONFIG_USLEEP) += usleep.o 18 19/* BB_AUDIT SUSv3 N/A -- Apparently a busybox extension. */ 20 21//usage:#define usleep_trivial_usage 22//usage: "N" 23//usage:#define usleep_full_usage "\n\n" 24//usage: "Pause for N microseconds" 25//usage: 26//usage:#define usleep_example_usage 27//usage: "$ usleep 1000000\n" 28//usage: "[pauses for 1 second]\n" 29 30#include "libbb.h" 31 32/* This is a NOFORK applet. Be very careful! */ 33 34int usleep_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 35int usleep_main(int argc UNUSED_PARAM, char **argv) 36{ 37 if (!argv[1]) { 38 bb_show_usage(); 39 } 40 41 /* Safe wrt NOFORK? (noforks are not allowed to run for 42 * a long time). Try "usleep 99999999" + ^C + "echo $?" 43 * in hush with FEATURE_SH_NOFORK=y. 44 * At least on uclibc, usleep() thanslates to nanosleep() 45 * which returns early on any signal (even caught one), 46 * and uclibc does not loop back on EINTR. 47 */ 48 usleep(xatou(argv[1])); 49 50 return EXIT_SUCCESS; 51} 52