mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-20 04:48:06 +01:00
WINGs: Simplify and rationalize createDir() and deleteFile()
Signed-off-by: Tamas TEVESZ <ice@extreme.hu>
This commit is contained in:
committed by
Carlos R. Mafra
parent
a8813b2eae
commit
02de600ecd
@@ -67,10 +67,10 @@ static void browserDClick();
|
|||||||
|
|
||||||
static void fillColumn(WMBrowserDelegate * self, WMBrowser * bPtr, int column, WMList * list);
|
static void fillColumn(WMBrowserDelegate * self, WMBrowser * bPtr, int column, WMList * list);
|
||||||
|
|
||||||
static void deleteFile();
|
|
||||||
|
|
||||||
static void normalizePath(char *s);
|
static void normalizePath(char *s);
|
||||||
|
|
||||||
|
static void deleteFile();
|
||||||
|
|
||||||
static void createDir();
|
static void createDir();
|
||||||
|
|
||||||
static void goHome();
|
static void goHome();
|
||||||
@@ -595,7 +595,8 @@ static void showError(WMScreen * scr, WMWindow * owner, char *s, char *file)
|
|||||||
|
|
||||||
static void createDir(WMButton * bPre, WMFilePanel * panel)
|
static void createDir(WMButton * bPre, WMFilePanel * panel)
|
||||||
{
|
{
|
||||||
char *dirName, *directory, *file, *s;
|
char *dirName, *directory, *file;
|
||||||
|
size_t slen;
|
||||||
WMScreen *scr = WMWidgetScreen(panel->win);
|
WMScreen *scr = WMWidgetScreen(panel->win);
|
||||||
|
|
||||||
dirName = WMRunInputPanel(scr, panel->win, _("Create Directory"),
|
dirName = WMRunInputPanel(scr, panel->win, _("Create Directory"),
|
||||||
@@ -603,55 +604,43 @@ static void createDir(WMButton * bPre, WMFilePanel * panel)
|
|||||||
if (!dirName)
|
if (!dirName)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
directory = getCurrentFileName(panel);
|
/* if `dirName' is an absolute path, don't mind `directory'.
|
||||||
s = strrchr(directory, '/');
|
* normalize as needed (possibly not needed at all?) */
|
||||||
if (s)
|
normalizePath(dirName);
|
||||||
s[1] = 0;
|
if (*dirName != '/') {
|
||||||
|
directory = getCurrentFileName(panel);
|
||||||
if (dirName[0] == '/') {
|
normalizePath(directory);
|
||||||
directory[0] = 0;
|
|
||||||
} else {
|
} else {
|
||||||
while ((s = strstr(directory, "//"))) {
|
directory = NULL;
|
||||||
int i;
|
|
||||||
for (i = 2; s[i] == '/'; i++) ;
|
|
||||||
strcpy(s, &s[i - 1]);
|
|
||||||
}
|
|
||||||
if ((s = strrchr(directory, '/')) && !s[1])
|
|
||||||
s[0] = 0;
|
|
||||||
}
|
|
||||||
while ((s = strstr(dirName, "//"))) {
|
|
||||||
int i;
|
|
||||||
for (i = 2; s[i] == '/'; i++) ;
|
|
||||||
strcpy(s, &s[i - 1]);
|
|
||||||
}
|
|
||||||
if ((s = strrchr(dirName, '/')) && !s[1])
|
|
||||||
s[0] = 0;
|
|
||||||
|
|
||||||
file = wmalloc(strlen(dirName) + strlen(directory) + 4);
|
|
||||||
sprintf(file, "%s/%s", directory, dirName);
|
|
||||||
while ((s = strstr(file, "//"))) {
|
|
||||||
int i;
|
|
||||||
for (i = 2; s[i] == '/'; i++) ;
|
|
||||||
strcpy(s, &s[i - 1]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mkdir(file, 0xfff) != 0) {
|
slen = strlen(dirName) + (directory ? strlen(directory) + 1 /* "/" */ : 0) + 1 /* NULL */;
|
||||||
switch (errno) {
|
file = wmalloc(slen);
|
||||||
case EACCES:
|
|
||||||
showError(scr, panel->win, _("Permission denied."), NULL);
|
if (directory) {
|
||||||
break;
|
strncpy(file, directory, slen - 1);
|
||||||
case EEXIST:
|
strncat(file, "/", slen - strlen(file));
|
||||||
showError(scr, panel->win, _("'%s' already exists."), file);
|
}
|
||||||
break;
|
|
||||||
case ENOENT:
|
strncat(file, dirName, slen - strlen(file));
|
||||||
showError(scr, panel->win, _("Path does not exist."), NULL);
|
|
||||||
}
|
if (mkdir(file, 00777) != 0) {
|
||||||
} else
|
#define __msgbufsize__ 512
|
||||||
|
char *buffer = wmalloc(__msgbufsize__);
|
||||||
|
snprintf(buffer, __msgbufsize__, _("Can not create %s: %s"), file, strerror(errno));
|
||||||
|
showError(scr, panel->win, buffer, NULL);
|
||||||
|
wfree(buffer);
|
||||||
|
#undef __msgbufsize__
|
||||||
|
} else {
|
||||||
WMSetFilePanelDirectory(panel, file);
|
WMSetFilePanelDirectory(panel, file);
|
||||||
|
}
|
||||||
|
|
||||||
wfree(dirName);
|
if (dirName)
|
||||||
wfree(directory);
|
wfree(dirName);
|
||||||
wfree(file);
|
if (directory)
|
||||||
|
wfree(directory);
|
||||||
|
if (file)
|
||||||
|
wfree(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -686,105 +675,44 @@ static void normalizePath(char *s)
|
|||||||
|
|
||||||
static void deleteFile(WMButton * bPre, WMFilePanel * panel)
|
static void deleteFile(WMButton * bPre, WMFilePanel * panel)
|
||||||
{
|
{
|
||||||
char *file;
|
char *file, *buffer;
|
||||||
char *buffer, *s;
|
|
||||||
struct stat filestat;
|
struct stat filestat;
|
||||||
WMScreen *scr = WMWidgetScreen(panel->win);
|
WMScreen *scr = WMWidgetScreen(panel->win);
|
||||||
|
#define __msgbufsize__ 512
|
||||||
|
|
||||||
|
buffer = wmalloc(__msgbufsize__);
|
||||||
file = getCurrentFileName(panel);
|
file = getCurrentFileName(panel);
|
||||||
|
normalizePath(file);
|
||||||
|
|
||||||
while ((s = strstr(file, "//"))) {
|
if (stat(file, &filestat) == -1) {
|
||||||
int i;
|
snprintf(buffer, __msgbufsize__, _("Can not find %s: %s"), file, strerror(errno));
|
||||||
for (i = 2; s[i] == '/'; i++) ;
|
showError(scr, panel->win, buffer, NULL);
|
||||||
strcpy(s, &s[i - 1]);
|
goto out;
|
||||||
}
|
}
|
||||||
if (strlen(file) > 1 && (s = strrchr(file, '/')) && !s[1])
|
|
||||||
s[0] = 0;
|
|
||||||
|
|
||||||
if (stat(file, &filestat)) {
|
snprintf(buffer, __msgbufsize__, _("Delete %s %s?"),
|
||||||
switch (errno) {
|
S_ISDIR(filestat.st_mode) ? _("directory") : _("file"), file);
|
||||||
case ENOENT:
|
|
||||||
showError(scr, panel->win, _("'%s' does not exist."), file);
|
|
||||||
break;
|
|
||||||
case EACCES:
|
|
||||||
showError(scr, panel->win, _("Permission denied."), NULL);
|
|
||||||
break;
|
|
||||||
case ENOMEM:
|
|
||||||
showError(scr, panel->win, _("Insufficient memory available."), NULL);
|
|
||||||
break;
|
|
||||||
case EROFS:
|
|
||||||
showError(scr, panel->win, _("'%s' is on a read-only filesystem."), file);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
showError(scr, panel->win, _("Can not delete '%s'."), file);
|
|
||||||
}
|
|
||||||
wfree(file);
|
|
||||||
return;
|
|
||||||
} else if (S_ISDIR(filestat.st_mode)) {
|
|
||||||
int len = strlen(file) + 20;
|
|
||||||
buffer = wmalloc(len);
|
|
||||||
snprintf(buffer, len, _("Delete directory %s ?"), file);
|
|
||||||
} else {
|
|
||||||
int len = strlen(file) + 15;
|
|
||||||
buffer = wmalloc(len);
|
|
||||||
snprintf(buffer, len, _("Delete file %s ?"), file);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!WMRunAlertPanel(WMWidgetScreen(panel->win), panel->win,
|
if (!WMRunAlertPanel(WMWidgetScreen(panel->win), panel->win,
|
||||||
_("Warning"), buffer, _("OK"), _("Cancel"), NULL)) {
|
_("Warning"), buffer, _("OK"), _("Cancel"), NULL)) {
|
||||||
if (S_ISDIR(filestat.st_mode)) {
|
|
||||||
if (rmdir(file) != 0) {
|
if (remove(file) == -1) {
|
||||||
switch (errno) {
|
snprintf(buffer, __msgbufsize__, _("Removing %s failed: %s"), file, strerror(errno));
|
||||||
case EACCES:
|
showError(scr, panel->win, buffer, NULL);
|
||||||
showError(scr, panel->win, _("Permission denied."), NULL);
|
|
||||||
break;
|
|
||||||
case ENOENT:
|
|
||||||
showError(scr, panel->win, _("Directory '%s' does not exist."), file);
|
|
||||||
break;
|
|
||||||
case ENOTEMPTY:
|
|
||||||
showError(scr, panel->win, _("Directory '%s' is not empty."), file);
|
|
||||||
break;
|
|
||||||
case EBUSY:
|
|
||||||
showError(scr, panel->win, _("Directory '%s' is busy."), file);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
showError(scr, panel->win, _("Can not delete '%s'."), file);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
char *s = strrchr(file, '/');
|
|
||||||
if (s)
|
|
||||||
s[0] = 0;
|
|
||||||
WMSetFilePanelDirectory(panel, file);
|
|
||||||
}
|
|
||||||
} else if (remove(file) != 0) {
|
|
||||||
switch (errno) {
|
|
||||||
case EISDIR:
|
|
||||||
showError(scr, panel->win, _("'%s' is a directory."), file);
|
|
||||||
break;
|
|
||||||
case ENOENT:
|
|
||||||
showError(scr, panel->win, _("'%s' does not exist."), file);
|
|
||||||
break;
|
|
||||||
case EACCES:
|
|
||||||
showError(scr, panel->win, _("Permission denied."), NULL);
|
|
||||||
break;
|
|
||||||
case ENOMEM:
|
|
||||||
showError(scr, panel->win, _("Insufficient memory available."), NULL);
|
|
||||||
break;
|
|
||||||
case EROFS:
|
|
||||||
showError(scr, panel->win, _("'%s' is on a read-only filesystem."), file);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
showError(scr, panel->win, _("Can not delete '%s'."), file);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
char *s = strrchr(file, '/');
|
char *s = strrchr(file, '/');
|
||||||
if (s)
|
if (s)
|
||||||
s[1] = 0;
|
s[0] = 0;
|
||||||
WMSetFilePanelDirectory(panel, file);
|
WMSetFilePanelDirectory(panel, file);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
wfree(buffer);
|
out:
|
||||||
wfree(file);
|
if (buffer)
|
||||||
|
wfree(buffer);
|
||||||
|
if (file)
|
||||||
|
wfree(file);
|
||||||
|
#undef __msgbufsize__
|
||||||
}
|
}
|
||||||
|
|
||||||
static void goUnmount(WMButton * bPtr, WMFilePanel * panel)
|
static void goUnmount(WMButton * bPtr, WMFilePanel * panel)
|
||||||
|
|||||||
Reference in New Issue
Block a user