diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-08-04 22:00:18 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-08-04 22:00:18 +0000 |
commit | d57cdbc921d1a50eb6d37471df59dbb3a8a0bb2b (patch) | |
tree | 9a1530860e4051617d323eb401ee3b282cff6ca7 /nuttx | |
parent | 2bfb3e74838ca580e5155df8a3e5fbfc3c7577e5 (diff) | |
download | nuttx-d57cdbc921d1a50eb6d37471df59dbb3a8a0bb2b.tar.gz nuttx-d57cdbc921d1a50eb6d37471df59dbb3a8a0bb2b.tar.bz2 nuttx-d57cdbc921d1a50eb6d37471df59dbb3a8a0bb2b.zip |
Fix max filename size report by FAT statfs with long file names; Add missing logic to support fieldwidth and justification for %s format; Add extended help options. Default help command just shows a short list of commands. Verbose and single command help options
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5008 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx')
-rw-r--r-- | nuttx/ChangeLog | 6 | ||||
-rw-r--r-- | nuttx/Documentation/NuttShell.html | 2 | ||||
-rw-r--r-- | nuttx/TODO | 49 | ||||
-rw-r--r-- | nuttx/fs/fat/fs_fat32.c | 4 | ||||
-rw-r--r-- | nuttx/lib/stdio/lib_libvsprintf.c | 45 | ||||
-rw-r--r-- | nuttx/sched/clock_dow.c | 88 |
6 files changed, 153 insertions, 41 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog index 9d2f5ea6b..1061f39ae 100644 --- a/nuttx/ChangeLog +++ b/nuttx/ChangeLog @@ -3120,4 +3120,8 @@ the PLL after re-awakening from deep sleep modes. * fs/fs_foreachinode.c and fs/fs_foreachmountpoint.c: All logic to traverse inodes and mountpoints in the NuttX psuedo-file system. - + * fs/fat/fs_fat32.c: Max. filename length reported by statfs() was wrong + if FAT long file names were enabled. + * lib/stdio/lib_libvsprintf.c: Fieldwidth and justification were not + supported for the %s format. As a result, %s, %12s, and %-12s all + produced the same output. diff --git a/nuttx/Documentation/NuttShell.html b/nuttx/Documentation/NuttShell.html index e561a9bb3..249bf2636 100644 --- a/nuttx/Documentation/NuttShell.html +++ b/nuttx/Documentation/NuttShell.html @@ -893,7 +893,7 @@ df </p> <ul><pre> nsh> mount - /etc type romfs + /etc type romfs /tmp type vfat nsh> df Block Number diff --git a/nuttx/TODO b/nuttx/TODO index 303950a08..a4bad193e 100644 --- a/nuttx/TODO +++ b/nuttx/TODO @@ -15,7 +15,7 @@ nuttx/ (5) Binary loaders (binfmt/) (17) Network (net/, drivers/net) (3) USB (drivers/usbdev, drivers/usbhost) - (8) Libraries (lib/) + (9) Libraries (lib/) (10) File system/Generic drivers (fs/, drivers/) (5) Graphics subystem (graphics/) (1) Pascal add-on (pcode/) @@ -29,6 +29,7 @@ nuttx/ (3) ARM/LPC17xx (arch/arm/src/lpc17xx/) (7) ARM/LPC214x (arch/arm/src/lpc214x/) (2) ARM/LPC313x (arch/arm/src/lpc313x/) + (0) ARM/LPC43x (arch/arm/src/lpc43xx/) (3) ARM/STR71x (arch/arm/src/str71x/) (3) ARM/LM3S6918 (arch/arm/src/lm3s/) (7) ARM/STM32 (arch/arm/src/stm32/) @@ -671,6 +672,19 @@ o Libraries (lib/) Status: Open Priority: ?? + Title: SYSLOG INTEGRATION + Description: There are the beginnings of some system logging capabilities (see + drivers/syslog, fs/fs_syslog.c, and lib/stdio/lib_librawprintf.c and + lib_liblowprintf.c. For NuttX, SYSLOG is a concept and includes, + extends, and replaces the legacy NuttX debug ouput. Some additional + integration is required to formalized this. For example: + + o lib_rawprintf() shjould be renamed syslog(). + o debug.h should be renamed syslog.h + o And what about lib_lowprintf()? llsyslog? + Status: Open + Priority: Low -- more of a roadmap + o File system / Generic drivers (fs/, drivers/) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -1197,7 +1211,7 @@ o ARM/LPC214x (arch/arm/src/lpc214x/) I am not aware of anyone using LPC2148 now so I think the priority has to be low. -o ARM/LPC313x (arch/arm/src/lpc313x/) +o ARM/LPC31xx (arch/arm/src/lpc31xx/) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Title: PLATFORM-SPECIFIC LOGIC @@ -1221,6 +1235,9 @@ o ARM/LPC313x (arch/arm/src/lpc313x/) Status: Open Priority: High if you need to use SPI. +o ARM/LPC43x (arch/arm/src/lpc43xx/) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + o ARM/STR71x (arch/arm/src/str71x/) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -1338,7 +1355,7 @@ o ARM/STM32 (arch/arm/src/stm32/) Status: Open Priority: Low (I am not even sure if this is a problem yet). - Status: Unfinished STM32 F4 OTG FS Host Driver + Status: UNFINISHED STM32 F4 OTG FS HOST DRIVER Description: A quick-n-dirty leverage of the the LPC17xx host driver was put into the STM32 source to support development of the STM32 F4 OTG FS host driver. It is non-functional and still waiting for STM32 F4 logic @@ -1843,27 +1860,6 @@ o NuttShell (NSH) (apps/nshlib) Status: Open Priority: Low (enhancement) - Title: MOUNT w/NO PARAMETERS - Description: Feature request: "A 'mount' without arguments should probably list - mounted filesystems as in Linux. - - nsh> mount - nsh_romfsimg on /etc type romfs (ro) - /dev/mtdblock0 on /home type vfat (rw) - Status: Open - Priority: Low (enhancement) - - Title: DF COMMAND - Description: Feature request: "It would be convenient to list the free space - on a filesystem with something like 'df'. - - nsh> df - Filesystem 1K-blocks Used Available Use% Mounted on - nsh_romfsimg 8 8 0 100% /etc - /dev/mtdblock0 3584 16 3568 1% /home - Status: Open - Priority: Low (enhancement) - o System libraries apps/system (apps/system) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -1871,7 +1867,8 @@ o System libraries apps/system (apps/system) Description: readline implementation does not use C-buffered I/O, but rather talks to serial driver directly via read(). It includes VT-100 specific editting commands. A more generic readline() should be - implemented. + implemented using termios' tcsetattr() to put the serial driver + into a "raw" mode. Status: Open Priority: Low (unless you are using mixed C-buffered I/O with readline and fgetc, for example). @@ -1894,7 +1891,7 @@ o Other Applications & Tests (apps/examples/) Title: EXAMPLES/SENDMAIL UNTESTED Description: examples/sendmail is untested on the target (it has been tested - on the host, but not on the target. + on the host, but not on the target). Status: Open Priority: Med diff --git a/nuttx/fs/fat/fs_fat32.c b/nuttx/fs/fat/fs_fat32.c index f0845070b..7b7ce1f5f 100644 --- a/nuttx/fs/fat/fs_fat32.c +++ b/nuttx/fs/fat/fs_fat32.c @@ -1705,7 +1705,11 @@ static int fat_statfs(struct inode *mountpt, struct statfs *buf) { buf->f_blocks = fs->fs_nclusters; /* Total data blocks in the file system */ buf->f_bavail = buf->f_bfree; /* Free blocks avail to non-superuser */ +#ifdef CONFIG_FAT_LFN + buf->f_namelen = LDIR_MAXFNAME; /* Maximum length of filenames */ +#else buf->f_namelen = (8+1+3); /* Maximum length of filenames */ +#endif } errout_with_semaphore: diff --git a/nuttx/lib/stdio/lib_libvsprintf.c b/nuttx/lib/stdio/lib_libvsprintf.c index 8d521c35e..1fb0376a9 100644 --- a/nuttx/lib/stdio/lib_libvsprintf.c +++ b/nuttx/lib/stdio/lib_libvsprintf.c @@ -197,9 +197,9 @@ static int getllusize(uint8_t fmt, FAR uint8_t flags, FAR unsigned long long ll #ifndef CONFIG_NOPRINTF_FIELDWIDTH static void prejustify(FAR struct lib_outstream_s *obj, uint8_t fmt, - uint8_t flags, int fieldwidth, int numwidth); + uint8_t flags, int fieldwidth, int valwidth); static void postjustify(FAR struct lib_outstream_s *obj, uint8_t fmt, - uint8_t flags, int fieldwidth, int numwidth); + uint8_t flags, int fieldwidth, int valwidth); #endif /**************************************************************************** @@ -1062,7 +1062,7 @@ static int getllusize(uint8_t fmt, uint8_t flags, unsigned long long lln) #ifndef CONFIG_NOPRINTF_FIELDWIDTH static void prejustify(FAR struct lib_outstream_s *obj, uint8_t fmt, - uint8_t flags, int fieldwidth, int numwidth) + uint8_t flags, int fieldwidth, int valwidth) { int i; @@ -1072,10 +1072,10 @@ static void prejustify(FAR struct lib_outstream_s *obj, uint8_t fmt, case FMT_RJUST: if (IS_SIGNED(flags)) { - numwidth++; + valwidth++; } - for (i = fieldwidth - numwidth; i > 0; i--) + for (i = fieldwidth - valwidth; i > 0; i--) { obj->put(obj, ' '); } @@ -1094,15 +1094,15 @@ static void prejustify(FAR struct lib_outstream_s *obj, uint8_t fmt, if (IS_NEGATE(flags)) { obj->put(obj, '-'); - numwidth++; + valwidth++; } else if (IS_SHOWPLUS(flags)) { obj->put(obj, '+'); - numwidth++; + valwidth++; } - for (i = fieldwidth - numwidth; i > 0; i--) + for (i = fieldwidth - valwidth; i > 0; i--) { obj->put(obj, '0'); } @@ -1128,7 +1128,7 @@ static void prejustify(FAR struct lib_outstream_s *obj, uint8_t fmt, #ifndef CONFIG_NOPRINTF_FIELDWIDTH static void postjustify(FAR struct lib_outstream_s *obj, uint8_t fmt, - uint8_t flags, int fieldwidth, int numwidth) + uint8_t flags, int fieldwidth, int valwidth) { int i; @@ -1144,10 +1144,10 @@ static void postjustify(FAR struct lib_outstream_s *obj, uint8_t fmt, case FMT_LJUST: if (IS_SIGNED(flags)) { - numwidth++; + valwidth++; } - for (i = fieldwidth - numwidth; i > 0; i--) + for (i = fieldwidth - valwidth; i > 0; i--) { obj->put(obj, ' '); } @@ -1350,7 +1350,10 @@ int lib_vsprintf(FAR struct lib_outstream_s *obj, FAR const char *src, va_list a if (FMT_CHAR == 's') { - /* Just concatenate the string into the output */ +#ifndef CONFIG_NOPRINTF_FIELDWIDTH + int swidth; +#endif + /* Get the string to output */ ptmp = va_arg(ap, char *); if (!ptmp) @@ -1358,11 +1361,27 @@ int lib_vsprintf(FAR struct lib_outstream_s *obj, FAR const char *src, va_list a ptmp = (char*)g_nullstring; } - while(*ptmp) + /* Get the widith of the string and perform right-justification + * operations. + */ + +#ifndef CONFIG_NOPRINTF_FIELDWIDTH + swidth = strlen(ptmp); + prejustify(obj, fmt, 0, width, swidth); +#endif + /* Concatenate the string into the output */ + + while (*ptmp) { obj->put(obj, *ptmp); ptmp++; } + + /* Perform left-justification operations. */ + +#ifndef CONFIG_NOPRINTF_FIELDWIDTH + postjustify(obj, fmt, 0, width, swidth); +#endif continue; } diff --git a/nuttx/sched/clock_dow.c b/nuttx/sched/clock_dow.c new file mode 100644 index 000000000..93bcfc2d9 --- /dev/null +++ b/nuttx/sched/clock_dow.c @@ -0,0 +1,88 @@ +/**************************************************************************** + * sched/clock_dow.c + * + * Copyright (C) 2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <gnutt@nuttx.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <stdint.h> + +#include <nuttx/clock.h> + +#include "clock_internal.h" + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +/* 23 * (month + 1) / 9, month = 0..11 */ + +static const uint8_t g_lookup[12] = {2, 5, 7, 10, 12, 15, 17, 20, 23, 25, 28, 30}; + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: clock_dow + * + * Description: + * Calculate the day of week (DOW) from they year month and day. Based on + * an algorithm pubished in 1990 by Michael Keith and Tom Craver with some + * tweaks to handle months in the range 0-11. + * + * Parameters: + * year - year (e.g., 1988) + * month - 0 through 11 + * day - 1 through 31 + * + * Return Value: + * The day of the week as days since Sunday: 0 = Sunday, 1 = Monday, etc. + * + * Assumptions: + * + ****************************************************************************/ + +int clock_dow(int year, int month, int day) +{ + day += month < 2 ? year-- : year - 2; + return ((int)g_lookup[month] + day + 4 + year/4 - year/100 + year/400) % 7; +} |