Hi Bernhard,

 good work, but I found few problems:

On Fri, Jul 13, 2007 at 11:54:15AM +0200, Bernhard Walle wrote:
> +.SH AVAILABILITY
> +The cal command is part of the util-linux-ng package and is available from

 s/cal/rtcwake/ ;-)

> +     /* many rtc alarms only support up to 24 hours from 'now' ... */
> +     if ((rtc_time + (24 * 60 * 60)) > *wakeup) {
> +             if (ioctl(fd, RTC_ALM_SET, &wake.time) < 0) {
> +                     perror("set rtc alarm");
> +                     return 0;
> +             }
> +             if (ioctl(fd, RTC_AIE_ON, 0) < 0) {
> +                     perror("enable rtc alarm");
> +                     return 0;
> +             }
> +
> +             /* ... so use the "more than 24 hours" request only if we must 
> */
> +     } else {
> +             /* avoid an extra AIE_ON call */
> +             wake.enabled = 1;
> +
> +             if (ioctl(fd, RTC_WKALM_SET, &wake) < 0) {
> +                     perror("set rtc wake alarm");
> +                     return 0;
> +             }
> +     }

 What is different between wake.enabled=1 and RTC_AIE_ON?

> +static void usage(void)
> +{
> +     printf("usage: %s [options]\n"
> +                     "\t-d rtc0|rtc1|...\t(select rtc)\n"
> +                     "\t-l\t\t\t(RTC uses local timezone)\n"
> +                     "\t-m standby|mem|...\t(sleep mode)\n"
> +                     "\t-s seconds\t\t(seconds to sleep)\n"
> +                     "\t-t time_t\t\t(time to wake)\n"
> +                     "\t-u\t\t\t(RTC uses UTC)\n"
> +                     "\t-v\t\t\t(verbose messages)\n"
> +                     "\t-V\t\t\t(show version)\n", progname);
    exit(EXIT_FAILURE);
> +}

 This \t mess is really not too much readable...

> +static int read_clock_mode(void)
> +{
> +     FILE *fp;
> +     char linebuf[MAX_LINE];
> +
> +     fp = fopen(ADJTIME_PATH, "r");
> +     if (!fp)
> +             return 0;
> +
  ....

  fclose(fp);

> +     return 1;
> +}
> +
> +int main(int argc, char **argv)
> +{
> +     static char             *devname = "rtc0";

 const char     *devname = "/dev/rtc0";

> +     static unsigned         seconds = 0;
> +     static char             *suspend = "standby";

 You needn't static.

> +     int             t;
> +     int             fd;
> +     time_t          alarm = 0;
> +
> +     progname = strrchr(argv[0], '/');
> +     if (progname)
> +             progname++;
> +     else
> +             progname = argv[0];
> +     if (chdir("/dev/") < 0) {

 Please, no.. why we cannot use absolute paths? I think

   # rtcwake  --device /dev/rtc0

 is not so bad.

 ....

> +                             printf("%s: unrecognized suspend state '%s'\n",
> +                                             progname, optarg);
> +                             usage();
> +                             return 1;

 I think better is an exit() call inside usage().

> +
> +                             /* alarm time, seconds-to-sleep (relative) */
> +                     case 's':
> +                             t = atoi(optarg);
> +                             if (t < 0) {
> +                                     printf("%s: illegal interval %s 
> seconds\n",
> +                                                     progname, optarg);

 Please, fprintf(stderr, ...) for all error messages.

> +                     case 'V':
> +                             printf("%s: version %s\n", progname, 
> VERSION_STRING);
> +                             return 0;

 exit(EXIT_SUCCESS);

> +
> +                     default:
> +                             usage();
> +                             return 1;
> +             }
> +     }
> +
> +     if (clock_mode == CM_AUTO) {
> +             if (!read_clock_mode()) {
> +                     printf("%s: assuming RTC uses UTC ...\n", progname);
> +                     clock_mode = CM_UTC;
> +             }
> +             if (verbose)
> +                     fprintf(stderr, "Using %s time\n",
> +                                     clock_mode == CM_UTC ? "UTC" : "local");

 The verbose messages go to stdout or stderr or both? :-) Please, use
 stdout.

> +     /* this RTC must exist and (if we'll sleep) be wakeup-enabled */
> +     fd = open(devname, O_RDONLY);
> +     if (fd < 0) {
> +             perror(devname);
> +             return 1;
> +     }
> +     if (strcmp(suspend, "on") != 0 && !may_wakeup(devname)) {
> +             printf("%s: %s not enabled for wakeup events\n",

 fprintf(stderr, ....)

> +                             progname, devname);
> +             return 1;
> +     }

 Maybe you can open the device after the may_wakeup(devname) check.


 I look forward to a new (final) version :-) Thanks for your time.

    Karel

-- 
 Karel Zak  <[EMAIL PROTECTED]>
-
To unsubscribe from this list: send the line "unsubscribe util-linux-ng" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to