Commit Graph

1704 Commits

Author SHA1 Message Date
Quentin Rameau
4859f4c825 ls: fix time handling by augmenting time resolution
ls was using (old) UNIX spec (struct stat).st_[acm]time.
It now uses POSIX (struct stat).(struct timespec st_[acm]tim) which
gives time resolution in seconds and nanoseconds.
If two files have the same time in seconds, we extend the comparision to
nanoseconds.
2015-11-01 17:29:39 +00:00
Quentin Rameau
57d220b3dc ls: fix entities arrays handling in main()
Entities arrays in main() were arrays of pointer to entities and were
not compatible with entcmp().
They have been changed to being arrays of entities.
Thanks to Michael Forney <mforney@mforney.org> for having seen that.
2015-11-01 17:29:39 +00:00
sin
aa8112a408 Revert "ls: Fix sorting of named entries"
This reverts commit ff78d03791cc7c24dfc407c39dd2158451c9ad12.
2015-11-01 17:29:39 +00:00
sin
2366164de7 No need for semicolon after ARGEND
This is also the style used in Plan 9.
2015-11-01 10:18:55 +00:00
sin
27f9163d2e getconf: Fix trailing whitespace 2015-11-01 09:36:41 +00:00
Michael Forney
674d1636f8 ls: Fix sorting of named entries
Previously, entcmp was being passed struct entry **, when it expected
struct entry *.

Many autoconf-generated configure scripts use `ls -t` to determine whether or
not the system clock is behaving correctly. If they are sorted in the wrong
order, it produces an error.

  checking whether build environment is sane... configure: error: newly created file is older than distributed files!
  Check your system clock
2015-11-01 09:36:41 +00:00
FRIGN
b70d2857ab Use ifdef in getconf(1) instead of commenting out missing defines
Thanks k0ga for the suggestion!
2015-11-01 09:36:41 +00:00
Greg Reagle
9b7e560781 od: more accurate statement of compliance with POSIX 2015-10-31 10:41:33 +00:00
FRIGN
dae33f42d4 Fix typo in libutil/fshut.c 2015-10-26 16:53:28 +00:00
FRIGN
91ab4e80b9 Fix multiple file handling
1) Fix skip overflow for negative numbers
2) Print proper trailing lines and addresses according to the last
   element.
2015-10-26 16:53:28 +00:00
sin
1e4ab5ec9a Minor style fix 2015-10-26 11:57:04 +00:00
FRIGN
ecb351f1d5 Properly parse numbers in od(1)
Previously, it'd drop right through in the number case and return
crazy-long numbers (like 28 for L), resulting in unexpected behaviour.
2015-10-26 11:55:41 +00:00
FRIGN
1eff1e8214 Properly handle partial chunks in od(1)
Grab the remaining bytes and fill them up with zeroes in a
temporary buffer.
2015-10-26 11:55:41 +00:00
FRIGN
914991f5f6 Fix remaining endian-issue in od(1)
After setting up qemu and testing od(1) in a Big Endian environment,
I found out that the conditional in the printing function was not
right.
Instead, it's supposed to be way simpler. While at it, we don't need
HOST_BIG_ENDIAN any more. Just set big_endian properly in main()
and be done with it.
2015-10-26 11:55:41 +00:00
FRIGN
a2536328aa Mark getconf as audited in README 2015-10-26 11:55:41 +00:00
FRIGN
86a99c5a03 Mark od(1) and getconf(1) as audited
They have just been (re)written, nothing to do here...
2015-10-26 11:55:41 +00:00
FRIGN
eeccb0a5ea Fix od(1) output
Of course, for right-justification we want no "+"'s in the output.
2015-10-26 11:55:41 +00:00
FRIGN
d03baf1697 Add -e and -E flags to od(1) and properly handle endianness
The -e and -E flags allow the user to override the host endianness
and force od(1) to handle input according to a little (-e) or big (-E)
endian environment.
The previous handling was broken as bitshifts alone are already
endian-independent.
2015-10-26 11:55:41 +00:00
FRIGN
c619e168c9 Update od(1)-documentation 2015-10-26 11:55:41 +00:00
FRIGN
092c95b66c Rewrite od(1)
Looking at the old code, it became clear that the desired
functionality with the t-flag could not be added unless the
underlying data-structures were reworked.
Thus the only way to be successful was to rewrite the whole thing.

