diff options
author | Michal Čihař <nijel@debian.org> | 2014-12-30 09:53:59 +0100 |
---|---|---|
committer | Michal Čihař <nijel@debian.org> | 2014-12-30 09:53:59 +0100 |
commit | a288f916607f050221fab9e5164955797dc6b803 (patch) | |
tree | c42ee7819edcbb8818bd9a598c808f199cab0c1c /gammu/gammu.c | |
parent | cc61e5d2d9af23c37cd4994de9e3e22f25971d1a (diff) |
Imported Upstream version 1.34.0
Diffstat (limited to 'gammu/gammu.c')
-rw-r--r-- | gammu/gammu.c | 58 |
1 files changed, 48 insertions, 10 deletions
diff --git a/gammu/gammu.c b/gammu/gammu.c index 5f2915a..eb63284 100644 --- a/gammu/gammu.c +++ b/gammu/gammu.c @@ -358,10 +358,10 @@ static void RunBatch(int argc, char *argv[]) /** * @todo Allocate memory dynamically. */ - char ln[2000]; + char ln[2000], token; size_t i, len; ssize_t pos; - int j, c = 0, argsc; + int j, c = 0, argsc, n; char *argsv[20]; gboolean origbatch; char *name; @@ -409,20 +409,57 @@ static void RunBatch(int argc, char *argv[]) } /* split words into strings in the array argsv */ + // added support for params that contain space(s) by adam-pl i = 0; j = 0; argsc = 0; len = strlen(ln); + token = 0x00; while (i <= len) { - if (ln[i] == ' ' || ln[i] == 0) { - argsc++; - argsv[argsc] = malloc(i - j + 1); - strncpy(argsv[argsc], ln + j, i - j); - argsv[argsc][i - j] = 0; - j = i + 1; - } - i++; + switch (token) { + case 0x27: + case 0x22: // ' or " char + if (ln[i] == token) { + //printf( "(B) Found start token at i=%zu\n", i); + token = 0x00; + n = i - j; + argsc++; + argsv[argsc] = malloc(n + 1); + strncpy(argsv[argsc], ln + j, n); + argsv[argsc][n] = 0; + i++; + j = i + 1; + //printf( "n=%i, value=%s\n", n, argsv[argsc]); + } + break; + default: + if (ln[i] == ' ' || ln[i] == 0) { + argsc++; + n = i - j; + argsv[argsc] = malloc(n + 1); + strncpy(argsv[argsc], ln + j, n); + argsv[argsc][n] = 0; + j = i + 1; + } + else if (ln[i] == 0x27 || ln[i] == 0x22) { + //printf( "(A) Found end token at i=%zu\n", i); + token = ln[i]; + j = i + 1; + } + break; + } + i++; + } + + /* show params list */ + /* + if (argsc > 0) { + printf( "\nSummary of params:\n"); + for (j = 1; j <= argsc; j++) { + printf( "Parameter %i=[%s]\n", j, argsv[j]); + } } + */ if (argsc > 0) { /* we have some usable command and parameters, send them into standard processing */ printf ("----------------------------------------------------------------------------\n"); @@ -640,6 +677,7 @@ static GSM_Parameters Parameters[] = { {"setbitmap", 1, 4, SetBitmap, {H_Logo,0}, "DEALER text"}, {"copybitmap", 1, 3, CopyBitmap, {H_Logo,0}, "inputfile [outputfile [OPERATOR|PICTURE|STARTUP|CALLER]]"}, {"presskeysequence", 1, 1, PressKeySequence, {H_Other,0}, "mMnNpPuUdD+-123456789*0#gGrR<>[]hHcCjJfFoOmMdD@"}, + {"setpower", 1, 1, SetPower, {H_Other,0}, "ON|OFF"}, #if defined(WIN32) || defined(HAVE_PTHREAD) {"searchphone", 0, 1, SearchPhone, {H_Other,0}, "[-debug]"}, #endif |