1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

Sat Apr 1 00:08:06 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>

* locale/loadlocale.c (_nl_load_locale) [MAP_FILE]: Define it zero
 	if undefined.

	* string/strxfrm.c: Just copy the string (for now).
	* string/strcoll.c: Just call strcmp (for now).

	* mach/Makefile (lock): Add mutex-init.
	* mach/mutex-solid.c (_cthread_mutex_lock_routine,
 	_cthread_mutex_unlock_routine): Variables removed.
	(__mutex_lock_solid, __mutex_unlock_solid): Don't use them; just stub.
	(__mutex_init): Function moved to new file mutex-init.c.
	* mach/mutex-init.c: New file, broken out of mutex-solid.c.
This commit is contained in:
Roland McGrath
1995-04-01 09:01:49 +00:00
parent 5de9ba232c
commit 2f8033d606
6 changed files with 39 additions and 109 deletions

View File

@ -1,3 +1,18 @@
Sat Apr 1 00:08:06 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* locale/loadlocale.c (_nl_load_locale) [MAP_FILE]: Define it zero
if undefined.
* string/strxfrm.c: Just copy the string (for now).
* string/strcoll.c: Just call strcmp (for now).
* mach/Makefile (lock): Add mutex-init.
* mach/mutex-solid.c (_cthread_mutex_lock_routine,
_cthread_mutex_unlock_routine): Variables removed.
(__mutex_lock_solid, __mutex_unlock_solid): Don't use them; just stub.
(__mutex_init): Function moved to new file mutex-init.c.
* mach/mutex-init.c: New file, broken out of mutex-solid.c.
Thu Mar 30 20:43:02 1995 Brendan Kehoe <brendan@zen.org> Thu Mar 30 20:43:02 1995 Brendan Kehoe <brendan@zen.org>
* sysdeps/mips/__longjmp.c (__longjmp): Take out CONST. * sysdeps/mips/__longjmp.c (__longjmp): Take out CONST.

View File

@ -101,6 +101,10 @@ _nl_load_locale (int category, char **name)
#ifndef MAP_COPY #ifndef MAP_COPY
/* Linux seems to lack read-only copy-on-write. */ /* Linux seems to lack read-only copy-on-write. */
#define MAP_COPY MAP_PRIVATE #define MAP_COPY MAP_PRIVATE
#endif
#ifndef MAP_FILE
/* Some systems do not have this flag; it is superfluous. */
#define MAP_FILE 0
#endif #endif
filedata = (void *) __mmap ((caddr_t) 0, st.st_size, filedata = (void *) __mmap ((caddr_t) 0, st.st_size,
PROT_READ, MAP_FILE|MAP_COPY, fd, 0); PROT_READ, MAP_FILE|MAP_COPY, fd, 0);

View File

@ -28,7 +28,7 @@ headers = mach_init.h mach.h mach_error.h mach-shortcuts.h mach/mach_traps.h \
$(interface-headers) mach/mach.h mach/mig_support.h mach/error.h \ $(interface-headers) mach/mach.h mach/mig_support.h mach/error.h \
$(lock-headers) machine-sp.h $(lock-headers) machine-sp.h
distribute = thread_state.h distribute = thread_state.h
lock = spin-solid spin-lock mutex-solid lock = spin-solid spin-lock mutex-init mutex-solid
lock-headers = lock-intern.h machine-lock.h spin-lock.h lock-headers = lock-intern.h machine-lock.h spin-lock.h
routines = $(mach-syscalls) $(mach-shortcuts) \ routines = $(mach-syscalls) $(mach-shortcuts) \
mach_init mig_strncpy msg \ mach_init mig_strncpy msg \

View File

