rpms/alsa-lib/devel alsa-lib-ainit-2.patch, NONE, 1.1 .cvsignore, 1.12, 1.13 alsa-lib.spec, 1.27, 1.28 sources, 1.14, 1.15

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Fri May 27 14:24:05 UTC 2005


Author: stransky

Update of /cvs/dist/rpms/alsa-lib/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv9780

Modified Files:
	.cvsignore alsa-lib.spec sources 
Added Files:
	alsa-lib-ainit-2.patch 
Log Message:
alsacard utility for s-c-s

alsa-lib-ainit-2.patch:
 pcm_direct.c |   22 +++++++++------
 pcm_direct.h |    5 ++-
 pcm_dmix.c   |   82 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
 pcm_dshare.c |   74 ++++++++++++++++++++++++++++++++++++++++++++---------
 pcm_dsnoop.c |   69 +++++++++++++++++++++++++++++++++++++++++++------
 5 files changed, 207 insertions(+), 45 deletions(-)

--- NEW FILE alsa-lib-ainit-2.patch ---
--- alsa-lib-1.0.9rc4/src/pcm/pcm_direct.h.ainit	2005-05-19 16:14:05.000000000 +0200
+++ alsa-lib-1.0.9rc4/src/pcm/pcm_direct.h	2005-05-27 14:01:45.000000000 +0200
@@ -79,7 +79,10 @@
 
 struct snd_pcm_direct {
 	snd_pcm_type_t type;		/* type (dmix, dsnoop, dshare) */
-	key_t ipc_key;			/* IPC key for semaphore and memory */
+	key_t ipc_mem_direct;		/* IPC key for first memory - for pcm_direct.c */
+	key_t ipc_mem_plug;		/* IPC key for second memory - for dmix/dsnoop/... */
+	key_t ipc_sem;			/* IPC key for semaphore */
+	int share_ipc_key;              /* old ipc_key style */
 	mode_t ipc_perm;		/* IPC socket permissions */
 	int semid;			/* IPC global semaphore identification */
 	int shmid;			/* IPC global shared memory identification */
--- alsa-lib-1.0.9rc4/src/pcm/pcm_dmix.c.ainit	2005-05-23 11:03:18.000000000 +0200
+++ alsa-lib-1.0.9rc4/src/pcm/pcm_dmix.c	2005-05-27 14:01:45.000000000 +0200
@@ -71,12 +71,12 @@
 	       dmix->shmptr->s.buffer_size *
 	       sizeof(signed int);	
 retryshm:
-	dmix->u.dmix.shmid_sum = shmget(dmix->ipc_key + 1, size,
-					IPC_CREAT | dmix->ipc_perm);
+	dmix->u.dmix.shmid_sum = shmget(dmix->ipc_mem_plug, size, 
+                                        IPC_CREAT | (dmix->share_ipc_key ? dmix->ipc_perm : 0600));
 	err = -errno;
 	if (dmix->u.dmix.shmid_sum < 0){
 		if (errno == EINVAL)
-		if ((tmpid = shmget(dmix->ipc_key + 1, 0, dmix->ipc_perm)) != -1)
+		if ((tmpid = shmget(dmix->ipc_mem_plug, 0, (dmix->share_ipc_key ? dmix->ipc_perm : 0600))) != -1)
 		if (!shmctl(tmpid, IPC_STAT, &buf))
 	    	if (!buf.shm_nattch) 
 		/* no users so destroy the segment */
@@ -106,8 +106,10 @@
 	if (shmctl(dmix->u.dmix.shmid_sum, IPC_STAT, &buf) < 0)
 		return -errno;
 	if (buf.shm_nattch == 0) {	/* we're the last user, destroy the segment */
-		if (shmctl(dmix->u.dmix.shmid_sum, IPC_RMID, NULL) < 0)
-			return -errno;
+		if (dmix->share_ipc_key) {
+			if (shmctl(dmix->u.dmix.shmid_sum, IPC_RMID, NULL) < 0)
+				return -errno;
+                }
 		ret = 1;
 	}
 	dmix->u.dmix.shmid_sum = -1;
@@ -724,7 +726,11 @@
  *          changed in future.
  */
 int snd_pcm_dmix_open(snd_pcm_t **pcmp, const char *name,
-		      key_t ipc_key, mode_t ipc_perm,
+		      key_t ipc_sem, 
+		      key_t ipc_mem_direct, 
+		      key_t ipc_mem_plug,
+		      int share_ipc_key,
+		      mode_t ipc_perm,
 		      struct slave_params *params,
 		      snd_config_t *bindings,
 		      int slowptr,
@@ -753,8 +759,11 @@
 	if (ret < 0)
 		goto _err_nosem;
 	
-	dmix->ipc_key = ipc_key;
+	dmix->ipc_sem = ipc_sem;
+	dmix->ipc_mem_direct = ipc_mem_direct;
+	dmix->ipc_mem_plug = ipc_mem_plug;
 	dmix->ipc_perm = ipc_perm;
+	dmix->share_ipc_key = share_ipc_key;
 	dmix->semid = -1;
 	dmix->shmid = -1;
 
@@ -1044,7 +1053,10 @@
 	snd_config_t *slave = NULL, *bindings = NULL, *sconf;
 	struct slave_params params;
 	int bsize, psize, ipc_key_add_uid = 0, slowptr = 0;
-	key_t ipc_key = 0;
+	key_t ipc_sem = 0;
+	key_t ipc_mem_direct = 0;
+	key_t ipc_mem_plug = 0;
+	int share_ipc_key = 0;
 	mode_t ipc_perm = 0600;
 	int err;
 	snd_config_for_each(i, next, conf) {
@@ -1061,7 +1073,40 @@
 				SNDERR("The field ipc_key must be an integer type");
 				return err;
 			}
-			ipc_key = key;
+			ipc_sem = key;
+			ipc_mem_direct = key;
+		        ipc_mem_plug = key+1;
+                        share_ipc_key = 1;
+			continue;
+		}
+		if (strcmp(id, "ipc_sem") == 0) {
+			long key;
+			err = snd_config_get_integer(n, &key);
+			if (err < 0) {
+				SNDERR("The field ipc_key_mem must be an integer type");
+				return err;
+			}
+			ipc_sem = key;
+			continue;
+		}
+		if (strcmp(id, "ipc_mem_direct") == 0) {
+			long key;
+			err = snd_config_get_integer(n, &key);
+			if (err < 0) {
+				SNDERR("The field ipc_key_mem must be an integer type");
+				return err;
+			}
+			ipc_mem_direct = key;
+			continue;
+		}
+		if (strcmp(id, "ipc_mem_plug") == 0) {
+			long key;
+			err = snd_config_get_integer(n, &key);
+			if (err < 0) {
+				SNDERR("The field ipc_key_mem must be an integer type");
+				return err;
+			}
+			ipc_mem_plug = key;
 			continue;
 		}
 		if (strcmp(id, "ipc_perm") == 0) {
@@ -1109,12 +1154,19 @@
 		SNDERR("slave is not defined");
 		return -EINVAL;
 	}
-	if (ipc_key_add_uid)
-		ipc_key += getuid();
-	if (!ipc_key) {
-		SNDERR("Unique IPC key is not defined");
+	if (share_ipc_key && ipc_key_add_uid) {
+		ipc_sem += getuid();
+		ipc_mem_direct += getuid();
+		ipc_mem_plug += getuid();
+        }
+	if (!ipc_sem || !ipc_mem_direct || !ipc_mem_plug) {
+		SNDERR("Unique IPC keys are not defined");
 		return -EINVAL;
 	}
+        if(share_ipc_key && ipc_sem != ipc_mem_direct && ipc_sem != ipc_mem_plug) {
+                SNDERR("New and old IPC keys can't be mixed");
+                return -EINVAL;
+        }
 	/* the default settings, it might be invalid for some hardware */
 	params.format = SND_PCM_FORMAT_S16;
 	params.rate = 48000;
@@ -1151,7 +1203,9 @@
 	params.period_size = psize;
 	params.buffer_size = bsize;
 
-	err = snd_pcm_dmix_open(pcmp, name, ipc_key, ipc_perm, &params, bindings, slowptr, root, sconf, stream, mode);
+	err = snd_pcm_dmix_open(pcmp, name, ipc_sem, ipc_mem_direct, 
+                                ipc_mem_plug, share_ipc_key, ipc_perm, &params, bindings, 
+                                slowptr, root, sconf, stream, mode);
 	if (err < 0)
 		snd_config_delete(sconf);
 	return err;
--- alsa-lib-1.0.9rc4/src/pcm/pcm_dshare.c.ainit	2005-05-23 11:03:18.000000000 +0200
+++ alsa-lib-1.0.9rc4/src/pcm/pcm_dshare.c	2005-05-27 14:01:45.000000000 +0200
@@ -589,7 +589,11 @@
  *          changed in future.
  */
 int snd_pcm_dshare_open(snd_pcm_t **pcmp, const char *name,
-			key_t ipc_key, mode_t ipc_perm,
+			key_t ipc_sem, 
+			key_t ipc_mem_direct,
+			key_t ipc_mem_plug,
+			int share_ipc_key,
+			mode_t ipc_perm,
 			struct slave_params *params,
 			snd_config_t *bindings,
 			int slowptr,
@@ -625,8 +629,11 @@
 		goto _err_nosem;
 	}
 	
-	dshare->ipc_key = ipc_key;
+	dshare->ipc_sem = ipc_sem;
+	dshare->ipc_mem_direct = ipc_mem_direct;
+	dshare->ipc_mem_plug = ipc_mem_plug;
 	dshare->ipc_perm = ipc_perm;
+	dshare->share_ipc_key = share_ipc_key;
 	dshare->semid = -1;
 	dshare->shmid = -1;
 
@@ -847,9 +854,11 @@
 	snd_config_t *slave = NULL, *bindings = NULL, *sconf;
 	struct slave_params params;
 	int bsize, psize, ipc_key_add_uid = 0, slowptr = 0;
-	key_t ipc_key = 0;
+	key_t ipc_sem = 0;
+	key_t ipc_mem_direct = 0;
+	key_t ipc_mem_plug = 0;
 	mode_t ipc_perm = 0600;
-	
+	int share_ipc_key = 0;	
 	int err;
 	snd_config_for_each(i, next, conf) {
 		snd_config_t *n = snd_config_iterator_entry(i);
@@ -865,7 +874,40 @@
 				SNDERR("The field ipc_key must be an integer type");
 				return err;
 			}
-			ipc_key = key;
+			ipc_sem = key;
+			ipc_mem_direct = key;
+			ipc_mem_plug = key+1;
+			share_ipc_key = 1;
+			continue;
+		}
+		if (strcmp(id, "ipc_sem") == 0) {
+			long key;
+			err = snd_config_get_integer(n, &key);
+			if (err < 0) {
+				SNDERR("The field ipc_key must be an integer type");
+				return err;
+			}
+			ipc_sem = key;
+			continue;
+		}
+		if (strcmp(id, "ipc_mem_direct") == 0) {
+			long key;
+			err = snd_config_get_integer(n, &key);
+			if (err < 0) {
+				SNDERR("The field ipc_key must be an integer type");
+				return err;
+			}
+			ipc_mem_direct = key;
+			continue;
+		}
+		if (strcmp(id, "ipc_mem_plug") == 0) {
+			long key;
+			err = snd_config_get_integer(n, &key);
+			if (err < 0) {
+				SNDERR("The field ipc_key must be an integer type");
+				return err;
+			}
+			ipc_mem_plug = key;
 			continue;
 		}
 		if (strcmp(id, "ipc_perm") == 0) {
@@ -916,12 +958,19 @@
 		SNDERR("slave is not defined");
 		return -EINVAL;
 	}
-	if (ipc_key_add_uid)
-		ipc_key += getuid();
-	if (!ipc_key) {
-		SNDERR("Unique IPC key is not defined");
-		return -EINVAL;
-	}
+	if (ipc_key_add_uid) {
+                ipc_sem += getuid();
+                ipc_mem_direct += getuid();
+                ipc_mem_plug += getuid();				
+	}
+        if (!ipc_sem || !ipc_mem_direct || !ipc_mem_plug) {
+                SNDERR("Unique IPC keys are not defined");
+                return -EINVAL;
+        }
+        if(share_ipc_key && ipc_sem != ipc_mem_direct && ipc_sem != ipc_mem_plug) {
+                SNDERR("New and old IPC keys can't be mixed");
+                return -EINVAL;
+        }
 	/* the default settings, it might be invalid for some hardware */
 	params.format = SND_PCM_FORMAT_S16;
 	params.rate = 48000;
@@ -948,7 +997,8 @@
 
 	params.period_size = psize;
 	params.buffer_size = bsize;
-	err = snd_pcm_dshare_open(pcmp, name, ipc_key, ipc_perm, &params, bindings, slowptr, root, sconf, stream, mode);
+	err = snd_pcm_dshare_open(pcmp, name, ipc_sem, ipc_mem_direct, ipc_mem_plug, share_ipc_key,
+                                  ipc_perm, &params, bindings, slowptr, root, sconf, stream, mode);
 	if (err < 0)
 		snd_config_delete(sconf);
 	return err;
--- alsa-lib-1.0.9rc4/src/pcm/pcm_direct.c.ainit	2005-05-23 10:56:48.000000000 +0200
+++ alsa-lib-1.0.9rc4/src/pcm/pcm_direct.c	2005-05-27 14:01:45.000000000 +0200
@@ -57,8 +57,8 @@
 
 int snd_pcm_direct_semaphore_create_or_connect(snd_pcm_direct_t *dmix)
 {
-	dmix->semid = semget(dmix->ipc_key, DIRECT_IPC_SEMS,
-			     IPC_CREAT | dmix->ipc_perm);
+	dmix->semid = semget(dmix->ipc_sem, DIRECT_IPC_SEMS, 
+                             IPC_CREAT | (dmix->share_ipc_key ? dmix->ipc_perm : 0600));
 	if (dmix->semid < 0)
 		return -errno;
 	return 0;
@@ -68,8 +68,10 @@
 {
 	if (dmix->semid < 0)
 		return -EINVAL;
-	if (semctl(dmix->semid, 0, IPC_RMID, NULL) < 0)
-		return -errno;
+        if(dmix->share_ipc_key) {
+           if (semctl(dmix->semid, 0, IPC_RMID, NULL) < 0)
+               return -errno;
+        }
 	dmix->semid = -1;
 	return 0;
 }
@@ -102,12 +104,12 @@
 	int tmpid, err;
 	
 retryget:
-	dmix->shmid = shmget(dmix->ipc_key, sizeof(snd_pcm_direct_share_t),
-			     IPC_CREAT | dmix->ipc_perm);
+	dmix->shmid = shmget(dmix->ipc_mem_direct, sizeof(snd_pcm_direct_share_t), 
+                             IPC_CREAT | (dmix->share_ipc_key ? dmix->ipc_perm : 0600));
 	err = -errno;
 	if (dmix->shmid < 0){
 		if (errno == EINVAL)
-		if ((tmpid = shmget(dmix->ipc_key, 0, dmix->ipc_perm)) != -1)
+		if ((tmpid = shmget(dmix->ipc_mem_direct, 0, (dmix->share_ipc_key ? dmix->ipc_perm : 0600))) != -1)
 		if (!shmctl(tmpid, IPC_STAT, &buf))
 		if (!buf.shm_nattch)
 	    	/* no users so destroy the segment */
@@ -145,8 +147,10 @@
 	if (shmctl(dmix->shmid, IPC_STAT, &buf) < 0)
 		return -errno;
 	if (buf.shm_nattch == 0) {	/* we're the last user, destroy the segment */
-		if (shmctl(dmix->shmid, IPC_RMID, NULL) < 0)
-			return -errno;
+                if(dmix->share_ipc_key) {
+                   if (semctl(dmix->semid, 0, IPC_RMID, NULL) < 0)
+                      return -errno;
+                }
 		ret = 1;
 	}
 	dmix->shmid = -1;
--- alsa-lib-1.0.9rc4/src/pcm/pcm_dsnoop.c.ainit	2005-05-23 11:03:18.000000000 +0200
+++ alsa-lib-1.0.9rc4/src/pcm/pcm_dsnoop.c	2005-05-27 14:01:45.000000000 +0200
@@ -490,7 +490,11 @@
  *          changed in future.
  */
 int snd_pcm_dsnoop_open(snd_pcm_t **pcmp, const char *name,
-			key_t ipc_key, mode_t ipc_perm,
+			key_t ipc_sem, 
+			key_t ipc_mem_direct, 
+			key_t ipc_mem_plug,
+			int share_ipc_key,
+			mode_t ipc_perm,
 			struct slave_params *params,
 			snd_config_t *bindings,
 			int slowptr,
@@ -518,8 +522,11 @@
 	if (ret < 0)
 		goto _err_nosem;
 	
-	dsnoop->ipc_key = ipc_key;
+	dsnoop->ipc_sem = ipc_sem;
+	dsnoop->ipc_mem_direct = ipc_mem_direct;
+	dsnoop->ipc_mem_plug = ipc_mem_plug;
 	dsnoop->ipc_perm = ipc_perm;
+	dsnoop->share_ipc_key = share_ipc_key;
 	dsnoop->semid = -1;
 	dsnoop->shmid = -1;
 
@@ -730,7 +737,10 @@
 	snd_config_t *slave = NULL, *bindings = NULL, *sconf;
 	struct slave_params params;
 	int bsize, psize, ipc_key_add_uid = 0, slowptr = 0;
-	key_t ipc_key = 0;
+	key_t ipc_sem = 0;
+	key_t ipc_mem_direct = 0;
+	key_t ipc_mem_plug = 0;
+	int share_ipc_key = 0;
 	mode_t ipc_perm = 0600;
 	int err;
 
@@ -748,9 +758,42 @@
 				SNDERR("The field ipc_key must be an integer type");
 				return err;
 			}
-			ipc_key = key;
+			ipc_sem = key;
+			ipc_mem_direct = key;
+		        ipc_mem_plug = key+1;
+			share_ipc_key = 1;
 			continue;
 		}
+                if (strcmp(id, "ipc_sem") == 0) {
+                        long key;
+                        err = snd_config_get_integer(n, &key);
+                        if (err < 0) {
+                                SNDERR("The field ipc_key must be an integer type");
+                                return err;
+                        }
+                        ipc_sem = key;
+                        continue;
+                }	
+		if (strcmp(id, "ipc_mem_direct") == 0) {
+			long key;
+			err = snd_config_get_integer(n, &key);
+			if (err < 0) {
+				SNDERR("The field ipc_key_mem must be an integer type");
+				return err;
+			}
+			ipc_mem_direct = key;
+			continue;
+		}
+		if (strcmp(id, "ipc_mem_plug") == 0) {
+			long key;
+			err = snd_config_get_integer(n, &key);
+			if (err < 0) {
+				SNDERR("The field ipc_key_mem must be an integer type");
+				return err;
+			}
+			ipc_mem_plug = key;
+			continue;
+		}	
 		if (strcmp(id, "ipc_perm") == 0) {
 			char *perm;
 			char *endp;
@@ -799,12 +842,19 @@
 		SNDERR("slave is not defined");
 		return -EINVAL;
 	}
-	if (ipc_key_add_uid)
-		ipc_key += getuid();
-	if (!ipc_key) {
-		SNDERR("Unique IPC key is not defined");
+	if (share_ipc_key && ipc_key_add_uid) {
+                ipc_sem += getuid();
+                ipc_mem_direct += getuid();
+                ipc_mem_plug += getuid();
+	}
+	if (!ipc_sem || !ipc_mem_direct || !ipc_mem_plug) {
+		SNDERR("Unique IPC keys are not defined");
 		return -EINVAL;
 	}
+        if(share_ipc_key && ipc_sem != ipc_mem_direct && ipc_sem != ipc_mem_plug) {
+                SNDERR("New and old IPC keys can't be mixed");
+                return -EINVAL;
+        }
 	/* the default settings, it might be invalid for some hardware */
 	params.format = SND_PCM_FORMAT_S16;
 	params.rate = 48000;
@@ -831,7 +881,8 @@
 
 	params.period_size = psize;
 	params.buffer_size = bsize;
-	err = snd_pcm_dsnoop_open(pcmp, name, ipc_key, ipc_perm, &params, bindings, slowptr, root, sconf, stream, mode);
+	err = snd_pcm_dsnoop_open(pcmp, name, ipc_sem, ipc_mem_direct, ipc_mem_plug, share_ipc_key, ipc_perm, &params, 
+                                  bindings, slowptr, root, sconf, stream, mode);
 	if (err < 0)
 		snd_config_delete(sconf);
 	return err;


Index: .cvsignore
===================================================================
RCS file: /cvs/dist/rpms/alsa-lib/devel/.cvsignore,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- .cvsignore	24 May 2005 20:43:46 -0000	1.12
+++ .cvsignore	27 May 2005 14:24:02 -0000	1.13
@@ -1 +1,2 @@
 alsa-lib-1.0.9rc4.tar.bz2
+alsacard.c


Index: alsa-lib.spec
===================================================================
RCS file: /cvs/dist/rpms/alsa-lib/devel/alsa-lib.spec,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- alsa-lib.spec	24 May 2005 20:43:46 -0000	1.27
+++ alsa-lib.spec	27 May 2005 14:24:02 -0000	1.28
@@ -1,14 +1,13 @@
 Summary: The Advanced Linux Sound Architecture (ALSA) library.
 Name: alsa-lib
 Version: 1.0.9rc4
-Release: 1
+Release: 2
 License: LGPL
 Group: System Environment/Libraries
 Source: ftp://ftp.alsa-project.org/pub/lib/%{name}-%{version}%{?prever}.tar.bz2
 Source1: ainit-0.4.tar.gz
-#Patch0: alsa-lib-mixer.patch
-Patch3: alsa-lib-ainit.patch
-Patch6: alsa-lib-ainit-dsnoop.patch
+Source2: alsacard.c
+Patch0: alsa-lib-ainit-2.patch
 URL: http://www.alsa-project.org/
 BuildRoot: %{_tmppath}/%{name}-%{version}-root
 BuildRequires: doxygen
@@ -36,8 +35,7 @@
 
 %prep
 %setup -q -n %{name}-%{version}%{?prever} -a 1
-%patch3 -p1 -b .ainit
-%patch6 -p1
+%patch0 -p1 -b .ainit
 
 %build
 %configure \
@@ -47,10 +45,14 @@
 make %{?_smp_mflags}
 make doc
 
+# Compile ainit
 cd ainit
 ./compile
 cd ..
 
+# Compile alsacard
+%{__cc} $RPM_OPT_FLAGS -o alsacard %{SOURCE2} -lasound
+
 %install
 rm -rf %{buildroot}
 make DESTDIR=%{buildroot} install
@@ -66,6 +68,9 @@
 # install ainit binaries
 install -m 755 ainit/ainit %{buildroot}%{_bindir}
 
+# alsa_card binary
+install -m 755 alsacard   %{buildroot}%{_bindir}
+
 # install ainit config files
 install -m 644 ainit/config/ainit.conf %{buildroot}%{_sysconfdir}/alsa/ainit.conf
 install -m 644 ainit/config/dmix.template %{buildroot}%{_sysconfdir}/alsa/pcm/dmix.template
@@ -98,6 +103,7 @@
 %{_sysconfdir}/alsa
 %config %{_sysconfdir}/alsa/alsa.conf
 %{_bindir}/ainit
+%{_bindir}/alsacard
 %{_mandir}/man?/*
 
 %files devel
@@ -112,6 +118,9 @@
 %{_datadir}/aclocal/alsa.m4
 
 %changelog
+* Fri May 27 2005 Martin Stransky <stransky at redhat.com> 1.0.9rc4-2
+- alsacard utility for s-c-s
+
 * Tue May 24 2005 Bill Nottingham <notting at redhat.com> 1.0.9rc4-1
 - update to 1.0.9rc4 (#157180, #158547)
 


Index: sources
===================================================================
RCS file: /cvs/dist/rpms/alsa-lib/devel/sources,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- sources	24 May 2005 20:46:33 -0000	1.14
+++ sources	27 May 2005 14:24:02 -0000	1.15
@@ -1,2 +1,3 @@
 509cdf0740cd41297c7b568182974a46  ainit-0.4.tar.gz
 fb2330ad8b9a86b4d17345e8b34974e0  alsa-lib-1.0.9rc4.tar.bz2
+84a139aff67d14024a3f3e4e9c586367  alsacard.c




More information about the fedora-cvs-commits mailing list