(builtin_ls): return status; also don't print fatal error messages to
the output stream, instead use syslog git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10857 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1999 - 2001 Kungliga Tekniska H<>gskolan
|
* Copyright (c) 1999 - 2002 Kungliga Tekniska H<>gskolan
|
||||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -349,8 +349,7 @@ compare_size(struct fileinfo *a, struct fileinfo *b)
|
|||||||
return b->st.st_size - a->st.st_size;
|
return b->st.st_size - a->st.st_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static int list_dir(FILE*, const char*, int);
|
||||||
list_dir(FILE *out, const char *directory, int flags);
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
log10(int num)
|
log10(int num)
|
||||||
@@ -464,7 +463,7 @@ lstat_file (const char *file, struct stat *sb)
|
|||||||
#define IS_DOT_DOTDOT(X) ((X)[0] == '.' && ((X)[1] == '\0' || \
|
#define IS_DOT_DOTDOT(X) ((X)[0] == '.' && ((X)[1] == '\0' || \
|
||||||
((X)[1] == '.' && (X)[2] == '\0')))
|
((X)[1] == '.' && (X)[2] == '\0')))
|
||||||
|
|
||||||
static void
|
static int
|
||||||
list_files(FILE *out, const char **files, int n_files, int flags)
|
list_files(FILE *out, const char **files, int n_files, int flags)
|
||||||
{
|
{
|
||||||
struct fileinfo *fi;
|
struct fileinfo *fi;
|
||||||
@@ -472,14 +471,18 @@ list_files(FILE *out, const char **files, int n_files, int flags)
|
|||||||
int *dirs = NULL;
|
int *dirs = NULL;
|
||||||
size_t total_blocks = 0;
|
size_t total_blocks = 0;
|
||||||
int n_print = 0;
|
int n_print = 0;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
if(n_files == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if(n_files > 1)
|
if(n_files > 1)
|
||||||
flags |= LS_SHOW_DIRNAME;
|
flags |= LS_SHOW_DIRNAME;
|
||||||
|
|
||||||
fi = calloc(n_files, sizeof(*fi));
|
fi = calloc(n_files, sizeof(*fi));
|
||||||
if (fi == NULL) {
|
if (fi == NULL) {
|
||||||
sec_fprintf2(out, "ouf of memory\r\n");
|
syslog(LOG_ERR, "out of memory");
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
for(i = 0; i < n_files; i++) {
|
for(i = 0; i < n_files; i++) {
|
||||||
if(lstat_file(files[i], &fi[i].st) < 0) {
|
if(lstat_file(files[i], &fi[i].st) < 0) {
|
||||||
@@ -492,8 +495,8 @@ list_files(FILE *out, const char **files, int n_files, int flags)
|
|||||||
if(dirs == NULL)
|
if(dirs == NULL)
|
||||||
dirs = calloc(n_files, sizeof(*dirs));
|
dirs = calloc(n_files, sizeof(*dirs));
|
||||||
if(dirs == NULL) {
|
if(dirs == NULL) {
|
||||||
sec_fprintf2(out, "%s: %s\r\n",
|
syslog(LOG_ERR, "%s: %m", files[i]);
|
||||||
files[i], strerror(errno));
|
ret = -1;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
dirs[i] = 1;
|
dirs[i] = 1;
|
||||||
@@ -686,6 +689,7 @@ list_files(FILE *out, const char **files, int n_files, int flags)
|
|||||||
free(fi);
|
free(fi);
|
||||||
if(dirs != NULL)
|
if(dirs != NULL)
|
||||||
free(dirs);
|
free(dirs);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -714,7 +718,7 @@ hide_file(const char *filename, int flags)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static int
|
||||||
list_dir(FILE *out, const char *directory, int flags)
|
list_dir(FILE *out, const char *directory, int flags)
|
||||||
{
|
{
|
||||||
DIR *d = opendir(directory);
|
DIR *d = opendir(directory);
|
||||||
@@ -723,8 +727,8 @@ list_dir(FILE *out, const char *directory, int flags)
|
|||||||
int n_files = 0;
|
int n_files = 0;
|
||||||
|
|
||||||
if(d == NULL) {
|
if(d == NULL) {
|
||||||
sec_fprintf2(out, "%s: %s\r\n", directory, strerror(errno));
|
syslog(LOG_ERR, "%s: %m", directory);
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
while((ent = readdir(d)) != NULL) {
|
while((ent = readdir(d)) != NULL) {
|
||||||
void *tmp;
|
void *tmp;
|
||||||
@@ -733,23 +737,23 @@ list_dir(FILE *out, const char *directory, int flags)
|
|||||||
continue;
|
continue;
|
||||||
tmp = realloc(files, (n_files + 1) * sizeof(*files));
|
tmp = realloc(files, (n_files + 1) * sizeof(*files));
|
||||||
if (tmp == NULL) {
|
if (tmp == NULL) {
|
||||||
sec_fprintf2(out, "%s: out of memory\r\n", directory);
|
syslog(LOG_ERR, "%s: out of memory", directory);
|
||||||
free_files (files, n_files);
|
free_files (files, n_files);
|
||||||
closedir (d);
|
closedir (d);
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
files = tmp;
|
files = tmp;
|
||||||
asprintf(&files[n_files], "%s/%s", directory, ent->d_name);
|
asprintf(&files[n_files], "%s/%s", directory, ent->d_name);
|
||||||
if (files[n_files] == NULL) {
|
if (files[n_files] == NULL) {
|
||||||
sec_fprintf2(out, "%s: out of memory\r\n", directory);
|
syslog(LOG_ERR, "%s: out of memory", directory);
|
||||||
free_files (files, n_files);
|
free_files (files, n_files);
|
||||||
closedir (d);
|
closedir (d);
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
++n_files;
|
++n_files;
|
||||||
}
|
}
|
||||||
closedir(d);
|
closedir(d);
|
||||||
list_files(out, (const char**)files, n_files, flags | LS_DIR_FLAG);
|
return list_files(out, (const char**)files, n_files, flags | LS_DIR_FLAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -828,10 +832,11 @@ parse_flags(const char *options)
|
|||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
builtin_ls(FILE *out, const char *file)
|
builtin_ls(FILE *out, const char *file)
|
||||||
{
|
{
|
||||||
int flags;
|
int flags;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if(*file == '-') {
|
if(*file == '-') {
|
||||||
flags = parse_flags(file);
|
flags = parse_flags(file);
|
||||||
@@ -839,6 +844,7 @@ builtin_ls(FILE *out, const char *file)
|
|||||||
} else
|
} else
|
||||||
flags = parse_flags("");
|
flags = parse_flags("");
|
||||||
|
|
||||||
list_files(out, &file, 1, flags);
|
ret = list_files(out, &file, 1, flags);
|
||||||
sec_fflush(out);
|
sec_fflush(out);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user