@ -1,4 +1,5 @@
/* Copyright (C) 1994 Free Software Foundation, Inc. /* Stub versions of mutex_lock_solid/mutex_unlock_solid for no -lthreads.
Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -19,32 +20,18 @@ Cambridge, MA 02139, USA. */
#include <lock-intern.h> #include <lock-intern.h>
#include <cthreads.h> #include <cthreads.h>
/* If cthreads is linked in, it will define these variables with values /* If cthreads is linked in, it will define these functions itself to do
that point to its mutex functions. */ real cthreads mutex locks. This file will only be linked in when
void (*_cthread_mutex_lock_routine) (struct mutex *); cthreads is not used, and `mutexes' are in fact just spin locks (and
void (*_cthread_mutex_unlock_routine) (struct mutex *); some unused storage). */
void void
__mutex_lock_solid (void *lock) __mutex_lock_solid (void *lock)
{ {
if (_cthread_mutex_lock_routine)
(*_cthread_mutex_lock_routine) (lock);
else
__spin_lock_solid (lock); __spin_lock_solid (lock);
} }
void void
__mutex_unlock_solid (void *lock) __mutex_unlock_solid (void *lock)
{ {
if (_cthread_mutex_unlock_routine)
(*_cthread_mutex_unlock_routine) (lock);
}
void
__mutex_init (void *lock)
{
/* This happens to be name space-safe because it is a macro.
It invokes only spin_lock_init, which is a macro for __spin_lock_init;
and cthread_queue_init, which is a macro for some simple code. */
mutex_init ((struct mutex *) lock);
} }

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991 Free Software Foundation, Inc. /* Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -16,8 +16,6 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave, not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <localeinfo.h>
#include <stddef.h> #include <stddef.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -27,44 +25,10 @@ Cambridge, MA 02139, USA. */
greater than zero if the collated form of S1 is lexiographically greater than zero if the collated form of S1 is lexiographically
less than, equal to or greater than the collated form of S2. */ less than, equal to or greater than the collated form of S2. */
int int
DEFUN(strcoll, (s1, s2), CONST char *s1 AND CONST char *s2) strcoll (s1, s2)
const char *s1;
const char *s2;
{ {
if (_collate_info == NULL || _collate_info->values == NULL) /* XXX LC_COLLATE not implemented yet. */
return strcmp (s1, s2); return strcmp (s1, s2);
else
{
CONST unsigned char *CONST values = _collate_info->values;
CONST unsigned char *CONST offsets = _collate_info->offsets;
while (*s1 != '\0' && *s2 != '\0')
{
CONST unsigned char c1 = *s1++, c2 = *s2++;
CONST unsigned char v1 = values[c1], v2 = values[c2];
CONST unsigned char o1 = offsets[c1], o2 = offsets[c2];
if (v1 == UCHAR_MAX && o1 == 0)
/* This is a non-collating element. Skip it. */
--s2;
else if (v2 == UCHAR_MAX && o2 == 0)
--s1;
else if (v1 == UCHAR_MAX && o1 == CHAR_MAX)
{
/* This element collates lower than anything else. */
if (v2 != UCHAR_MAX || o2 != CHAR_MAX)
return -1;
}
else if (v2 == UCHAR_MAX && o2 == CHAR_MAX)
return 1;
else if (v1 != v2)
return v1 - v2;
else if (o1 != o2)
return o1 - o2;
}
if (*s1 == '\0')
return *s2 == '\0' ? 0 : -1;
else if (*s2 == '\0')
return 1;
return 0;
}
} }

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1991 Free Software Foundation, Inc. /* Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -16,8 +16,6 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave, not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <localeinfo.h>
#include <stddef.h> #include <stddef.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -29,48 +27,10 @@ Cambridge, MA 02139, USA. */
their transformation. The transformed string is put in at their transformation. The transformed string is put in at
most N characters of DEST and its length is returned. */ most N characters of DEST and its length is returned. */
size_t size_t
DEFUN(strxfrm, (dest, src, n), char *dest AND CONST char *src AND size_t n) strxfrm (dest, src, n)
char *dest;
const char *src;
size_t n;
{ {
CONST unsigned char *CONST values return __stpncpy (dest, src, n) - dest;
= _collate_info != NULL ? _collate_info->values : NULL;
CONST unsigned char *CONST offsets
= _collate_info != NULL ? _collate_info->offsets : NULL;
register size_t done = 0;
while (*src != '\0')
{
CONST unsigned char c = *src++;
++done;
if (offsets != NULL && offsets[c] != 0)
{
++done;
if (offsets[c] == CHAR_MAX)
++done;
}
if (done < n && dest != NULL)
{
if (values == NULL)
*dest++ = c;
else if (values[c] == UCHAR_MAX && offsets[c] == 0)
/* This is a non-collating element. Skip it. */
;
else if (values[c] == UCHAR_MAX && offsets[c] == CHAR_MAX)
{
/* This element collates lower than anything else. */
*dest++ = '\001';
*dest++ = '\001';
*dest++ = '\001';
}
else
{
*dest++ = values[c];
*dest++ = offsets[c];
}
}
}
if (dest != NULL)
*dest = '\0';
return done;
} }