diff --git a/src/ls.c b/src/ls.c index f41cbf3..b179373 100644 --- a/src/ls.c +++ b/src/ls.c @@ -378,11 +378,12 @@ static int _ls_do_files_short(Prefs * prefs, char * directory, SList * files) { char * cols; char * p; - unsigned int len = 0; - unsigned int lenmax = 0; + long len = 0; + size_t lencur; + size_t lenmax = 0; unsigned int colnb = 0; unsigned int i = 0; - unsigned int j = 0; + size_t j = 0; char c; SList cur; @@ -391,8 +392,11 @@ static int _ls_do_files_short(Prefs * prefs, char * directory, SList * files) && *p == '\0') { for(cur = *files; cur != NULL; slist_next(&cur)) - lenmax = max(lenmax, strlen(slist_data(&cur))); - if(*prefs * PREFS_F) + { + lencur = strlen(slist_data(&cur)); + lenmax = max(lenmax, lencur); + } + if(*prefs & PREFS_F) lenmax++; if(lenmax > 0) colnb = len / ++lenmax; @@ -489,30 +493,32 @@ static int _ls_do_files_long(Prefs * prefs, char * directory, SList * files) return 0; } +/* _long_print */ static void _long_mode(char str[11], mode_t mode); static char const * _long_owner(uid_t uid); static char const * _long_group(gid_t gid); -static void _long_date(time_t date, char buf[15]); +static char const * _long_date(time_t date); static char _file_mode_letter(mode_t mode); static void _print_link(char const * filename); + static void _long_print(Prefs * prefs, char const * filename, char const * basename, struct stat * st) { char mode[11]; char const * owner; char const * group; - char date[15]; + char const * date; _long_mode(mode, st->st_mode); owner = _long_owner(st->st_uid); group = _long_group(st->st_gid); if(*prefs & PREFS_u) - _long_date(st->st_atime, date); + date = _long_date(st->st_atime); else if(*prefs & PREFS_c) - _long_date(st->st_ctime, date); + date = _long_date(st->st_ctime); else - _long_date(st->st_mtime, date); - printf("%s %u %-7s %-7s %6u %s %s", mode, (unsigned)st->st_nlink, + date = _long_date(st->st_mtime); + printf("%s %2u %-7s %-7s %6u %s %s", mode, (unsigned)st->st_nlink, owner, group, (unsigned)st->st_size, date, basename); if(S_ISLNK(st->st_mode) && !(*prefs & PREFS_L)) /* FIXME not in POSIX? */ _print_link(filename); @@ -585,8 +591,9 @@ static char const * _long_group(gid_t gid) return buf; } -static void _long_date(time_t date, char buf[15]) +static char const * _long_date(time_t date) { + static char buf[15]; struct tm tm; static time_t sixmonths = -1; size_t len; @@ -595,11 +602,11 @@ static void _long_date(time_t date, char buf[15]) sixmonths = time(NULL) - 15552000; localtime_r(&date, &tm); if(date < sixmonths) - len = strftime(buf, 14, "%b %e %Y", &tm); + len = strftime(buf, sizeof(buf), "%b %e %Y", &tm); else - len = strftime(buf, 14, "%b %e %H:%M", &tm); - if(len == 0) - buf[0] = '\0'; + len = strftime(buf, sizeof(buf), "%b %e %H:%M", &tm); + buf[len] = '\0'; + return buf; } static char _file_mode_letter(mode_t mode) diff --git a/src/pr.c b/src/pr.c index aa1fe59..b3b327c 100644 --- a/src/pr.c +++ b/src/pr.c @@ -67,7 +67,7 @@ static int _pr_error(char const * message, int ret) /* _pr_do */ static void _do_offset(int offset); static void _do_header(Prefs * prefs, time_t const mtime, char const * filename, - size_t page); + unsigned long page); static void _do_footer(Prefs * prefs); static int _pr_do(Prefs * prefs, FILE * fp, char const * filename) @@ -76,8 +76,8 @@ static int _pr_do(Prefs * prefs, FILE * fp, char const * filename) char * buf; size_t len; int nb = 0; - size_t page = 1; - size_t line = 1; + unsigned long page = 1; + unsigned long line = 1; if(fp == stdin) st.st_mtime = time(NULL); @@ -97,7 +97,7 @@ static int _pr_do(Prefs * prefs, FILE * fp, char const * filename) } _do_offset(prefs->offset); /* FIXME not if truncated line */ if(prefs->flags & PREFS_n) - printf("%5u ", line++); + printf("%5lu ", line++); if((len = strlen(buf)) > 0 && buf[len - 1] == '\n' && prefs->flags & PREFS_d) buf[len++] = '\n'; /* XXX with offset? */ @@ -127,7 +127,7 @@ static void _do_offset(int offset) } static void _do_header(Prefs * prefs, time_t const mtime, char const * filename, - size_t page) + unsigned long page) { struct tm tm; char buf[18]; @@ -141,7 +141,7 @@ static void _do_header(Prefs * prefs, time_t const mtime, char const * filename, localtime_r(&mtime, &tm); strftime(buf, sizeof(buf) - 1, "%b %e %H:%M %Y", &tm); buf[sizeof(buf) - 1] = '\0'; - printf("%s %s%s%u", buf, prefs->header != NULL + printf("%s %s%s%lu", buf, prefs->header != NULL ? prefs->header : filename, " Page ", page); }