aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2013-07-14 22:12:22 -0500
committerRob Landley <rob@landley.net>2013-07-14 22:12:22 -0500
commit87aef2480ed3c6ca587815ea36e7dd380301c97c (patch)
tree29e22b25293b8fce82517d29e89f8d94866dd681
parente999ca008416e3d41c1079bcb4d151b43c95dc3a (diff)
downloadtoybox-87aef2480ed3c6ca587815ea36e7dd380301c97c.tar.gz
New stuff added to lib.c needs review too, so make a lib/pending.c and move several functions to it.
-rw-r--r--lib/lib.c109
-rw-r--r--lib/pending.c104
2 files changed, 104 insertions, 109 deletions
diff --git a/lib/lib.c b/lib/lib.c
index f4fcaef4..af347ca5 100644
--- a/lib/lib.c
+++ b/lib/lib.c
@@ -1034,37 +1034,6 @@ int yesno(char *prompt, int def)
return def;
}
-// Execute a callback for each PID that matches a process name from a list.
-void for_each_pid_with_name_in(char **names, int (*callback)(pid_t pid, char *name))
-{
- DIR *dp;
- struct dirent *entry;
- char cmd[sizeof(toybuf)], path[64];
- char **curname;
-
- if (!(dp = opendir("/proc"))) perror_exit("opendir");
-
- while ((entry = readdir(dp))) {
- int fd, n;
-
- if (!isdigit(*entry->d_name)) continue;
-
- if (sizeof(path) <= snprintf(path, sizeof(path), "/proc/%s/cmdline",
- entry->d_name)) continue;
-
- if (-1 == (fd=open(path, O_RDONLY))) continue;
- n = read(fd, cmd, sizeof(cmd));
- close(fd);
- if (n<1) continue;
-
- for (curname = names; *curname; curname++)
- if (!strcmp(basename(cmd), *curname))
- if (!callback(atol(entry->d_name), *curname)) goto done;
- }
-done:
- closedir(dp);
-}
-
struct signame {
int num;
char *name;
@@ -1235,81 +1204,3 @@ void mode_to_string(mode_t mode, char *buf)
else c = '-';
*buf = c;
}
-
-char* make_human_readable(unsigned long long size, unsigned long unit)
-{
- unsigned int frac = 0;
- if(unit) {
- size = (size/(unit)) + (size%(unit)?1:0);
- return xmsprintf("%llu", size);
- }
- else {
- static char units[] = {'\0', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'};
- int index = 0;
- while(size >= 1024) {
- frac = size%1024;
- size /= 1024;
- index++;
- }
- frac = (frac/102) + ((frac%102)?1:0);
- if(frac >= 10) {
- size += 1;
- frac = 0;
- }
- if(frac) return xmsprintf("%llu.%u%c", size, frac, units[index]);
- else return xmsprintf("%llu%c", size, units[index]);
- }
- return NULL; //not reached
-}
-
-// strtoul with exit on error
-unsigned long xstrtoul(const char *nptr, char **endptr, int base)
-{
- unsigned long l;
- errno = 0;
- l = strtoul(nptr, endptr, base);
- if (errno)
- perror_exit("xstrtoul");
- return l;
-}
-
-/*
- * used to get the interger value.
- */
-unsigned long get_int_value(const char *numstr, unsigned lowrange, unsigned highrange)
-{
- unsigned long rvalue = 0;
- char *ptr;
- if(*numstr == '-' || *numstr == '+' || isspace(*numstr)) perror_exit("invalid number '%s'", numstr);
- errno = 0;
- rvalue = strtoul(numstr, &ptr, 10);
- if(errno || numstr == ptr) perror_exit("invalid number '%s'", numstr);
- if(*ptr) perror_exit("invalid number '%s'", numstr);
- if(rvalue >= lowrange && rvalue <= highrange) return rvalue;
- else {
- perror_exit("invalid number '%s'", numstr);
- return rvalue; //Not reachable; to avoid waring message.
- }
-}
-
-/*
- * strcat to mallocated buffer
- * reallocate if need be
- */
-char *astrcat (char *x, char *y) {
- char *z;
- z = x;
- x = realloc (x, (x ? strlen (x) : 0) + strlen (y) + 1);
- if (!x) return 0;
- (z ? strcat : strcpy) (x, y);
- return x;
-}
-
-/*
- * astrcat, but die on failure
- */
-char *xastrcat (char *x, char *y) {
- x = astrcat (x, y);
- if (!x) error_exit ("xastrcat");
- return x;
-}
diff --git a/lib/pending.c b/lib/pending.c
new file mode 100644
index 00000000..fad1c656
--- /dev/null
+++ b/lib/pending.c
@@ -0,0 +1,104 @@
+/* pending.c - reusable stuff awaiting review
+ *
+ * new lib entries for stuff in toys/pending
+ */
+
+#include "toys.h"
+
+// Execute a callback for each PID that matches a process name from a list.
+void for_each_pid_with_name_in(char **names, int (*callback)(pid_t pid, char *name))
+{
+ DIR *dp;
+ struct dirent *entry;
+ char cmd[sizeof(toybuf)], path[64];
+ char **curname;
+
+ if (!(dp = opendir("/proc"))) perror_exit("opendir");
+
+ while ((entry = readdir(dp))) {
+ int fd, n;
+
+ if (!isdigit(*entry->d_name)) continue;
+
+ if (sizeof(path) <= snprintf(path, sizeof(path), "/proc/%s/cmdline",
+ entry->d_name)) continue;
+
+ if (-1 == (fd=open(path, O_RDONLY))) continue;
+ n = read(fd, cmd, sizeof(cmd));
+ close(fd);
+ if (n<1) continue;
+
+ for (curname = names; *curname; curname++)
+ if (!strcmp(basename(cmd), *curname))
+ if (!callback(atol(entry->d_name), *curname)) goto done;
+ }
+done:
+ closedir(dp);
+}
+
+char* make_human_readable(unsigned long long size, unsigned long unit)
+{
+ unsigned int frac = 0;
+ if(unit) {
+ size = (size/(unit)) + (size%(unit)?1:0);
+ return xmsprintf("%llu", size);
+ }
+ else {
+ static char units[] = {'\0', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'};
+ int index = 0;
+ while(size >= 1024) {
+ frac = size%1024;
+ size /= 1024;
+ index++;
+ }
+ frac = (frac/102) + ((frac%102)?1:0);
+ if(frac >= 10) {
+ size += 1;
+ frac = 0;
+ }
+ if(frac) return xmsprintf("%llu.%u%c", size, frac, units[index]);
+ else return xmsprintf("%llu%c", size, units[index]);
+ }
+ return NULL; //not reached
+}
+
+/*
+ * used to get the interger value.
+ */
+unsigned long get_int_value(const char *numstr, unsigned lowrange, unsigned highrange)
+{
+ unsigned long rvalue = 0;
+ char *ptr;
+ if(*numstr == '-' || *numstr == '+' || isspace(*numstr)) perror_exit("invalid number '%s'", numstr);
+ errno = 0;
+ rvalue = strtoul(numstr, &ptr, 10);
+ if(errno || numstr == ptr) perror_exit("invalid number '%s'", numstr);
+ if(*ptr) perror_exit("invalid number '%s'", numstr);
+ if(rvalue >= lowrange && rvalue <= highrange) return rvalue;
+ else {
+ perror_exit("invalid number '%s'", numstr);
+ return rvalue; //Not reachable; to avoid waring message.
+ }
+}
+
+/*
+ * strcat to mallocated buffer
+ * reallocate if need be
+ */
+char *astrcat (char *x, char *y) {
+ char *z;
+ z = x;
+ x = realloc (x, (x ? strlen (x) : 0) + strlen (y) + 1);
+ if (!x) return 0;
+ (z ? strcat : strcpy) (x, y);
+ return x;
+}
+
+/*
+ * astrcat, but die on failure
+ */
+char *xastrcat (char *x, char *y) {
+ x = astrcat (x, y);
+ if (!x) error_exit ("xastrcat");
+ return x;
+}