FreeCalypso > hg > freecalypso-tools
view loadtools/bpunify.c @ 965:2969032bdfac
fcup-smsend[mult]: fix buglet in K&R C NULL pointer passing
The only 100% safe way to pass a NULL pointer as a function argument
in K&R C is to cast 0 to a pointer type; failing to do so may cause
mysterious bugs (invalid stack frames or garbage in argument registers)
on 64-bit machines. This issue has already been fixed in most of
FC host tools, but I just found some missed spots: passing of NULL UDH
to PDU encoding functions in fcup-smsend[mult] in the case of single
(not concatenated) SMS.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 01 Sep 2023 07:33:51 +0000 |
parents | 850b4f066d75 |
children |
line wrap: on
line source
/* * fc-buzplay: this module implements the unified 'play' command. */ #include <sys/types.h> #include <ctype.h> #include <stdio.h> #include <string.h> #include <strings.h> #include <stdlib.h> set_bu_volume(vol) unsigned vol; { char *targv[3], argbuf[16]; sprintf(argbuf, "%u", vol - 1); targv[0] = "buzlev"; targv[1] = argbuf; targv[2] = 0; tpinterf_make_cmd(targv); if (tpinterf_send_cmd() < 0) return(-1); return tpinterf_pass_output(1); } cmd_play(argc, argv) char **argv; { char *filename, *tail; int pwt_mode, rc; unsigned global_vol; filename = argv[1]; tail = rindex(filename, '.'); if (!tail) { unknown: fprintf(stderr, "unable to intuit format of %s, use play-bu or play-pwt\n", filename); return(-1); } if (!strcmp(tail, ".buz")) pwt_mode = 0; else if (!strcmp(tail, ".pwt")) pwt_mode = 1; else goto unknown; if (argv[2]) { global_vol = strtoul(argv[2], 0, 0); if (global_vol < 1 || global_vol > 64) { fprintf(stderr, "error: invalid global volume argument\n"); return(-1); } } else global_vol = 64; if (pwt_mode) return buzplay_pwt_file(filename, global_vol); else { rc = set_bu_volume(global_vol); if (rc) return(rc); return buzplay_bu_file(filename); } }