Mercurial > hg > toybox
annotate lib/lib.c @ 1278:324306321d82 draft
Initial cleanup of last: mostly whitespace, move no record test to start of loop, don't bother to stat an empty file to report when an empty log was created (just report current time).
author | Rob Landley <rob@landley.net> |
---|---|
date | Sat, 10 May 2014 13:20:03 -0500 |
parents | d48bdc1cb017 |
children | 313980d3d78c |
rev | line source |
---|---|
951
62d59b8aea34
Split lib/xwrap.c from lib/lib.c
Rob Landley <rob@landley.net>
parents:
949
diff
changeset
|
1 /* lib.c - various reusable stuff. |
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
2 * |
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
3 * Copyright 2006 Rob Landley <rob@landley.net> |
2
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
4 */ |
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
5 |
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
6 #include "toys.h" |
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
7 |
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
8 void verror_msg(char *msg, int err, va_list va) |
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
9 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
10 char *s = ": %s"; |
245
67a0839bda77
Teach perror_exit() to take a NULL argument when we just want "command: error".
Rob Landley <rob@landley.net>
parents:
234
diff
changeset
|
11 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
12 fprintf(stderr, "%s: ", toys.which->name); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
13 if (msg) vfprintf(stderr, msg, va); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
14 else s+=2; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
15 if (err) fprintf(stderr, s, strerror(err)); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
16 putc('\n', stderr); |
780
6cc69be43c42
Have error_msg() and friends set TT.exitval to 1 if it's still 0, clean out other places that were setting it that no longer need to.
Rob Landley <rob@landley.net>
parents:
762
diff
changeset
|
17 if (!toys.exitval) toys.exitval++; |
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
18 } |
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
19 |
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
20 void error_msg(char *msg, ...) |
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
21 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
22 va_list va; |
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
23 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
24 va_start(va, msg); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
25 verror_msg(msg, 0, va); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
26 va_end(va); |
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
27 } |
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
28 |
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
29 void perror_msg(char *msg, ...) |
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
30 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
31 va_list va; |
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
32 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
33 va_start(va, msg); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
34 verror_msg(msg, errno, va); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
35 va_end(va); |
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
36 } |
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
37 |
2
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
38 // Die with an error message. |
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
39 void error_exit(char *msg, ...) |
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
40 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
41 va_list va; |
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
42 |
858
34ac05521d94
Move guts of help command into show_help() in lib/help.c, with config TOYBOX_HELP controlling infrastructure.
Rob Landley <rob@landley.net>
parents:
798
diff
changeset
|
43 if (CFG_TOYBOX_HELP && toys.exithelp) show_help(); |
144
1fbc50374a30
Promote help to global config option, teach error_exit() to output usage message when called
Rob Landley <rob@landley.net>
parents:
143
diff
changeset
|
44 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
45 va_start(va, msg); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
46 verror_msg(msg, 0, va); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
47 va_end(va); |
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
48 |
925
07693eb46e26
Add xexit() and make error_exit() use it.
Rob Landley <rob@landley.net>
parents:
916
diff
changeset
|
49 xexit(); |
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
50 } |
2
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
51 |
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
52 // Die with an error message and strerror(errno) |
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
53 void perror_exit(char *msg, ...) |
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
54 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
55 va_list va; |
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
56 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
57 va_start(va, msg); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
58 verror_msg(msg, errno, va); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
59 va_end(va); |
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
60 |
925
07693eb46e26
Add xexit() and make error_exit() use it.
Rob Landley <rob@landley.net>
parents:
916
diff
changeset
|
61 xexit(); |
2
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
62 } |
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
63 |
63
69efffcacd70
Add fdprintf(). Remove reread() and rewrite() which handle -EINTR, which
Rob Landley <rob@landley.net>
parents:
53
diff
changeset
|
64 // Keep reading until full or EOF |
69efffcacd70
Add fdprintf(). Remove reread() and rewrite() which handle -EINTR, which
Rob Landley <rob@landley.net>
parents:
53
diff
changeset
|
65 ssize_t readall(int fd, void *buf, size_t len) |
50
63c168b65fa6
Add rewrite(), writeall(),and xwrite() to match the read versions.
Rob Landley <rob@landley.net>
parents:
49
diff
changeset
|
66 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
67 size_t count = 0; |
309
79a61cd58596
Bug spotted by Roberto Foglietta: at EOF readall() should return count, not len.
Rob Landley <rob@landley.net>
parents:
308
diff
changeset
|
68 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
69 while (count<len) { |
1141
37cbbbe547a3
Doing math on void pointers isn't portable, reported by Nathan McSween.
Rob Landley <rob@landley.net>
parents:
1131
diff
changeset
|
70 int i = read(fd, (char *)buf+count, len-count); |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
71 if (!i) break; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
72 if (i<0) return i; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
73 count += i; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
74 } |
8
04f66da2bdbf
Add reread(), readall(), and xread() on the bus ride in to work...
landley@driftwood
parents:
7
diff
changeset
|
75 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
76 return count; |
8
04f66da2bdbf
Add reread(), readall(), and xread() on the bus ride in to work...
landley@driftwood
parents:
7
diff
changeset
|
77 } |
04f66da2bdbf
Add reread(), readall(), and xread() on the bus ride in to work...
landley@driftwood
parents:
7
diff
changeset
|
78 |
50
63c168b65fa6
Add rewrite(), writeall(),and xwrite() to match the read versions.
Rob Landley <rob@landley.net>
parents:
49
diff
changeset
|
79 // Keep writing until done or EOF |
63
69efffcacd70
Add fdprintf(). Remove reread() and rewrite() which handle -EINTR, which
Rob Landley <rob@landley.net>
parents:
53
diff
changeset
|
80 ssize_t writeall(int fd, void *buf, size_t len) |
50
63c168b65fa6
Add rewrite(), writeall(),and xwrite() to match the read versions.
Rob Landley <rob@landley.net>
parents:
49
diff
changeset
|
81 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
82 size_t count = 0; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
83 while (count<len) { |
1202
4f080cdb2f6e
Various cleanups found by Tom Sparrow's static analysis.
Rob Landley <rob@landley.net>
parents:
1145
diff
changeset
|
84 int i = write(fd, count+(char *)buf, len-count); |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
85 if (i<1) return i; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
86 count += i; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
87 } |
50
63c168b65fa6
Add rewrite(), writeall(),and xwrite() to match the read versions.
Rob Landley <rob@landley.net>
parents:
49
diff
changeset
|
88 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
89 return count; |
50
63c168b65fa6
Add rewrite(), writeall(),and xwrite() to match the read versions.
Rob Landley <rob@landley.net>
parents:
49
diff
changeset
|
90 } |
63c168b65fa6
Add rewrite(), writeall(),and xwrite() to match the read versions.
Rob Landley <rob@landley.net>
parents:
49
diff
changeset
|
91 |
1070
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
92 // skip this many bytes of input. Return 0 for success, >0 means this much |
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
93 // left after input skipped. |
623
f51beec92738
New infrastructure for od (oops).
Rob Landley <rob@landley.net>
parents:
615
diff
changeset
|
94 off_t lskip(int fd, off_t offset) |
f51beec92738
New infrastructure for od (oops).
Rob Landley <rob@landley.net>
parents:
615
diff
changeset
|
95 { |
1070
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
96 off_t cur = lseek(fd, 0, SEEK_CUR); |
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
97 |
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
98 if (cur != -1) { |
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
99 off_t end = lseek(fd, 0, SEEK_END) - cur; |
623
f51beec92738
New infrastructure for od (oops).
Rob Landley <rob@landley.net>
parents:
615
diff
changeset
|
100 |
1070
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
101 if (end > 0 && end < offset) return offset - end; |
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
102 end = offset+cur; |
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
103 if (end == lseek(fd, end, SEEK_SET)) return 0; |
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
104 perror_exit("lseek"); |
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
105 } |
623
f51beec92738
New infrastructure for od (oops).
Rob Landley <rob@landley.net>
parents:
615
diff
changeset
|
106 |
1070
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
107 while (offset>0) { |
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
108 int try = offset>sizeof(libbuf) ? sizeof(libbuf) : offset, or; |
623
f51beec92738
New infrastructure for od (oops).
Rob Landley <rob@landley.net>
parents:
615
diff
changeset
|
109 |
1070
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
110 or = readall(fd, libbuf, try); |
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
111 if (or < 0) perror_exit("lskip to %lld", (long long)offset); |
1212
86745958cea9
Fix another bug reported by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
1202
diff
changeset
|
112 else offset -= or; |
1070
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
113 if (or < try) break; |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
114 } |
1070
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
115 |
16167a7c1b5a
Fix -t c0 and -J as reported by heehooman at gmail on the list.
Rob Landley <rob@landley.net>
parents:
1043
diff
changeset
|
116 return offset; |
623
f51beec92738
New infrastructure for od (oops).
Rob Landley <rob@landley.net>
parents:
615
diff
changeset
|
117 } |
f51beec92738
New infrastructure for od (oops).
Rob Landley <rob@landley.net>
parents:
615
diff
changeset
|
118 |
1219
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
119 // flags: 1=make last dir (with mode lastmode, otherwise skips last component) |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
120 // 2=make path (already exists is ok) |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
121 // 4=verbose |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
122 // returns 0 = path ok, 1 = error |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
123 int mkpathat(int atfd, char *dir, mode_t lastmode, int flags) |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
124 { |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
125 struct stat buf; |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
126 char *s; |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
127 |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
128 // mkdir -p one/two/three is not an error if the path already exists, |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
129 // but is if "three" is a file. The others we dereference and catch |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
130 // not-a-directory along the way, but the last one we must explicitly |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
131 // test for. Might as well do it up front. |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
132 |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
133 if (!fstatat(atfd, dir, &buf, 0) && !S_ISDIR(buf.st_mode)) { |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
134 errno = EEXIST; |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
135 return 1; |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
136 } |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
137 |
1226
e1b09affb6db
Fix mkdir -p with absolute paths.
Rob Landley <rob@landley.net>
parents:
1219
diff
changeset
|
138 for (s = dir; ;s++) { |
1219
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
139 char save = 0; |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
140 mode_t mode = (0777&~toys.old_umask)|0300; |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
141 |
1226
e1b09affb6db
Fix mkdir -p with absolute paths.
Rob Landley <rob@landley.net>
parents:
1219
diff
changeset
|
142 // find next '/', but don't try to mkdir "" at start of absolute path |
e1b09affb6db
Fix mkdir -p with absolute paths.
Rob Landley <rob@landley.net>
parents:
1219
diff
changeset
|
143 if (*s == '/' && (flags&2) && s != dir) { |
1219
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
144 save = *s; |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
145 *s = 0; |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
146 } else if (*s) continue; |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
147 |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
148 // Use the mode from the -m option only for the last directory. |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
149 if (!save) { |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
150 if (flags&1) mode = lastmode; |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
151 else break; |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
152 } |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
153 |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
154 if (mkdirat(atfd, dir, mode)) { |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
155 if (!(flags&2) || errno != EEXIST) return 1; |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
156 } else if (flags&4) |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
157 fprintf(stderr, "%s: created directory '%s'\n", toys.which->name, dir); |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
158 |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
159 if (!(*s = save)) break; |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
160 } |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
161 |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
162 return 0; |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
163 } |
468444e5c7c5
Move mkpathat to lib, remove redundant function used by patch.
Rob Landley <rob@landley.net>
parents:
1218
diff
changeset
|
164 |
708
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
165 // Split a path into linked list of components, tracking head and tail of list. |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
166 // Filters out // entries with no contents. |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
167 struct string_list **splitpath(char *path, struct string_list **list) |
4
732b055e17f7
Add xmsprintf(), xgetcwd(), xgetcwd(), find_in_path().
landley@driftwood
parents:
3
diff
changeset
|
168 { |
708
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
169 char *new = path; |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
170 |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
171 *list = 0; |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
172 do { |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
173 int len; |
16
dd10785b6532
Add xabspath(), is_file_type(), which_in_path(), and find_in_path().
Rob Landley <rob@landley.net>
parents:
8
diff
changeset
|
174 |
708
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
175 if (*path && *path != '/') continue; |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
176 len = path-new; |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
177 if (len > 0) { |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
178 *list = xmalloc(sizeof(struct string_list) + len + 1); |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
179 (*list)->next = 0; |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
180 strncpy((*list)->str, new, len); |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
181 (*list)->str[len] = 0; |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
182 list = &(*list)->next; |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
183 } |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
184 new = path+1; |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
185 } while (*path++); |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
186 |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
187 return list; |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
188 } |
50d759f8b371
Remove readlink -m for being poorly defined ("readlink -m /dev/null/and/more" answers what question, exactly?), rewrite xabspath() to work right and not depend on realpath, fix subtle longstanding bug in llist_traverse().
Rob Landley <rob@landley.net>
parents:
707
diff
changeset
|
189 |
20
3981c96f9285
Implement which. Add hello world to menuconfig. Wrap the various applet main
Rob Landley <rob@landley.net>
parents:
16
diff
changeset
|
190 // Find all file in a colon-separated path with access type "type" (generally |
3981c96f9285
Implement which. Add hello world to menuconfig. Wrap the various applet main
Rob Landley <rob@landley.net>
parents:
16
diff
changeset
|
191 // X_OK or R_OK). Returns a list of absolute paths to each file found, in |
3981c96f9285
Implement which. Add hello world to menuconfig. Wrap the various applet main
Rob Landley <rob@landley.net>
parents:
16
diff
changeset
|
192 // order. |
16
dd10785b6532
Add xabspath(), is_file_type(), which_in_path(), and find_in_path().
Rob Landley <rob@landley.net>
parents:
8
diff
changeset
|
193 |
20
3981c96f9285
Implement which. Add hello world to menuconfig. Wrap the various applet main
Rob Landley <rob@landley.net>
parents:
16
diff
changeset
|
194 struct string_list *find_in_path(char *path, char *filename) |
16
dd10785b6532
Add xabspath(), is_file_type(), which_in_path(), and find_in_path().
Rob Landley <rob@landley.net>
parents:
8
diff
changeset
|
195 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
196 struct string_list *rlist = NULL, **prlist=&rlist; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
197 char *cwd = xgetcwd(); |
16
dd10785b6532
Add xabspath(), is_file_type(), which_in_path(), and find_in_path().
Rob Landley <rob@landley.net>
parents:
8
diff
changeset
|
198 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
199 for (;;) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
200 char *next = path ? strchr(path, ':') : NULL; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
201 int len = next ? next-path : strlen(path); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
202 struct string_list *rnext; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
203 struct stat st; |
16
dd10785b6532
Add xabspath(), is_file_type(), which_in_path(), and find_in_path().
Rob Landley <rob@landley.net>
parents:
8
diff
changeset
|
204 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
205 rnext = xmalloc(sizeof(void *) + strlen(filename) |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
206 + (len ? len : strlen(cwd)) + 2); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
207 if (!len) sprintf(rnext->str, "%s/%s", cwd, filename); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
208 else { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
209 char *res = rnext->str; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
210 strncpy(res, path, len); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
211 res += len; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
212 *(res++) = '/'; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
213 strcpy(res, filename); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
214 } |
16
dd10785b6532
Add xabspath(), is_file_type(), which_in_path(), and find_in_path().
Rob Landley <rob@landley.net>
parents:
8
diff
changeset
|
215 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
216 // Confirm it's not a directory. |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
217 if (!stat(rnext->str, &st) && S_ISREG(st.st_mode)) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
218 *prlist = rnext; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
219 rnext->next = NULL; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
220 prlist = &(rnext->next); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
221 } else free(rnext); |
16
dd10785b6532
Add xabspath(), is_file_type(), which_in_path(), and find_in_path().
Rob Landley <rob@landley.net>
parents:
8
diff
changeset
|
222 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
223 if (!next) break; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
224 path += len; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
225 path++; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
226 } |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
227 free(cwd); |
4
732b055e17f7
Add xmsprintf(), xgetcwd(), xgetcwd(), find_in_path().
landley@driftwood
parents:
3
diff
changeset
|
228 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
229 return rlist; |
4
732b055e17f7
Add xmsprintf(), xgetcwd(), xgetcwd(), find_in_path().
landley@driftwood
parents:
3
diff
changeset
|
230 } |
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
4
diff
changeset
|
231 |
102
aa4fa2543a65
Add atolx() which understands extensions for kilobytes and megabytes and such.
Rob Landley <rob@landley.net>
parents:
97
diff
changeset
|
232 // atol() with the kilo/mega/giga/tera/peta/exa extensions. |
aa4fa2543a65
Add atolx() which understands extensions for kilobytes and megabytes and such.
Rob Landley <rob@landley.net>
parents:
97
diff
changeset
|
233 // (zetta and yotta don't fit in 64 bits.) |
443
41b5ac08208f
Make atolx() error_exit() if fed a string that doesn't convert entirely into an integer.
Rob Landley <rob@landley.net>
parents:
419
diff
changeset
|
234 long atolx(char *numstr) |
102
aa4fa2543a65
Add atolx() which understands extensions for kilobytes and megabytes and such.
Rob Landley <rob@landley.net>
parents:
97
diff
changeset
|
235 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
236 char *c, *suffixes="bkmgtpe", *end; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
237 long val = strtol(numstr, &c, 0); |
102
aa4fa2543a65
Add atolx() which understands extensions for kilobytes and megabytes and such.
Rob Landley <rob@landley.net>
parents:
97
diff
changeset
|
238 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
239 if (*c) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
240 if (c != numstr && (end = strchr(suffixes, tolower(*c)))) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
241 int shift = end-suffixes; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
242 if (shift--) val *= 1024L<<(shift*10); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
243 } else { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
244 while (isspace(*c)) c++; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
245 if (*c) error_exit("not integer: %s", numstr); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
246 } |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
247 } |
397
b7afbc6b753a
Forgot to check in loopfiles_rw changes needed by truncate.
Rob Landley <rob@landley.net>
parents:
379
diff
changeset
|
248 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
249 return val; |
102
aa4fa2543a65
Add atolx() which understands extensions for kilobytes and megabytes and such.
Rob Landley <rob@landley.net>
parents:
97
diff
changeset
|
250 } |
aa4fa2543a65
Add atolx() which understands extensions for kilobytes and megabytes and such.
Rob Landley <rob@landley.net>
parents:
97
diff
changeset
|
251 |
1131
f9678ea553c8
Oops, cleaned up ifconfig uses atolx_range() instead of get_int_list(). Check that in.
Rob Landley <rob@landley.net>
parents:
1108
diff
changeset
|
252 long atolx_range(char *numstr, long low, long high) |
f9678ea553c8
Oops, cleaned up ifconfig uses atolx_range() instead of get_int_list(). Check that in.
Rob Landley <rob@landley.net>
parents:
1108
diff
changeset
|
253 { |
f9678ea553c8
Oops, cleaned up ifconfig uses atolx_range() instead of get_int_list(). Check that in.
Rob Landley <rob@landley.net>
parents:
1108
diff
changeset
|
254 long val = atolx(numstr); |
f9678ea553c8
Oops, cleaned up ifconfig uses atolx_range() instead of get_int_list(). Check that in.
Rob Landley <rob@landley.net>
parents:
1108
diff
changeset
|
255 |
f9678ea553c8
Oops, cleaned up ifconfig uses atolx_range() instead of get_int_list(). Check that in.
Rob Landley <rob@landley.net>
parents:
1108
diff
changeset
|
256 if (val < low) error_exit("%ld < %ld", val, low); |
f9678ea553c8
Oops, cleaned up ifconfig uses atolx_range() instead of get_int_list(). Check that in.
Rob Landley <rob@landley.net>
parents:
1108
diff
changeset
|
257 if (val > high) error_exit("%ld > %ld", val, high); |
f9678ea553c8
Oops, cleaned up ifconfig uses atolx_range() instead of get_int_list(). Check that in.
Rob Landley <rob@landley.net>
parents:
1108
diff
changeset
|
258 |
f9678ea553c8
Oops, cleaned up ifconfig uses atolx_range() instead of get_int_list(). Check that in.
Rob Landley <rob@landley.net>
parents:
1108
diff
changeset
|
259 return val; |
f9678ea553c8
Oops, cleaned up ifconfig uses atolx_range() instead of get_int_list(). Check that in.
Rob Landley <rob@landley.net>
parents:
1108
diff
changeset
|
260 } |
f9678ea553c8
Oops, cleaned up ifconfig uses atolx_range() instead of get_int_list(). Check that in.
Rob Landley <rob@landley.net>
parents:
1108
diff
changeset
|
261 |
565
44abf4d901f3
Rewrite dirtree so we don't need readdir, scandir, and fts.h. Rewrite ls (from scratch) to use new dirtree infrastructure. (This breaks everything else that currently uses dirtree.)
Rob Landley <rob@landley.net>
parents:
554
diff
changeset
|
262 int numlen(long l) |
44abf4d901f3
Rewrite dirtree so we don't need readdir, scandir, and fts.h. Rewrite ls (from scratch) to use new dirtree infrastructure. (This breaks everything else that currently uses dirtree.)
Rob Landley <rob@landley.net>
parents:
554
diff
changeset
|
263 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
264 int len = 0; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
265 while (l) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
266 l /= 10; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
267 len++; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
268 } |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
269 return len; |
565
44abf4d901f3
Rewrite dirtree so we don't need readdir, scandir, and fts.h. Rewrite ls (from scratch) to use new dirtree infrastructure. (This breaks everything else that currently uses dirtree.)
Rob Landley <rob@landley.net>
parents:
554
diff
changeset
|
270 } |
44abf4d901f3
Rewrite dirtree so we don't need readdir, scandir, and fts.h. Rewrite ls (from scratch) to use new dirtree infrastructure. (This breaks everything else that currently uses dirtree.)
Rob Landley <rob@landley.net>
parents:
554
diff
changeset
|
271 |
623
f51beec92738
New infrastructure for od (oops).
Rob Landley <rob@landley.net>
parents:
615
diff
changeset
|
272 int stridx(char *haystack, char needle) |
f51beec92738
New infrastructure for od (oops).
Rob Landley <rob@landley.net>
parents:
615
diff
changeset
|
273 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
274 char *off; |
623
f51beec92738
New infrastructure for od (oops).
Rob Landley <rob@landley.net>
parents:
615
diff
changeset
|
275 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
276 if (!needle) return -1; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
277 off = strchr(haystack, needle); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
278 if (!off) return -1; |
623
f51beec92738
New infrastructure for od (oops).
Rob Landley <rob@landley.net>
parents:
615
diff
changeset
|
279 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
280 return off-haystack; |
623
f51beec92738
New infrastructure for od (oops).
Rob Landley <rob@landley.net>
parents:
615
diff
changeset
|
281 } |
f51beec92738
New infrastructure for od (oops).
Rob Landley <rob@landley.net>
parents:
615
diff
changeset
|
282 |
53
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
283 // Return how long the file at fd is, if there's any way to determine it. |
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
284 off_t fdlength(int fd) |
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
285 { |
992
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
286 struct stat st; |
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
287 off_t base = 0, range = 1, expand = 1, old; |
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
288 |
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
289 if (!fstat(fd, &st) && S_ISREG(st.st_mode)) return st.st_size; |
53
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
290 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
291 // If the ioctl works for this, return it. |
992
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
292 // TODO: is blocksize still always 512, or do we stat for it? |
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
293 // unsigned int size; |
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
294 // if (ioctl(fd, BLKGETSIZE, &size) >= 0) return size*512L; |
53
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
295 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
296 // If not, do a binary search for the last location we can read. (Some |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
297 // block devices don't do BLKGETSIZE right.) This should probably have |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
298 // a CONFIG option... |
53
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
299 |
992
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
300 // If not, do a binary search for the last location we can read. |
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
301 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
302 old = lseek(fd, 0, SEEK_CUR); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
303 do { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
304 char temp; |
992
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
305 off_t pos = base + range / 2; |
53
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
306 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
307 if (lseek(fd, pos, 0)>=0 && read(fd, &temp, 1)==1) { |
992
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
308 off_t delta = (pos + 1) - base; |
53
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
309 |
992
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
310 base += delta; |
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
311 if (expand) range = (expand <<= 1) - base; |
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
312 else range -= delta; |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
313 } else { |
992
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
314 expand = 0; |
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
315 range = pos - base; |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
316 } |
992
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
317 } while (range > 0); |
53
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
318 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
319 lseek(fd, old, SEEK_SET); |
310
8b8116214b1c
Roberto Foglietta pointed out that readall() needs fdlength() to restore
Rob Landley <rob@landley.net>
parents:
309
diff
changeset
|
320 |
992
910f35ff76be
Achille Fouilleul pointed out that fdlength wasn't returning the right length in the binary search case.
Rob Landley <rob@landley.net>
parents:
951
diff
changeset
|
321 return base; |
53
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
322 } |
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
323 |
1043
acf7bb2b99e2
Introduce libbuf analogous to toybuf but for use by lib/*.c. Change readfile() semantics to be able to read into an existing buffer, or malloc its own if that's NULL.
Rob Landley <rob@landley.net>
parents:
1042
diff
changeset
|
324 // Read contents of file as a single nul-terminated string. |
acf7bb2b99e2
Introduce libbuf analogous to toybuf but for use by lib/*.c. Change readfile() semantics to be able to read into an existing buffer, or malloc its own if that's NULL.
Rob Landley <rob@landley.net>
parents:
1042
diff
changeset
|
325 // malloc new one if buf=len=0 |
1273
79e847fec774
In function readfile(), the buffer buf is free'd when readall() fails. This free can cause a crash, if the buffer passed by user of function is not malloc'ed one.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1226
diff
changeset
|
326 char *readfile(char *name, char *ibuf, off_t len) |
53
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
327 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
328 int fd; |
1273
79e847fec774
In function readfile(), the buffer buf is free'd when readall() fails. This free can cause a crash, if the buffer passed by user of function is not malloc'ed one.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1226
diff
changeset
|
329 char *buf; |
53
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
330 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
331 fd = open(name, O_RDONLY); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
332 if (fd == -1) return 0; |
1043
acf7bb2b99e2
Introduce libbuf analogous to toybuf but for use by lib/*.c. Change readfile() semantics to be able to read into an existing buffer, or malloc its own if that's NULL.
Rob Landley <rob@landley.net>
parents:
1042
diff
changeset
|
333 |
acf7bb2b99e2
Introduce libbuf analogous to toybuf but for use by lib/*.c. Change readfile() semantics to be able to read into an existing buffer, or malloc its own if that's NULL.
Rob Landley <rob@landley.net>
parents:
1042
diff
changeset
|
334 if (len<1) { |
acf7bb2b99e2
Introduce libbuf analogous to toybuf but for use by lib/*.c. Change readfile() semantics to be able to read into an existing buffer, or malloc its own if that's NULL.
Rob Landley <rob@landley.net>
parents:
1042
diff
changeset
|
335 len = fdlength(fd); |
acf7bb2b99e2
Introduce libbuf analogous to toybuf but for use by lib/*.c. Change readfile() semantics to be able to read into an existing buffer, or malloc its own if that's NULL.
Rob Landley <rob@landley.net>
parents:
1042
diff
changeset
|
336 // proc files don't report a length, so try 1 page minimum. |
acf7bb2b99e2
Introduce libbuf analogous to toybuf but for use by lib/*.c. Change readfile() semantics to be able to read into an existing buffer, or malloc its own if that's NULL.
Rob Landley <rob@landley.net>
parents:
1042
diff
changeset
|
337 if (len<4096) len = 4096; |
acf7bb2b99e2
Introduce libbuf analogous to toybuf but for use by lib/*.c. Change readfile() semantics to be able to read into an existing buffer, or malloc its own if that's NULL.
Rob Landley <rob@landley.net>
parents:
1042
diff
changeset
|
338 } |
1273
79e847fec774
In function readfile(), the buffer buf is free'd when readall() fails. This free can cause a crash, if the buffer passed by user of function is not malloc'ed one.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1226
diff
changeset
|
339 if (!ibuf) buf = xmalloc(len+1); |
79e847fec774
In function readfile(), the buffer buf is free'd when readall() fails. This free can cause a crash, if the buffer passed by user of function is not malloc'ed one.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1226
diff
changeset
|
340 else buf = ibuf; |
1043
acf7bb2b99e2
Introduce libbuf analogous to toybuf but for use by lib/*.c. Change readfile() semantics to be able to read into an existing buffer, or malloc its own if that's NULL.
Rob Landley <rob@landley.net>
parents:
1042
diff
changeset
|
341 |
acf7bb2b99e2
Introduce libbuf analogous to toybuf but for use by lib/*.c. Change readfile() semantics to be able to read into an existing buffer, or malloc its own if that's NULL.
Rob Landley <rob@landley.net>
parents:
1042
diff
changeset
|
342 len = readall(fd, buf, len-1); |
acf7bb2b99e2
Introduce libbuf analogous to toybuf but for use by lib/*.c. Change readfile() semantics to be able to read into an existing buffer, or malloc its own if that's NULL.
Rob Landley <rob@landley.net>
parents:
1042
diff
changeset
|
343 close(fd); |
acf7bb2b99e2
Introduce libbuf analogous to toybuf but for use by lib/*.c. Change readfile() semantics to be able to read into an existing buffer, or malloc its own if that's NULL.
Rob Landley <rob@landley.net>
parents:
1042
diff
changeset
|
344 if (len<0) { |
1273
79e847fec774
In function readfile(), the buffer buf is free'd when readall() fails. This free can cause a crash, if the buffer passed by user of function is not malloc'ed one.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
1226
diff
changeset
|
345 if (ibuf != buf) free(buf); |
1043
acf7bb2b99e2
Introduce libbuf analogous to toybuf but for use by lib/*.c. Change readfile() semantics to be able to read into an existing buffer, or malloc its own if that's NULL.
Rob Landley <rob@landley.net>
parents:
1042
diff
changeset
|
346 buf = 0; |
acf7bb2b99e2
Introduce libbuf analogous to toybuf but for use by lib/*.c. Change readfile() semantics to be able to read into an existing buffer, or malloc its own if that's NULL.
Rob Landley <rob@landley.net>
parents:
1042
diff
changeset
|
347 } else buf[len] = 0; |
53
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
348 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
349 return buf; |
53
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
350 } |
41d55b5d49fd
Add start of mke2fs/gene2fs, and some other stuff I've been working on.
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
351 |
883
aca8323e2690
Add posix headers to toynet.h, move xioctl() to lib.c, introduce lib/net.c and move xsocket() to it.
Rob Landley <rob@landley.net>
parents:
870
diff
changeset
|
352 // Sleep for this many thousandths of a second |
aca8323e2690
Add posix headers to toynet.h, move xioctl() to lib.c, introduce lib/net.c and move xsocket() to it.
Rob Landley <rob@landley.net>
parents:
870
diff
changeset
|
353 void msleep(long miliseconds) |
aca8323e2690
Add posix headers to toynet.h, move xioctl() to lib.c, introduce lib/net.c and move xsocket() to it.
Rob Landley <rob@landley.net>
parents:
870
diff
changeset
|
354 { |
aca8323e2690
Add posix headers to toynet.h, move xioctl() to lib.c, introduce lib/net.c and move xsocket() to it.
Rob Landley <rob@landley.net>
parents:
870
diff
changeset
|
355 struct timespec ts; |
aca8323e2690
Add posix headers to toynet.h, move xioctl() to lib.c, introduce lib/net.c and move xsocket() to it.
Rob Landley <rob@landley.net>
parents:
870
diff
changeset
|
356 |
aca8323e2690
Add posix headers to toynet.h, move xioctl() to lib.c, introduce lib/net.c and move xsocket() to it.
Rob Landley <rob@landley.net>
parents:
870
diff
changeset
|
357 ts.tv_sec = miliseconds/1000; |
aca8323e2690
Add posix headers to toynet.h, move xioctl() to lib.c, introduce lib/net.c and move xsocket() to it.
Rob Landley <rob@landley.net>
parents:
870
diff
changeset
|
358 ts.tv_nsec = (miliseconds%1000)*1000000; |
aca8323e2690
Add posix headers to toynet.h, move xioctl() to lib.c, introduce lib/net.c and move xsocket() to it.
Rob Landley <rob@landley.net>
parents:
870
diff
changeset
|
359 nanosleep(&ts, &ts); |
aca8323e2690
Add posix headers to toynet.h, move xioctl() to lib.c, introduce lib/net.c and move xsocket() to it.
Rob Landley <rob@landley.net>
parents:
870
diff
changeset
|
360 } |
aca8323e2690
Add posix headers to toynet.h, move xioctl() to lib.c, introduce lib/net.c and move xsocket() to it.
Rob Landley <rob@landley.net>
parents:
870
diff
changeset
|
361 |
913
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
362 int64_t peek(void *ptr, int size) |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
363 { |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
364 if (size & 8) { |
1218
fba5d8d3905c
Add "volatile" annotation to peek/poke to stop potential optimizer overreach.
Rob Landley <rob@landley.net>
parents:
1212
diff
changeset
|
365 volatile int64_t *p = (int64_t *)ptr; |
913
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
366 return *p; |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
367 } else if (size & 4) { |
1218
fba5d8d3905c
Add "volatile" annotation to peek/poke to stop potential optimizer overreach.
Rob Landley <rob@landley.net>
parents:
1212
diff
changeset
|
368 volatile int *p = (int *)ptr; |
913
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
369 return *p; |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
370 } else if (size & 2) { |
1218
fba5d8d3905c
Add "volatile" annotation to peek/poke to stop potential optimizer overreach.
Rob Landley <rob@landley.net>
parents:
1212
diff
changeset
|
371 volatile short *p = (short *)ptr; |
913
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
372 return *p; |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
373 } else { |
1218
fba5d8d3905c
Add "volatile" annotation to peek/poke to stop potential optimizer overreach.
Rob Landley <rob@landley.net>
parents:
1212
diff
changeset
|
374 volatile char *p = (char *)ptr; |
913
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
375 return *p; |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
376 } |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
377 } |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
378 |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
379 void poke(void *ptr, uint64_t val, int size) |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
380 { |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
381 if (size & 8) { |
1218
fba5d8d3905c
Add "volatile" annotation to peek/poke to stop potential optimizer overreach.
Rob Landley <rob@landley.net>
parents:
1212
diff
changeset
|
382 volatile uint64_t *p = (uint64_t *)ptr; |
913
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
383 *p = val; |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
384 } else if (size & 4) { |
1218
fba5d8d3905c
Add "volatile" annotation to peek/poke to stop potential optimizer overreach.
Rob Landley <rob@landley.net>
parents:
1212
diff
changeset
|
385 volatile int *p = (int *)ptr; |
913
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
386 *p = val; |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
387 } else if (size & 2) { |
1218
fba5d8d3905c
Add "volatile" annotation to peek/poke to stop potential optimizer overreach.
Rob Landley <rob@landley.net>
parents:
1212
diff
changeset
|
388 volatile short *p = (short *)ptr; |
913
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
389 *p = val; |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
390 } else { |
1218
fba5d8d3905c
Add "volatile" annotation to peek/poke to stop potential optimizer overreach.
Rob Landley <rob@landley.net>
parents:
1212
diff
changeset
|
391 volatile char *p = (char *)ptr; |
913
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
392 *p = val; |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
393 } |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
394 } |
7fed25030389
Enable readfile() and add peek() and poke() functions.
Rob Landley <rob@landley.net>
parents:
904
diff
changeset
|
395 |
308 | 396 // Iterate through an array of files, opening each one and calling a function |
397 // on that filehandle and name. The special filename "-" means stdin if | |
398 // flags is O_RDONLY, stdout otherwise. An empty argument list calls | |
399 // function() on just stdin/stdout. | |
400 // | |
401 // Note: read only filehandles are automatically closed when function() | |
402 // returns, but writeable filehandles must be close by function() | |
397
b7afbc6b753a
Forgot to check in loopfiles_rw changes needed by truncate.
Rob Landley <rob@landley.net>
parents:
379
diff
changeset
|
403 void loopfiles_rw(char **argv, int flags, int permissions, int failok, |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
404 void (*function)(int fd, char *name)) |
185
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
167
diff
changeset
|
405 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
406 int fd; |
185
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
167
diff
changeset
|
407 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
408 // If no arguments, read from stdin. |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
409 if (!*argv) function(flags ? 1 : 0, "-"); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
410 else do { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
411 // Filename "-" means read from stdin. |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
412 // Inability to open a file prints a warning, but doesn't exit. |
185
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
167
diff
changeset
|
413 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
414 if (!strcmp(*argv,"-")) fd=0; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
415 else if (0>(fd = open(*argv, flags, permissions)) && !failok) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
416 perror_msg("%s", *argv); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
417 toys.exitval = 1; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
418 continue; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
419 } |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
420 function(fd, *argv); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
421 if (flags == O_RDONLY) close(fd); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
422 } while (*++argv); |
185
29e2051296fd
Add loopfiles() function, make catv use it.
Rob Landley <rob@landley.net>
parents:
167
diff
changeset
|
423 } |
201
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
424 |
397
b7afbc6b753a
Forgot to check in loopfiles_rw changes needed by truncate.
Rob Landley <rob@landley.net>
parents:
379
diff
changeset
|
425 // Call loopfiles_rw with O_RDONLY and !failok (common case). |
308 | 426 void loopfiles(char **argv, void (*function)(int fd, char *name)) |
427 { | |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
428 loopfiles_rw(argv, O_RDONLY, 0, 0, function); |
308 | 429 } |
430 | |
201
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
431 // Slow, but small. |
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
432 |
284
603275a05524
Teach get_rawline() to continue until a configurable char, and xstrndup()
Rob Landley <rob@landley.net>
parents:
252
diff
changeset
|
433 char *get_rawline(int fd, long *plen, char end) |
201
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
434 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
435 char c, *buf = NULL; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
436 long len = 0; |
201
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
437 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
438 for (;;) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
439 if (1>read(fd, &c, 1)) break; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
440 if (!(len & 63)) buf=xrealloc(buf, len+65); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
441 if ((buf[len++]=c) == end) break; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
442 } |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
443 if (buf) buf[len]=0; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
444 if (plen) *plen = len; |
201
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
445 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
446 return buf; |
201
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
447 } |
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
448 |
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
449 char *get_line(int fd) |
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
450 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
451 long len; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
452 char *buf = get_rawline(fd, &len, '\n'); |
201
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
453 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
454 if (buf && buf[--len]=='\n') buf[len]=0; |
201
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
455 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
456 return buf; |
201
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
457 } |
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
458 |
590
7becb497c3c4
Update chmod to work with new dirtree, and fix bugs in string_to_mode().
Rob Landley <rob@landley.net>
parents:
585
diff
changeset
|
459 int wfchmodat(int fd, char *name, mode_t mode) |
7becb497c3c4
Update chmod to work with new dirtree, and fix bugs in string_to_mode().
Rob Landley <rob@landley.net>
parents:
585
diff
changeset
|
460 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
461 int rc = fchmodat(fd, name, mode, 0); |
590
7becb497c3c4
Update chmod to work with new dirtree, and fix bugs in string_to_mode().
Rob Landley <rob@landley.net>
parents:
585
diff
changeset
|
462 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
463 if (rc) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
464 perror_msg("chmod '%s' to %04o", name, mode); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
465 toys.exitval=1; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
466 } |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
467 return rc; |
590
7becb497c3c4
Update chmod to work with new dirtree, and fix bugs in string_to_mode().
Rob Landley <rob@landley.net>
parents:
585
diff
changeset
|
468 } |
7becb497c3c4
Update chmod to work with new dirtree, and fix bugs in string_to_mode().
Rob Landley <rob@landley.net>
parents:
585
diff
changeset
|
469 |
643
7bdebd2af1d6
Add signal handler to clean up tempfile.
Rob Landley <rob@landley.net>
parents:
640
diff
changeset
|
470 static char *tempfile2zap; |
7bdebd2af1d6
Add signal handler to clean up tempfile.
Rob Landley <rob@landley.net>
parents:
640
diff
changeset
|
471 static void tempfile_handler(int i) |
7bdebd2af1d6
Add signal handler to clean up tempfile.
Rob Landley <rob@landley.net>
parents:
640
diff
changeset
|
472 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
473 if (1 < (long)tempfile2zap) unlink(tempfile2zap); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
474 _exit(1); |
643
7bdebd2af1d6
Add signal handler to clean up tempfile.
Rob Landley <rob@landley.net>
parents:
640
diff
changeset
|
475 } |
7bdebd2af1d6
Add signal handler to clean up tempfile.
Rob Landley <rob@landley.net>
parents:
640
diff
changeset
|
476 |
209 | 477 // Open a temporary file to copy an existing file into. |
478 int copy_tempfile(int fdin, char *name, char **tempname) | |
479 { | |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
480 struct stat statbuf; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
481 int fd; |
209 | 482 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
483 *tempname = xstrndup(name, strlen(name)+6); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
484 strcat(*tempname,"XXXXXX"); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
485 if(-1 == (fd = mkstemp(*tempname))) error_exit("no temp file"); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
486 if (!tempfile2zap) sigatexit(tempfile_handler); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
487 tempfile2zap = *tempname; |
209 | 488 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
489 // Set permissions of output file |
209 | 490 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
491 fstat(fdin, &statbuf); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
492 fchmod(fd, statbuf.st_mode); |
209 | 493 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
494 return fd; |
201
5d523752715a
Start of "patch" support. Writes to stdout at the moment.
Rob Landley <rob@landley.net>
parents:
197
diff
changeset
|
495 } |
209 | 496 |
497 // Abort the copy and delete the temporary file. | |
498 void delete_tempfile(int fdin, int fdout, char **tempname) | |
499 { | |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
500 close(fdin); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
501 close(fdout); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
502 unlink(*tempname); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
503 tempfile2zap = (char *)1; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
504 free(*tempname); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
505 *tempname = NULL; |
209 | 506 } |
507 | |
508 // Copy the rest of the data and replace the original with the copy. | |
509 void replace_tempfile(int fdin, int fdout, char **tempname) | |
510 { | |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
511 char *temp = xstrdup(*tempname); |
209 | 512 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
513 temp[strlen(temp)-6]=0; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
514 if (fdin != -1) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
515 xsendfile(fdin, fdout); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
516 xclose(fdin); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
517 } |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
518 xclose(fdout); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
519 rename(*tempname, temp); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
520 tempfile2zap = (char *)1; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
521 free(*tempname); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
522 free(temp); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
523 *tempname = NULL; |
209 | 524 } |
334
83c461db9df7
Check in crc_init needed by cksum. (Oops.)
Rob Landley <rob@landley.net>
parents:
311
diff
changeset
|
525 |
83c461db9df7
Check in crc_init needed by cksum. (Oops.)
Rob Landley <rob@landley.net>
parents:
311
diff
changeset
|
526 // Create a 256 entry CRC32 lookup table. |
83c461db9df7
Check in crc_init needed by cksum. (Oops.)
Rob Landley <rob@landley.net>
parents:
311
diff
changeset
|
527 |
337
aaafa1ceaa91
Add -N, -I, -L, and -P options to cksum.
Rob Landley <rob@landley.net>
parents:
334
diff
changeset
|
528 void crc_init(unsigned int *crc_table, int little_endian) |
334
83c461db9df7
Check in crc_init needed by cksum. (Oops.)
Rob Landley <rob@landley.net>
parents:
311
diff
changeset
|
529 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
530 unsigned int i; |
334
83c461db9df7
Check in crc_init needed by cksum. (Oops.)
Rob Landley <rob@landley.net>
parents:
311
diff
changeset
|
531 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
532 // Init the CRC32 table (big endian) |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
533 for (i=0; i<256; i++) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
534 unsigned int j, c = little_endian ? i : i<<24; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
535 for (j=8; j; j--) |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
536 if (little_endian) c = (c&1) ? (c>>1)^0xEDB88320 : c>>1; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
537 else c=c&0x80000000 ? (c<<1)^0x04c11db7 : (c<<1); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
538 crc_table[i] = c; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
539 } |
334
83c461db9df7
Check in crc_init needed by cksum. (Oops.)
Rob Landley <rob@landley.net>
parents:
311
diff
changeset
|
540 } |
419
af0cca0aba9d
Quick and dirty terminal_size() and yesno() functions, both of which need to be improved.
Rob Landley <rob@landley.net>
parents:
399
diff
changeset
|
541 |
af0cca0aba9d
Quick and dirty terminal_size() and yesno() functions, both of which need to be improved.
Rob Landley <rob@landley.net>
parents:
399
diff
changeset
|
542 // Quick and dirty query size of terminal, doesn't do ANSI probe fallback. |
1108
fb8467436e6a
Tweak terminal_size to never set either to 0, and return true/false whether it could determine at least one coordinate.
Rob Landley <rob@landley.net>
parents:
1097
diff
changeset
|
543 // set x=80 y=25 before calling to provide defaults. Returns 0 if couldn't |
fb8467436e6a
Tweak terminal_size to never set either to 0, and return true/false whether it could determine at least one coordinate.
Rob Landley <rob@landley.net>
parents:
1097
diff
changeset
|
544 // determine size. |
419
af0cca0aba9d
Quick and dirty terminal_size() and yesno() functions, both of which need to be improved.
Rob Landley <rob@landley.net>
parents:
399
diff
changeset
|
545 |
1108
fb8467436e6a
Tweak terminal_size to never set either to 0, and return true/false whether it could determine at least one coordinate.
Rob Landley <rob@landley.net>
parents:
1097
diff
changeset
|
546 int terminal_size(unsigned *xx, unsigned *yy) |
419
af0cca0aba9d
Quick and dirty terminal_size() and yesno() functions, both of which need to be improved.
Rob Landley <rob@landley.net>
parents:
399
diff
changeset
|
547 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
548 struct winsize ws; |
1108
fb8467436e6a
Tweak terminal_size to never set either to 0, and return true/false whether it could determine at least one coordinate.
Rob Landley <rob@landley.net>
parents:
1097
diff
changeset
|
549 unsigned i, x = 0, y = 0; |
1097 | 550 char *s; |
419
af0cca0aba9d
Quick and dirty terminal_size() and yesno() functions, both of which need to be improved.
Rob Landley <rob@landley.net>
parents:
399
diff
changeset
|
551 |
1108
fb8467436e6a
Tweak terminal_size to never set either to 0, and return true/false whether it could determine at least one coordinate.
Rob Landley <rob@landley.net>
parents:
1097
diff
changeset
|
552 // stdin, stdout, stderr |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
553 for (i=0; i<3; i++) { |
1097 | 554 memset(&ws, 0, sizeof(ws)); |
555 if (!ioctl(i, TIOCGWINSZ, &ws)) { | |
556 if (ws.ws_col) x = ws.ws_col; | |
557 if (ws.ws_row) y = ws.ws_row; | |
558 | |
559 break; | |
560 } | |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
561 } |
1097 | 562 s = getenv("COLUMNS"); |
563 if (s) sscanf(s, "%u", &x); | |
564 s = getenv("ROWS"); | |
565 if (s) sscanf(s, "%u", &y); | |
419
af0cca0aba9d
Quick and dirty terminal_size() and yesno() functions, both of which need to be improved.
Rob Landley <rob@landley.net>
parents:
399
diff
changeset
|
566 |
1108
fb8467436e6a
Tweak terminal_size to never set either to 0, and return true/false whether it could determine at least one coordinate.
Rob Landley <rob@landley.net>
parents:
1097
diff
changeset
|
567 // Never return 0 for either value, leave it at default instead. |
fb8467436e6a
Tweak terminal_size to never set either to 0, and return true/false whether it could determine at least one coordinate.
Rob Landley <rob@landley.net>
parents:
1097
diff
changeset
|
568 if (xx && x) *xx = x; |
fb8467436e6a
Tweak terminal_size to never set either to 0, and return true/false whether it could determine at least one coordinate.
Rob Landley <rob@landley.net>
parents:
1097
diff
changeset
|
569 if (yy && y) *yy = y; |
fb8467436e6a
Tweak terminal_size to never set either to 0, and return true/false whether it could determine at least one coordinate.
Rob Landley <rob@landley.net>
parents:
1097
diff
changeset
|
570 |
fb8467436e6a
Tweak terminal_size to never set either to 0, and return true/false whether it could determine at least one coordinate.
Rob Landley <rob@landley.net>
parents:
1097
diff
changeset
|
571 return x || y; |
419
af0cca0aba9d
Quick and dirty terminal_size() and yesno() functions, both of which need to be improved.
Rob Landley <rob@landley.net>
parents:
399
diff
changeset
|
572 } |
af0cca0aba9d
Quick and dirty terminal_size() and yesno() functions, both of which need to be improved.
Rob Landley <rob@landley.net>
parents:
399
diff
changeset
|
573 |
503
3b9dea897dc0
Upgrade yesno() and make cp -i use it.
Rob Landley <rob@landley.net>
parents:
498
diff
changeset
|
574 int yesno(char *prompt, int def) |
419
af0cca0aba9d
Quick and dirty terminal_size() and yesno() functions, both of which need to be improved.
Rob Landley <rob@landley.net>
parents:
399
diff
changeset
|
575 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
576 char buf; |
419
af0cca0aba9d
Quick and dirty terminal_size() and yesno() functions, both of which need to be improved.
Rob Landley <rob@landley.net>
parents:
399
diff
changeset
|
577 |
738
075eaff297f8
Make yesno() always read from stdin and write to stderr. (If we need to find our tty, open /dev/tty, but existing users don't.)
Rob Landley <rob@landley.net>
parents:
715
diff
changeset
|
578 fprintf(stderr, "%s (%c/%c):", prompt, def ? 'Y' : 'y', def ? 'n' : 'N'); |
075eaff297f8
Make yesno() always read from stdin and write to stderr. (If we need to find our tty, open /dev/tty, but existing users don't.)
Rob Landley <rob@landley.net>
parents:
715
diff
changeset
|
579 fflush(stderr); |
075eaff297f8
Make yesno() always read from stdin and write to stderr. (If we need to find our tty, open /dev/tty, but existing users don't.)
Rob Landley <rob@landley.net>
parents:
715
diff
changeset
|
580 while (fread(&buf, 1, 1, stdin)) { |
075eaff297f8
Make yesno() always read from stdin and write to stderr. (If we need to find our tty, open /dev/tty, but existing users don't.)
Rob Landley <rob@landley.net>
parents:
715
diff
changeset
|
581 int new; |
419
af0cca0aba9d
Quick and dirty terminal_size() and yesno() functions, both of which need to be improved.
Rob Landley <rob@landley.net>
parents:
399
diff
changeset
|
582 |
798
16bcabb8cf97
Fix -in behavior: descend into existing directory without prompting, show full path in error messages, actually overwrite when answering yes to -i.
Rob Landley <rob@landley.net>
parents:
791
diff
changeset
|
583 // The letter changes the value, the newline (or space) returns it. |
738
075eaff297f8
Make yesno() always read from stdin and write to stderr. (If we need to find our tty, open /dev/tty, but existing users don't.)
Rob Landley <rob@landley.net>
parents:
715
diff
changeset
|
584 if (isspace(buf)) break; |
075eaff297f8
Make yesno() always read from stdin and write to stderr. (If we need to find our tty, open /dev/tty, but existing users don't.)
Rob Landley <rob@landley.net>
parents:
715
diff
changeset
|
585 if (-1 != (new = stridx("ny", tolower(buf)))) def = new; |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
586 } |
550
b2194045c40e
Remove "feature test macros", replace non-portable fdprintf() with standard fprintf().
Rob Landley <rob@landley.net>
parents:
535
diff
changeset
|
587 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
588 return def; |
419
af0cca0aba9d
Quick and dirty terminal_size() and yesno() functions, both of which need to be improved.
Rob Landley <rob@landley.net>
parents:
399
diff
changeset
|
589 } |
475
1fb149e75ebf
Add killall by Andreas Heck, and factor out common pid code to lib.h.
Rob Landley <rob@landley.net>
parents:
443
diff
changeset
|
590 |
498
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
591 struct signame { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
592 int num; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
593 char *name; |
498
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
594 }; |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
595 |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
596 // Signals required by POSIX 2008: |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
597 // http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
598 |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
599 #define SIGNIFY(x) {SIG##x, #x} |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
600 |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
601 static struct signame signames[] = { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
602 SIGNIFY(ABRT), SIGNIFY(ALRM), SIGNIFY(BUS), |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
603 SIGNIFY(FPE), SIGNIFY(HUP), SIGNIFY(ILL), SIGNIFY(INT), SIGNIFY(KILL), |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
604 SIGNIFY(PIPE), SIGNIFY(QUIT), SIGNIFY(SEGV), SIGNIFY(TERM), |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
605 SIGNIFY(USR1), SIGNIFY(USR2), SIGNIFY(SYS), SIGNIFY(TRAP), |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
606 SIGNIFY(VTALRM), SIGNIFY(XCPU), SIGNIFY(XFSZ), |
643
7bdebd2af1d6
Add signal handler to clean up tempfile.
Rob Landley <rob@landley.net>
parents:
640
diff
changeset
|
607 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
608 // Start of non-terminal signals |
643
7bdebd2af1d6
Add signal handler to clean up tempfile.
Rob Landley <rob@landley.net>
parents:
640
diff
changeset
|
609 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
610 SIGNIFY(CHLD), SIGNIFY(CONT), SIGNIFY(STOP), SIGNIFY(TSTP), |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
611 SIGNIFY(TTIN), SIGNIFY(TTOU), SIGNIFY(URG) |
498
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
612 }; |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
613 |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
614 // not in posix: SIGNIFY(STKFLT), SIGNIFY(WINCH), SIGNIFY(IO), SIGNIFY(PWR) |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
615 // obsolete: SIGNIFY(PROF) SIGNIFY(POLL) |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
616 |
643
7bdebd2af1d6
Add signal handler to clean up tempfile.
Rob Landley <rob@landley.net>
parents:
640
diff
changeset
|
617 // Install the same handler on every signal that defaults to killing the process |
7bdebd2af1d6
Add signal handler to clean up tempfile.
Rob Landley <rob@landley.net>
parents:
640
diff
changeset
|
618 void sigatexit(void *handler) |
7bdebd2af1d6
Add signal handler to clean up tempfile.
Rob Landley <rob@landley.net>
parents:
640
diff
changeset
|
619 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
620 int i; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
621 for (i=0; signames[i].num != SIGCHLD; i++) signal(signames[i].num, handler); |
643
7bdebd2af1d6
Add signal handler to clean up tempfile.
Rob Landley <rob@landley.net>
parents:
640
diff
changeset
|
622 } |
498
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
623 // Convert name to signal number. If name == NULL print names. |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
624 int sig_to_num(char *pidstr) |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
625 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
626 int i; |
498
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
627 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
628 if (pidstr) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
629 char *s; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
630 i = strtol(pidstr, &s, 10); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
631 if (!*s) return i; |
498
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
632 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
633 if (!strncasecmp(pidstr, "sig", 3)) pidstr+=3; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
634 } |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
635 for (i = 0; i < sizeof(signames)/sizeof(struct signame); i++) |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
636 if (!pidstr) xputs(signames[i].name); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
637 else if (!strcasecmp(pidstr, signames[i].name)) return signames[i].num; |
498
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
638 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
639 return -1; |
498
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
640 } |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
641 |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
642 char *num_to_sig(int sig) |
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
643 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
644 int i; |
498
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
645 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
646 for (i=0; i<sizeof(signames)/sizeof(struct signame); i++) |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
647 if (signames[i].num == sig) return signames[i].name; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
648 return NULL; |
498
c9aaceccd6bd
Factor out common code between killall/kill and move it to lib/lib.c, plus cleanups on kill.c.
Rob Landley <rob@landley.net>
parents:
480
diff
changeset
|
649 } |
551
2548e6e590b2
Add string to mode_t parser
Daniel Walter <d.walter@0x90.at>
parents:
550
diff
changeset
|
650 |
643
7bdebd2af1d6
Add signal handler to clean up tempfile.
Rob Landley <rob@landley.net>
parents:
640
diff
changeset
|
651 // premute mode bits based on posix mode strings. |
578
5cc8a8fc08b4
First pass at a complete rewrite of string_to_mode(). (It compiled!)
Rob Landley <rob@landley.net>
parents:
565
diff
changeset
|
652 mode_t string_to_mode(char *modestr, mode_t mode) |
551
2548e6e590b2
Add string to mode_t parser
Daniel Walter <d.walter@0x90.at>
parents:
550
diff
changeset
|
653 { |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
654 char *whos = "ogua", *hows = "=+-", *whats = "xwrstX", *whys = "ogu"; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
655 char *s, *str = modestr; |
553 | 656 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
657 // Handle octal mode |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
658 if (isdigit(*str)) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
659 mode = strtol(str, &s, 8); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
660 if (*s || (mode & ~(07777))) goto barf; |
553 | 661 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
662 return mode; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
663 } |
578
5cc8a8fc08b4
First pass at a complete rewrite of string_to_mode(). (It compiled!)
Rob Landley <rob@landley.net>
parents:
565
diff
changeset
|
664 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
665 // Gaze into the bin of permission... |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
666 for (;;) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
667 int i, j, dowho, dohow, dowhat, amask; |
578
5cc8a8fc08b4
First pass at a complete rewrite of string_to_mode(). (It compiled!)
Rob Landley <rob@landley.net>
parents:
565
diff
changeset
|
668 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
669 dowho = dohow = dowhat = amask = 0; |
578
5cc8a8fc08b4
First pass at a complete rewrite of string_to_mode(). (It compiled!)
Rob Landley <rob@landley.net>
parents:
565
diff
changeset
|
670 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
671 // Find the who, how, and what stanzas, in that order |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
672 while (*str && (s = strchr(whos, *str))) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
673 dowho |= 1<<(s-whos); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
674 str++; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
675 } |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
676 // If who isn't specified, like "a" but honoring umask. |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
677 if (!dowho) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
678 dowho = 8; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
679 umask(amask=umask(0)); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
680 } |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
681 if (!*str || !(s = strchr(hows, *str))) goto barf; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
682 dohow = *(str++); |
590
7becb497c3c4
Update chmod to work with new dirtree, and fix bugs in string_to_mode().
Rob Landley <rob@landley.net>
parents:
585
diff
changeset
|
683 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
684 if (!dohow) goto barf; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
685 while (*str && (s = strchr(whats, *str))) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
686 dowhat |= 1<<(s-whats); |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
687 str++; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
688 } |
578
5cc8a8fc08b4
First pass at a complete rewrite of string_to_mode(). (It compiled!)
Rob Landley <rob@landley.net>
parents:
565
diff
changeset
|
689 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
690 // Convert X to x for directory or if already executable somewhere |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
691 if ((dowhat&32) && (S_ISDIR(mode) || (mode&0111))) dowhat |= 1; |
578
5cc8a8fc08b4
First pass at a complete rewrite of string_to_mode(). (It compiled!)
Rob Landley <rob@landley.net>
parents:
565
diff
changeset
|
692 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
693 // Copy mode from another category? |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
694 if (!dowhat && *str && (s = strchr(whys, *str))) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
695 dowhat = (mode>>(3*(s-whys)))&7; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
696 str++; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
697 } |
578
5cc8a8fc08b4
First pass at a complete rewrite of string_to_mode(). (It compiled!)
Rob Landley <rob@landley.net>
parents:
565
diff
changeset
|
698 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
699 // Are we ready to do a thing yet? |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
700 if (*str && *(str++) != ',') goto barf; |
578
5cc8a8fc08b4
First pass at a complete rewrite of string_to_mode(). (It compiled!)
Rob Landley <rob@landley.net>
parents:
565
diff
changeset
|
701 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
702 // Ok, apply the bits to the mode. |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
703 for (i=0; i<4; i++) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
704 for (j=0; j<3; j++) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
705 mode_t bit = 0; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
706 int where = 1<<((3*i)+j); |
638
92200901cfe1
Make chmod +w respect umask, implement +s and +t, fix ls to show suid/sgid/stid without x bit.
Rob Landley <rob@landley.net>
parents:
623
diff
changeset
|
707 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
708 if (amask & where) continue; |
578
5cc8a8fc08b4
First pass at a complete rewrite of string_to_mode(). (It compiled!)
Rob Landley <rob@landley.net>
parents:
565
diff
changeset
|
709 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
710 // Figure out new value at this location |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
711 if (i == 3) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
712 // suid/sticky bit. |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
713 if (j) { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
714 if ((dowhat & 8) && (dowho&(8|(1<<i)))) bit++; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
715 } else if (dowhat & 16) bit++; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
716 } else { |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
717 if (!(dowho&(8|(1<<i)))) continue; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
718 if (dowhat&(1<<j)) bit++; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
719 } |
578
5cc8a8fc08b4
First pass at a complete rewrite of string_to_mode(). (It compiled!)
Rob Landley <rob@landley.net>
parents:
565
diff
changeset
|
720 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
721 // When selection active, modify bit |
578
5cc8a8fc08b4
First pass at a complete rewrite of string_to_mode(). (It compiled!)
Rob Landley <rob@landley.net>
parents:
565
diff
changeset
|
722 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
723 if (dohow == '=' || (bit && dohow == '-')) mode &= ~where; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
724 if (bit && dohow != '-') mode |= where; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
725 } |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
726 } |
578
5cc8a8fc08b4
First pass at a complete rewrite of string_to_mode(). (It compiled!)
Rob Landley <rob@landley.net>
parents:
565
diff
changeset
|
727 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
728 if (!*str) break; |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
729 } |
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
730 return mode; |
578
5cc8a8fc08b4
First pass at a complete rewrite of string_to_mode(). (It compiled!)
Rob Landley <rob@landley.net>
parents:
565
diff
changeset
|
731 barf: |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
671
diff
changeset
|
732 error_exit("bad mode '%s'", modestr); |
551
2548e6e590b2
Add string to mode_t parser
Daniel Walter <d.walter@0x90.at>
parents:
550
diff
changeset
|
733 } |
658 | 734 |
916 | 735 // Format access mode into a drwxrwxrwx string |
736 void mode_to_string(mode_t mode, char *buf) | |
885
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
737 { |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
738 char c, d; |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
739 int i, bit; |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
740 |
916 | 741 buf[10]=0; |
885
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
742 for (i=0; i<9; i++) { |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
743 bit = mode & (1<<i); |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
744 c = i%3; |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
745 if (!c && (mode & (1<<((d=i/3)+9)))) { |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
746 c = "tss"[d]; |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
747 if (!bit) c &= ~0x20; |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
748 } else c = bit ? "xwr"[c] : '-'; |
916 | 749 buf[9-i] = c; |
885
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
750 } |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
751 |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
752 if (S_ISDIR(mode)) c = 'd'; |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
753 else if (S_ISBLK(mode)) c = 'b'; |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
754 else if (S_ISCHR(mode)) c = 'c'; |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
755 else if (S_ISLNK(mode)) c = 'l'; |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
756 else if (S_ISFIFO(mode)) c = 'p'; |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
757 else if (S_ISSOCK(mode)) c = 's'; |
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
758 else c = '-'; |
916 | 759 *buf = c; |
885
beb32d780164
Add library function for the file permission formatting in ls and stat
Felix Janda <felix.janda@posteo.de>
parents:
883
diff
changeset
|
760 } |
1145
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
761 |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
762 // Execute a callback for each PID that matches a process name from a list. |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
763 void names_to_pid(char **names, int (*callback)(pid_t pid, char *name)) |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
764 { |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
765 DIR *dp; |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
766 struct dirent *entry; |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
767 |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
768 if (!(dp = opendir("/proc"))) perror_exit("opendir"); |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
769 |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
770 while ((entry = readdir(dp))) { |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
771 unsigned u; |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
772 char *cmd, **curname; |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
773 |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
774 if (!(u = atoi(entry->d_name))) continue; |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
775 sprintf(libbuf, "/proc/%u/cmdline", u); |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
776 if (!(cmd = readfile(libbuf, libbuf, sizeof(libbuf)))) continue; |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
777 |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
778 for (curname = names; *curname; curname++) |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
779 if (**curname == '/' ? !strcmp(cmd, *curname) |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
780 : !strcmp(basename(cmd), basename(*curname))) |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
781 if (callback(u, *curname)) break; |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
782 if (*curname) break; |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
783 } |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
784 closedir(dp); |
80c9df5145fe
Move names_to_pid from pending to lib.
Rob Landley <rob@landley.net>
parents:
1141
diff
changeset
|
785 } |
1276
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
786 |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
787 // display first few digits of number with power of two units, except we're |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
788 // actually just counting decimal digits and showing mil/bil/trillions. |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
789 int human_readable(char *buf, unsigned long long num) |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
790 { |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
791 int end, len; |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
792 |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
793 len = sprintf(buf, "%lld", num); |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
794 end = ((len-1)%3)+1; |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
795 len /= 3; |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
796 |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
797 if (len && end == 1) { |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
798 buf[2] = buf[1]; |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
799 buf[1] = '.'; |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
800 end = 3; |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
801 } |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
802 buf[end++] = ' '; |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
803 if (len) buf[end++] = " KMGTPE"[len]; |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
804 buf[end++] = 'B'; |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
805 buf[end++] = 0; |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
806 |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
807 return end; |
d48bdc1cb017
Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
Rob Landley <rob@landley.net>
parents:
1273
diff
changeset
|
808 } |