col and cal wide chars fix, 'mount -o loop' fix

This commit is contained in:
kzak 2006-01-03 17:50:20 +00:00
parent bc67171fe0
commit 632f4946d1
5 changed files with 169 additions and 3 deletions

View File

@ -0,0 +1,53 @@
--- util-linux-2.12p/misc-utils/cal.c.wide 2004-12-05 20:20:36.000000000 +0100
+++ util-linux-2.12p/misc-utils/cal.c 2006-01-02 15:13:50.000000000 +0100
@@ -368,7 +368,7 @@
int i, wd;
#ifdef ENABLE_WIDECHAR
wchar_t day_headings_wc[22],j_day_headings_wc[29];
- wchar_t wd_wc[10];
+ char *cur_dh = day_headings, *cur_j_dh = j_day_headings;
#endif
strcpy(day_headings,"");
@@ -385,30 +385,25 @@
#endif
for(i = 0 ; i < 7 ; i++ ) {
+ ssize_t space_left;
wd = (i + week1stday) % 7;
#ifdef ENABLE_WIDECHAR
- mbstowcs(wd_wc,weekday(wd),10);
- if (wcswidth(wd_wc,10) < 3)
- wcscat(j_day_headings_wc,L" ");
- if (wcswidth(wd_wc,10) < 2) {
- wcscat(day_headings_wc, L" ");
- wcscat(j_day_headings_wc, L" ");
- }
- wcsncat(day_headings_wc,wd_wc,2);
- wcsncat(j_day_headings_wc,wd_wc,3);
- wcscat(day_headings_wc, L" ");
- wcscat(j_day_headings_wc, L" ");
+ swprintf(day_headings_wc, sizeof(day_headings_wc)/sizeof(day_headings_wc[0]),
+ L"%1.2s ", weekday(wd));
+ swprintf(j_day_headings_wc, sizeof(j_day_headings_wc)/sizeof(j_day_headings_wc[0]),
+ L"%3.3s ", weekday(wd));
+ space_left = sizeof(day_headings)-(cur_dh-day_headings);
+ if(space_left <= 0) break;
+ cur_dh += wcstombs(cur_dh,day_headings_wc, space_left);
+ space_left = sizeof(j_day_headings)-(cur_j_dh-j_day_headings);
+ if(space_left <= 0) break;
+ cur_j_dh += wcstombs(cur_j_dh,j_day_headings_wc, space_left);
#else
sprintf(eos(day_headings), "%2.2s ", weekday(wd));
sprintf(eos(j_day_headings), "%3.3s ", weekday(wd));
#endif
}
-#ifdef ENABLE_WIDECHAR
- wcstombs(day_headings,day_headings_wc,sizeof(day_headings));
- wcstombs(j_day_headings,j_day_headings_wc,sizeof(j_day_headings));
-#endif
-
trim_trailing_spaces(day_headings);
trim_trailing_spaces(j_day_headings);
#undef weekday

View File

