static int status = EXIT_SUCCESS;
+static int my_stat(struct dnode *cur)
+{
+#ifdef BB_FEATURE_LS_FOLLOWLINKS
+ if (follow_links == TRUE) {
+ if (stat(cur->fullname, &cur->dstat)) {
+ errorMsg("%s: %s\n", cur->fullname, strerror(errno));
+ status = EXIT_FAILURE;
+ free(cur->fullname);
+ free(cur);
+ return -1;
+ }
+ } else
+#endif
+ if (lstat(cur->fullname, &cur->dstat)) {
+ errorMsg("%s: %s\n", cur->fullname, strerror(errno));
+ status = EXIT_FAILURE;
+ free(cur->fullname);
+ free(cur);
+ return -1;
+ }
+ return 0;
+}
+
static void newline(void)
{
if (column > 0) {
strcat(cur->fullname, "/");
cur->name= cur->fullname + strlen(cur->fullname);
strcat(cur->fullname, entry->d_name);
-#ifdef BB_FEATURE_LS_FOLLOWLINKS
- if (follow_links == TRUE) {
- if (stat(cur->fullname, &cur->dstat)) {
- errorMsg("%s: %s\n", cur->fullname, strerror(errno));
- status = EXIT_FAILURE;
- free(cur->fullname);
- free(cur);
- continue;
- }
- } else
-#endif
- if (lstat(cur->fullname, &cur->dstat)) { /* get file stat info into node */
- errorMsg("%s: %s\n", cur->fullname, strerror(errno));
- status = EXIT_FAILURE;
- free(cur->fullname);
- free(cur);
+ if (my_stat(cur))
continue;
- }
cur->next= dn;
dn= cur;
nfiles++;
cur= (struct dnode *)xmalloc(sizeof(struct dnode));
cur->fullname= xstrdup(av[oi]);
cur->name= cur->fullname;
-#ifdef BB_FEATURE_LS_FOLLOWLINKS
- if (follow_links == TRUE) {
- if (stat(av[oi], &cur->dstat)) {
- errorMsg("%s: %s\n", av[oi], strerror(errno));
- status = EXIT_FAILURE;
- free(cur->fullname);
- free(cur);
- continue;
- }
- } else
-#endif
- if (lstat(av[oi], &cur->dstat)) { /* get file info into node */
- errorMsg("%s: %s\n", av[oi], strerror(errno));
- status = EXIT_FAILURE;
- free(cur->fullname);
- free(cur);
+ if (my_stat(cur))
continue;
- }
cur->next= dn;
dn= cur;
nfiles++;
static int status = EXIT_SUCCESS;
+static int my_stat(struct dnode *cur)
+{
+#ifdef BB_FEATURE_LS_FOLLOWLINKS
+ if (follow_links == TRUE) {
+ if (stat(cur->fullname, &cur->dstat)) {
+ errorMsg("%s: %s\n", cur->fullname, strerror(errno));
+ status = EXIT_FAILURE;
+ free(cur->fullname);
+ free(cur);
+ return -1;
+ }
+ } else
+#endif
+ if (lstat(cur->fullname, &cur->dstat)) {
+ errorMsg("%s: %s\n", cur->fullname, strerror(errno));
+ status = EXIT_FAILURE;
+ free(cur->fullname);
+ free(cur);
+ return -1;
+ }
+ return 0;
+}
+
static void newline(void)
{
if (column > 0) {
strcat(cur->fullname, "/");
cur->name= cur->fullname + strlen(cur->fullname);
strcat(cur->fullname, entry->d_name);
-#ifdef BB_FEATURE_LS_FOLLOWLINKS
- if (follow_links == TRUE) {
- if (stat(cur->fullname, &cur->dstat)) {
- errorMsg("%s: %s\n", cur->fullname, strerror(errno));
- status = EXIT_FAILURE;
- free(cur->fullname);
- free(cur);
- continue;
- }
- } else
-#endif
- if (lstat(cur->fullname, &cur->dstat)) { /* get file stat info into node */
- errorMsg("%s: %s\n", cur->fullname, strerror(errno));
- status = EXIT_FAILURE;
- free(cur->fullname);
- free(cur);
+ if (my_stat(cur))
continue;
- }
cur->next= dn;
dn= cur;
nfiles++;
cur= (struct dnode *)xmalloc(sizeof(struct dnode));
cur->fullname= xstrdup(av[oi]);
cur->name= cur->fullname;
-#ifdef BB_FEATURE_LS_FOLLOWLINKS
- if (follow_links == TRUE) {
- if (stat(av[oi], &cur->dstat)) {
- errorMsg("%s: %s\n", av[oi], strerror(errno));
- status = EXIT_FAILURE;
- free(cur->fullname);
- free(cur);
- continue;
- }
- } else
-#endif
- if (lstat(av[oi], &cur->dstat)) { /* get file info into node */
- errorMsg("%s: %s\n", av[oi], strerror(errno));
- status = EXIT_FAILURE;
- free(cur->fullname);
- free(cur);
+ if (my_stat(cur))
continue;
- }
cur->next= dn;
dn= cur;
nfiles++;