pike.git / src / modules / _Stdio / stat.c

version» Context lines:

pike.git/src/modules/_Stdio/stat.c:382:    else    SIMPLE_BAD_ARG_ERROR ("Stat create", 1, "void|Stdio.Stat|array(int)");    }       pop_n_elems (args);   }      void f_min(INT32 args);   void f_max(INT32 args);    - static void stat_index(INT32 args) + static void _stat_index(INT_TYPE code)   { -  if (!args) -  SIMPLE_TOO_FEW_ARGS_ERROR("Stat `[]",1); -  else if (args==1) -  { -  if (TYPEOF(sp[-1]) == T_INT) -  { -  int index = sp[-1].u.integer; -  pop_stack(); -  stat_push_compat(index); -  } -  else if (TYPEOF(sp[-1]) == T_STRING) -  { -  INT_TYPE code; -  -  ref_push_mapping(stat_map); -  push_svalue (sp-2); -  f_index(2); -  code = sp[-1].u.integer; /* always integer there now */ -  pop_stack(); -  +     if (!code) {    /* Fall back to a normal index on this object, in case    * someone inherited us. */    struct svalue res;    object_index_no_free2 (&res, fp->current_object, 0, sp-1);    pop_stack();    *sp++ = res;    return;    } -  pop_stack(); +        switch (code)    {    case STAT_DEV: push_int(THIS_STAT->s.st_dev); break;    case STAT_INO: push_int(THIS_STAT->s.st_ino); break;    case STAT_MODE: push_int(THIS_STAT->s.st_mode); break;    case STAT_NLINK: push_int(THIS_STAT->s.st_nlink); break;    case STAT_UID: push_int(THIS_STAT->s.st_uid); break;    case STAT_GID: push_int(THIS_STAT->s.st_gid); break;    case STAT_RDEV: push_int(THIS_STAT->s.st_rdev); break;
pike.git/src/modules/_Stdio/stat.c:555:    push_constant_text("t");    else    push_constant_text("T");    else    if ( (THIS_STAT->s.st_mode & S_IXOTH) )    push_constant_text("x");    else    push_constant_text("-");       f_add(10); -  +     break; -  + #ifdef PIKE_DEBUG    default:    Pike_fatal ("stat_index is not kept up-to-date with stat_map.\n"); -  + #endif    }   } -  +  + static void stat_index(INT32 args) + { +  if( !args ) +  SIMPLE_TOO_FEW_ARGS_ERROR("Stat `[]",1); +  else if( args == 1 ) +  { +  if (TYPEOF(sp[-1]) == T_INT) +  { +  int index = sp[-1].u.integer; +  pop_stack(); +  stat_push_compat(index); +  } +  else if( TYPEOF(sp[-1]) == T_STRING ) +  { +  struct svalue *tmp; +  tmp = low_mapping_string_lookup( stat_map, sp[-1].u.string ); +  _stat_index( tmp ? tmp->u.integer : 0 ); +  }    else    SIMPLE_BAD_ARG_ERROR("Stat `[]",1,"int(0..6)|string");    }    else if (args>=2) /* range */    {    INT_TYPE from, to, n=0;       if (args > 2) {    pop_n_elems(args - 2);    args = 2;
pike.git/src/modules/_Stdio/stat.c:604:       while (from<=to)    {    stat_push_compat(from++);    n++;    }    f_aggregate(n);    }   }    +    static void stat_index_set (INT32 args)   {    int got_int_val = 0;    INT64 int_val;       if (args < 2)    SIMPLE_TOO_FEW_ARGS_ERROR ("Stat `[]=", 2);       if (args > 2) {    pop_n_elems (args - 2);
pike.git/src/modules/_Stdio/stat.c:855:    if (TYPEOF(sp[-args]) != T_INT)    SIMPLE_BAD_ARG_ERROR("_sprintf",0,"integer");       x=sp[-args].u.integer;    pop_n_elems(args);    switch (x)    {    case 'O':    n++; push_constant_text("Stat(");    -  ref_push_string(stat_index_strs[STAT_MODE_STRING]); -  n++; stat_index(1); +  n++; _stat_index(STAT_MODE_STRING);       n++; push_constant_text(" ");    -  ref_push_string(stat_index_strs[STAT_SIZE]); -  n++; stat_index(1); +  n++; _stat_index(STAT_SIZE);    n++; push_constant_text("b)");    f_add(n);    return;    default:    push_int(0);    return;    }   }      static void stat_indices(INT32 args)