VERBOSE (ERROR, fprintf (stderr, "%s: no directory name\n", progname));
return usage (1);
}
- if (dirname[panel] == NULL) {
+ if (dirname[panel] != NULL) {
free (dirname[panel]);
}
dirname[panel] = strdup (arg);
+ CHECKALLOC (dirname[panel]);
panel = (panel + 1) % MAXPANELS;
break;
case 'v':
}
}
for (i = 0; i < MAXPANELS; i++) {
- if (dirname[i] == NULL) {
- dirname[i] = strdup (".");
- }
}
/* init curses */
freelist (list[_i]);
freewindow (windir[_i]);
}
- VERBOSE (ERROR, fprintf (stderr, "can't read directory '%s'\n", dirname[i]));
+ VERBOSE (ERROR, fprintf (stderr, "can't read directory '%s'\n", (dirname[i]) ? dirname[i] : "."));
return 1;
}
}
for (i = 0; i < list[panel]->nb; i++) {
current = list[panel]->tab + i;
if (current->selected) {
- char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
- char *dest = strdupcat (dirname[(panel + 1 ) % MAXPANELS], NULL);
+ char *src = newfilename (dirname[panel], current->name);
+ char *dest = dirname[(panel + 1 ) % MAXPANELS];
char *msg = processcopy (dest, src);
if (msg) {
msgwindow (msg, winscreen, 0);
free (msg);
}
free (src);
- free (dest);
}
}
freelist (list[panel]);
for (i = 0; i < list[panel]->nb; i++) {
current = list[panel]->tab + i;
if (current->selected) {
- char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
+ char *src = newfilename (dirname[panel], current->name);
char *msg = processdelete (src);
if (msg) {
msgwindow (msg, winscreen, 0);
for (i = 0; i < list[panel]->nb; i++) {
current = list[panel]->tab + i;
if (current->selected) {
- char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
- char *dest = strdupcat (dirname[(panel + 1 ) % MAXPANELS], SEPARATOR, current->name, NULL);
+ char *src = newfilename (dirname[panel], current->name);
+ char *dest = newfilename (dirname[(panel + 1 ) % MAXPANELS], current->name);
char *msg = processmove (dest, src);
if (msg) {
msgwindow (msg, winscreen, 0);
case ALT_N: /* new dir */
string = getwindow ("New directory", winscreen, MAXFNAME / 2, MAXFNAME, NULL);
if (string) {
- char *dest = strdupcat (dirname[panel], SEPARATOR, string, NULL);
+ char *dest = newfilename (dirname[panel], string);
char *msg = processmkdir (dest);
if (msg) {
msgwindow (msg, winscreen, 0);
getch ();
free (buf);
} else {
- char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
- char *dest = strdupcat (dirname[panel], SEPARATOR, string, NULL);
+ char *src = newfilename (dirname[panel], current->name);
+ char *dest = newfilename (dirname[panel], string);
char *msg = processmove (dest, src);
if (msg) {
msgwindow (msg, winscreen, 0);
menuwindow (winmenu, "Help up(I) down(J) Quit", NULL);
elementwindow (winelem[0], current->name, NULL);
{
- char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
+ char *src = newfilename (dirname[panel], current->name);
char *msg = filewindow (src, winscreen);
if (msg) {
msgwindow (msg, winscreen, 0);
for (i = 0; i < list[panel]->nb; i++) {
current = list[panel]->tab + i;
if (current->selected) {
- char *src = strdupcat (dirname[panel], SEPARATOR, current->name, NULL);
+ char *src = newfilename (dirname[panel], current->name);
char *msg = processchmod (src, mode);
if (msg) {
msgwindow (msg, winscreen, 0);
va_start (va, init);
char *string = strdup (init);
+ CHECKALLOC (string);
for (;;) {
char *buf = va_arg (va, char *);
if (buf == NULL) {
break;
}
string = (char *) realloc (string, strlen (string) + strlen (buf) + 1);
+ CHECKALLOC (string);
strcat (string, buf);
}
char *newfilename (char *dirname, char *filename)
{
- char *name = (char *) calloc (strlen (dirname) + strlen (SEPARATOR) + strlen (filename) + 1, 1);
+ char *name = (dirname) ? strdupcat (dirname, SEPARATOR, filename, NULL) : strdup (filename);
CHECKALLOC (name);
- strcat (strcat(strcpy (name, dirname), SEPARATOR), filename);
return name;
}
list_t *exploredir (char *dirname)
{
- DIR *dir = opendir (dirname);
+ DIR *dir = opendir (dirname ? dirname : ".");
if (dir == NULL) {
return NULL;
}
char *basename = strrchr (src, *SEPARATOR);
basename = (basename) ? basename + 1 : src;
VERBOSE (DEBUG, fprintf (stderr, "basename '%s'\n", basename));
- char *nextdest = strdupcat (dest, SEPARATOR, basename, NULL);
+ char *nextdest = newfilename (dest, basename);
VERBOSE (DEBUG, fprintf (stderr, "mkdir '%s'\n", nextdest));
if (MKDIR (nextdest) != 0) {
msg = strdupcat ("Can't create directory '", nextdest, "'", NULL);
if ((strcmp (dp->d_name, ".") == 0) || (strcmp (dp->d_name, "..") == 0)) {
continue;
}
- char *nextsrc = strdupcat (src, SEPARATOR, dp->d_name, NULL);
+ char *nextsrc = newfilename (src, dp->d_name);
msg = processcopy (nextdest, nextsrc);
free (nextsrc);
}
char *basename = strrchr (src, *SEPARATOR);
basename = (basename) ? basename + 1 : src;
VERBOSE (DEBUG, fprintf (stderr, "basename '%s'\n", basename));
- char *newdest = strdupcat (dest, SEPARATOR, basename, NULL);
+ char *newdest = newfilename (dest, basename);
struct stat sb;
if (STAT (newdest, &sb) == 0) {
msg = strdupcat ("File '", newdest, "' already exists", NULL);
if ((strcmp (dp->d_name, ".") == 0) || (strcmp (dp->d_name, "..") == 0)) {
continue;
}
- char *next = strdupcat (name, SEPARATOR, dp->d_name, NULL);
+ char *next = newfilename (name, dp->d_name);
msg = processdelete (next);
free (next);
}
if ((strcmp (dp->d_name, ".") == 0) || (strcmp (dp->d_name, "..") == 0)) {
continue;
}
- char *next = strdupcat (name, SEPARATOR, dp->d_name, NULL);
+ char *next = newfilename (name, dp->d_name);
msg = processchmod (next, mode);
free (next);
}