summaryrefslogtreecommitdiff
path: root/Src/Modules/mapfile.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2000-05-31 08:56:23 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2000-05-31 08:56:23 +0000
commit7bf294f2b8329673ffd0ee55fa2cca872e5448df (patch)
tree0ab313d514fd5dfbeede7a34876df8e921dc2519 /Src/Modules/mapfile.c
parentd5b6d1f40c7dcbc1510e4335924889b55fb648db (diff)
downloadzsh-7bf294f2b8329673ffd0ee55fa2cca872e5448df.tar.gz
zsh-7bf294f2b8329673ffd0ee55fa2cca872e5448df.zip
Wayne: pattern.c unitialised var
Zero-length arrays now possible with $array[1,0]
Diffstat (limited to 'Src/Modules/mapfile.c')
-rw-r--r--Src/Modules/mapfile.c70
1 files changed, 34 insertions, 36 deletions
diff --git a/Src/Modules/mapfile.c b/Src/Modules/mapfile.c
index e98da7889..05071bd35 100644
--- a/Src/Modules/mapfile.c
+++ b/Src/Modules/mapfile.c
@@ -86,7 +86,8 @@ createmapfilehash()
unsetparam(mapfile_nam);
mapfile_pm = NULL;
- if (!(pm = createparam(mapfile_nam, PM_SPECIAL|PM_REMOVABLE|PM_HASHED)))
+ if (!(pm = createparam(mapfile_nam,
+ PM_SPECIAL|PM_HIDE|PM_REMOVABLE|PM_HASHED)))
return NULL;
pm->level = pm->old ? locallevel : 0;
@@ -143,12 +144,16 @@ setpmmapfile(Param pm, char *value)
*/
ftruncate(fd, len);
memcpy(mmptr, value, len);
+#ifndef MS_SYNC
+#define MS_SYNC 0
+#endif
msync(mmptr, len, MS_SYNC);
/*
* Then we need to truncate again, since mmap() always maps complete
* pages. Honestly, I tried it without, and you need both.
*/
ftruncate(fd, len);
+ munmap(mmptr, len);
}
#else /* don't USE_MMAP */
/* can't be bothered to do anything too clever here */
@@ -197,8 +202,8 @@ setpmmapfiles(Param pm, HashTable ht)
for (hn = ht->nodes[i]; hn; hn = hn->next) {
struct value v;
- v.isarr = v.inv = v.a = 0;
- v.b = -1;
+ v.isarr = v.inv = v.start = 0;
+ v.len = -1;
v.arr = NULL;
v.pm = (Param) hn;
@@ -243,7 +248,7 @@ get_contents(char *fname)
val = NULL;
if ((fd = open(fname, O_RDONLY | O_NOCTTY)) >= 0) {
LinkList ll;
- MUSTUSEHEAP("mapfile:get_contents");
+
if ((ll = readoutput(fd, 1)))
val = peekfirst(ll);
}
@@ -259,30 +264,27 @@ getpmmapfile(HashTable ht, char *name)
char *contents;
Param pm = NULL;
- HEAPALLOC {
- pm = (Param) zhalloc(sizeof(struct param));
- pm->nam = dupstring(name);
- pm->flags = PM_SCALAR;
- pm->sets.cfn = setpmmapfile;
- pm->gets.cfn = strgetfn;
- pm->unsetfn = unsetpmmapfile;
- pm->ct = 0;
- pm->env = NULL;
- pm->ename = NULL;
- pm->old = NULL;
- pm->level = 0;
-
- pm->flags |= (mapfile_pm->flags & PM_READONLY);
-
- /* Set u.str to contents of file given by name */
- if ((contents = get_contents(pm->nam)))
- pm->u.str = contents;
- else {
- pm->u.str = "";
- pm->flags |= PM_UNSET;
- }
- } LASTALLOC;
-
+ pm = (Param) zhalloc(sizeof(struct param));
+ pm->nam = dupstring(name);
+ pm->flags = PM_SCALAR;
+ pm->sets.cfn = setpmmapfile;
+ pm->gets.cfn = strgetfn;
+ pm->unsetfn = unsetpmmapfile;
+ pm->ct = 0;
+ pm->env = NULL;
+ pm->ename = NULL;
+ pm->old = NULL;
+ pm->level = 0;
+
+ pm->flags |= (mapfile_pm->flags & PM_READONLY);
+
+ /* Set u.str to contents of file given by name */
+ if ((contents = get_contents(pm->nam)))
+ pm->u.str = contents;
+ else {
+ pm->u.str = "";
+ pm->flags |= PM_UNSET;
+ }
return (HashNode) pm;
}
@@ -324,14 +326,14 @@ scanpmmapfile(HashTable ht, ScanFunc func, int flags)
/**/
int
-setup_mapfile(Module m)
+setup_(Module m)
{
return 0;
}
/**/
int
-boot_mapfile(Module m)
+boot_(Module m)
{
/* Create the special associative array. */
@@ -341,11 +343,9 @@ boot_mapfile(Module m)
return 0;
}
-#ifdef MODULE
-
/**/
int
-cleanup_mapfile(Module m)
+cleanup_(Module m)
{
Param pm;
@@ -361,9 +361,7 @@ cleanup_mapfile(Module m)
/**/
int
-finish_mapfile(Module m)
+finish_(Module m)
{
return 0;
}
-
-#endif