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
This commit is contained in:
parent
931c78ee16
commit
8e9e6b1103
@ -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.
|
||||
|
@ -893,7 +893,7 @@ df
|
||||
</p>
|
||||
<ul><pre>
|
||||
nsh> mount
|
||||
/etc type romfs
|
||||
/etc type romfs
|
||||
/tmp type vfat
|
||||
nsh> df
|
||||
Block Number
|
||||
|
49
TODO
49
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
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
88
sched/clock_dow.c
Normal file
88
sched/clock_dow.c
Normal file
@ -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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user