]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Merge in upstream changes to my-basic
authorTravis Cross <tc@traviscross.com>
Sat, 5 Apr 2014 06:02:36 +0000 (06:02 +0000)
committerTravis Cross <tc@traviscross.com>
Sat, 5 Apr 2014 06:48:02 +0000 (06:48 +0000)
We can't use their new mb_gets() because they call exit(3) in the
event of a read error, which isn't what we want.

1  2 
src/mod/languages/mod_basic/my_basic.c
src/mod/languages/mod_basic/my_basic.h

index 0e22978515a2d809aa61bbf6ab3bb88556575caa,dcc30fa0a56a52d8991a2cc1024cce0b49cda334..49aaaeac27b9b6b1092057ba53b298120515b433
@@@ -3775,18 -3776,20 +3780,32 @@@ int mb_set_printer(mb_interpreter_t* s
        return result;
  }
  
+ int mb_gets(char* buf, int s) {
+       /* Safe stdin reader function */
+       int result = 0;
+       if(fgets(buf, s, stdin) == 0) {
+               fprintf(stderr, "Error reading.\n");
+               exit(1);
+       }
+       result = (int)strlen(buf);
+       if(buf[result - 1] == '\n')
+               buf[result - 1] = '\0';
+       return result;
+ }
 +void mb_set_user_data(mb_interpreter_t* s, void *ptr)
 +{
 +      mb_assert(s);
 +      s->userdata = ptr;
 +}
 +
 +void *mb_get_user_data(mb_interpreter_t* s)
 +{
 +      mb_assert(s);
 +      return s->userdata;
 +}
 +
  /* ========================================================} */
  
  /*
@@@ -5639,11 -5647,11 +5663,14 @@@ int _std_input(mb_interpreter_t* s, voi
        ast = (_ls_node_t*)(*l);
        obj = (_object_t*)(ast->data);
  
+       if(!obj || obj->type != _DT_VAR) {
+               _handle_error_on_obj(s, SE_RN_VARIABLE_EXPECTED, DON(ast), MB_FUNC_ERR, _exit, result);
+       }
        if(obj->data.variable->data->type == _DT_INT || obj->data.variable->data->type == _DT_REAL) {
 -              mb_gets(line, sizeof(line));
 +              if(!fgets(line, sizeof(line), stdin)) {
 +                      result = MB_FUNC_ERR;
 +                      goto _exit;
 +              }
                obj->data.variable->data->type = _DT_INT;
                obj->data.variable->data->data.integer = (int_t)strtol(line, &conv_suc, 0);
                if(*conv_suc != '\0') {
index 28830443f93ba85a8580a8e9c4be9022a6cd78d7,9524e9435ee1a6f2fe4ae68df094f370f6b69068..0ce58587c4d3694468feb4659662877a6c1573de
@@@ -226,9 -229,8 +229,11 @@@ MBAPI const char* mb_get_error_desc(mb_
  MBAPI int mb_set_error_handler(mb_interpreter_t* s, mb_error_handler_t h);
  MBAPI int mb_set_printer(mb_interpreter_t* s, mb_print_func_t p);
  
+ MBAPI int mb_gets(char* buf, int s);
 +MBAPI void mb_set_user_data(mb_interpreter_t* s, void *ptr);
 +MBAPI void *mb_get_user_data(mb_interpreter_t* s);
 +             
  #ifdef MB_COMPACT_MODE
  #     pragma pack()
  #endif /* MB_COMPACT_MODE */