diff options
Diffstat (limited to 'examples/libc')
| -rw-r--r-- | examples/libc/SConscript | 12 | ||||
| -rw-r--r-- | examples/libc/dirent.c | 112 | ||||
| -rw-r--r-- | examples/libc/env.c | 36 | ||||
| -rw-r--r-- | examples/libc/file.c | 1032 | ||||
| -rw-r--r-- | examples/libc/memory.c | 112 | ||||
| -rw-r--r-- | examples/libc/mq.c | 238 | ||||
| -rw-r--r-- | examples/libc/printf.c | 400 | ||||
| -rw-r--r-- | examples/libc/rand.c | 86 | ||||
| -rw-r--r-- | examples/libc/sem.c | 130 | ||||
| -rw-r--r-- | examples/libc/time.c | 48 |
10 files changed, 1103 insertions, 1103 deletions
diff --git a/examples/libc/SConscript b/examples/libc/SConscript index 60a48fd376..7801049c07 100644 --- a/examples/libc/SConscript +++ b/examples/libc/SConscript @@ -1,6 +1,6 @@ -from building import *
-
-src = Glob('*.c')
-group = DefineGroup('libc_test', src, depend = ['RT_USING_NEWLIB', 'RT_USING_PTHREADS'])
-
-Return('group')
+from building import * + +src = Glob('*.c') +group = DefineGroup('libc_test', src, depend = ['RT_USING_NEWLIB', 'RT_USING_PTHREADS']) + +Return('group') diff --git a/examples/libc/dirent.c b/examples/libc/dirent.c index a763ecb022..75604f6067 100644 --- a/examples/libc/dirent.c +++ b/examples/libc/dirent.c @@ -1,56 +1,56 @@ -/*
- * dirent.c
- *
- * Created on: 2010-11-17
- * Author: bernard
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <finsh.h>
-
-#include <dirent.h>
-int libc_dirent()
-{
- DIR * dirp;
- long int save3 = 0;
- long int cur;
- int i = 0;
- int result = 0;
- struct dirent *dp;
-
- dirp = opendir("/");
- for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
- {
- /* save position 3 (after fourth entry) */
- if (i++ == 3)
- save3 = telldir(dirp);
-
- printf("%s\n", dp->d_name);
-
- /* stop at 400 (just to make sure dirp->__offset and dirp->__size are
- scrambled */
- if (i == 400)
- break;
- }
-
- printf("going back past 4-th entry...\n");
-
- /* go back to saved entry */
- seekdir(dirp, save3);
-
- /* Check whether telldir equals to save3 now. */
- cur = telldir(dirp);
- if (cur != save3)
- {
- printf("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur);
- result = 1;
- }
-
- /* print remaining files (3-last) */
- for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
- printf("%s\n", dp->d_name);
-
- closedir(dirp);
- return result;
-}
-FINSH_FUNCTION_EXPORT(libc_dirent, dirent test for libc);
+/* + * dirent.c + * + * Created on: 2010-11-17 + * Author: bernard + */ +#include <stdio.h> +#include <stdlib.h> +#include <finsh.h> + +#include <dirent.h> +int libc_dirent() +{ + DIR * dirp; + long int save3 = 0; + long int cur; + int i = 0; + int result = 0; + struct dirent *dp; + + dirp = opendir("/"); + for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) + { + /* save position 3 (after fourth entry) */ + if (i++ == 3) + save3 = telldir(dirp); + + printf("%s\n", dp->d_name); + + /* stop at 400 (just to make sure dirp->__offset and dirp->__size are + scrambled */ + if (i == 400) + break; + } + + printf("going back past 4-th entry...\n"); + + /* go back to saved entry */ + seekdir(dirp, save3); + + /* Check whether telldir equals to save3 now. */ + cur = telldir(dirp); + if (cur != save3) + { + printf("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur); + result = 1; + } + + /* print remaining files (3-last) */ + for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) + printf("%s\n", dp->d_name); + + closedir(dirp); + return result; +} +FINSH_FUNCTION_EXPORT(libc_dirent, dirent test for libc); diff --git a/examples/libc/env.c b/examples/libc/env.c index 56f906774f..ca67ac2e2a 100644 --- a/examples/libc/env.c +++ b/examples/libc/env.c @@ -1,18 +1,18 @@ -/*
- * env.c
- *
- * Created on: 2010-11-17
- * Author: bernard
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <finsh.h>
-
-int libc_env()
-{
- printf("PATH=%s\n", getenv("PATH"));
- putenv("foo=bar");
- printf("foo=%s\n", getenv("foo"));
- return 0;
-}
-FINSH_FUNCTION_EXPORT(libc_env, get/set_env test);
+/* + * env.c + * + * Created on: 2010-11-17 + * Author: bernard + */ +#include <stdio.h> +#include <stdlib.h> +#include <finsh.h> + +int libc_env() +{ + printf("PATH=%s\n", getenv("PATH")); + putenv("foo=bar"); + printf("foo=%s\n", getenv("foo")); + return 0; +} +FINSH_FUNCTION_EXPORT(libc_env, get/set_env test); diff --git a/examples/libc/file.c b/examples/libc/file.c index 94aa206ce9..f366e04702 100644 --- a/examples/libc/file.c +++ b/examples/libc/file.c @@ -1,516 +1,516 @@ -/*
- * fstat.c
- *
- * Created on: 2010-11-17
- * Author: bernard
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <finsh.h>
-#include <errno.h>
-#include <sys/fcntl.h>
-#include <sys/stat.h>
-
-const char* text = "this is a test string\n";
-void libc_fstat()
-{
- int fd;
- struct stat s;
-
- fd = open("/tmp/tt.txt", O_WRONLY | O_CREAT, 0);
- if (fd < 0)
- {
- printf("open failed\n");
- return;
- }
-
- write(fd, text, strlen(text) + 1);
- printf("begin: %d\n", lseek(fd, 0, SEEK_SET));
- printf("end: %d\n", lseek(fd, 0, SEEK_END));
-
- printf("fstat result: %d\n", fstat(fd, &s));
- close(fd);
-}
-FINSH_FUNCTION_EXPORT(libc_fstat, fstat test for libc);
-
-void libc_lseek()
-{
- int fd;
-
- fd = open("/tmp/tt.txt", O_WRONLY | O_CREAT, 0);
- if (fd < 0)
- {
- printf("open failed\n");
- return;
- }
-
- write(fd, text, strlen(text) + 1);
- printf("begin: %d\n", lseek(fd, 0, SEEK_SET));
- printf("end: %d\n", lseek(fd, 0, SEEK_END));
- close(fd);
-}
-FINSH_FUNCTION_EXPORT(libc_lseek, lseek test for libc);
-
-void sleep(int tick)
-{
- rt_thread_sleep(tick);
-}
-
-int libc_fseek(void)
-{
- const char *tmpdir;
- char *fname;
- int fd;
- FILE *fp;
- const char outstr[] = "hello world!\n";
- char strbuf[sizeof outstr];
- char buf[200];
- struct stat st1;
- struct stat st2;
- int result = 0;
-
- tmpdir = getenv("TMPDIR");
- if (tmpdir == NULL || tmpdir[0] == '\0')
- tmpdir = "/tmp";
-
- asprintf(&fname, "%s/tst-fseek.XXXXXX", tmpdir);
- if (fname == NULL)
- {
- fprintf(stderr, "cannot generate name for temporary file: %s\n",
- strerror(errno));
- return 1;
- }
-
- /* Create a temporary file. */
- fd = mkstemp(fname);
- if (fd == -1)
- {
- fprintf(stderr, "cannot open temporary file: %s\n", strerror(errno));
- return 1;
- }
-
- fp = fdopen(fd, "w+");
- if (fp == NULL)
- {
- fprintf(stderr, "cannot get FILE for temporary file: %s\n", strerror(
- errno));
- return 1;
- }
- setbuffer(fp, strbuf, sizeof(outstr) - 1);
-
- if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1)
- {
- printf("%d: write error\n", __LINE__);
- result = 1;
- goto out;
- }
-
- /* The EOF flag must be reset. */
- if (fgetc(fp) != EOF)
- {
- printf("%d: managed to read at end of file\n", __LINE__);
- result = 1;
- }
- else if (!feof(fp))
- {
- printf("%d: EOF flag not set\n", __LINE__);
- result = 1;
- }
- if (fseek(fp, 0, SEEK_CUR) != 0)
- {
- printf("%d: fseek(fp, 0, SEEK_CUR) failed\n", __LINE__);
- result = 1;
- }
- else if (feof(fp))
- {
- printf("%d: fseek() didn't reset EOF flag\n", __LINE__);
- result = 1;
- }
-
- /* Do the same for fseeko(). */
- if (fgetc(fp) != EOF)
- {
- printf("%d: managed to read at end of file\n", __LINE__);
- result = 1;
- }
- else if (!feof(fp))
- {
- printf("%d: EOF flag not set\n", __LINE__);
- result = 1;
- }
- if (fseeko(fp, 0, SEEK_CUR) != 0)
- {
- printf("%d: fseek(fp, 0, SEEK_CUR) failed\n", __LINE__);
- result = 1;
- }
- else if (feof(fp))
- {
- printf("%d: fseek() didn't reset EOF flag\n", __LINE__);
- result = 1;
- }
-
- /* Go back to the beginning of the file: absolute. */
- if (fseek(fp, 0, SEEK_SET) != 0)
- {
- printf("%d: fseek(fp, 0, SEEK_SET) failed\n", __LINE__);
- result = 1;
- }
- else if (fflush(fp) != 0)
- {
- printf("%d: fflush() failed\n", __LINE__);
- result = 1;
- }
- else if (lseek(fd, 0, SEEK_CUR) != 0)
- {
- int pos = lseek(fd, 0, SEEK_CUR);
- printf("%d: lseek() returned different position, pos %d\n", __LINE__,
- pos);
- result = 1;
- }
- else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1)
- {
- printf("%d: fread() failed\n", __LINE__);
- result = 1;
- }
- else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0)
- {
- printf("%d: content after fseek(,,SEEK_SET) wrong\n", __LINE__);
- result = 1;
- }
-
- /* Now with fseeko. */
- if (fseeko(fp, 0, SEEK_SET) != 0)
- {
- printf("%d: fseeko(fp, 0, SEEK_SET) failed\n", __LINE__);
- result = 1;
- }
- else if (fflush(fp) != 0)
- {
- printf("%d: fflush() failed\n", __LINE__);
- result = 1;
- }
- else if (lseek(fd, 0, SEEK_CUR) != 0)
- {
- printf("%d: lseek() returned different position\n", __LINE__);
- result = 1;
- }
- else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1)
- {
- printf("%d: fread() failed\n", __LINE__);
- result = 1;
- }
- else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0)
- {
- printf("%d: content after fseeko(,,SEEK_SET) wrong\n", __LINE__);
- result = 1;
- }
-
- /* Go back to the beginning of the file: relative. */
- if (fseek(fp, -((int) sizeof(outstr) - 1), SEEK_CUR) != 0)
- {
- printf("%d: fseek(fp, 0, SEEK_SET) failed\n", __LINE__);
- result = 1;
- }
- else if (fflush(fp) != 0)
- {
- printf("%d: fflush() failed\n", __LINE__);
- result = 1;
- }
- else if (lseek(fd, 0, SEEK_CUR) != 0)
- {
- printf("%d: lseek() returned different position\n", __LINE__);
- result = 1;
- }
- else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1)
- {
- printf("%d: fread() failed\n", __LINE__);
- result = 1;
- }
- else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0)
- {
- printf("%d: content after fseek(,,SEEK_SET) wrong\n", __LINE__);
- result = 1;
- }
-
- /* Now with fseeko. */
- if (fseeko(fp, -((int) sizeof(outstr) - 1), SEEK_CUR) != 0)
- {
- printf("%d: fseeko(fp, 0, SEEK_SET) failed\n", __LINE__);
- result = 1;
- }
- else if (fflush(fp) != 0)
- {
- printf("%d: fflush() failed\n", __LINE__);
- result = 1;
- }
- else if (lseek(fd, 0, SEEK_CUR) != 0)
- {
- printf("%d: lseek() returned different position\n", __LINE__);
- result = 1;
- }
- else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1)
- {
- printf("%d: fread() failed\n", __LINE__);
- result = 1;
- }
- else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0)
- {
- printf("%d: content after fseeko(,,SEEK_SET) wrong\n", __LINE__);
- result = 1;
- }
-
- /* Go back to the beginning of the file: from the end. */
- if (fseek(fp, -((int) sizeof(outstr) - 1), SEEK_END) != 0)
- {
- printf("%d: fseek(fp, 0, SEEK_SET) failed\n", __LINE__);
- result = 1;
- }
- else if (fflush(fp) != 0)
- {
- printf("%d: fflush() failed\n", __LINE__);
- result = 1;
- }
- else if (lseek(fd, 0, SEEK_CUR) != 0)
- {
- printf("%d: lseek() returned different position\n", __LINE__);
- result = 1;
- }
- else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1)
- {
- printf("%d: fread() failed\n", __LINE__);
- result = 1;
- }
- else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0)
- {
- printf("%d: content after fseek(,,SEEK_SET) wrong\n", __LINE__);
- result = 1;
- }
-
- /* Now with fseeko. */
- if (fseeko(fp, -((int) sizeof(outstr) - 1), SEEK_END) != 0)
- {
- printf("%d: fseeko(fp, 0, SEEK_SET) failed\n", __LINE__);
- result = 1;
- }
- else if (fflush(fp) != 0)
- {
- printf("%d: fflush() failed\n", __LINE__);
- result = 1;
- }
- else if (lseek(fd, 0, SEEK_CUR) != 0)
- {
- printf("%d: lseek() returned different position\n", __LINE__);
- result = 1;
- }
- else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1)
- {
- printf("%d: fread() failed\n", __LINE__);
- result = 1;
- }
- else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0)
- {
- printf("%d: content after fseeko(,,SEEK_SET) wrong\n", __LINE__);
- result = 1;
- }
-
- if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1)
- {
- printf("%d: write error 2\n", __LINE__);
- result = 1;
- goto out;
- }
-
- if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1)
- {
- printf("%d: write error 3\n", __LINE__);
- result = 1;
- goto out;
- }
-
- if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1)
- {
- printf("%d: write error 4\n", __LINE__);
- result = 1;
- goto out;
- }
-
- if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1)
- {
- printf("%d: write error 5\n", __LINE__);
- result = 1;
- goto out;
- }
-
- if (fputc('1', fp) == EOF || fputc('2', fp) == EOF)
- {
- printf("%d: cannot add characters at the end\n", __LINE__);
- result = 1;
- goto out;
- }
-
- /* Check the access time. */
- if (fstat(fd, &st1) < 0)
- {
- printf("%d: fstat64() before fseeko() failed\n\n", __LINE__);
- result = 1;
- }
- else
- {
- sleep(1);
-
- if (fseek(fp, -(2 + 2 * (sizeof(outstr) - 1)), SEEK_CUR) != 0)
- {
- printf("%d: fseek() after write characters failed\n", __LINE__);
- result = 1;
- goto out;
- }
- else
- {
-
- time_t t;
- /* Make sure the timestamp actually can be different. */
- sleep(1);
- t = time(NULL);
-
- if (fstat(fd, &st2) < 0)
- {
- printf("%d: fstat64() after fseeko() failed\n\n", __LINE__);
- result = 1;
- }
- if (st1.st_ctime >= t)
- {
- printf("%d: st_ctime not updated\n", __LINE__);
- result = 1;
- }
- if (st1.st_mtime >= t)
- {
- printf("%d: st_mtime not updated\n", __LINE__);
- result = 1;
- }
- if (st1.st_ctime >= st2.st_ctime)
- {
- printf("%d: st_ctime not changed\n", __LINE__);
- result = 1;
- }
- if (st1.st_mtime >= st2.st_mtime)
- {
- printf("%d: st_mtime not changed\n", __LINE__);
- result = 1;
- }
- }
- }
-
- if (fread(buf, 1, 2 + 2 * (sizeof(outstr) - 1), fp) != 2 + 2
- * (sizeof(outstr) - 1))
- {
- printf("%d: reading 2 records plus bits failed\n", __LINE__);
- result = 1;
- }
- else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0 || memcmp(
- &buf[sizeof(outstr) - 1], outstr, sizeof(outstr) - 1) != 0 || buf[2
- * (sizeof(outstr) - 1)] != '1' || buf[2 * (sizeof(outstr) - 1) + 1]
- != '2')
- {
- printf("%d: reading records failed\n", __LINE__);
- result = 1;
- }
- else if (ungetc('9', fp) == EOF)
- {
- printf("%d: ungetc() failed\n", __LINE__);
- result = 1;
- }
- else if (fseek(fp, -(2 + 2 * (sizeof(outstr) - 1)), SEEK_END) != 0)
- {
- printf("%d: fseek after ungetc failed\n", __LINE__);
- result = 1;
- }
- else if (fread(buf, 1, 2 + 2 * (sizeof(outstr) - 1), fp) != 2 + 2
- * (sizeof(outstr) - 1))
- {
- printf("%d: reading 2 records plus bits failed\n", __LINE__);
- result = 1;
- }
- else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0 || memcmp(
- &buf[sizeof(outstr) - 1], outstr, sizeof(outstr) - 1) != 0 || buf[2
- * (sizeof(outstr) - 1)] != '1')
- {
- printf("%d: reading records for the second time failed\n", __LINE__);
- result = 1;
- }
- else if (buf[2 * (sizeof(outstr) - 1) + 1] == '9')
- {
- printf("%d: unget character not ignored\n", __LINE__);
- result = 1;
- }
- else if (buf[2 * (sizeof(outstr) - 1) + 1] != '2')
- {
- printf("%d: unget somehow changed character\n", __LINE__);
- result = 1;
- }
-
- fclose(fp);
-
- fp = fopen(fname, "r");
- if (fp == NULL)
- {
- printf("%d: fopen() failed\n\n", __LINE__);
- result = 1;
- }
- else if (fstat(fileno(fp), &st1) < 0)
- {
- printf("%d: fstat64() before fseeko() failed\n\n", __LINE__);
- result = 1;
- }
- else if (fseeko(fp, 0, SEEK_END) != 0)
- {
- printf("%d: fseeko(fp, 0, SEEK_END) failed\n", __LINE__);
- result = 1;
- }
- else if (ftello(fp) != st1.st_size)
- {
- printf("%d: fstat64 st_size %zd ftello %zd\n", __LINE__,
- (size_t) st1.st_size, (size_t) ftello(fp));
- result = 1;
- }
- else
- printf("%d: SEEK_END works\n", __LINE__);
- if (fp != NULL)
- fclose(fp);
-
- fp = fopen(fname, "r");
- if (fp == NULL)
- {
- printf("%d: fopen() failed\n\n", __LINE__);
- result = 1;
- }
- else if (fstat(fileno(fp), &st1) < 0)
- {
- printf("%d: fstat64() before fgetc() failed\n\n", __LINE__);
- result = 1;
- }
- else if (fgetc(fp) == EOF)
- {
- printf("%d: fgetc() before fseeko() failed\n\n", __LINE__);
- result = 1;
- }
- else if (fseeko(fp, 0, SEEK_END) != 0)
- {
- printf("%d: fseeko(fp, 0, SEEK_END) failed\n", __LINE__);
- result = 1;
- }
- else if (ftello(fp) != st1.st_size)
- {
- printf("%d: fstat64 st_size %zd ftello %zd\n", __LINE__,
- (size_t) st1.st_size, (size_t) ftello(fp));
- result = 1;
- }
- else
- printf("%d: SEEK_END works\n", __LINE__);
- if (fp != NULL)
- fclose(fp);
-
- out: unlink(fname);
-
- return result;
-}
-FINSH_FUNCTION_EXPORT(libc_fseek, lseek test for libc);
+/* + * fstat.c + * + * Created on: 2010-11-17 + * Author: bernard + */ +#include <stdio.h> +#include <stdlib.h> +#include <finsh.h> +#include <errno.h> +#include <sys/fcntl.h> +#include <sys/stat.h> + +const char* text = "this is a test string\n"; +void libc_fstat() +{ + int fd; + struct stat s; + + fd = open("/tmp/tt.txt", O_WRONLY | O_CREAT, 0); + if (fd < 0) + { + printf("open failed\n"); + return; + } + + write(fd, text, strlen(text) + 1); + printf("begin: %d\n", lseek(fd, 0, SEEK_SET)); + printf("end: %d\n", lseek(fd, 0, SEEK_END)); + + printf("fstat result: %d\n", fstat(fd, &s)); + close(fd); +} +FINSH_FUNCTION_EXPORT(libc_fstat, fstat test for libc); + +void libc_lseek() +{ + int fd; + + fd = open("/tmp/tt.txt", O_WRONLY | O_CREAT, 0); + if (fd < 0) + { + printf("open failed\n"); + return; + } + + write(fd, text, strlen(text) + 1); + printf("begin: %d\n", lseek(fd, 0, SEEK_SET)); + printf("end: %d\n", lseek(fd, 0, SEEK_END)); + close(fd); +} +FINSH_FUNCTION_EXPORT(libc_lseek, lseek test for libc); + +void sleep(int tick) +{ + rt_thread_sleep(tick); +} + +int libc_fseek(void) +{ + const char *tmpdir; + char *fname; + int fd; + FILE *fp; + const char outstr[] = "hello world!\n"; + char strbuf[sizeof outstr]; + char buf[200]; + struct stat st1; + struct stat st2; + int result = 0; + + tmpdir = getenv("TMPDIR"); + if (tmpdir == NULL || tmpdir[0] == '\0') + tmpdir = "/tmp"; + + asprintf(&fname, "%s/tst-fseek.XXXXXX", tmpdir); + if (fname == NULL) + { + fprintf(stderr, "cannot generate name for temporary file: %s\n", + strerror(errno)); + return 1; + } + + /* Create a temporary file. */ + fd = mkstemp(fname); + if (fd == -1) + { + fprintf(stderr, "cannot open temporary file: %s\n", strerror(errno)); + return 1; + } + + fp = fdopen(fd, "w+"); + if (fp == NULL) + { + fprintf(stderr, "cannot get FILE for temporary file: %s\n", strerror( + errno)); + return 1; + } + setbuffer(fp, strbuf, sizeof(outstr) - 1); + + if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1) + { + printf("%d: write error\n", __LINE__); + result = 1; + goto out; + } + + /* The EOF flag must be reset. */ + if (fgetc(fp) != EOF) + { + printf("%d: managed to read at end of file\n", __LINE__); + result = 1; + } + else if (!feof(fp)) + { + printf("%d: EOF flag not set\n", __LINE__); + result = 1; + } + if (fseek(fp, 0, SEEK_CUR) != 0) + { + printf("%d: fseek(fp, 0, SEEK_CUR) failed\n", __LINE__); + result = 1; + } + else if (feof(fp)) + { + printf("%d: fseek() didn't reset EOF flag\n", __LINE__); + result = 1; + } + + /* Do the same for fseeko(). */ + if (fgetc(fp) != EOF) + { + printf("%d: managed to read at end of file\n", __LINE__); + result = 1; + } + else if (!feof(fp)) + { + printf("%d: EOF flag not set\n", __LINE__); + result = 1; + } + if (fseeko(fp, 0, SEEK_CUR) != 0) + { + printf("%d: fseek(fp, 0, SEEK_CUR) failed\n", __LINE__); + result = 1; + } + else if (feof(fp)) + { + printf("%d: fseek() didn't reset EOF flag\n", __LINE__); + result = 1; + } + + /* Go back to the beginning of the file: absolute. */ + if (fseek(fp, 0, SEEK_SET) != 0) + { + printf("%d: fseek(fp, 0, SEEK_SET) failed\n", __LINE__); + result = 1; + } + else if (fflush(fp) != 0) + { + printf("%d: fflush() failed\n", __LINE__); + result = 1; + } + else if (lseek(fd, 0, SEEK_CUR) != 0) + { + int pos = lseek(fd, 0, SEEK_CUR); + printf("%d: lseek() returned different position, pos %d\n", __LINE__, + pos); + result = 1; + } + else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1) + { + printf("%d: fread() failed\n", __LINE__); + result = 1; + } + else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0) + { + printf("%d: content after fseek(,,SEEK_SET) wrong\n", __LINE__); + result = 1; + } + + /* Now with fseeko. */ + if (fseeko(fp, 0, SEEK_SET) != 0) + { + printf("%d: fseeko(fp, 0, SEEK_SET) failed\n", __LINE__); + result = 1; + } + else if (fflush(fp) != 0) + { + printf("%d: fflush() failed\n", __LINE__); + result = 1; + } + else if (lseek(fd, 0, SEEK_CUR) != 0) + { + printf("%d: lseek() returned different position\n", __LINE__); + result = 1; + } + else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1) + { + printf("%d: fread() failed\n", __LINE__); + result = 1; + } + else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0) + { + printf("%d: content after fseeko(,,SEEK_SET) wrong\n", __LINE__); + result = 1; + } + + /* Go back to the beginning of the file: relative. */ + if (fseek(fp, -((int) sizeof(outstr) - 1), SEEK_CUR) != 0) + { + printf("%d: fseek(fp, 0, SEEK_SET) failed\n", __LINE__); + result = 1; + } + else if (fflush(fp) != 0) + { + printf("%d: fflush() failed\n", __LINE__); + result = 1; + } + else if (lseek(fd, 0, SEEK_CUR) != 0) + { + printf("%d: lseek() returned different position\n", __LINE__); + result = 1; + } + else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1) + { + printf("%d: fread() failed\n", __LINE__); + result = 1; + } + else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0) + { + printf("%d: content after fseek(,,SEEK_SET) wrong\n", __LINE__); + result = 1; + } + + /* Now with fseeko. */ + if (fseeko(fp, -((int) sizeof(outstr) - 1), SEEK_CUR) != 0) + { + printf("%d: fseeko(fp, 0, SEEK_SET) failed\n", __LINE__); + result = 1; + } + else if (fflush(fp) != 0) + { + printf("%d: fflush() failed\n", __LINE__); + result = 1; + } + else if (lseek(fd, 0, SEEK_CUR) != 0) + { + printf("%d: lseek() returned different position\n", __LINE__); + result = 1; + } + else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1) + { + printf("%d: fread() failed\n", __LINE__); + result = 1; + } + else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0) + { + printf("%d: content after fseeko(,,SEEK_SET) wrong\n", __LINE__); + result = 1; + } + + /* Go back to the beginning of the file: from the end. */ + if (fseek(fp, -((int) sizeof(outstr) - 1), SEEK_END) != 0) + { + printf("%d: fseek(fp, 0, SEEK_SET) failed\n", __LINE__); + result = 1; + } + else if (fflush(fp) != 0) + { + printf("%d: fflush() failed\n", __LINE__); + result = 1; + } + else if (lseek(fd, 0, SEEK_CUR) != 0) + { + printf("%d: lseek() returned different position\n", __LINE__); + result = 1; + } + else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1) + { + printf("%d: fread() failed\n", __LINE__); + result = 1; + } + else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0) + { + printf("%d: content after fseek(,,SEEK_SET) wrong\n", __LINE__); + result = 1; + } + + /* Now with fseeko. */ + if (fseeko(fp, -((int) sizeof(outstr) - 1), SEEK_END) != 0) + { + printf("%d: fseeko(fp, 0, SEEK_SET) failed\n", __LINE__); + result = 1; + } + else if (fflush(fp) != 0) + { + printf("%d: fflush() failed\n", __LINE__); + result = 1; + } + else if (lseek(fd, 0, SEEK_CUR) != 0) + { + printf("%d: lseek() returned different position\n", __LINE__); + result = 1; + } + else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1) + { + printf("%d: fread() failed\n", __LINE__); + result = 1; + } + else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0) + { + printf("%d: content after fseeko(,,SEEK_SET) wrong\n", __LINE__); + result = 1; + } + + if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1) + { + printf("%d: write error 2\n", __LINE__); + result = 1; + goto out; + } + + if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1) + { + printf("%d: write error 3\n", __LINE__); + result = 1; + goto out; + } + + if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1) + { + printf("%d: write error 4\n", __LINE__); + result = 1; + goto out; + } + + if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1) + { + printf("%d: write error 5\n", __LINE__); + result = 1; + goto out; + } + + if (fputc('1', fp) == EOF || fputc('2', fp) == EOF) + { + printf("%d: cannot add characters at the end\n", __LINE__); + result = 1; + goto out; + } + + /* Check the access time. */ + if (fstat(fd, &st1) < 0) + { + printf("%d: fstat64() before fseeko() failed\n\n", __LINE__); + result = 1; + } + else + { + sleep(1); + + if (fseek(fp, -(2 + 2 * (sizeof(outstr) - 1)), SEEK_CUR) != 0) + { + printf("%d: fseek() after write characters failed\n", __LINE__); + result = 1; + goto out; + } + else + { + + time_t t; + /* Make sure the timestamp actually can be different. */ + sleep(1); + t = time(NULL); + + if (fstat(fd, &st2) < 0) + { + printf("%d: fstat64() after fseeko() failed\n\n", __LINE__); + result = 1; + } + if (st1.st_ctime >= t) + { + printf("%d: st_ctime not updated\n", __LINE__); + result = 1; + } + if (st1.st_mtime >= t) + { + printf("%d: st_mtime not updated\n", __LINE__); + result = 1; + } + if (st1.st_ctime >= st2.st_ctime) + { + printf("%d: st_ctime not changed\n", __LINE__); + result = 1; + } + if (st1.st_mtime >= st2.st_mtime) + { + printf("%d: st_mtime not changed\n", __LINE__); + result = 1; + } + } + } + + if (fread(buf, 1, 2 + 2 * (sizeof(outstr) - 1), fp) != 2 + 2 + * (sizeof(outstr) - 1)) + { + printf("%d: reading 2 records plus bits failed\n", __LINE__); + result = 1; + } + else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0 || memcmp( + &buf[sizeof(outstr) - 1], outstr, sizeof(outstr) - 1) != 0 || buf[2 + * (sizeof(outstr) - 1)] != '1' || buf[2 * (sizeof(outstr) - 1) + 1] + != '2') + { + printf("%d: reading records failed\n", __LINE__); + result = 1; + } + else if (ungetc('9', fp) == EOF) + { + printf("%d: ungetc() failed\n", __LINE__); + result = 1; + } + else if (fseek(fp, -(2 + 2 * (sizeof(outstr) - 1)), SEEK_END) != 0) + { + printf("%d: fseek after ungetc failed\n", __LINE__); + result = 1; + } + else if (fread(buf, 1, 2 + 2 * (sizeof(outstr) - 1), fp) != 2 + 2 + * (sizeof(outstr) - 1)) + { + printf("%d: reading 2 records plus bits failed\n", __LINE__); + result = 1; + } + else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0 || memcmp( + &buf[sizeof(outstr) - 1], outstr, sizeof(outstr) - 1) != 0 || buf[2 + * (sizeof(outstr) - 1)] != '1') + { + printf("%d: reading records for the second time failed\n", __LINE__); + result = 1; + } + else if (buf[2 * (sizeof(outstr) - 1) + 1] == '9') + { + printf("%d: unget character not ignored\n", __LINE__); + result = 1; + } + else if (buf[2 * (sizeof(outstr) - 1) + 1] != '2') + { + printf("%d: unget somehow changed character\n", __LINE__); + result = 1; + } + + fclose(fp); + + fp = fopen(fname, "r"); + if (fp == NULL) + { + printf("%d: fopen() failed\n\n", __LINE__); + result = 1; + } + else if (fstat(fileno(fp), &st1) < 0) + { + printf("%d: fstat64() before fseeko() failed\n\n", __LINE__); + result = 1; + } + else if (fseeko(fp, 0, SEEK_END) != 0) + { + printf("%d: fseeko(fp, 0, SEEK_END) failed\n", __LINE__); + result = 1; + } + else if (ftello(fp) != st1.st_size) + { + printf("%d: fstat64 st_size %zd ftello %zd\n", __LINE__, + (size_t) st1.st_size, (size_t) ftello(fp)); + result = 1; + } + else + printf("%d: SEEK_END works\n", __LINE__); + if (fp != NULL) + fclose(fp); + + fp = fopen(fname, "r"); + if (fp == NULL) + { + printf("%d: fopen() failed\n\n", __LINE__); + result = 1; + } + else if (fstat(fileno(fp), &st1) < 0) + { + printf("%d: fstat64() before fgetc() failed\n\n", __LINE__); + result = 1; + } + else if (fgetc(fp) == EOF) + { + printf("%d: fgetc() before fseeko() failed\n\n", __LINE__); + result = 1; + } + else if (fseeko(fp, 0, SEEK_END) != 0) + { + printf("%d: fseeko(fp, 0, SEEK_END) failed\n", __LINE__); + result = 1; + } + else if (ftello(fp) != st1.st_size) + { + printf("%d: fstat64 st_size %zd ftello %zd\n", __LINE__, + (size_t) st1.st_size, (size_t) ftello(fp)); + result = 1; + } + else + printf("%d: SEEK_END works\n", __LINE__); + if (fp != NULL) + fclose(fp); + + out: unlink(fname); + + return result; +} +FINSH_FUNCTION_EXPORT(libc_fseek, lseek test for libc); diff --git a/examples/libc/memory.c b/examples/libc/memory.c index 81b566f646..ee524fa43d 100644 --- a/examples/libc/memory.c +++ b/examples/libc/memory.c @@ -1,56 +1,56 @@ -/*
- * memory.c
- *
- * Created on: 2010-11-17
- * Author: bernard
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <finsh.h>
-#include <errno.h>
-
-static int errors = 0;
-static void merror(const char *msg)
-{
- ++errors;
- printf("Error: %s\n", msg);
-}
-
-int libc_mem(void)
-{
- void *p;
- int save;
-
- errno = 0;
-
- p = malloc(-1);
- save = errno;
-
- if (p != NULL)
- merror("malloc (-1) succeeded.");
-
- if (p == NULL && save != ENOMEM)
- merror("errno is not set correctly");
-
- p = malloc(10);
- if (p == NULL)
- merror("malloc (10) failed.");
-
- /* realloc (p, 0) == free (p). */
- p = realloc(p, 0);
- if (p != NULL)
- merror("realloc (p, 0) failed.");
-
- p = malloc(0);
- if (p == NULL)
- {
- printf("malloc(0) returns NULL\n");
- }
-
- p = realloc(p, 0);
- if (p != NULL)
- merror("realloc (p, 0) failed.");
-
- return errors != 0;
-}
-FINSH_FUNCTION_EXPORT(libc_mem, memory test for libc);
+/* + * memory.c + * + * Created on: 2010-11-17 + * Author: bernard + */ +#include <stdio.h> +#include <stdlib.h> +#include <finsh.h> +#include <errno.h> + +static int errors = 0; +static void merror(const char *msg) +{ + ++errors; + printf("Error: %s\n", msg); +} + +int libc_mem(void) +{ + void *p; + int save; + + errno = 0; + + p = malloc(-1); + save = errno; + + if (p != NULL) + merror("malloc (-1) succeeded."); + + if (p == NULL && save != ENOMEM) + merror("errno is not set correctly"); + + p = malloc(10); + if (p == NULL) + merror("malloc (10) failed."); + + /* realloc (p, 0) == free (p). */ + p = realloc(p, 0); + if (p != NULL) + merror("realloc (p, 0) failed."); + + p = malloc(0); + if (p == NULL) + { + printf("malloc(0) returns NULL\n"); + } + + p = realloc(p, 0); + if (p != NULL) + merror("realloc (p, 0) failed."); + + return errors != 0; +} +FINSH_FUNCTION_EXPORT(libc_mem, memory test for libc); diff --git a/examples/libc/mq.c b/examples/libc/mq.c index 6f9b1c6e59..3163e27975 100644 --- a/examples/libc/mq.c +++ b/examples/libc/mq.c @@ -1,119 +1,119 @@ -#include <stdio.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <pthread.h>
-#include <mqueue.h>
-
-#define MQ_NAME_1 "testmsg1"
-#define MQ_NAME_2 "testmsg2"
-#define MSG_SIZE 128
-#define MAX_MSG 3
-
-const char *s_msg_ptr[] = {"msg test 1", "msg test 2", "msg test 3"};
-char r_msg_ptr_1[MAX_MSG][MSG_SIZE];
-char r_msg_ptr_2[MAX_MSG][MSG_SIZE];
-pthread_t send1, send2, rev1, rev2;
-
-int * send_1(void * mq)
-{
- int i;
- mqd_t mq1 = *(mqd_t *)mq;
-
- printf("Enter into send_1 \n");
- for (i = 0; i < MAX_MSG; i++ ) {
- if ( -1 == mq_send(mq1, s_msg_ptr[i], MSG_SIZE, i)) {
- perror("mq_send doesn't return success \n");
- pthread_exit((void *)1);
- }
- printf("[%d] send '%s' in thread send_1. \n", i+1, s_msg_ptr[i]);
- }
- pthread_exit((void *)0);
-
-}
-
-int * send_2(void * mq)
-{
- int i;
- mqd_t mq2 = *(mqd_t *)mq;
-
- printf("Enter into send_2 \n");
- for (i = 0; i < MAX_MSG; i++ ) {
- if ( -1 == mq_send(mq2, s_msg_ptr[i], MSG_SIZE, i)) {
- perror("mq_send doesn't return success \n");
- pthread_exit((void *)1);
- }
- printf("[%d] send '%s' in thread send_2. \n", i+1, s_msg_ptr[i]);
- }
- pthread_exit((void *)0);
-}
-
-int * receive_1(void * mq)
-{
- int i;
- mqd_t mq1 = *(mqd_t *)mq;
-
- printf("Enter into receive_1 \n");
- for (i = 0; i< MAX_MSG; i++) {
- if ( -1 == mq_receive(mq1, r_msg_ptr_1[i], MSG_SIZE, NULL) ) {
- perror("mq_receive doesn't return success \n");
- pthread_exit((void *)1);
- }
- printf("[%d] receive '%s' in thread receive_1. \n", i+1, r_msg_ptr_1[i]);
- }
- pthread_exit((void *)0);
-}
-int * receive_2(void * mq)
-{
- int i;
- mqd_t mq2 = *(mqd_t *)mq;
-
- printf("Enter into receive_2 \n");
- for (i = 0; i< MAX_MSG; i++) {
- if ( -1 == mq_receive(mq2, r_msg_ptr_2[i], MSG_SIZE, NULL) ) {
- perror("mq_receive doesn't return success \n");
- pthread_exit((void *)1);
- }
- printf("[%d] receive '%s' in thread receive_2. \n", i+1, r_msg_ptr_2[i]);
- }
- pthread_exit((void *)0);
-}
-
-int libc_mq()
-{
- mqd_t mq1 = 0, mq2 = 0;
- struct mq_attr mqstat;
- int oflag = O_CREAT|O_RDWR;
-
- memset(&mqstat, 0, sizeof(mqstat));
- mqstat.mq_maxmsg = MAX_MSG;
- mqstat.mq_msgsize = MSG_SIZE;
- mqstat.mq_flags = 0;
-
- if( ((mqd_t) -1) == (mq1 = mq_open(MQ_NAME_1,oflag,0777, &mqstat)) ) {
- printf("mq_open doesn't return success \n");
- return -1;
- }
- if( ((mqd_t) -1) == (mq2 = mq_open(MQ_NAME_2,oflag,0777, &mqstat)) ) {
- printf("mq_open doesn't return success \n");
- return -1;
- }
- pthread_create(&send1, NULL, (void *)send_1, (void *)&mq1);
- pthread_create(&send2, NULL, (void *)send_2, (void *)&mq2);
- pthread_create(&rev1, NULL, (void *)receive_1, (void *)&mq1);
- pthread_create(&rev2, NULL, (void *)receive_2, (void *)&mq2);
- pthread_join(send1, NULL);
- pthread_join(send2, NULL);
- pthread_join(rev1, NULL);
- pthread_join(rev2, NULL);
-
- mq_close(mq1);
- mq_close(mq2);
- mq_unlink(MQ_NAME_1);
- mq_unlink(MQ_NAME_2);
-
- printf("PASSED\n");
- return 0;
-}
-#include <finsh.h>
-FINSH_FUNCTION_EXPORT(libc_mq, posix mqueue test);
+#include <stdio.h> +#include <fcntl.h> +#include <stdlib.h> +#include <string.h> +#include <pthread.h> +#include <mqueue.h> + +#define MQ_NAME_1 "testmsg1" +#define MQ_NAME_2 "testmsg2" +#define MSG_SIZE 128 +#define MAX_MSG 3 + +const char *s_msg_ptr[] = {"msg test 1", "msg test 2", "msg test 3"}; +char r_msg_ptr_1[MAX_MSG][MSG_SIZE]; +char r_msg_ptr_2[MAX_MSG][MSG_SIZE]; +pthread_t send1, send2, rev1, rev2; + +int * send_1(void * mq) +{ + int i; + mqd_t mq1 = *(mqd_t *)mq; + + printf("Enter into send_1 \n"); + for (i = 0; i < MAX_MSG; i++ ) { + if ( -1 == mq_send(mq1, s_msg_ptr[i], MSG_SIZE, i)) { + perror("mq_send doesn't return success \n"); + pthread_exit((void *)1); + } + printf("[%d] send '%s' in thread send_1. \n", i+1, s_msg_ptr[i]); + } + pthread_exit((void *)0); + +} + +int * send_2(void * mq) +{ + int i; + mqd_t mq2 = *(mqd_t *)mq; + + printf("Enter into send_2 \n"); + for (i = 0; i < MAX_MSG; i++ ) { + if ( -1 == mq_send(mq2, s_msg_ptr[i], MSG_SIZE, i)) { + perror("mq_send doesn't return success \n"); + pthread_exit((void *)1); + } + printf("[%d] send '%s' in thread send_2. \n", i+1, s_msg_ptr[i]); + } + pthread_exit((void *)0); +} + +int * receive_1(void * mq) +{ + int i; + mqd_t mq1 = *(mqd_t *)mq; + + printf("Enter into receive_1 \n"); + for (i = 0; i< MAX_MSG; i++) { + if ( -1 == mq_receive(mq1, r_msg_ptr_1[i], MSG_SIZE, NULL) ) { + perror("mq_receive doesn't return success \n"); + pthread_exit((void *)1); + } + printf("[%d] receive '%s' in thread receive_1. \n", i+1, r_msg_ptr_1[i]); + } + pthread_exit((void *)0); +} +int * receive_2(void * mq) +{ + int i; + mqd_t mq2 = *(mqd_t *)mq; + + printf("Enter into receive_2 \n"); + for (i = 0; i< MAX_MSG; i++) { + if ( -1 == mq_receive(mq2, r_msg_ptr_2[i], MSG_SIZE, NULL) ) { + perror("mq_receive doesn't return success \n"); + pthread_exit((void *)1); + } + printf("[%d] receive '%s' in thread receive_2. \n", i+1, r_msg_ptr_2[i]); + } + pthread_exit((void *)0); +} + +int libc_mq() +{ + mqd_t mq1 = 0, mq2 = 0; + struct mq_attr mqstat; + int oflag = O_CREAT|O_RDWR; + + memset(&mqstat, 0, sizeof(mqstat)); + mqstat.mq_maxmsg = MAX_MSG; + mqstat.mq_msgsize = MSG_SIZE; + mqstat.mq_flags = 0; + + if( ((mqd_t) -1) == (mq1 = mq_open(MQ_NAME_1,oflag,0777, &mqstat)) ) { + printf("mq_open doesn't return success \n"); + return -1; + } + if( ((mqd_t) -1) == (mq2 = mq_open(MQ_NAME_2,oflag,0777, &mqstat)) ) { + printf("mq_open doesn't return success \n"); + return -1; + } + pthread_create(&send1, NULL, (void *)send_1, (void *)&mq1); + pthread_create(&send2, NULL, (void *)send_2, (void *)&mq2); + pthread_create(&rev1, NULL, (void *)receive_1, (void *)&mq1); + pthread_create(&rev2, NULL, (void *)receive_2, (void *)&mq2); + pthread_join(send1, NULL); + pthread_join(send2, NULL); + pthread_join(rev1, NULL); + pthread_join(rev2, NULL); + + mq_close(mq1); + mq_close(mq2); + mq_unlink(MQ_NAME_1); + mq_unlink(MQ_NAME_2); + + printf("PASSED\n"); + return 0; +} +#include <finsh.h> +FINSH_FUNCTION_EXPORT(libc_mq, posix mqueue test); diff --git a/examples/libc/printf.c b/examples/libc/printf.c index 12435731b7..2d2d8a7763 100644 --- a/examples/libc/printf.c +++ b/examples/libc/printf.c @@ -1,200 +1,200 @@ -#include <stdio.h>
-#include <stdlib.h>
-#include <sys/fcntl.h>
-
-#include <finsh.h>
-
-char * format[] = {
- "%",
- "%0.",
- "%.0",
- "%+0.",
- "%+.0",
- "%.5",
- "%+.5",
- "%2.5",
- "%22.5",
- "%022.5",
- "%#022.5",
- "%-#022.5",
- "%+#022.5",
- "%-22.5",
- "%+22.5",
- "%--22.5",
- "%++22.5",
- "%+-22.5",
- "%-+22.5",
- "%-#022.5",
- "%-#22.5",
- "%-2.22",
- "%+2.22",
- "%-#02.22",
- "%-#2.22",
- "%-1.5",
- "%1.5",
- "%-#01.5",
- "%-#1.5",
- "%-#.5",
- "%-#1.",
- "%-#.",
- NULL
-};
-
-
-static void
-intchk (const char *fmt)
-{
- (void) printf("%15s :, \"", fmt);
- (void) printf(fmt, 0);
- (void) printf("\", \"");
- (void) printf(fmt, 123);
- (void) printf("\", \"");
- (void) printf(fmt, -18);
- (void) printf("\"\n");
-}
-
-static void
-fltchk (const char *fmt)
-{
- (void) printf("%15s :, \"", fmt);
- (void) printf(fmt, 0.0);
- (void) printf("\", \"");
- (void) printf(fmt, 123.0001);
- (void) printf("\", \"");
- (void) printf(fmt, -18.0002301);
- (void) printf("\"\n");
-}
-
-
-int printf_test()
-{
- char buf[256];
- int i;
-
- printf("%s\n\n", "# vim:syntax=off:");
-
- /* integers */
- for(i=0;format[i];i++) {
- strcpy(buf, format[i]);
- strcat(buf, "d");
- intchk(buf);
- }
-
- /* floats */
- for(i=0;format[i];i++) {
- strcpy(buf, format[i]);
- strcat(buf, "f");
- fltchk(buf);
- }
- /* hexa */
- for(i=0;format[i];i++) {
- strcpy(buf, format[i]);
- strcat(buf, "x");
- intchk(buf);
- }
-
- printf("#%.4x %4x#\n", 4, 88);
- printf("#%4x#\n",4);
- printf("#%#22.8x#\n",1234567);
-
- printf("#%+2i#\n",18);
- printf("#%i#\n",18);
- printf("#%llu#\n",4294967297ULL);
- printf("#%#x#\n",44444);
- printf("#%-8i#\n",33);
- printf("#%i#\n",18);
- printf("#%d#\n",18);
- printf("#%u#\n",18);
- printf("#%lu#\n",18);
- printf("#%li#\n",18);
- printf("#%-+#06d#\n", -123);
- printf("#%-+#6d#\n", -123);
- printf("#%+#06d#\n", -123);
- printf("#%06d#\n", -123);
- printf("#%+15s#\n","ABCDEF");
- /* from ncurses make_keys */
- printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 16, 16, "KEY_A1", "key_a1");
- printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 16, 2, "KEY_A1", "key_a1");
- printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 2, 16, "KEY_A1", "key_a1");
- printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 16, 0, "KEY_A1", "key_a1");
- printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 0, 16, "KEY_A1", "key_a1");
- printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 0, 0, "KEY_A1", "key_a1");
- printf("{ %4d, %*.*s },\t/* %s */\n", 139, 16, 16, "KEY_A1", "key_a1");
- printf("{ %4d, %*.*s },\t/* %s */\n", 139, 16, 2, "KEY_A1", "key_a1");
- printf("{ %4d, %*.*s },\t/* %s */\n", 139, 2, 16, "KEY_A1", "key_a1");
- printf("{ %4d, %*.*s },\t/* %s */\n", 139, 16, 0, "KEY_A1", "key_a1");
- printf("{ %4d, %*.*s },\t/* %s */\n", 139, 0, 16, "KEY_A1", "key_a1");
- printf("{ %4d, %*.*s },\t/* %s */\n", 139, 0, 0, "KEY_A1", "key_a1");
- printf("%*.*f\n", 0, 16, 0.0);
- printf("%*.*f\n", 16, 16, 0.0);
- printf("%*.*f\n", 2, 2, -0.0);
- printf("%*.*f\n", 20, 0, -123.123);
- printf("%*.*f\n", 10, 0, +123.123);
-
-
- i = printf("\"%s\"\n","A");
- printf("%i\n", i);
- /* from glibc's tst-printf.c */
-
- {
- char buf[20];
- char buf2[512];
- int i;
-
- printf ("snprintf (\"%%30s\", \"foo\") == %d, \"%.*s\"\n",
- snprintf (buf, sizeof (buf), "%30s", "foo"), (int) sizeof (buf),
- buf);
- memset(buf2,0,sizeof(buf));
- i=snprintf(buf2, 256, "%.9999u", 10);
- printf("%i %i\n",i,strlen(buf2));
-
- printf ("snprintf (\"%%.999999u\", 10) == %d\n",
- snprintf(buf2, sizeof(buf2), "%.999999u", 10));
- }
- return 0;
-}
-
-void libc_printf()
-{
- printf("stdout test!!\n");
- fprintf(stdout, "fprintf test!!\n");
- fprintf(stderr, "fprintf test!!\n");
- puts("puts test!!\n");
-
- putc('1', stderr);
- putc('2', stderr);
- putc('\n', stderr);
-
- printf_test();
-}
-FINSH_FUNCTION_EXPORT(libc_printf, printf test in libc);
-
-
-void libc_dprintf()
-{
- int fd;
-
- fd = open("/dev/console", O_WRONLY, 0);
- if (fd >0)
- {
- dprintf(fd, "fd:%d printf test!!\n", fd);
- close(fd);
- }
-}
-FINSH_FUNCTION_EXPORT(libc_dprintf, dprintf test);
-
-
-void libc_fdopen()
-{
- int fd;
- FILE* fp;
-
- fd = open("/dev/console", O_WRONLY, 0);
- if (fd >0)
- {
- fp = fdopen(fd, "w");
- fprintf(fp, "fdopen test, fd %d!!\n", fileno(fp));
- fclose(fp);
- }
-}
-FINSH_FUNCTION_EXPORT(libc_fdopen, fdopen test);
+#include <stdio.h> +#include <stdlib.h> +#include <sys/fcntl.h> + +#include <finsh.h> + +char * format[] = { + "%", + "%0.", + "%.0", + "%+0.", + "%+.0", + "%.5", + "%+.5", + "%2.5", + "%22.5", + "%022.5", + "%#022.5", + "%-#022.5", + "%+#022.5", + "%-22.5", + "%+22.5", + "%--22.5", + "%++22.5", + "%+-22.5", + "%-+22.5", + "%-#022.5", + "%-#22.5", + "%-2.22", + "%+2.22", + "%-#02.22", + "%-#2.22", + "%-1.5", + "%1.5", + "%-#01.5", + "%-#1.5", + "%-#.5", + "%-#1.", + "%-#.", + NULL +}; + + +static void +intchk (const char *fmt) +{ + (void) printf("%15s :, \"", fmt); + (void) printf(fmt, 0); + (void) printf("\", \""); + (void) printf(fmt, 123); + (void) printf("\", \""); + (void) printf(fmt, -18); + (void) printf("\"\n"); +} + +static void +fltchk (const char *fmt) +{ + (void) printf("%15s :, \"", fmt); + (void) printf(fmt, 0.0); + (void) printf("\", \""); + (void) printf(fmt, 123.0001); + (void) printf("\", \""); + (void) printf(fmt, -18.0002301); + (void) printf("\"\n"); +} + + +int printf_test() +{ + char buf[256]; + int i; + + printf("%s\n\n", "# vim:syntax=off:"); + + /* integers */ + for(i=0;format[i];i++) { + strcpy(buf, format[i]); + strcat(buf, "d"); + intchk(buf); + } + + /* floats */ + for(i=0;format[i];i++) { + strcpy(buf, format[i]); + strcat(buf, "f"); + fltchk(buf); + } + /* hexa */ + for(i=0;format[i];i++) { + strcpy(buf, format[i]); + strcat(buf, "x"); + intchk(buf); + } + + printf("#%.4x %4x#\n", 4, 88); + printf("#%4x#\n",4); + printf("#%#22.8x#\n",1234567); + + printf("#%+2i#\n",18); + printf("#%i#\n",18); + printf("#%llu#\n",4294967297ULL); + printf("#%#x#\n",44444); + printf("#%-8i#\n",33); + printf("#%i#\n",18); + printf("#%d#\n",18); + printf("#%u#\n",18); + printf("#%lu#\n",18); + printf("#%li#\n",18); + printf("#%-+#06d#\n", -123); + printf("#%-+#6d#\n", -123); + printf("#%+#06d#\n", -123); + printf("#%06d#\n", -123); + printf("#%+15s#\n","ABCDEF"); + /* from ncurses make_keys */ + printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 16, 16, "KEY_A1", "key_a1"); + printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 16, 2, "KEY_A1", "key_a1"); + printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 2, 16, "KEY_A1", "key_a1"); + printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 16, 0, "KEY_A1", "key_a1"); + printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 0, 16, "KEY_A1", "key_a1"); + printf("{ %4d, %-*.*s },\t/* %s */\n", 139, 0, 0, "KEY_A1", "key_a1"); + printf("{ %4d, %*.*s },\t/* %s */\n", 139, 16, 16, "KEY_A1", "key_a1"); + printf("{ %4d, %*.*s },\t/* %s */\n", 139, 16, 2, "KEY_A1", "key_a1"); + printf("{ %4d, %*.*s },\t/* %s */\n", 139, 2, 16, "KEY_A1", "key_a1"); + printf("{ %4d, %*.*s },\t/* %s */\n", 139, 16, 0, "KEY_A1", "key_a1"); + printf("{ %4d, %*.*s },\t/* %s */\n", 139, 0, 16, "KEY_A1", "key_a1"); + printf("{ %4d, %*.*s },\t/* %s */\n", 139, 0, 0, "KEY_A1", "key_a1"); + printf("%*.*f\n", 0, 16, 0.0); + printf("%*.*f\n", 16, 16, 0.0); + printf("%*.*f\n", 2, 2, -0.0); + printf("%*.*f\n", 20, 0, -123.123); + printf("%*.*f\n", 10, 0, +123.123); + + + i = printf("\"%s\"\n","A"); + printf("%i\n", i); + /* from glibc's tst-printf.c */ + + { + char buf[20]; + char buf2[512]; + int i; + + printf ("snprintf (\"%%30s\", \"foo\") == %d, \"%.*s\"\n", + snprintf (buf, sizeof (buf), "%30s", "foo"), (int) sizeof (buf), + buf); + memset(buf2,0,sizeof(buf)); + i=snprintf(buf2, 256, "%.9999u", 10); + printf("%i %i\n",i,strlen(buf2)); + + printf ("snprintf (\"%%.999999u\", 10) == %d\n", + snprintf(buf2, sizeof(buf2), "%.999999u", 10)); + } + return 0; +} + +void libc_printf() +{ + printf("stdout test!!\n"); + fprintf(stdout, "fprintf test!!\n"); + fprintf(stderr, "fprintf test!!\n"); + puts("puts test!!\n"); + + putc('1', stderr); + putc('2', stderr); + putc('\n', stderr); + + printf_test(); +} +FINSH_FUNCTION_EXPORT(libc_printf, printf test in libc); + + +void libc_dprintf() +{ + int fd; + + fd = open("/dev/console", O_WRONLY, 0); + if (fd >0) + { + dprintf(fd, "fd:%d printf test!!\n", fd); + close(fd); + } +} +FINSH_FUNCTION_EXPORT(libc_dprintf, dprintf test); + + +void libc_fdopen() +{ + int fd; + FILE* fp; + + fd = open("/dev/console", O_WRONLY, 0); + if (fd >0) + { + fp = fdopen(fd, "w"); + fprintf(fp, "fdopen test, fd %d!!\n", fileno(fp)); + fclose(fp); + } +} +FINSH_FUNCTION_EXPORT(libc_fdopen, fdopen test); diff --git a/examples/libc/rand.c b/examples/libc/rand.c index ca74353adc..8f52ad28bb 100644 --- a/examples/libc/rand.c +++ b/examples/libc/rand.c @@ -1,43 +1,43 @@ -/*
- * rand.c
- *
- * Created on: 2010-11-17
- * Author: bernard
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <finsh.h>
-
-int libc_rand(void)
-{
- int i1, i2;
- int j1, j2;
-
- /* The C standard says that "If rand is called before any calls to
- srand have been made, the same sequence shall be generated as
- when srand is first called with a seed value of 1." */
- i1 = rand();
- i2 = rand();
- srand(1);
- j1 = rand();
- j2 = rand();
- if (i1 < 0 || i2 < 0 || j1 < 0 || j2 < 0)
- {
- puts("Test FAILED!");
- }
- if (j1 == i1 && j2 == i2)
- {
- puts("Test succeeded.");
- return 0;
- }
- else
- {
- if (j1 != i1)
- printf("%d != %d\n", j1, i1);
- if (j2 != i2)
- printf("%d != %d\n", j2, i2);
- puts("Test FAILED!");
- return 1;
- }
-}
-FINSH_FUNCTION_EXPORT(libc_rand, rand test for libc);
+/* + * rand.c + * + * Created on: 2010-11-17 + * Author: bernard + */ +#include <stdio.h> +#include <stdlib.h> +#include <finsh.h> + +int libc_rand(void) +{ + int i1, i2; + int j1, j2; + + /* The C standard says that "If rand is called before any calls to + srand have been made, the same sequence shall be generated as + when srand is first called with a seed value of 1." */ + i1 = rand(); + i2 = rand(); + srand(1); + j1 = rand(); + j2 = rand(); + if (i1 < 0 || i2 < 0 || j1 < 0 || j2 < 0) + { + puts("Test FAILED!"); + } + if (j1 == i1 && j2 == i2) + { + puts("Test succeeded."); + return 0; + } + else + { + if (j1 != i1) + printf("%d != %d\n", j1, i1); + if (j2 != i2) + printf("%d != %d\n", j2, i2); + puts("Test FAILED!"); + return 1; + } +} +FINSH_FUNCTION_EXPORT(libc_rand, rand test for libc); diff --git a/examples/libc/sem.c b/examples/libc/sem.c index 9686119059..d081d246e9 100644 --- a/examples/libc/sem.c +++ b/examples/libc/sem.c @@ -1,65 +1,65 @@ -#include <pthread.h>
-#include <semaphore.h>
-#include <stdio.h>
-
-static sem_t sema;
-static void* other_thread()
-{
- printf("other_thread here!\n");
-
- sleep(1);
-
- while (1)
- {
- printf("other_thread: sem_post...\n");
- if(sem_post(&sema) == -1)
- printf("sem_post failed\n");
- sleep(1);
- }
-
- printf("other_thread dies!\n");
- pthread_exit(0);
-}
-
-static void test_thread(void* parameter)
-{
- pthread_t tid;
-
- printf("main thread here!\n");
- printf("sleep 5 seconds...");
- sleep(5);
- printf("done\n");
-
- sem_init(&sema, 0, 0);
-
- /* create the "other" thread */
- if(pthread_create(&tid, 0, &other_thread, 0)!=0)
- /* error */
- printf("pthread_create OtherThread failed.\n");
- else
- printf("created OtherThread=%x\n", tid);
-
- /* let the other thread run */
- while (1)
- {
- printf("Main: sem_wait...\n");
- if(sem_wait(&sema) == -1)
- printf("sem_wait failed\n");
- printf("Main back.\n\n");
- }
-
- pthread_exit(0);
-}
-#include <finsh.h>
-void libc_sem()
-{
- rt_thread_t tid;
-
- tid = rt_thread_create("semtest", test_thread, RT_NULL,
- 2048, 20, 5);
- if (tid != RT_NULL)
- {
- rt_thread_startup(tid);
- }
-}
-FINSH_FUNCTION_EXPORT(libc_sem, posix semaphore test);
+#include <pthread.h> +#include <semaphore.h> +#include <stdio.h> + +static sem_t sema; +static void* other_thread() +{ + printf("other_thread here!\n"); + + sleep(1); + + while (1) + { + printf("other_thread: sem_post...\n"); + if(sem_post(&sema) == -1) + printf("sem_post failed\n"); + sleep(1); + } + + printf("other_thread dies!\n"); + pthread_exit(0); +} + +static void test_thread(void* parameter) +{ + pthread_t tid; + + printf("main thread here!\n"); + printf("sleep 5 seconds..."); + sleep(5); + printf("done\n"); + + sem_init(&sema, 0, 0); + + /* create the "other" thread */ + if(pthread_create(&tid, 0, &other_thread, 0)!=0) + /* error */ + printf("pthread_create OtherThread failed.\n"); + else + printf("created OtherThread=%x\n", tid); + + /* let the other thread run */ + while (1) + { + printf("Main: sem_wait...\n"); + if(sem_wait(&sema) == -1) + printf("sem_wait failed\n"); + printf("Main back.\n\n"); + } + + pthread_exit(0); +} +#include <finsh.h> +void libc_sem() +{ + rt_thread_t tid; + + tid = rt_thread_create("semtest", test_thread, RT_NULL, + 2048, 20, 5); + if (tid != RT_NULL) + { + rt_thread_startup(tid); + } +} +FINSH_FUNCTION_EXPORT(libc_sem, posix semaphore test); diff --git a/examples/libc/time.c b/examples/libc/time.c index cbe5773ec0..fa6dee74c8 100644 --- a/examples/libc/time.c +++ b/examples/libc/time.c @@ -1,24 +1,24 @@ -/*
- * time.c
- *
- * Created on: 2010-11-17
- * Author: bernard
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <finsh.h>
-
-int speed()
-{
- int i;
- time_t t;
-
- printf("%d\n", time(0));
- for (i = 0; i < 10000000; ++i)
- t = time(0);
-
- printf("%d\n", time(0));
- return 0;
-}
-FINSH_FUNCTION_EXPORT(speed, speed test);
+/* + * time.c + * + * Created on: 2010-11-17 + * Author: bernard + */ + +#include <stdio.h> +#include <stdlib.h> +#include <finsh.h> + +int speed() +{ + int i; + time_t t; + + printf("%d\n", time(0)); + for (i = 0; i < 10000000; ++i) + t = time(0); + + printf("%d\n", time(0)); + return 0; +} +FINSH_FUNCTION_EXPORT(speed, speed test); |
