Re: New linux command "hexed"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 08/05/15 14:29, Stephan Müller wrote:
It seems you implemented a subset of the functionality of 'od' or 'xxd'
>from coreutils. I guess these are widely spread and there is no need for
>another converter (albeit the cooler name). If hexed provides some extra
>features, you can integrate those in the tools above.

xxd seems a perfect replacement for hexed :P


FWIW, I see a number of quirks in your tool, Hypsurus:
a) Options have to be provided *after* the string
Usually options always appear at the beginning (just after the program name) and -when _POSIXLY_CORRECT is not set- the gnu optlib then allows placing them at any position.

b) The program crashes if the string begins with a dash (str is NULL).


c) You program requires the string to be passed as parameter.
All programs like this have *filenames* as parameters. Consistency is even more important for a program like this, that mimics the interfaces of many other programs working the other way. And receiving filenames makes much more sense. Do you really want to type the binary contents as a program parameter? Does your OS even allow that large? etc.

With a program that receives a filename, you can provide a string with
 echo string | hexed

with a program that receives the string, you need a construct like:
 hexed "$(</etc/passwd)"
and only if you use bash, the file is small enough to be passed as a parameter and it doesn't contain any NUL (which defeats the point of an hexer).


d) You have a number of signedness warnings, you are assgning a size_t to an int and, generally, it would have been much easier for hexed_hex_encode to work with unsigned char and hexed_hex_decode with chars. See attached patch.
--- hexed.c-original	2015-05-09 00:24:13.791707625 +0200
+++ hexed.c	2015-05-09 00:54:07.538368884 +0200
@@ -29,26 +29,29 @@
         int addx;
         int addCarray;
         int hexd;
-        unsigned char *str;
+        union {
+            char *str;
+            unsigned char *ustr;
+        };
 } hexed_t;
 
 void hexed_hex_encode(hexed_t *hexed) {
         int index = 0;
 
-        for( index = 0; hexed->str[index] != 0; index++ ) {
+        for( index = 0; hexed->ustr[index] != 0; index++ ) {
                 if ( hexed->addx )
-                        printf("\\x%x", hexed->str[index]);
+                        printf("\\x%x", hexed->ustr[index]);
                 else if ( hexed->addCarray )
-                        printf("0x%x,", hexed->str[index]);
+                        printf("0x%x,", hexed->ustr[index]);
                 else
-                        printf("%x", hexed->str[index]);
+                        printf("%x", hexed->ustr[index]);
         }
 
         putchar(0x0a);
 }
 
 void hexed_hex_decode(hexed_t *hexed) {
-        int index = 0;
+        size_t index = 0;
         short byte = 0x00;
         size_t len = strlen(hexed->str);
         

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux