Age | Commit message (Collapse) | Author |
|
To fully centralize this matter these well-tested functions are added to
the util.c, and implemented as we know it from many other suckless
projects.
|
|
This is to display that all the manuals still reflect the current state.
|
|
Given we have a util.c anyway it does not make any sense to duplicate
code here. This way, error handling and output is in one place and one
does not have to change things in multiple different files. This also
reduces code duplication by a lot.
It also solves an older bug where the error reporting was not on point:
$ echo "farb" | ff2png
ff2png: fread: Success
(It also lacked a newline)
Now it properly reports
$ echo "farb" | ff2png
ff2png: fread: Unexpected end of file
I also fixed some other minor details, for instance that all error
messages should begin with a capital letter.
|
|
http://www.pathname.com/fhs/2.2/fhs-4.11.html
|
|
Thanks Michael Forney for reporting this! We cannot use identifiers
beginning with an underscore, says the C99-standard, section 7.1.3:
"All identifiers that begin with an underscore are always reserved for
use as identifiers with file scope in both the ordinary and tag name
spaces."
We go around this by putting the underscore at the end.
|
|
|
|
|
|
The (c)-symbol has become more of a remnant after the Berne convention
has been signed. Given the ISC exploits some simplifications introduced
with the Berne convention, it just makes sense to drop this relict as
well and just state our Copyright without much ado about nothing.
https://opensource.org/licenses/ISC
|
|
You never know...
|
|
|
|
The C99 standard explicitly allows to modify argc, argv, but leaves it
open what happens if you modify the content of argv. Under OpenBSD, this
actually has an effect on how the program is listed (e.g. in ps). To
prevent this, we just add a counter variable and use that for iteration.
While at it, this commit also includes a few style changes.
Thanks Hiltjo for reporting this!
|
|
We do not really parse anything, we just use/devour something.
|
|
|
|
We use some OpenBSD code in util.c (namely by Ted Unangst, Todd C.
Miller and Otto Moerbeek), which is licensed under the ISC license.
To make it clearer and make it easier to see what farbfeld really is licensed
under, we include these authors in the LICENSE file and remove the
explicit headers from util.c. While at it, we also remove superfluous
includes and shove them to the top.
|
|
|
|
|
|
Previously, we would return argc as -1, which could cause some problems.
This was not an issue introduced in the rewrite and is a bug present in
the "old" arg.h as well.
Thanks Isabella Parakiss for reporting this!
|
|
We decrement argc first before incrementing argv, so we never have a
state where we potentially point to uncharted territory.
|
|
This was something I wanted to do for quite a while now.
The problem with the old arg.h is that it does not allow you to call ARGF() and
EARGF() multiple times without messing the argument up. This is an
unnecessary limitation and can lead to unexpected results for people not
aware of this problem.
ARGBEGIN {
case 'a':
printf("1st call: %s\n", ARGF());
printf("2nd call: %s\n", ARGF());
break;
default:
break;
}
$ prog -a ARG
1st call: ARG
2nd call: RG
This is fixed now to properly print
$ prog -a ARG
1st call: ARG
2nd call: ARG
The old version also used more local variables than necessary, as the
problem can be reduced to one single local variable within the second
loop, which expresses if the argument has been consumed or not.
The use of abort() within EARGF() was a bit drastic. exit(1) should
suffice here and align with what you expect from an e*-type function.
Additionally, the formatting I used should make readability easier and
the code deduplication in the *ARGF()-macros helps with maintainability.
The license used is ISC, which is compatible with MIT/X, GPL and so forth in
case you want to use it in your project. I explicitly added the license header
to the file making it easy to just drop it in.
There are no plans to support the obsolete ARGNUM, ARGNUMF, LNGARG syntaxes.
|
|
Reading the standard thoroughly revealed that the only way to really
get a portable Makefile is to list each target explicitly, so that's
what we'll do now here.
|
|
Thanks Hiltjo for reporting this!
For some reason, OpenBSD make does not add $(BIN).o to the dependency list
when it sees the $(BIN) target rule. It does so however when it does the
conversion from .c to .o.
This behaviour is unique for OpenBSD make as far as I've seen, and for
the time being, this workaround will manually add the object to the
dependency list.
This is not POSIX compliant and in GNU make it just evaluates to an
empty string, but it works until this has been investigated further.
|
|
The tool-specific flags were LDLIBS and not LDFLAGS, because we specify
the libraries we want to link in, not flags to the linker itself.
The order was broken as it didn't allow -Wl,--as-needed or other things
highly dependent on the order of arguments.
I also wanted to add an explicit .c.o suffix rule. This way, it is
clearer what is happening in the Makefile and the form of compilation
output is controllable.
|
|
|
|
Of course, you want the libraries to come last in order of execution.
Additionally, in case the libraries provided with $($*-LDFLAGS) contain
unresolved symbols, we want to give the opportunity for the user to
provide the necessary general symbols, whatever they may be, last.
Thanks Duncaen for reporting this!
|
|
This is more or less a refactoring release, but with deep changes in the
tools that I was hoping to look into for a long time.
The codebase is in a very consistent state now, also thanks to the
introduction of a set of common utility-functions.
What really makes me think is the fact that it takes so many iterations
and a high level of detail to get the library handling and I/O right.
It just makes you wonder how much software is out there that is full
of little subtle bugs that might blow up in your face some day.
Thanks for all the feedback!
|
|
|
|
To be honest, it can happen too easily that the user forgets to put
the colour in quotation marks, yielding in the rest of the
pipeline to be discarded as a comment.
|
|
|
|
|
|
|
|
so they align with the manpages.
|
|
I noticed that it would be beneficial to release the invert.c code
listing under a very permissive license.
I like the style of the "Copy me if you can"-License, but thought
that 0BSD would make it even clearer that everyone can do whatever
he wants with this code.
The code itself was not bad beforehand, but lacked some elementary
features like checked flushing at the end and proper error messages.
I also reworked the data structures a bit to make it more appealing
and clearer where the "guts" of the code are (i.e. in invert()).
|
|
|
|
Make them more consistent, and only maintain a list of the conversion
tools in farbfeld.5.
Refine the wording on the jpg-manpages.
|
|
Rework the introductory paragraph and show examples directly afterwards.
If people are interested in the tl;dr-sections, they can then read on.
|
|
Else the user might be left wondering what happened. The output from
imagemagick might not be the nicest in the world, but it's bearable for
some given edge-cases.
|
|
|
|
The Unix philosophy teaches us that tools should strive to output only
necessary diagnostic information and also reflect errors properly with
the return value.
There were three subtle problems with 2ff:
1) If the farbfeld-passthrough failed, it would return 1 instead
of 1.
2) If the first 8 bytes contained a NUL byte, bash would print
an ugly warning message. Passing it through tr -d '\0' fixes
that.
3) Lack of comments. I added some to make the structure even
clearer, also including using an if-else-structure.
I removed the 2ff error message; the tools themselves print proper
messages already.
|
|
|
|
It's not very useful for the reader any more.
|
|
instead of per-tool-settings.
|
|
For small images, it could happen that the output stream would not be
flushed before exit(), resulting in a lack of error-reporting on
a full device. Using fflush(), a function I first introduced in sbase,
we do the flushing before returning manually and report errors if they
occurred.
|
|
|
|
The truncation issue is solved now by checking the return values. Maybe
for small images where the FILE-buffer is not flushed early enough we
can rethink that.
The utility functions were written to the extent it was desired.
I added a note not to forget to take a look at the part in the jpg-code
which does the color mixing.
|
|
We make use of the utility functions for parsing the color mask and
other things and generally align the code with the general coding style.
|
|
We split out the libpng-setup into a separate function, it is very very
ugly.
The code also received a general cleanup and aligns itself much better
with the general coding style and structure.
|
|
I chose to go with a row-based-approach here, which is a bit easier
to read and is somewhat "closer" to the input data.
|
|
First of all, there was lots of libjpeg-specific cruft that just didn't
have any right to exist (METHODDEF(), strange typedefs, use of the
internal memory pool for no reason). This is gone now.
Additionally, we make use of the save and proven utility functions and
in general the code should be more well-separated now.
What is left to do is clear up the part where we mix the colors with the
mask.
|
|
|
|
parse_mask() -> parse a mask-color #xxxxxx
ereallocarray()
estrtonum()
These will come in handy in the respective tools.
|