od(1) allows giving arbitrarily many type-specs per call, both via
-t x1o2... and -t x1 -t o2 and intermixed.
This fortunately is easy to parse.
Now, to be flexible, it should not only support types of integral
length. Erroring out like this is inacceptable:

$ echo -n "shrek"| od -t u3
od: invalid type string ‘u3’;
this system doesn't provide a 3-byte integral type

Thus, this new od(1) just collects the bytes until shortly before
printing, when the numbers are written into a long long with the
proper offset.
The bytes per line are just the lcm of all given type-lengths and >= 16.
They are equal to 16 for all types that are possible to print using
the old od(1)'s.

Endianness is of course also supported, needs some testing though,
especially on Big Endian systems.
2015-10-26 11:55:41 +00:00
sin
7b9988c7ff Implement -o for flock(1) to close fd before exec 2015-10-26 11:55:41 +00:00
Hiltjo Posthuma
09c3caa56d getconf.1: fix: end list (El) 2015-10-10 01:18:24 +02:00
sin
435b7b5d20 Convert leading whitespace to tabs 2015-10-08 16:18:45 +01:00
FRIGN
e51a2e6d2f Use ISO-date-format in manpages
The one specified by mdoc is hard to read for non-native
speakers from countries which read the date day-first (like
Germany, Greece, North-Korea, Swamp,...).
This is also consistent with how we generally specify dates
at suckless.org.
2015-10-08 17:15:08 +02:00
sin
979f3cb844 env: Fix return value if the command could not be found 2015-10-07 16:25:54 +01:00
sin
fb4ca81fe8 Include fcntl.h for open(2)
It was implicitly included via sys/file.h on my system.
2015-10-07 15:21:24 +01:00
sin
acca463813 If multiple modes are supplied to flock(1), the last one wins 2015-10-07 10:27:47 +01:00
sin
9a176e4011 Add flock entry in README 2015-10-07 10:27:47 +01:00
sin
386fa3d2a7 flock: Set default mode for open(2) 2015-10-07 10:27:47 +01:00
sin
2652dcfd6c Initial implementation of flock(1)
Very useful to prevent overlapping cron jobs amongst other things.
2015-10-07 10:27:47 +01:00
sin
23fdd768f0 Prepend "usage: " in usage() 2015-10-04 17:00:47 +01:00
sin
3423752465 Lint is dead - remove unnecessary cast to (void) 2015-10-04 16:49:59 +01:00
Quentin Rameau
0e2f509883 ls: handle character/block files in long format
Although major() and minor() are not POSIX, we don't want to have macros
there so we rely on their implementation by the target system.
2015-10-04 16:45:51 +01:00
sin
f14a896891 Stop defining major()/minor() and makedev()
Rely on what the system provides.  These are not standardized macros
but any relevant UNIX system will provide them.

We can revisit this in the future if something breaks.
2015-10-04 16:39:28 +01:00
FRIGN
ea986ea504 Match \v as escaped character
Thanks Greg for noticing this!
2015-10-02 14:48:21 +01:00
sin
627119df9f Comment out some more entries in getconf.c to make it build on OpenBSD
Uncomment the entries if your system supports them.
2015-10-01 17:17:23 +01:00
FRIGN
05996b997c Add getconf(1)
The logic is simple, it's just a pain in the ass to fill the
data-structures.
Some lines had to be commented out, as glibc/musl apparently
have not fully implemented the mandatory variables for the
2013 corrigendum of POSIX 2008.

Also added a manpage and the necessary entries in README.

