On Sat, Aug 13, 2016 at 11:41:26PM -0700, Philip Guenther wrote:
> 
> This seems unnecessary:
>       typedef quad_t RLIM_TYPE;
> 
> when we have rlim_t.  Yes, rlim_t is unsigned while RLIM_TYPE is signed, 
> but it's not doing anything with this that needs a signed type.
> 
> While ktracing csh to verify the setrlimit/getrlimit calls, I noticed that 
> csh calls getrlimit 513(!) times on startup.  Thus the diff to misc.c to 
> pull the sysconf(_SC_OPEN_MAX) out of the loop conditional...
> 
> ok?

Reads fine to me. See one comment below.


> 
> Philip Guenther
> 
> Index: func.c
> ===================================================================
> RCS file: /data/src/openbsd/src/bin/csh/func.c,v
> retrieving revision 1.32
> diff -u -p -r1.32 func.c
> --- func.c    26 Dec 2015 13:48:38 -0000      1.32
> +++ func.c    14 Aug 2016 06:26:28 -0000
> @@ -1036,8 +1036,6 @@ doumask(Char **v, struct command *t)
>      (void) umask(i);
>  }
>  
> -typedef quad_t RLIM_TYPE;
> -
>  static struct limits {
>      int     limconst;
>      char   *limname;
> @@ -1060,10 +1058,10 @@ static struct limits {
>  };
>  
>  static struct limits *findlim(Char *);
> -static RLIM_TYPE getval(struct limits *, Char **);
> +static rlim_t getval(struct limits *, Char **);
>  static void limtail(Char *, char *);
>  static void plim(struct limits *, Char);
> -static int setlim(struct limits *, Char, RLIM_TYPE);
> +static int setlim(struct limits *, Char, rlim_t);
>  
>  static struct limits *
>  findlim(Char *cp)
> @@ -1089,7 +1087,7 @@ void
>  dolimit(Char **v, struct command *t)
>  {
>      struct limits *lp;
> -    RLIM_TYPE limit;
> +    rlim_t limit;
>      char    hard = 0;
>  
>      v++;
> @@ -1112,7 +1110,7 @@ dolimit(Char **v, struct command *t)
>       stderror(ERR_SILENT);
>  }
>  
> -static  RLIM_TYPE
> +static  rlim_t
>  getval(struct limits *lp, Char **v)
>  {
>      float f;
> @@ -1124,14 +1122,14 @@ getval(struct limits *lp, Char **v)
>       cp++;
>      if (*cp == 0) {
>       if (*v == 0)
> -         return ((RLIM_TYPE) ((f + 0.5) * lp->limdiv));
> +         return ((rlim_t) ((f + 0.5) * lp->limdiv));

Shouldn't 'return (f + 0.5) * lp->limdiv;' be enough here, because
rlim_t is the return type?


>       cp = *v;
>      }
>      switch (*cp) {
>      case ':':
>       if (lp->limconst != RLIMIT_CPU)
>           goto badscal;
> -     return ((RLIM_TYPE) (f * 60.0 + atof(short2str(cp + 1))));
> +     return ((rlim_t) (f * 60.0 + atof(short2str(cp + 1))));

ditto

>      case 'h':
>       if (lp->limconst != RLIMIT_CPU)
>           goto badscal;
> @@ -1177,7 +1175,7 @@ badscal:
>      if (f > (float) RLIM_INFINITY)
>       return RLIM_INFINITY;
>      else
> -     return ((RLIM_TYPE) f);
> +     return ((rlim_t) f);

ditto


>  }
>  
>  static void
> @@ -1196,7 +1194,7 @@ static void
>  plim(struct limits *lp, Char hard)
>  {
>      struct rlimit rlim;
> -    RLIM_TYPE limit;
> +    rlim_t limit;
>  
>      (void) fprintf(cshout, "%s \t", lp->limname);
>  
> @@ -1208,8 +1206,8 @@ plim(struct limits *lp, Char hard)
>      else if (lp->limconst == RLIMIT_CPU)
>       psecs((long) limit);
>      else
> -     (void) fprintf(cshout, "%ld %s", (long) (limit / lp->limdiv),
> -                    lp->limscale);
> +     (void) fprintf(cshout, "%llu %s",
> +         (unsigned long long) (limit / lp->limdiv), lp->limscale);
>      (void) fputc('\n', cshout);
>  }
>  
> @@ -1228,7 +1226,7 @@ dounlimit(Char **v, struct command *t)
>      }
>      if (*v == 0) {
>       for (lp = limits; lp->limconst >= 0; lp++)
> -         if (setlim(lp, hard, (RLIM_TYPE) RLIM_INFINITY) < 0)
> +         if (setlim(lp, hard, RLIM_INFINITY) < 0)
>               lerr++;
>       if (lerr)
>           stderror(ERR_SILENT);
> @@ -1236,13 +1234,13 @@ dounlimit(Char **v, struct command *t)
>      }
>      while (*v) {
>       lp = findlim(*v++);
> -     if (setlim(lp, hard, (RLIM_TYPE) RLIM_INFINITY) < 0)
> +     if (setlim(lp, hard, RLIM_INFINITY) < 0)
>           stderror(ERR_SILENT);
>      }
>  }
>  
>  static int
> -setlim(struct limits *lp, Char hard, RLIM_TYPE limit)
> +setlim(struct limits *lp, Char hard, rlim_t limit)
>  {
>      struct rlimit rlim;
>  
> Index: misc.c
> ===================================================================
> RCS file: /data/src/openbsd/src/bin/csh/misc.c,v
> retrieving revision 1.18
> diff -u -p -r1.18 misc.c
> --- misc.c    26 Dec 2015 13:48:38 -0000      1.18
> +++ misc.c    14 Aug 2016 06:04:53 -0000
> @@ -170,8 +170,9 @@ void
>  closem(void)
>  {
>      int f;
> +    int max = sysconf(_SC_OPEN_MAX);
>  
> -    for (f = 0; f < sysconf(_SC_OPEN_MAX); f++)
> +    for (f = 0; f < max; f++)
>       if (f != SHIN && f != SHOUT && f != SHERR && f != OLDSTD &&
>           f != FSHTTY)
>           (void) close(f);
> 

Reply via email to