}
/* If S points to a single valid modern od format string, put
- a description of that format in *TSPEC, make *NEXT point at the
- character following the just-decoded format (if *NEXT is non-NULL),
- and return zero. For example, if S were "d4afL"
- *NEXT would be set to "afL" and *TSPEC would be
+ a description of that format in *TSPEC, return pointer to
+ character following the just-decoded format.
+ For example, if S were "d4afL", we will return a rtp to "afL"
+ and *TSPEC would be
{
fmt = SIGNED_DECIMAL;
size = INT or LONG; (whichever integral_type_size[4] resolves to)
S_ORIG is solely for reporting errors. It should be the full format
string argument. */
-static void
-decode_one_format(const char *s_orig, const char *s, const char **next,
- struct tspec *tspec)
+static const char *
+decode_one_format(const char *s_orig, const char *s, struct tspec *tspec)
{
enum size_spec size_spec;
unsigned size;
unsigned field_width = 0;
int pos;
- assert(tspec != NULL);
switch (*s) {
case 'd':
s = end;
}
} else {
- static const uint8_t CSIL_sizeof[] = {
+ static const uint8_t CSIL_sizeof[4] = {
sizeof(char),
sizeof(short),
sizeof(int),
sizeof(long),
};
size = CSIL_sizeof[p - CSIL];
+ s++; /* skip C/S/I/L */
}
#define ISPEC_TO_FORMAT(Spec, Min_format, Long_format, Max_format) \
if (tspec->hexl_mode_trailer)
s++;
- if (next != NULL)
- *next = s;
+ return s;
}
/* Decode the modern od format string S. Append the decoded
struct tspec tspec;
const char *next;
- decode_one_format(s_orig, s, &next, &tspec);
+ next = decode_one_format(s_orig, s, &tspec);
assert(s != next);
s = next;