I also removed it from the TODO.
2015-10-01 17:17:23 +01:00
FRIGN
98e7e75ec6 Fix last offset output using skip in od(1)
Yeah, if the skipping is longer than the file itself, we need
to take the skip value, not the address.
Also, only print the last newline when we've actually printed
at least 1 address.
2015-09-30 19:44:11 +01:00
FRIGN
8be7c42863 Make strtol() parsing even stricter in parseoffset()
Be strict about what we pass to it and how we handle errors.
The base-check is done by strtol anyway.
Also improve error-reporting.
2015-09-30 19:44:11 +01:00
FRIGN
c514c580ec Print error message when size == 0 in split(1)
instead of just exiting with code 1. This could be confusing.
2015-09-30 19:44:10 +01:00
FRIGN
fe84305649 Check for size == 0 in split(1) 2015-09-30 19:44:10 +01:00
FRIGN
8125e8829d Convert split(1) to parseoffset()
This drops a lot of duplicate code. Also simplify it in other
parts of the main arg-handler.
2015-09-30 19:44:10 +01:00
FRIGN
870a75076d Harden parseoffset() even more
1) Check for NULL.
2) Check for empty strings.
3) Clarify error-messages.
2015-09-30 19:44:10 +01:00
FRIGN
8163451249 Check parseoffset return value in od(1)
Yeah, kinda embarassing. Forgot about that.
2015-09-30 19:44:10 +01:00
FRIGN
fc886aa144 Implement od(1) v-flag
If this flag is not given, od(1) automatically replaces duplicate
adjacent lines with an '*' for each reoccurence.
If this flag is set, thus, no such filtering occurs.

In this case this would mean having to somehow keep the last printed
line in some backbuffer, building the next line and then doing the
necessary comparisons. This basically means that we duplicate the
functionality provided with uniq(1).

So instead of

$ od -t a > dump

you'd rather do

$ od -t a | uniq -f 1 -c > dump

Skipping the first field is necessary, as the addresses obviously differ.

Now, I was thinking hard why this flag even exists. If POSIX mandated
to add the address before the asterisk, so we know the offset of duplicate
occurrences, this would make sense. However, this is not the case.

Using uniq(1) also gives nicer output:
~ $ echo "111111111111111111111111111111111111111111111111" | od -t a -v | uniq -f 1 -c
      3 0000000   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
      1 0000060  nl
      1 0000061

in comparison to

$ echo "111111111111111111111111111111111111111111111111" | od -t a
0000000   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
*
0000060  nl
0000061

Before working on od(1), I didn't even know it would filter out
duplicate adjacent lines like that. This is also a matter of
predictability.

Concluding, the v-flag is implicitly set and users urged to just
use the existing tools provided by the system.
I don't think we would break scripts either. Firstly, it's rather
unlikely to have duplicate lines exactly matching the line-length of
od(1). Secondly, even if a script did that specifically, in the worst
case there would be a counting error or something.

Given od(1) is mostly used interactively, we can safely assume this
feature is for the benefit of the users.

Ditch this legacy POSIX crap!
 Please enter the commit message for your changes. Lines starting
2015-09-30 19:44:10 +01:00
FRIGN
f8f2a56852 Add -j and -N to od(1) and update README
With parseoffset(), it's rather trivial to implement POSIX' rather
obscure commandments.
The -j and -N-flags should be ready to go!
2015-09-30 19:44:10 +01:00
FRIGN
64929039e9 Don't forget to scale in parseoffset() 2015-09-30 19:44:10 +01:00
FRIGN
007df69fc5 Add parseoffset()
This is a utility function to allow easy parsing of file or other
offsets, automatically taking in regard suffixes, proper bases and
so on, for instance used in split(1) -b or od -j, -N(1).
Of course, POSIX is very arbitrary when it comes to defining the
parsing rules for different tools.
The main focus here lies on being as flexible and consistent as
possible. One central utility-function handling the parsing makes
this stuff a lot more trivial.
2015-09-30 19:44:10 +01:00
FRIGN
7132473947 Some small changes for od(1)
1) Move usage() down above main().
2) Consistently use printaddress() across the code.
3) Use off_t instead of size_t for file offsets.
2015-09-30 19:44:10 +01:00
FRIGN
365f392d3c Properly handle namedict in od(1)
I added the [127]-index but forgot that this increases the length,
breaking a later check.
2015-09-30 19:44:10 +01:00