ls: do not follow links with -s (closes bug 33),
[oweals/busybox.git] / coreutils / cal.c
index f8fc0b0d3456b4a9c7fe64585fda9690068e429f..9b597772ec2404bd399da05442780fc9a13e3465 100644 (file)
 #define        MAXDAYS                 42              /* max slots in a month array */
 #define        SPACE                   -1              /* used in day array */
 
-static const unsigned char days_in_month[] = {
+static const unsigned char days_in_month[] ALIGN1 = {
        0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
 };
 
-static const unsigned char sep1752[] = {
+static const unsigned char sep1752[] ALIGN1 = {
                 1,     2,      14,     15,     16,
        17,     18,     19,     20,     21,     22,     23,
        24,     25,     26,     27,     28,     29,     30
 };
 
-static unsigned julian;
+/* Set to 0 or 1 in main */
+#define julian ((unsigned)option_mask32)
 
 /* leap year -- account for Gregorian reformation in 1752 */
 static int leap_year(unsigned yr)
 {
-       if (yr <= 1752) 
+       if (yr <= 1752)
                return !(yr % 4);
        return (!(yr % 4) && (yr % 100)) || !(yr % 400);
 }
@@ -75,7 +76,7 @@ static char *build_row(char *p, unsigned *dp);
 #define        J_WEEK_LEN      (WEEK_LEN + 7)
 #define        HEAD_SEP        2               /* spaces between day headings */
 
-int cal_main(int argc, char **argv);
+int cal_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int cal_main(int argc, char **argv)
 {
        struct tm *local_time;
@@ -86,8 +87,9 @@ int cal_main(int argc, char **argv)
        char day_headings[28];  /* 28 for julian, 21 for nonjulian */
        char buf[40];
 
-       flags = getopt32(argc, argv, "jy");
-       julian = flags & 1;
+       flags = getopt32(argv, "jy");
+       /* This sets julian = flags & 1: */
+       option_mask32 &= 1;
        month = 0;
        argv += optind;
        argc -= optind;
@@ -100,7 +102,7 @@ int cal_main(int argc, char **argv)
                time(&now);
                local_time = localtime(&now);
                year = local_time->tm_year + 1900;
-               if (!(flags & 2)) {
+               if (!(flags & 2)) { /* no -y */
                        month = local_time->tm_mon + 1;
                }
        } else {
@@ -167,7 +169,7 @@ int cal_main(int argc, char **argv)
                        if (!julian) {
                                printf("%*s%s", HEAD_SEP, "", day_headings);
                        }
-                       putchar('\n');
+                       bb_putchar('\n');
                        for (row = 0; row < (6*7); row += 7) {
                                for (which_cal = 0; which_cal < 3-julian; which_cal++) {
                                        dp = days[month + which_cal] + row;
@@ -179,7 +181,7 @@ int cal_main(int argc, char **argv)
                }
        }
 
-       fflush_stdout_and_exit(0);
+       fflush_stdout_and_exit(EXIT_SUCCESS);
 }
 
 /*