@ -0,0 +1,37 @@
--- util-linux-2.12p/text-utils/col.c.EILSEQ 2002-03-09 00:05:12.000000000 +0100
+++ util-linux-2.12p/text-utils/col.c 2006-01-02 18:00:06.000000000 +0100
@@ -128,6 +128,7 @@
int this_line; /* line l points to */
int nflushd_lines; /* number of lines that were flushed */
int adjust, opt, warned;
+ int ret = 0;
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
@@ -175,8 +176,15 @@
cur_line = max_line = nflushd_lines = this_line = 0;
cur_set = last_set = CS_NORMAL;
lines = l = alloc_line();
-
- while ((ch = getwchar()) != WEOF) {
+
+ while (feof(stdin)==0) {
+ errno = 0;
+ if ((ch = getwchar()) == WEOF) {
+ if (errno==EILSEQ)
+ perror("col");
+ ret = 1;
+ break;
+ }
if (!iswgraph(ch)) {
switch (ch) {
case BS: /* can't go back further */
@@ -332,7 +340,7 @@
flush_blanks();
if (ferror(stdout) || fclose(stdout))
return 1;
- return 0;
+ return ret;
}
void flush_lines(int nflush)

View File

@ -46,7 +46,7 @@ diff -urN util-linux-2.13-pre5.orig/hwclock/audit.c util-linux-2.13-pre5/hwclock
+{
+ if (audit_this) {
+ audit_log_user_message(audit_fd, AUDIT_USYS_CONFIG,
+ "changing system time", NULL, NULL, NULL, status);
+ "changing system time", NULL, NULL, NULL, status ? 0 : 1);
+ close(audit_fd);
+ }
+ exit(status);

View File

@ -0,0 +1,62 @@
--- util-linux-2.13-pre6/mount/fstab.c.twiceloop 2006-01-03 18:35:05.000000000 +0100
+++ util-linux-2.13-pre6/mount/fstab.c 2006-01-03 18:37:44.000000000 +0100
@@ -254,6 +254,27 @@
return (ct == 1);
}
+/*
+ * Given the loop file LOOPFILE, and the mount point DIR, check that
+ * same file is already mounted on same directory
+ *
+ * Don't forget there's
+ * /path/loopfile /path/dir loop=/dev/loop0
+ * in mtab for loop devices.
+ */
+int
+is_mounted_same_loopfile(const char *loopfile, const char *dir) {
+ struct mntentchn *mc, *mc0;
+ int ct = 0;
+
+ mc0 = mtab_head();
+ for (mc = mc0->prev; mc && mc != mc0; mc = mc->prev)
+ if (streq(mc->m.mnt_fsname, loopfile) &&
+ streq(mc->m.mnt_dir, dir))
+ ct++;
+ return (ct == 1);
+}
+
/* Given the name FILE, try to find the option "loop=FILE" in mtab. */
struct mntentchn *
getmntoptfile (const char *file) {
--- util-linux-2.13-pre6/mount/mount.c.twiceloop 2006-01-03 18:35:06.000000000 +0100
+++ util-linux-2.13-pre6/mount/mount.c 2006-01-03 18:37:44.000000000 +0100
@@ -671,7 +671,7 @@
static int
loop_check(const char **spec, const char **type, int *flags,
- int *loop, const char **loopdev, const char **loopfile) {
+ int *loop, const char **loopdev, const char **loopfile, const char *dir) {
int looptype;
unsigned long long offset;
@@ -709,6 +709,11 @@
} else {
int loopro = (*flags & MS_RDONLY);
+ if (is_mounted_same_loopfile(*loopfile, dir)) {
+ error(_("mount: %s already mounted on %s"), *loopfile, dir);
+ return EX_FAIL;
+ }
+
if (!*loopdev || !**loopdev)
*loopdev = find_unused_loop_device();
if (!*loopdev)
@@ -856,7 +861,7 @@
* stale assignments of files to loop devices. Nasty when used for
* encryption.
*/
- res = loop_check(&spec, &types, &flags, &loop, &loopdev, &loopfile);
+ res = loop_check(&spec, &types, &flags, &loop, &loopdev, &loopfile, node);
if (res)
goto out;
}

View File

@ -25,7 +25,7 @@ BuildRoot: %{_tmppath}/%{name}-root
Summary: A collection of basic system utilities.
Name: util-linux
Version: 2.13
Release: 0.12
Release: 0.13
License: distributable
Group: System Environment/Base
@ -161,7 +161,12 @@ Patch217: util-linux-2.13-cramfs-maxentries.patch
Patch218: util-linux-2.13-cramfs-zerofiles.patch
# 172203 - mount man page in RHEL4 lacks any info on cifs mount options
Patch219: util-linux-2.12a-mount-man-cifs.patch
# better wide chars usage in the cal command (based on the old 'moremisc' patch)
Patch220: util-linux-2.12p-cal-wide.patch
# 176441: col truncates data
Patch221: util-linux-2.12p-col-EILSEQ.patch
# 174111 - mount allows loopback devices to be mounted more than once to the same mount point
Patch222: util-linux-2.13-mount-twiceloop.patch
# When adding patches, please make sure that it is easy to find out what bug # the
# patch fixes.
@ -233,6 +238,9 @@ cp %{SOURCE8} %{SOURCE9} .
%patch217 -p1
%patch218 -p1
%patch219 -p1
%patch220 -p1
%patch221 -p1
%patch222 -p1
%build
unset LINGUAS || :
@ -616,6 +624,12 @@ fi
/sbin/losetup
%changelog
* Tue Jan 3 2006 Karel Zak <kzak@redhat.com> 2.13-0.13
- fix #174676 - hwclock audit return code mismatch
- fix #176441: col truncates data
- fix #174111 - mount allows loopback devices to be mounted more than once to the same mount point
- better wide chars usage in the cal command (based on the old 'moremisc' patch)
* Mon Dec 12 2005 Karel Zak <kzak@redhat.com> 2.13-0.12
- rebuilt