From a791b1070b24ddb46023431c11ebb1084965987a Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Thu, 28 Nov 2013 08:11:13 -0600 Subject: [PATCH] Fix error in SMARTFS partition number reporting --- ChangeLog | 4 ++++ drivers/mtd/smart.c | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index e9c328be37..09e62188df 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6113,3 +6113,7 @@ one differs from sst25.c because it supports larger SST25 parts: In the larger parts support page write instead of byte/word writes like the smaller parts. From Ken Pettit (2013-11-28). + * drivers/mtd/smart.c: Fixes a minor bug with SMART partition number + reporting (that would only be seen if both partition support and + multi-root directory support are enabled at the same time). From Ken + Pettit (2013-11-28). diff --git a/drivers/mtd/smart.c b/drivers/mtd/smart.c index a6c8fa2c22..542129a2ea 100644 --- a/drivers/mtd/smart.c +++ b/drivers/mtd/smart.c @@ -96,6 +96,7 @@ #define SMARTFS_FMT_AGING_POS 32 #define SMART_FMT_VERSION 1 +#define SMART_PARTNAME_SIZE 4 #define SMART_FIRST_ALLOC_SECTOR 12 /* First logical sector number we will * use for assignment of requested Alloc @@ -134,7 +135,7 @@ struct smart_struct_s FAR uint8_t *releasecount; /* Count of released sectors per erase block */ FAR uint8_t *freecount; /* Count of free sectors per erase block */ FAR char *rwbuffer; /* Our sector read/write buffer */ - const FAR char *partname; /* Optional partition name */ + char partname[SMART_PARTNAME_SIZE]; /* Optional partition name */ uint8_t formatversion; /* Format version on the device */ uint8_t formatstatus; /* Indicates the status of the device format */ uint8_t namesize; /* Length of filenames on this device */ @@ -804,9 +805,9 @@ static int smart_scan(struct smart_struct_s *dev) for (x = 1; x < dev->rootdirentries; x++) { - if (dev->partname != NULL) + if (dev->partname[0] != '\0') { - snprintf(dev->rwbuffer, sizeof(devname), "/dev/smart%d%s%d", + snprintf(dev->rwbuffer, sizeof(devname), "/dev/smart%d%sd%d", dev->minor, dev->partname, x+1); } else @@ -2158,7 +2159,15 @@ int smart_initialize(int minor, FAR struct mtd_dev_s *mtd, const char *partname) dev->formatstatus = SMART_FMT_STAT_UNKNOWN; dev->namesize = CONFIG_SMARTFS_MAXNAMLEN; - dev->partname = partname; + if (partname) + { + strncpy(dev->partname, partname, SMART_PARTNAME_SIZE); + } + else + { + dev->partname[0] = '\0'; + } + #ifdef CONFIG_SMARTFS_MULTI_ROOT_DIRS dev->minor = minor; #endif