Reduce sprintf() family usage

This commit is contained in:
Arun Prakash Jana 2017-12-25 00:28:12 +05:30
parent c0255db4f1
commit 436d2143fd
No known key found for this signature in database
GPG key ID: A75979F35C080412

41
nnn.c
View file

@ -157,6 +157,7 @@ disabledbg()
#define BM_MAX 10
#define ENTRY_INCR 64 /* Number of dir 'entry' structures to allocate per shot */
#define NAMEBUF_INCR 0x1000 /* 64 dir entries at a time, avg. 64 chars per filename = 64*64B = 4KB */
#define DESCRIPTOR_LEN 32
/* Macros to define process spawn behaviour as flags */
#define F_NONE 0x00 /* no flag set */
@ -1369,32 +1370,32 @@ get_fileind(mode_t mode, char *desc)
if (S_ISREG(mode)) {
c = '-';
sprintf(desc, "%s", "regular file");
xstrlcpy(desc, "regular file", DESCRIPTOR_LEN);
if (mode & 0100)
strcat(desc, ", executable");
xstrlcpy(desc + 12, ", executable", DESCRIPTOR_LEN - 12); /* Length of string "regular file" is 12 */
} else if (S_ISDIR(mode)) {
c = 'd';
sprintf(desc, "%s", "directory");
xstrlcpy(desc, "directory", DESCRIPTOR_LEN);
} else if (S_ISBLK(mode)) {
c = 'b';
sprintf(desc, "%s", "block special device");
xstrlcpy(desc, "block special device", DESCRIPTOR_LEN);
} else if (S_ISCHR(mode)) {
c = 'c';
sprintf(desc, "%s", "character special device");
xstrlcpy(desc, "character special device", DESCRIPTOR_LEN);
#ifdef S_ISFIFO
} else if (S_ISFIFO(mode)) {
c = 'p';
sprintf(desc, "%s", "FIFO");
xstrlcpy(desc, "FIFO", DESCRIPTOR_LEN);
#endif /* S_ISFIFO */
#ifdef S_ISLNK
} else if (S_ISLNK(mode)) {
c = 'l';
sprintf(desc, "%s", "symbolic link");
xstrlcpy(desc, "symbolic link", DESCRIPTOR_LEN);
#endif /* S_ISLNK */
#ifdef S_ISSOCK
} else if (S_ISSOCK(mode)) {
c = 's';
sprintf(desc, "%s", "socket");
xstrlcpy(desc, "socket", DESCRIPTOR_LEN);
#endif /* S_ISSOCK */
#ifdef S_ISDOOR
/* Solaris 2.6, etc. */
@ -1419,9 +1420,9 @@ get_lsperms(mode_t mode, char *desc)
static char bits[11] = {'\0'};
bits[0] = get_fileind(mode, desc);
strcpy(&bits[1], rwx[(mode >> 6) & 7]);
strcpy(&bits[4], rwx[(mode >> 3) & 7]);
strcpy(&bits[7], rwx[(mode & 7)]);
xstrlcpy(&bits[1], rwx[(mode >> 6) & 7], 4);
xstrlcpy(&bits[4], rwx[(mode >> 3) & 7], 4);
xstrlcpy(&bits[7], rwx[(mode & 7)], 4);
if (mode & S_ISUID)
bits[3] = (mode & 0100) ? 's' : 'S'; /* user executable */
@ -1509,7 +1510,7 @@ get_output(char *buf, size_t bytes, char *file, char *arg1, char *arg2, int page
static int
show_stats(char *fpath, char *fname, struct stat *sb)
{
char desc[32];
char desc[DESCRIPTOR_LEN];
char *perms = get_lsperms(sb->st_mode, desc);
char *p, *begin = g_buf;
char tmp[] = "/tmp/nnnXXXXXX";
@ -2108,9 +2109,9 @@ redraw(char *path)
static char sort[9];
if (cfg.mtimeorder)
sprintf(sort, "by time ");
xstrlcpy(sort, "by time ", 9);
else if (cfg.sizeorder)
sprintf(sort, "by size ");
xstrlcpy(sort, "by size ", 9);
else
sort[0] = '\0';
@ -2636,12 +2637,13 @@ nochange:
r = handle_archive(newpath, run, path);
if (r == -1) {
xstrlcpy(newpath, "missing ", PATH_MAX);
if (sel == SEL_MEDIA || sel == SEL_FMEDIA)
sprintf(g_buf, "%s missing", utils[cfg.metaviewer]);
xstrlcpy(newpath + 8, utils[cfg.metaviewer], 32);
else
sprintf(g_buf, "%s missing", utils[4]);
xstrlcpy(newpath + 8, utils[4], 32);
printmsg(g_buf);
printmsg(newpath);
goto nochange;
}
}
@ -2689,10 +2691,7 @@ nochange:
goto begin;
case SEL_COPY:
if (copier && ndents) {
if (istopdir(path))
snprintf(newpath, PATH_MAX, "/%s", dents[cur].name);
else
snprintf(newpath, PATH_MAX, "%s/%s", path, dents[cur].name);
mkpath(path, dents[cur].name, newpath, PATH_MAX);
spawn(copier, newpath, NULL, NULL, F_NONE);
printmsg(newpath);
} else if (!copier)